VictoriaMetrics - प्रोमेथियस के लिए सबसे अच्छा रिमोट स्टोरेज बनाना

नमस्ते! VictoriaMetrics के संस्थापक यहां हैं:

  • valyala
  • hagen1778
  • tenmozes

हम विक्टोरियामेट्रिक्स पर कुछ प्रकाश डालकर खुश हैं।

इतिहास का हिस्सा

हमने दो साल पहले प्रोमेथियस और ग्राफाना का उपयोग शुरू किया था। यह Zabbix की तुलना में ताजी हवा की एक सांस थी। अब डेवलपर्स अपने कोड के चारों ओर मनमाने ढंग से मैट्रिक्स बिखेर सकते हैं, ग्रेफाना में कस्टम डैशबोर्ड का निर्माण कर सकते हैं और समर्पित sysadmins / DevOps के बिना अपने ऐप्स की निगरानी कर सकते हैं।

हमारे प्रोमेथियस उदाहरण द्वारा स्क्रैप की गई अद्वितीय मीट्रिक की संख्या तेजी से कुछ सौ से बढ़कर आधे से एक वर्ष में 300K से अधिक हो गई। हमने विकास के दौरान प्रोमेथियस 2.0 पर स्विच किया, क्योंकि प्री-2.0 प्रोमेथियस हमारे मीट्रिक संस्करणों के लिए बहुत धीमा हो गया। लेकिन नए प्रोमेथियस के पास कुछ मुद्दे थे:

  • यह क्वेरी पर्वतमाला पर कुछ दिनों से अधिक नहीं था। हमने लंबी अवधि के रुझानों और क्षमता योजना डैशबोर्ड के लिए इस तरह की श्रेणियों का उपयोग किया।
  • धीरे-धीरे 15 दिनों से एक वर्ष तक की अवधारण वृद्धि के बाद इसने बहुत सारे भंडारण स्थान खाने शुरू कर दिए।
  • यह स्पष्ट नहीं था कि भंडारण दुर्घटना की स्थिति में प्रोमेथियस डेटा हानि को कैसे रोका जाए। हम लक्ष्य (उर्फ हा जोड़ी) के एक ही सेट को स्क्रैप करने वाले दो अलग-अलग प्रोमेथियस उदाहरणों के साथ समाप्त होते हैं। इससे हमारी निगरानी लागत दोगुनी हो गई।

हमने संभावित समाधानों की खोज शुरू की और पता चला कि प्रोमेथियस रिमोट स्टोरेज का समर्थन करता है। लेकिन सभी मौजूदा समाधान विभिन्न कारणों से असंतुष्ट थे:

  • जटिल सेटअप और नाजुक ऑपरेशन।
  • रिपोर्ट की गई क्रैश और डेटा हानि।
  • सुस्ती।
  • शून्य या उप-इष्टतम मापनीयता।

उसी समय के दौरान हमने बड़ी घटना धाराओं के भंडारण और विश्लेषण के लिए क्लिकहाउस का सफलतापूर्वक उपयोग किया - प्रति दिन 300 बिलियन इवेंट तक। हम परिचालन सादगी, क्वेरी गति और इसके 'मर्जट्री टेबल इंजन के संपीड़न स्तर से चकित थे।

ClickHouse के साथ हमारा अनुभव बहुत अच्छा था, इसलिए हमने इसके लिए निम्नलिखित प्रोजेक्ट खोले:

  • clickhouse- ग्राफाना - क्लिकहाउस के लिए ग्राफ्टाना डेटा स्रोत।
  • chproxy - ClickHouse के लिए बैलेंसर और कैशिंग प्रॉक्सी लोड करें।
  • chclient - FastHouse के लिए फास्ट गो क्लाइंट।

