Graphite 1.1 - Graphite Tag Support

ग्रेफाइट टैग समर्थन




graphite

ग्रेफाइट टैग समर्थन

1.1.x श्रृंखला की रिलीज़ से, ग्रेफाइट प्रत्येक श्रृंखला की पहचान करने के लिए टैग का उपयोग करके डेटा संग्रहीत करने का समर्थन करता है। यह पारंपरिक पदानुक्रमित लेआउट की तुलना में बहुत अधिक लचीलेपन की अनुमति देता है। टैग समर्थन का उपयोग करते समय, प्रत्येक श्रृंखला को विशिष्ट रूप से उसके नाम और टैग / मूल्य जोड़े के सेट से पहचाना जाता है।

कार्बन

ग्रेफाइट में टैग की गई श्रृंखला में प्रवेश करने के लिए, उन्हें टैग के श्रृंखला नामों में जोड़कर कार्बन में जाना चाहिए:

my.series;tag1=value1;tag2=value2

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

पता कर रहा है

टैग की गई श्रृंखला को क्वेरी करते समय, हम श्रृंखलाबाग फ़ंक्शन के साथ शुरू करते हैं:

# find all series that have tag1 set to value1
seriesByTag('tag1=value1')

यह फ़ंक्शन एक श्रंखला देता है जो तब किसी अन्य ग्रेफाइट फ़ंक्शन द्वारा उपयोग किया जा सकता है:

# find all series that have tag1 set to value1, sorted by total
seriesByTag('tag1=value1') | sortByTotal()

seriesByTag फ़ंक्शन मैचों की सूची को परिष्कृत करने के लिए किसी भी प्रकार के टैग अभिव्यक्तियों को निर्दिष्ट करने का समर्थन करता है। जब एकाधिक टैग अभिव्यक्तियाँ निर्दिष्ट की जाती हैं, तो केवल उन सभी अभिव्यक्तियों से मेल खाने वाली श्रृंखला वापस आ जाएगी।

टैग अभिव्यक्ति तार हैं, और निम्न प्रारूप हो सकते हैं:

tag=spec    tag value exactly matches spec
tag!=spec   tag value does not exactly match spec
tag=~value  tag value matches the regular expression spec
tag!=~spec  tag value does not match the regular expression spec

कोई भी टैग युक्ति जो किसी रिक्त मान से मेल खाती है, को उस श्रृंखला से मेल खाने वाली माना जाता है जिसमें वह टैग नहीं है, और कम से कम एक टैग युक्ति के लिए एक गैर-रिक्त मान की आवश्यकता होती है।

मूल्य की शुरुआत में नियमित अभिव्यक्ति की स्थिति को एंकर माना जाता है।

एक और अधिक जटिल उदाहरण:

# find all series where name matches the regular expression cpu\..*, AND tag1 is not value1
seriesByTag('name=~cpu\..*', 'tag1!=value1')

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

# get a list of disk space used per datacenter for all webheads
seriesByTag('name=disk.used', 'server=~web.*') | groupByTags('sumSeries', 'datacenter')

# given series like:
# disk.used;datacenter=dc1;rack=a1;server=web01
# disk.used;datacenter=dc1;rack=b2;server=web02
# disk.used;datacenter=dc2;rack=c3;server=web01
# disk.used;datacenter=dc2;rack=d4;server=web02

# will return the following new series, each containing the sum of the values for that datacenter:
# disk.used;datacenter=dc1
# disk.used;datacenter=dc2

अंत में, aliasByTags फ़ंक्शन का उपयोग प्रदर्शन के लिए प्रारूप श्रृंखला नामों में मदद करने के लिए किया जाता है। यह aliasByNode -आधारित फ़ंक्शन के टैग-आधारित समतुल्य है।

# given series like:
# disk.used;datacenter=dc1;rack=a1;server=web01
# disk.used;datacenter=dc1;rack=b2;server=web02

# format series name using datacenter tag:
seriesByTag('name=disk.used','datacenter=dc1') | aliasByTags('server', 'name')

# will return
# web01.disk.used
# web02.disk.used

डेटाबेस संग्रहण

