अपने एप्लिकेशन की निगरानी करना हमेशा आपके सिस्टम की पूरी तस्वीर प्राप्त करने के लिए पर्याप्त नहीं होता है। अक्सर, सैटेलाइट ऐप्स (या सपोर्टिंग ऐप्स) में चल रही सेवाओं का आपके दिन-प्रतिदिन के संचालन पर तीव्र प्रभाव पड़ सकता है। डेटाबेस सर्वर इसके प्रसिद्ध उदाहरण हैं। बैकअप स्क्रिप्ट और अन्य बैकग्राउंड जॉब्स भी सिस्टम को धीमा कर सकते हैं और अक्सर अनदेखे रह जाते हैं।
Node.js के लिए AppSignal APM, और रूबी APM और Elixir APM स्वचालित रूप से आपके ऐप को इंस्ट्रूमेंट करते हैं। लेकिन AppSignal डिफ़ॉल्ट रूप से इन सैटेलाइट प्रक्रियाओं को नहीं देखता। हर जगह निगरानी बढ़ाने और अपने सभी डेटा को एक ही ऐप में रखने के लिए, आप AppSignal के स्टैंडअलोन एजेंट को इंस्टॉल कर सकते हैं।
AppSignal का स्टैंडअलोन एजेंट
स्टैंडअलोन एजेंट उसी सॉफ़्टवेयर पर आधारित है जिसके साथ हम आमतौर पर रूबी, Elixir, या जावास्क्रिप्ट एप्लिकेशन को इंस्ट्रूमेंट करते हैं। यह सॉफ़्टवेयर स्टैंडअलोन मोड में भी चल सकता है।
स्टैंडअलोन एजेंट का उपयोग निम्न की निगरानी के लिए किया जा सकता है:
- इन्फ्रास्ट्रक्चर: मशीनें जो हमारे सिस्टम का हिस्सा हैं लेकिन एप्लिकेशन कोड नहीं चलाती हैं।
- बैकग्राउंड जॉब्स: जैसे गहन क्रॉन जॉब्स या लंबे समय तक चलने वाले डेटा-प्रोसेसिंग स्क्रिप्ट। यदि ये बैकग्राउंड जॉब्स समर्थित भाषा (रूबी, Elixir, या Node.js) में लिखे गए हैं तो आप मानक इंटीग्रेशन का उपयोग कर सकते हैं।
- अधिक भाषाएं: बॉक्स से बाहर समर्थित भाषाओं के अलावा अन्य भाषाओं में लिखे गए प्रोग्राम।
उदाहरण के लिए, स्टैंडअलोन एजेंट के साथ, हम पायथन में लिखे गए मशीन लर्निंग मॉडल को ट्रैक कर सकते हैं, बैकअप स्क्रिप्ट को इंस्ट्रूमेंट कर सकते हैं, Kafka ब्रोकर्स की निगरानी कर सकते हैं, या अपने वेब फार्म में होस्ट मीट्रिक एकत्र कर सकते हैं। आप इस सभी जानकारी को AppSignal पर देख सकते हैं जो आपके मुख्य एप्लिकेशन के लिए पहले से मौजूद मीट्रिक को पूरक करता है।
यह कैसे काम करता है
एजेंट को deb या rpm पैकेज के रूप में भेजा जाता है और इसकी कोई भाषा निर्भरता नहीं होती है। यह किसी भी Debian/Ubuntu या Red Hat-आधारित सिस्टम पर चलता है। विस्तृत इंस्टॉलेशन निर्देशों के लिए, एजेंट दस्तावेज़ देखें।
एक बार इंस्टॉल हो जाने पर, एजेंट कुछ मिनटों में कॉन्फ़िगर हो जाता है और एक डेमॉन के रूप में हमेशा के लिए चलता रहता है, चुपचाप आपके इन्फ्रास्ट्रक्चर की निगरानी करता है। क्या अधिक है, एजेंट में एक StatsD सर्वर शामिल है जो आपके द्वारा लॉग किए गए किसी भी कस्टम डेटा को आपके AppSignal डैशबोर्ड में रिले करता है।
StatsD क्या है?
StatsD मनमाने डेटा को एकत्र करने और एकत्रित करने के लिए एक मानक है। यह मीट्रिक और प्रदर्शन जानकारी लॉग करने पर केंद्रित है। यह UDP कनेक्शन पर एक हल्के टेक्स्ट प्रोटोकॉल का उपयोग करता है जिसका आपकी मशीन में छोटा पदचिह्न होता है।
एक StatsD संदेश इस तरह दिखता है:
KEY:VALUE|TYPE जहां KEY कोई भी मनमाना स्ट्रिंग है, और VALUE एक संख्या है। प्रकार मान परिभाषित करता है कि संख्या कैसे संसाधित की जाती है।
हम तीन प्रकार के मीट्रिक का समर्थन करते हैं:
- c: यह एक काउंटर है जो हर बार कॉल किए जाने पर बढ़ता है। उदाहरण के लिए,
active_users:1|cactive_usersकाउंटर में 1 जोड़ता है। - g: एक गेज एक संख्यात्मक मान लेता है और इसे अपडेट होने तक बनाए रखता है। यह उन मानों को रिकॉर्ड करने के लिए उपयोगी है जो समय के साथ ऊपर और नीचे बदलते हैं, जैसे थ्रूपुट, सक्रिय उपयोगकर्ताओं की संख्या, या कतार में लंबित कार्यों की संख्या।
- t: टाइमिंग मान संग्रहीत करता है। यह प्रकार अवधि ट्रैक करने के लिए आदर्श है। AppSignal लॉग किए गए सभी टाइमिंग के लिए माध्य, गणना और पर्सेंटाइल की गणना करता है।
अन्य असमर्थित मीट्रिक प्रकारों को चुपचाप अनदेखा कर दिया जाएगा।
StatsD को डेटा भेजना
स्टैंडअलोन एजेंट पोर्ट 8125 पर UDP पैकेट सुनता है। हम netcat का उपयोग करके कमांड लाइन से StatsD-फॉर्मेटेड स्ट्रिंग्स भेज सकते हैं:
echo -n "myscript.myevent.counter:1|c" | nc -4u -w0 localhost 8125चूंकि हम UDP का उपयोग कर रहे हैं, हमें प्रतिक्रिया की प्रतीक्षा नहीं करनी होगी।
Socat भी काम करता है:
echo -n "myscript.myevent.counter:1|c" | socat - udp:localhost:8125यह किसी भी बैच या क्रॉन जॉब्स को इंस्ट्रूमेंट करना आसान बनाता है। उदाहरण के लिए, निम्न पंक्तियाँ एक गेज का उपयोग करके लॉग करती हैं कि बैकअप जॉब ने कितना डेटा उत्पन्न किया है:
backup_size=$(du -m /backups | cut -f1) echo -n "backup.data:$backup_size|g" | nc -4u -w0 localhost 8125हम पूर्णांकों तक सीमित नहीं हैं। StatsD फ्लोटिंग-पॉइंट संख्याओं के साथ भी काम करता है:
echo -n "network.latency:0.2|g" | nc -4u -w0 localhost 8125टैग का उपयोग करना
आप अपने मीट्रिक में टैग जोड़ सकते हैं। StatsD सर्वर संदेश के अंत में वैकल्पिक टैग का समर्थन करता है:
KEY:VALUE|TYPE|#TAGS हम एक ही संदेश में कई टैग लागू कर सकते हैं और बाद में फ़िल्टरिंग के लिए मान निर्दिष्ट कर सकते हैं:
echo -n "backup.data:$backup_size|g|#backups,env:production" | nc -4u -w0 localhost 8125हम थोड़ी देर में AppSignal में डेटा देखना सीखेंगे।
भाषाओं को इंस्ट्रूमेंट करना
StatsD सर्वर किसी भी भाषा के साथ संगत है जो UDP पैकेट भेज सकती है। आइए कुछ उदाहरण देखें।
पायथन डेटा माइनिंग और मशीन लर्निंग के लिए एक लोकप्रिय भाषा है। हम बिल्ट-इन socket लाइब्रेरी का उपयोग करके पायथन एप्लिकेशन में इंस्ट्रूमेंटेशन जोड़ सकते हैं:
import time # फ़ंक्शन के लिए लिए गए समय को मापें start = time.process_time() train_my_model() training_time = time.process_time() - start # मान को statsd पर भेजें import socket UDP_IP = "127.0.0.1" UDP_PORT = 8125 MESSAGE = b"model.training.time:" + bytes(str(training_time), 'utf-8') + b"|t" sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) sock.sendto(MESSAGE, (UDP_IP, UDP_PORT))हम java.net लाइब्रेरी के साथ जावा में समान परिणाम प्राप्त कर सकते हैं:
byte[] buffer = "mybatch.exception.counter:1|c".getBytes(); InetAddress address = InetAddress.getByName("127.0.0.1"); DatagramPacket packet = new DatagramPacket( buffer, buffer.length, address, 8125 ); DatagramSocket datagramSocket = new DatagramSocket(); datagramSocket.send(packet);PHP एक और अविश्वसनीय रूप से लोकप्रिय भाषा का उदाहरण है। हम socket_sendto के साथ UDP पैकेट भेज सकते हैं:
$msg = "mywebsite.active_users:$ACTIVE_USERS|g"; $len = strlen($msg); $sock = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP); socket_sendto($sock, $msg, $len, 0, '127.0.0.1', 8125); socket_close($sock);StatsD क्लाइंट्स
अब तक, हमने हर भाषा में अंतर्निहित नेटवर्किंग क्षमताओं का उपयोग किया। लेकिन और भी बहुत कुछ है। कई भाषाओं और उत्पादों में थर्ड-पार्टी StatsD क्लाइंट या ऐडऑन शामिल हैं। कोई भी StatsD-अनुपालक क्लाइंट काम करना चाहिए, कम से कम समर्थित डेटा प्रकारों के लिए। आप StatsD प्रोजेक्ट विकी पर क्लाइंट्स की सूची पा सकते हैं।
AppSignal में होस्ट डेटा देखना
होस्ट मीट्रिक्स डैशबोर्ड आपकी मशीन के संसाधन उपयोग को दिखाता है:
AppSignal स्टैंडअलोन एजेंट चलाने वाली हर मशीन के लिए एक प्रविष्टि जोड़ता है।
डैशबोर्ड लोड और CPU औसत डिस्क, नेटवर्क, मेमोरी, और स्वैप उपयोग दिखाता है:
डैशबोर्ड बनाना
AppSignal आपके द्वारा भेजे गए StatsD मान के लिए स्वचालित रूप से डैशबोर्ड उत्पन्न नहीं करता है - आपको इसके लिए कस्टम डैशबोर्ड बनाने होंगे।
सबसे पहले, डैशबोर्ड मेनू के तहत डैशबोर्ड जोड़ें पर क्लिक करें:
डैशबोर्ड को एक नाम दें:
ग्राफ़ जोड़ें बटन पर क्लिक करने पर ग्राफ़ बिल्डर दिखाई देता है:
ग्राफ़ को एक नाम दें, और मीट्रिक जोड़ें पर क्लिक करें:
मेनू से उस मीट्रिक को चुनें जिसमें आप रुचि रखते हैं।
वैकल्पिक रूप से, फ़िल्टरिंग के लिए टैग का उपयोग करें:
अगला, ओवरव्यू पर वापस पर क्लिक करें। आप विभिन्न ग्राफ़ प्रकारों और मान इकाइयों को आज़माना चाह सकते हैं ताकि यह पता लगाया जा सके कि कौन सा आपके द्वारा दर्शाए जाने वाले डेटा के लिए सबसे उपयुक्त है।
टाइमिंग डेटा क्षेत्र ग्राफ़ के साथ बेहतर दिखता है क्योंकि माध्य और पर्सेंटाइल अधिक स्पष्ट रूप से दिखाए जाते हैं।
लाइन ग्राफ़ काउंटर और गेज के लिए बहुत अच्छा काम करते हैं।
एक बार जब आप परिणाम से खुश हों, तो ग्राफ़ बनाएं पर क्लिक करें।
ध्यान दें कि यदि आपने AppSignal को Node.js के लिए अपने प्रदर्शन निगरानी टूल (APM) के रूप में सेट किया है, या आपके रूबी (ऑन रेल्स) APM या Elixir APM के लिए, तो आप किसी भी अन्य स्वचालित रूप से इंस्ट्रूमेंटेड या मापी गई मीट्रिक के लिए भी डैशबोर्ड जोड़ सकते हैं।
समापन
हमने सीखा है कि AppSignal के स्टैंडअलोन सर्वर का उपयोग अपनी मशीनों और सैटेलाइट कोड को देखने के लिए कैसे करें। इसके अंतर्निहित StatsD सर्वर के साथ, आप मनमाने प्रदर्शन डेटा रिकॉर्ड कर सकते हैं और किसी भी प्रक्रिया को इंस्ट्रूमेंट कर सकते हैं।
स्टैंडअलोन एजेंट का उपयोग करने के बारे में अधिक जानने के लिए निम्न लिंक देखें:
- StatsD संदर्भ।
- कस्टम मीट्रिक कैसे भेजें।
- AppSignal में डैशबोर्ड बनाना।
- स्टैंडअलोन एजेंट के साथ Kafka समस्या की पहचान और समाधान।