हमने प्रोमेथियस के लिए रिमोट स्टोरेज के रूप में क्लिकहाउस का उपयोग करने की कोशिश की। प्रारंभिक परिणाम बहुत अच्छे थे - ClickHouse एक सर्वर पर प्रति सेकंड अरबों डेटा बिंदुओं को स्कैन करने में सक्षम था। दुर्भाग्य से हम प्रोमेथियस लेबल के लिए कुशल सूचकांक बनाने के लिए एक अच्छा समाधान नहीं खोज सके।

फिर एक पागल विचार उभरा है - आइए निम्नलिखित आवश्यकताओं के साथ अपना खुद का TSDB बनाएं:

  • प्रोमेथियस लेबल के लिए कुशल सूचकांक उर्फ ​​मेट्रिक्स 2.0 टैग, जो आसानी से अलग-अलग लेबल के स्टोर और क्वेरी करता है।
  • बड़ी तिथि सीमाओं, बड़ी संख्या में अद्वितीय मीट्रिक और बड़ी संख्या में डेटा बिंदुओं पर प्रश्नों की तेज़ गति।
  • अच्छा भंडारण संपीड़न, इसलिए सीमित डिस्क स्थान पर अधिक डेटा संग्रहीत किया जा सकता है।
  • ClickHouse में फ्रीज़ पार्टिशन के समान आसान और तेज़ ऑनलाइन बैकअप।

इस टीएसडीबी का प्रोटोटाइप आशाजनक था, इसलिए मैंने (वल्याला) ने वर्टमीडिया में अपना काम छोड़ दिया और टीएसडीबी पर पूरे समय काम करना शुरू कर दिया। बाद में TSDB को अच्छा नाम मिला - VictoriaMetrics।

तकनीकी जानकारी

विक्टोरियामेट्रिक्स गो में लिखा है। निम्न कारणों से गो को चुना गया है:

  • कई मौजूदा टीएसडीबी समाधान गो - प्रोमेथियस, इन्फ्लक्सबीडी, थानोस, एम 3, कोर्टेक्स आदि में लिखे गए हैं। यह संकेत है कि टीएसडीबी लेखन के लिए गो काफी अच्छा है।
  • मुझे गो में अच्छा अनुभव है। GitHub पर मेरे प्रतिनिधि देखें।
  • मैं Fasthttp का लेखक हूं, इसलिए मुझे पता है कि गो में कुशल एप्लिकेशन कैसे लिखें।

विक्टोरियामेट्रिक्स का भंडारण क्लिकहाउस के मर्जट्री टेबल इंजन से विचारों का उपयोग करके खरोंच से बनाया गया है:

  • अलग-अलग समय के नामों, टाइमस्टैम्प और मूल्यों (उर्फ स्तंभ भंडारण) को स्टोर करें। यह केवल आवश्यक कॉलम को स्कैन करके प्रश्नों को गति देता है।
  • लॉग-स्ट्रक्चर्ड मर्ज ट्री (LSM) के समान डेटास्ट्रक्चर में प्रत्येक कॉलम को स्टोर करें। बी-ट्री-जैसी डेटा संरचनाओं की तुलना में सॉर्ट किए गए मानों को जोड़ते / स्कैन करते समय यह यादृच्छिक I / O को कम कर देता है। यह HDDs पर स्टोरेज को गति देता है। एलएसएम फाइलें अपरिवर्तनीय हैं। यह तेज़ स्नैपशॉट और बैकअप बनाना सरल करता है। एलएसएम में बी-ट्री की तुलना में एक खामी है - संग्रहीत डेटा को कई बार फिर से लिखा जाता है जब छोटी फ़ाइलों को बड़ी फ़ाइलों में विलय कर दिया जाता है। यह डिस्क बैंडविड्थ बर्बाद करता है, लेकिन ClickHouse अभ्यास से पता चलता है कि यह काफी अच्छा है।
  • सीपीयू कैश फिट करने वाले चंक्स में डेटा प्रोसेस करें। यह CPU प्रदर्शन को अधिकतम करता है, क्योंकि यह धीमे रैम से डेटा की प्रतीक्षा नहीं करता है। विवरण के लिए प्रत्येक प्रोग्रामर को लेटेंसी नंबर जानना चाहिए।