कानाफूसी और अन्य भंडारण बैकेंड को सरल समय-श्रृंखला डेटा (मीट्रिक कुंजी, मूल्य और टाइमस्टैम्प) रखने के लिए डिज़ाइन किया गया है, ग्रेफाइट एक अलग टैग डेटाबेस (टैगबीडी) में टैग जानकारी संग्रहीत करता है। TagDB एक प्लग करने योग्य स्टोर है, डिफ़ॉल्ट रूप से यह ग्रेफाइट SQLite, MySQL या PostgreSQL डेटाबेस का उपयोग करता है, लेकिन इसे बाहरी Redis सर्वर या कस्टम प्लगइन का उपयोग करने के लिए भी कॉन्फ़िगर किया जा सकता है।

ध्यान दें

टैग समर्थन के लिए ग्रेफाइट वेबएप और कार्बन संस्करण 1.1.1 या नए की आवश्यकता होती है।

स्थानीय डेटाबेस टैगबीडी

स्थानीय TagDB ग्रेफाइट-वेब डेटाबेस के अंदर तालिकाओं में टैग जानकारी संग्रहीत करता है। यह SQLite, MySQL और Postgres का समर्थन करता है, और डिफ़ॉल्ट रूप से सक्षम है।

रेडिस टैगबीडी

Redis TagDB टैग सूचना को Redis सर्वर पर संग्रहीत करेगा, और TAGDB='graphite.tags.redis.RedisTagDB' को local_settings.py में सेट करके चुना जाता है। Redis TagDB के लिए 3 अतिरिक्त कॉन्फ़िगरेशन सेटिंग्स हैं:

TAGDB_REDIS_HOST = 'localhost'
TAGDB_REDIS_PORT = 6379
TAGDB_REDIS_DB = 0

डिफ़ॉल्ट सेटिंग्स (ऊपर) डिफ़ॉल्ट पोर्ट पर एक स्थानीय रेडिस सर्वर से कनेक्ट होगी, और डिफ़ॉल्ट डेटाबेस का उपयोग करेगी।

HTTP (एस) टैगबीडी

HTTP (एस) टैगबीडी का उपयोग सभी टैग परिचालनों को बाहरी सर्वर पर सौंपने के लिए किया जाता है जो ग्रेफाइट टैगिंग HTTP एपीआई को लागू करता है। इसका उपयोग क्लस्टर्ड ग्रेफाइट परिदृश्यों में, या कस्टम डेटा स्टोर के साथ किया जा सकता है। यह TAGDB='graphite.tags.http.HttpTagDB' को local_settings.py में सेट करके चुना गया है। HTTP (S) TagDB के लिए 4 अतिरिक्त कॉन्फ़िगरेशन सेटिंग्स हैं:

TAGDB_HTTP_URL = 'https://another.server'
TAGDB_HTTP_USER = ''
TAGDB_HTTP_PASSWORD = ''
TAGDB_HTTP_AUTOCOMPLETE = False

TAGDB_HTTP_URL आवश्यक है। TAGDB_HTTP_USER और TAGDB_HTTP_PASSWORD वैकल्पिक हैं और यदि निर्दिष्ट किया जाता है तो सभी अनुरोधों में एक बुनियादी प्राधिकरण शीर्ष लेख भेजने के लिए उपयोग किया जाएगा।

TAGDB_HTTP_AUTOCOMPLETE भी वैकल्पिक है, अगर True Auto-complete अनुरोधों को दूरस्थ TagDB पर अग्रेषित किया जाता है, अन्यथा ऑटो / पूर्ण कार्यक्षमता प्रदान करने के लिए / टैग / खोज , / टैग और टैग / </ टैग> कॉल का उपयोग किया जाएगा।

यदि REMOTE_STORE_FORWARD_HEADERS को परिभाषित किया जाता है, तो उन हेडर को भी रिमोट टैगबीडी पर भेज दिया जाएगा।

टैगडीबी में श्रृंखला जोड़ना

