Graphite 1.1 - Feeding In Your Data

आपके डेटा में फीडिंग




graphite

आपके डेटा में फीडिंग

ग्रेफाइट में अपना डेटा प्राप्त करना बहुत लचीला है। ग्रेफाइट में डेटा भेजने के तीन मुख्य तरीके हैं: प्लेनटेक्स्ट, अचार और एएमक्यूपी।

यह ध्यान देने योग्य है कि ग्रेफाइट को भेजे गए डेटा को वास्तव में कार्बन और कार्बन-रिले को भेजा जाता है, जो तब डेटा का प्रबंधन करते हैं। ग्रेफाइट वेब इंटरफ़ेस इस डेटा को वापस कैश या सीधे डिस्क से पढ़ता है।

आपके लिए सही स्थानांतरण विधि चुनना इस बात पर निर्भर करता है कि आप डेटा भेजने के लिए अपना एप्लिकेशन या स्क्रिप्ट कैसे बनाना चाहते हैं:

  • कुछ उपकरण और एपीआई हैं जो आपको अपना डेटा कार्बन में लाने में मदद कर सकते हैं।
  • एक विलक्षण स्क्रिप्ट के लिए, या परीक्षण डेटा के लिए, सादा प्रोटोकॉल सबसे सरल तरीका है।
  • बड़ी मात्रा में डेटा भेजने के लिए, आप इस डेटा को बैच कर कार्बन के अचार रिसीवर को भेजना चाहेंगे।
  • अंत में, कार्बन एएमक्यूपी के माध्यम से एक संदेश बस को सुन सकता है।

मौजूदा उपकरण और एपीआई

सादा प्रोटोकॉल

प्लेनटेक्स्ट प्रोटोकॉल कार्बन द्वारा समर्थित सबसे सीधा प्रोटोकॉल है।

भेजा गया डेटा निम्न प्रारूप में होना चाहिए: <metric path> <metric value> <metric timestamp> । कार्बन तब टेक्स्ट की इस लाइन को एक मीट्रिक में बदलने में मदद करेगा जिसे वेब इंटरफ़ेस और व्हिस्पर समझ रहे हैं।

यूनिक्स पर, nc प्रोग्राम ( netcat ) का उपयोग सॉकेट बनाने और कार्बन को डेटा भेजने के लिए किया जा सकता है (डिफ़ॉल्ट रूप से, पोर्ट 2003 पर 'प्लेनटेक्स्ट' चलता है):

PORT=2003
SERVER=graphite.your.org
echo "local.random.diceroll 4 `date +%s`" | nc ${SERVER} ${PORT}

जैसा कि कई netcat कार्यान्वयन मौजूद हैं, एक पैरामीटर को डेटा भेजने के बाद nc को सॉकेट को बंद करने का निर्देश देने की आवश्यकता हो सकती है। ऐसा परम आमतौर पर -q0 , -c या -N । इसे निर्धारित करने के लिए अपने nc कार्यान्वयन मैन पेज का संदर्भ लें।

ध्यान दें कि यदि आपका कार्बन उदाहरण यूडीपी प्रोटोकॉल का उपयोग करके सुन रहा है, तो आपको -u पैरामीटर की भी आवश्यकता है।

अचार प्रोटोकॉल

अचार प्रोटोकॉल सादा प्रोटोकॉल पर अधिक कुशल है, और एक बार में कार्बन को मेट्रिक्स के बैच भेजने का समर्थन करता है।

सामान्य विचार यह है कि चुना गया डेटा बहु-स्तरीय ट्यूपल्स की एक सूची बनाता है:

[(path, (timestamp, value)), ...]

एक बार जब आप पर्याप्त आकार की सूची बना लेते हैं (बहुत बड़ा नहीं होता!), और इसे चुना (यदि आपका ग्राहक आपके सर्वर की तुलना में अजगर के अधिक हाल के संस्करण को चला रहा है, तो आपको प्रोटोकॉल निर्दिष्ट करने की आवश्यकता हो सकती है) डेटा भेजें कार्बन के अचार रिसीवर के लिए सॉकेट पर (डिफ़ॉल्ट रूप से, पोर्ट 2004)। आपको एक साधारण हेडर वाले पैकेट में अपना चुना हुआ डेटा पैक करना होगा:

payload = pickle.dumps(listOfMetricTuples, protocol=2)
header = struct.pack("!L", len(payload))
message = header + payload

आप तब नेटवर्क सॉकेट के माध्यम से message ऑब्जेक्ट भेजेंगे।

AMQP का उपयोग करना