प्रारंभ में प्रोमेथियस लेबल के लिए सूचकांक को गो में LevelDB पोर्ट के शीर्ष पर बनाया गया है। बाद में मैंने इसे और अधिक कुशल विकल्प के साथ प्रतिस्थापित करने की कोशिश की - RocksDB। लेकिन यह उच्च कोगो ओवरहेड के कारण सफल नहीं था, जिसे प्रत्येक स्कैन किए गए लेबल पर भुगतान किया जाना चाहिए। आखिरकार LevelDB को कस्टम डेटा संरचना - मर्जसेट द्वारा प्रतिस्थापित किया गया है। यह डेटा संरचना विशेष रूप से प्रोमेथियस लेबल 'सूचकांक के लिए अनुकूलित है।

मर्जसेट में LevelDB की तुलना में निम्नलिखित अंतर हैं:

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

हम निकट भविष्य में स्रोत मर्जसेट खोलने की योजना बनाते हैं, ताकि दूसरों को इससे लाभ हो सके।

शुरुआत में VictoriaMetrics एक एकल-सर्वर समाधान था। बाद में इसे एक गुच्छे वाले घोल में बदल दिया गया। परिवर्तन के दौरान एक एकल सेवा को तीन सेवाओं में विभाजित किया गया है:

  • vmstorage - वैमानिक से प्राप्त मीट्रिक मानों को संग्रहीत करता है, vmselect से प्रश्नों के लिए कच्चे मीट्रिक मान लौटाता है।
  • vminsert - प्रोमेथियस Remote_write API के माध्यम से मीट्रिक मानों को स्वीकार करता है और उन्हें vmstorage को भेजता है।
  • vmselect - प्रोमेथियस क्वेरी एपीआई को लागू करता है। Vmstorage से कच्चे डेटा प्राप्त करता है।

विभाजन निम्नलिखित लाभ देता है:

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

अब विक्टोरिया क्लाउड गूगल क्लाउड में चलता है। हम इन्फ्रास्ट्रक्चर का उपयोग संसाधन प्रबंधन के लिए कोड एप्रोच के रूप में करते हैं और तैनाती प्रबंधक के माध्यम से प्रावधान करते हैं।

क्वेरी इंजन

प्रारंभ में vmselect ने प्रोमेथियस को रिमोट रीड एपीआई प्रदान किया। लेकिन यह सबऑप्टिमल था, चूंकि एपीआई को प्रत्येक क्वेरी के लिए प्रोमेथियस को सभी कच्चे डेटा बिंदुओं को स्थानांतरित करना आवश्यक था। उदाहरण के लिए, यदि प्रोमेथियस 10K डेटा बिंदुओं के साथ 1K मेट्रिक्स पर प्रतिक्रिया बनाता है, तो vmselect को प्रत्येक क्वेरी पर 1K * 10K = 10M डेटा प्रोमेथियस को भेजना चाहिए। यह इग्रेस ट्रैफिक और पैसे की बर्बादी है। इसलिए बाद में रिमोट रीड एपीआई को क्वेरी इंजन द्वारा पूरी तरह से प्रोमसेल के साथ संगत कर दिया गया है।

क्वेरी इंजन जटिल प्रश्नों के सरलीकरण के उद्देश्य से अतिरिक्त सुविधाओं का समर्थन करता है। नीचे कुछ उदाहरण दिए गए हैं:

  • सामान्य टेबल एक्सप्रेशन से मिलते जुलते टेम्पलेट्स के साथ:
साथ में (
      आमफिल्टर = {नौकरी = ~ "$ नौकरी", उदाहरण = ~ "$ उदाहरण"}
  ) node_filesystem_size_bytes {commonFilters} / नोड_filesystem_avail_bytes {commonFilters}