आम तौर पर कार्बन इस बात का ध्यान रखेगा, यह सभी नई श्रृंखला को टैगबीडी पर जमा करता है, और समय-समय पर सभी श्रृंखला को फिर से जमा करता है ताकि यह सुनिश्चित हो सके कि टैगबेड को रखा गया है। टैगिंग से संबंधित 2 कार्बन कॉन्फ़िगरेशन सेटिंग्स हैं; GRAPHITE_URL सेटिंग आपके ग्रेफ़ाइट-वेब इंस्टॉलेशन (डिफ़ॉल्ट http://127.0.0.1:8000 ) के url को निर्दिष्ट करती है, और TAG_UPDATE_INTERVAL सेटिंग निर्दिष्ट करती है कि कितनी बार टैगबडी में प्रत्येक श्रृंखला को फिर से प्रस्तुत किया जाना चाहिए (डिफ़ॉल्ट प्रत्येक 100 वें अद्यतन है)।

श्रंखला को कमांड POST टूल्स के माध्यम से प्रस्तुत किया जा सकता है जैसे कमांड लाइन टूल्स जैसे curl या विभिन्न प्रकार के HTTP प्रोग्रामिंग लाइब्रेरी के साथ।

$ curl -X POST "http://graphite/tags/tagSeries" \
  --data-urlencode 'path=disk.used;rack=a1;datacenter=dc1;server=web01'

"disk.used;datacenter=dc1;rack=a1;server=web01"

यह अंतिम बिंदु वर्णानुक्रम में क्रमबद्ध किए गए टैग के साथ पथ का कैनोनिकलकृत संस्करण लौटाता है।

किसी एकल HTTP अनुरोध के साथ कई श्रृंखला जोड़ने के लिए, /tags/tagMultiSeries समापन बिंदु का उपयोग करें, जो कई path मापदंडों का समर्थन करते path :

$ curl -X POST "http://graphite/tags/tagMultiSeries" \
  --data-urlencode 'path=disk.used;rack=a1;datacenter=dc1;server=web01' \
  --data-urlencode 'path=disk.used;rack=a1;datacenter=dc1;server=web02' \
  --data-urlencode 'pretty=1'

[
  "disk.used;datacenter=dc1;rack=a1;server=web01",
  "disk.used;datacenter=dc1;rack=a1;server=web02"
]

यह समापन बिंदु कैनोनिकलकृत पथों की एक सूची देता है, उसी क्रम में वे निर्दिष्ट हैं।

खोज टैग

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

परिभाषित टैग की सूची प्राप्त करने के लिए:

$ curl -s "http://graphite/tags?pretty=1"

[
  {
    "tag": "datacenter"
  },
  {
    "tag": "name"
  },
  {
    "tag": "rack"
  },
  {
    "tag": "server"
  }
]

आप फ़िल्टर पैरामीटर में एक नियमित अभिव्यक्ति प्रदान करके लौटी हुई सूची को फ़िल्टर कर सकते हैं:

$ curl -s "http://graphite/tags?pretty=1&filter=data"

[
  {
    "tag": "datacenter"
  }
]

किसी विशिष्ट टैग के लिए मूल्यों की सूची प्राप्त करने के लिए:

$ curl -s "http://graphite/tags/datacenter?pretty=1"

{
  "tag": "datacenter",
  "values": [
    {
      "count": 2,
      "value": "dc1"
    },
    {
      "count": 2,
      "value": "dc2"
    }
  ]
}

आप फ़िल्टर पैरामीटर का उपयोग करके मूल्यों की लौटी हुई सूची को फ़िल्टर कर सकते हैं:

$ curl -s "http://graphite/tags/datacenter?pretty=1&filter=dc1"

{
  "tag": "datacenter",
  "values": [
    {
      "count": 2,
      "value": "dc1"
    }
  ]
}

अंत में, टैग अभिव्यक्तियों के सेट से मेल खाते श्रृंखला की खोज करने के लिए:

$ curl -s "http://graphite/tags/findSeries?pretty=1&expr=datacenter=dc1&expr=server=web01"

[
  "disk.used;datacenter=dc1;rack=a1;server=web01"
]

स्वतः पूर्ण समर्थन

HTTP एपीआई श्रृंखला के आधार पर टैग और मूल्यों के ऑटो-समापन का समर्थन करने के लिए 2 समापन बिंदु प्रदान करता है जो टैग अभिव्यक्तियों के प्रदान किए गए सेट से मेल खाते हैं।

इनमें से प्रत्येक एंडपॉइंट टैग / एक्सप्रेशंस एंडपॉइंट के समान सिंटैक्स का उपयोग करके टैग एक्सप्रेशन की एक वैकल्पिक सूची को स्वीकार करता है।

प्रदान की गई अभिव्यक्तियों का उपयोग परिणामों को फ़िल्टर करने के लिए किया जाता है, ताकि टैग की सुझाई गई सूची में केवल वे टैग शामिल होंगे जो श्रृंखला में अभिव्यक्तियों से मेल खाते हैं।

परिणाम डिफ़ॉल्ट रूप से 100 तक सीमित हैं, यह अनुरोध पैरामीटर में सीमा = X पास करके ओवरराइड किया जा सकता है। लौटाया गया JSON डिफ़ॉल्ट रूप से एक कॉम्पैक्ट प्रतिनिधित्व है, यदि सुंदर = 1 अनुरोध पैरामीटर में पारित किया जाता है, तो लौटे JSON को नए अंक और इंडेंटेशन के साथ स्वरूपित किया जाएगा।

टैग की एक पूरी-पूरी सूची प्राप्त करने के लिए:

$ curl -s "http://graphite/tags/autoComplete/tags?pretty=1&limit=100"

[
  "datacenter",
  "name",
  "rack",
  "server"
]

उपसर्ग द्वारा फ़िल्टर करने के लिए:

$ curl -s "http://graphite/tags/autoComplete/tags?pretty=1&tagPrefix=d"

[
  "datacenter"
]

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

$ curl -s "http://graphite/tags/autoComplete/tags?pretty=1&expr=datacenter=dc1&expr=server=web01"

[
  "name",
  "rack"
]

एक निर्दिष्ट टैग के लिए मूल्यों की एक पूरी-पूरी सूची प्राप्त करने के लिए:

$ curl -s "http://graphite/tags/autoComplete/values?pretty=1&tag=rack"

[
  "a1",
  "a2",
  "b1",
  "b2"
]

उपसर्ग द्वारा फ़िल्टर करने के लिए:

$ curl -s "http://graphite/tags/autoComplete/values?pretty=1&tag=rack&valuePrefix=a"

[
  "a1",
  "a2"
]

यदि आप टैग अभिव्यक्तियों की एक सूची प्रदान करते हैं, तो परिणाम केवल उन मानों के लिए फ़िल्टर किया जाता है जो उन अभिव्यक्तियों से मेल खाते श्रृंखला में निर्दिष्ट टैग के लिए होते हैं:

$ curl -s "http://graphite/tags/autoComplete/values?pretty=1&tag=rack&expr=datacenter=dc1&expr=server=web01"

[
  "a1"
]

टैगबीडी से श्रृंखला निकालना

जब डेटा स्टोर से एक श्रृंखला को हटा दिया जाता है (उदाहरण के लिए, कानाफूसी भंडारण फ़ोल्डर्स से .wsp फ़ाइलों को हटाकर), तो इसे टैग डेटाबेस से भी हटा दिया जाना चाहिए। डेटा स्टोर में मौजूद टैग डेटाबेस में श्रृंखला होने से ग्राफिंग में कोई समस्या नहीं होगी, लेकिन सिस्टम को ऐसे काम करने का कारण होगा जो ग्राफ़ रेंडरिंग के दौरान आवश्यक नहीं है, इसलिए यह अनुशंसा की जाती है कि टैग डेटाबेस जब डेटा स्टोर से श्रृंखला हटा दी जाती है, तो उसे साफ किया जाए।

HTTP POST के माध्यम से / टैग / डिलीटरी एंडपॉइंट के माध्यम से श्रृंखला को हटाया जा सकता है:

$ curl -X POST "http://graphite/tags/delSeries" \
  --data-urlencode 'path=disk.used;datacenter=dc1;rack=a1;server=web01'

true

एक साथ कई path पैरामीटर को हटाने के लिए एक से अधिक श्रृंखलाएँ हटाएं:

$ curl -X POST "http://graphite/tags/delSeries" \
  --data-urlencode 'path=disk.used;datacenter=dc1;rack=a1;server=web01' \
  --data-urlencode 'path=disk.used;datacenter=dc1;rack=a1;server=web02'

true