जब AMQP_METRIC_NAME_IN_BODY आपकी carbon.conf फ़ाइल में True पर सेट है, तो डेटा समान प्रारूप का होना चाहिए जो कि सादा प्रोटोकॉल के लिए है, उदाहरण के लिए "local.random.diceroll 4 date + s s " प्रतिध्वनि। जब AMQP_METRIC_NAME_IN_BODY को गलत पर सेट किया जाता है, तो आपको 'local.random.diceroll' को छोड़ देना चाहिए।

ग्रेफाइट में अपना डेटा प्राप्त करना

मूल विचार

ग्रेफाइट उपयोगी है यदि आपके पास कुछ संख्यात्मक मान हैं जो समय के साथ बदलते हैं और आप उन्हें ग्राफ़ करना चाहते हैं। मूल रूप से आप इन संख्यात्मक मूल्यों को इकट्ठा करने के लिए एक कार्यक्रम लिखते हैं, जो फिर उन्हें ग्रेफाइट के बैकएंड, कार्बन पर भेजता है।

चरण 1 - एक नामकरण पदानुक्रम की योजना बनाएं

ग्रेफाइट में संग्रहीत प्रत्येक श्रृंखला में एक विशिष्ट पहचानकर्ता होता है, जो एक मीट्रिक नाम से बना होता है और वैकल्पिक रूप से टैग का एक सेट होता है।

एक पारंपरिक पदानुक्रम में, website.orbitz.bookings.air या ऐसा कुछ जो orbitz पर हवाई बुकिंग की संख्या का प्रतिनिधित्व करेगा। अपना डेटा बनाने से पहले आपको यह तय करना होगा कि आपकी नामकरण योजना क्या होगी। "Foo.bar.baz" जैसे पथ में, डॉट्स से घिरी प्रत्येक चीज़ को पथ घटक कहा जाता है। तो "फू" एक पथ घटक है, साथ ही साथ "बार", आदि।

प्रत्येक पथ घटक में एक स्पष्ट और अच्छी तरह से परिभाषित उद्देश्य होना चाहिए। अस्थिर पथ घटकों को यथासंभव पदानुक्रम में गहरा रखा जाना चाहिए।

मैट _Aimetti में आपके नामस्थान के संगठन का वर्णन करने वाला एक बहुत ही महत्वपूर्ण पद है

विशुद्ध रूप से पदानुक्रमित प्रणाली का नुकसान यह है कि पदानुक्रम में परिवर्तन करना बहुत मुश्किल है, चूंकि ग्रेफाइट को क्वेरी करने वाली किसी भी चीज़ को अपडेट करने की आवश्यकता होगी। इसके अतिरिक्त, पदानुक्रम में किसी विशेष तत्व के अर्थ का कोई अंतर्निहित वर्णन नहीं है।

इन मुद्दों को संबोधित करने के लिए, ग्रेफाइट आपके मैट्रिक्स का वर्णन करने के लिए टैग का उपयोग करने का भी समर्थन करता है, जो प्रारंभिक संरचना को डिजाइन करने और समय के साथ इसे विकसित करने के लिए बहुत सरल बनाता है। एक टैग की गई श्रृंखला एक नाम और टैग के सेट से बनी होती है, जैसे "disk.use; datacenter = dc1; रैक = a1; सर्वर = web01"। उस उदाहरण में, श्रृंखला का नाम "disk.use" है और टैग "datacenter" = "dc1", "रैक" = "a1" और "सर्वर" = "web01" हैं। जब श्रृंखला को इस तरह नामित किया जाता है तो उन्हें ग्रेफाइट टैग सपोर्ट में वर्णित seriesByTag फ़ंक्शन का उपयोग करके चुना जा सकता है।

टैग किए गए नामकरण योजना का उपयोग करते समय, आवश्यकतानुसार व्यक्तिगत टैग को जोड़ना या बदलना बहुत आसान है। हालाँकि यह जानना महत्वपूर्ण है कि किसी दिए गए मीट्रिक के लिए रिपोर्ट किए गए टैग की संख्या में परिवर्तन या टैग के मूल्य डिस्क पर एक नई डेटाबेस फ़ाइल बनाएंगे, इसलिए टैग का उपयोग उन डेटा के लिए नहीं किया जाना चाहिए जो किसी विशेष मीट्रिक के जीवनकाल में बदल जाते हैं ।

चरण 2 - अपने डेटा अवधारण को कॉन्फ़िगर करें