टेम्प्लेट के साथ के बारे में अधिक पढ़ें और उनके साथ टेंपलेट खेल के मैदान पर खेलें।

  • कई उपयोगी कार्य। उदाहरण के लिए, क्वेरी परिणामों के संयोजन के लिए संघ कार्य:
संघ (
    node_filesystem_size_bytes,
    node_filesystem_avail_bytes,
)

अतिरिक्त कार्यों की पूरी सूची यहां उपलब्ध है।

प्रदर्शन के तथ्य

  • प्रारंभिक परीक्षणों से पता चलता है कि हमारे मामले में विक्टोरियामेट्रिक्स प्रोमेथियस 2.0–0.4 बाइट्स प्रति डेटा पॉइंट 4 बाइट्स प्रति डेटा पॉइंट की तुलना में 10x कम स्टोरेज स्पेस का उपयोग करता है। डेटा बिंदु (टाइमस्टैम्प, मेट्रिक_वेल्यू) ट्यूपल है।
  • एक एकल vmstorage सेवा 8xCPU सर्वर पर प्रति सेकंड 4 मिलियन डेटा बिंदुओं को स्वीकार करती है।
  • एक एकल vmselect सेवा 8xCPU सर्वर पर प्रति सेकंड 500 मिलियन डेटा बिंदुओं को स्कैन करती है।
  • टाइम सीरीज बेंचमार्क सूट - 250 एमबी बनाम 18 जीबी से टेस्ट डेटा पर TimescaleDB की तुलना में विक्टोरियामैट्रिक्स 70x गुना कम स्टोरेज स्पेस का उपयोग करता है। परीक्षण डेटा में 1B डेटा बिंदु होते हैं - GitHub पर TSBS विवरण देखें।
  • प्रदर्शन में सुधार के लिए एक कमरा है। सभी VictoriaMetrics सेवाएं pprof हैंडलर से सुसज्जित हैं, इसलिए हम उत्पादन कार्यभार पर उनके प्रदर्शन को ट्यून करने के लिए तैयार हैं।

VictoriaMetrics सुविधाएँ

  • टेम्पलेट्स के साथ पूर्ण PromQL प्लस विस्तारित PromQL का समर्थन करता है। विस्तारित प्रोमसेल को ग्राफाना खेल के मैदान पर आजमाया जा सकता है।
  • आसान सेटअप - प्रोमेथियस कॉन्फिगरेशन के लिए दिए गए रिमोट_लेखित URL को कॉपी-एन-पेस्ट करें।
  • परिचालन लागत में कमी। विक्टोरियामेट्रिक्स को दूरस्थ लेखन को सक्षम करने के बाद प्रोमेथियस को स्टेटलेस सेवा में परिवर्तित किया जा सकता है।
  • अवधारण अवधि की विस्तृत श्रृंखला उपलब्ध है - 1 महीने से 5 वर्ष तक।
  • लाखों मीट्रिक मान प्रति सेकंड में प्रदर्शन पैमाना डालें।
  • प्रति सेकंड अरब मीट्रिक मानों के लिए प्रदर्शन पैमानों का चयन करें।
  • मीट्रिक मानों और लाखों अद्वितीय मीट्रिक (उर्फ उच्च कार्डिनैलिटी) के खरबों में भंडारण पैमाने।
  • यदि वे समान Remote_write URL का उपयोग करते हैं, तो विभिन्न प्रोमेथियस उदाहरणों की मनमानी संख्या में वैश्विक क्वेरी दृश्य प्रदान करता है।

VictoriaMetrics से किसे लाभ हो सकता है?

  • जो कोई भी प्रोमेथियस का उपयोग करता है। बस विक्टोरियामेट्रिक्स को एक दूरस्थ भंडारण के रूप में स्थापित करें और बैकअप, प्रतिकृति, क्षमता योजना और अन्य रखरखाव बोझ जैसे स्थानीय भंडारण परिचालन मुद्दों के बारे में परेशान करना बंद करें।
  • कुबेरनेट्स में प्रोमेथियस को तैनात करने वाले उपयोगकर्ता। वर्तमान में, ऐसे उपयोगकर्ताओं को प्रोमेथियस स्थानीय भंडारण के लिए लगातार संस्करणों का सावधानीपूर्वक प्रबंधन करना चाहिए। आमतौर पर, वे प्रोमेथियस को एक राज्यपूर्ण ऐप के रूप में स्थापित करते हैं, जो शेड्यूलिंग निर्णयों में कुबेरनेट्स को सीमित कर सकता है। बस एक दूरस्थ भंडारण के रूप में VictoriaMetrics का उपयोग करें और प्रोमेथियस को एक स्टेटलेस ऐप के रूप में चलाएं।
  • कई अलग-अलग नेटवर्क / डेटासेन्टर्स में स्थित कई विशिष्ट प्रोमेथियस उदाहरण वाले उपयोगकर्ता। VictoriaMetrics सभी प्रोमेथियस उदाहरणों में वैश्विक क्वेरी दृश्य प्रदान करता है।

भविष्य की विशेषताएं

हम भविष्य में निम्नलिखित विशेषताओं को लागू करने की योजना बना रहे हैं:

  • पुराने डेटा का स्वचालित डाउनस्मलिंग।
  • दिए गए लेबल फ़िल्टर के लिए अंतिम मान।
  • टाइम-विंडो वाले काउंटर।

निष्कर्ष

हमें यकीन है कि विक्टोरियामेट्रिक्स प्रोमेथियस के लिए सबसे अच्छा रिमोट स्टोरेज बन जाएगा।

इसकी खोज जारी रखें। एफएक्यू पढ़ें। VictoriaMetrics के खेल के मैदान में पंजीकरण करें, इसे अपने प्रोमेथियस उदाहरणों के लिए एक परीक्षण दूरस्थ भंडारण के रूप में उपयोग करें। यह पूरी तरह से सुरक्षित है, क्योंकि प्रोमेथियस रिमोट स्टोरेज के साथ-साथ स्थानीय स्टोरेज में डेटा लिखना जारी रखता है, इसलिए रिमोट स्टोरेज को सक्षम करते समय आपका स्थानीय डेटा खो नहीं जाता है। अधिक विवरण के लिए त्वरित प्रारंभ देखें।

Grafana खेल के मैदान पर डैशबोर्ड और ग्राफ़ संपादित करें। यह खेल का मैदान विक्टोरियामेट्रिक्स डेटा स्रोत का उपयोग करता है जो विक्टोरियामेट्रिक्स खेल के मैदान के आंतरिक मैट्रिक्स की ओर इशारा करता है, इसलिए विस्तारित प्रॉमसेल से सभी सुविधाएँ वहां उपलब्ध हैं।

उत्पादन VictoriaMetrics जल्द ही उपलब्ध होगा। बने रहें और इसके बारे में शब्द फैलाएं!

अपडेट: सिंगल-सर्वर विक्टोरियामेट्रिक्स के साथ डॉकर चित्र यहां उपलब्ध हैं। यदि आप डॉकर की तरह नहीं हैं, तो बस धनवापसी स्थैतिक बायनेरिज़ का उपयोग करें।

Update2: हमारी नई पोस्ट पढ़ें - उच्च-कार्डिनलिटी TSDB बेंचमार्क: VictoriaMetrics vs TimescaleDB बनाम InfluxDB।

Update3: VictoriaMetrics अब खुला स्रोत है!

हमारे समुदाय में शामिल हों और हमारे साप्ताहिक Faun विषयों को पढ़ें and

यदि यह पोस्ट सहायक थी, तो कृपया लेखक के प्रति अपना समर्थन दिखाने के लिए कुछ समय नीचे क्लैप, बटन पर क्लिक करें! ⬇