ग्रेफाइट को निश्चित आकार के डेटाबेस ( Whisper. देखें) पर बनाया गया है, इसलिए हमें पहले से कॉन्फ़िगर करना होगा कि हम कितना डेटा स्टोर करने का इरादा रखते हैं और सटीक किस स्तर पर है। उदाहरण के लिए, आप 1 मिनट की सटीकता के साथ अपने डेटा को स्टोर कर सकते हैं (मतलब कि आपके पास प्रत्येक मिनट के लिए एक डेटा बिंदु होगा) 2 घंटे के लिए कहें। इसके अतिरिक्त आप 2 सप्ताह के लिए 10-मिनट की सटीकता के साथ अपने डेटा को स्टोर कर सकते हैं, आदि। विचार यह है कि भंडारण लागत आपके द्वारा संग्रहीत किए जाने वाले डेटा बिंदुओं की संख्या से निर्धारित होती है, आपकी सटीकता जितनी कम होगी, उतना ही अधिक समय आप के साथ कवर कर सकते हैं। कम अंक। सर्वोत्तम अवधारण कॉन्फ़िगरेशन निर्धारित करने के लिए, आपको निम्न सभी प्रश्नों का उत्तर देना होगा।

  1. आप कितनी बार अपने डेटा का उत्पादन कर सकते हैं?
  2. आपको किस बेहतरीन सटीकता की आवश्यकता होगी?
  3. उस स्तर को कितनी सटीकता से देखने की आवश्यकता होगी?
  4. क्या आप उपयोग कर सकते हैं सबसे सटीक परिशुद्धता है?
  5. डेटा को देखने के लिए आपको कितनी दूर जाने की आवश्यकता होगी? (हाँ यह परिमित होना चाहिए, और समय से पहले निर्धारित किया जाना चाहिए)

एक बार जब आप अपनी नामकरण योजना को चुन लेते हैं और सभी अवधारण प्रश्नों का उत्तर देते हैं, तो आपको /opt/graphite/conf/storage-schemas.conf फ़ाइल बनाकर / संपादित करके स्कीमा बनाना होगा।

स्कीमा फ़ाइल का प्रारूप उदाहरण के साथ प्रदर्शित करना सबसे आसान है। मान लीजिए कि हमने विभिन्न सर्वरों से सिस्टम लोड डेटा एकत्र करने के लिए एक स्क्रिप्ट लिखी है, नामकरण योजना इस प्रकार होगी:

servers.HOSTNAME.METRIC

जहां HOSTNAME सर्वर का होस्टनाम होगा और METRIC कुछ ऐसा होगा जैसे कि cpu_load, mem_usage, open_files आदि। आइए हम कहते हैं कि हम इस डेटा को 30 दिनों के लिए न्यूनतम सटीकता के साथ स्टोर करना चाहते हैं, फिर 10 साल के लिए 15 मिनट की सटीकता के साथ।

अपने स्कीमा को लागू करने के विवरण के लिए, कॉन्फ़िगर कार्बन दस्तावेज़ देखें।

मूल रूप से, जब कार्बन एक मीट्रिक प्राप्त करता है, तो यह निर्धारित करता है कि फाइल सिस्टम पर उस मीट्रिक के लिए कानाफूसी डेटा फ़ाइल कहां होनी चाहिए। यदि डेटा फ़ाइल मौजूद नहीं है, तो कार्बन जानता है कि उसे इसे बनाना है, लेकिन चूंकि कानाफूसी एक निश्चित आकार का डेटाबेस है, इसलिए फ़ाइल निर्माण के समय कुछ मापदंडों को निर्धारित किया जाना चाहिए (यही कारण है कि हम एक स्कीमा बना रहे हैं)। कार्बन स्कीमा फ़ाइल को देखता है, और प्राथमिकता के क्रम में (सबसे कम से कम) पहले स्कीमा के लिए दिखता है जिसका पैटर्न मीट्रिक नाम से मेल खाता है। यदि कोई स्कीमा डिफ़ॉल्ट स्कीमा से मेल नहीं खाता है (2 घंटे की न्यूनतम डेटा) का उपयोग किया जाता है। एक बार उपयुक्त स्कीमा निर्धारित हो जाने के बाद, कार्बन स्कीमा के लिए अवधारण डेटा का उपयोग उचित रूप से कानाफूसी डेटा फ़ाइल बनाने के लिए करता है।

चरण 3 - ग्रेफाइट संदेश प्रारूप को समझना

ग्रेफाइट इस प्रारूप वाले संदेशों को समझता है:

metric_path value timestamp\n

metric_path मीट्रिक नामस्थान है जिसे आप आबाद करना चाहते हैं।

value वह मूल्य है जो आप इस समय मीट्रिक को असाइन करना चाहते हैं।

timestamp यूनिक्स युग के बाद से सेकंड की संख्या है। अगर timestamp -1 सेट है, तो कार्बन-कैश आगमन के समय का उपयोग करेगा।

यूनिक्स टर्मिनल से ऐसा करने का एक सरल उदाहरण इस तरह दिखेगा:

echo "test.bash.stats 42 `date +%s`" | nc graphite.example.com 2003

कई उपकरण हैं जो ग्रेफाइट के साथ बातचीत करते हैं। ग्रेफाइट को खिलाने के लिए इस्तेमाल किए जाने वाले कुछ विकल्पों के लिए टूल पेज देखें।