VictoriaMetrics - Prometey uchun eng yaxshi masofaviy saqlash joyini yaratish

Hammaga salom! VictoriaMetrics asoschilari bu erda:

  • valyala
  • hagen1778
  • tenmozes

Biz VictoriaMetrics-ga biroz yoritganimizdan xursandmiz.

Bir oz tarix

Biz Prometey va Grafanadan ikki yil oldin foydalanishni boshladik. Bu Zabbix bilan taqqoslaganda toza havo nafasi edi. Endi ishlab chiquvchilar o'zlarining kodlari atrofida o'zboshimchalik bilan o'lchovlarni tarqatishlari, Grafanada maxsus boshqaruv panellarini yaratishlari va dasturlarini maxsus sysadmins / DevOps-larsiz kuzatishlari mumkin.

Bizning Prometey misolida aniqlangan noyob o'lchovlar soni yarim yil ichida bir necha yuzdan 300 K dan oshdi. O'sish davrida biz Prometheus 2.0-ga o'tdik, chunki Prometheus 2.0-ga qadar bizning metrik hajmlarimiz juda sekinlashdi. Ammo yangi Prometeyda bir nechta masalalar bor edi:

  • Bu bir necha kundan ortiq bo'lgan so'rovlar oralig'ida juda tezkor emas edi. Biz bunday diapazonlardan uzoq muddatli tendentsiyalar va imkoniyatlarni rejalashtirish asboblari panelida foydalanganmiz.
  • Saqlash asta-sekin 15 kundan bir yilgacha ko'payganidan so'ng, u juda ko'p saqlash joylarini eyishni boshladi.
  • Saqlash buzilgan taqdirda Prometey ma'lumotlarini yo'qotishni qanday oldini olish mumkinligi aniq emas edi. Biz ikkita aniq Prometey misollaridan bir xil maqsadlarni otib tashlaymiz (aka HA jufti). Bu bizning monitoring xarajatlarimizni ikki baravar oshirdi.

Biz mumkin echimlarni o'rganishni boshladik va Prometey uzoqdan saqlashni qo'llab-quvvatlayotganini aniqladik. Ammo barcha mavjud echimlar turli sabablarga ko'ra qoniqarli emas edi:

  • Murakkab o'rnatish va mo'rt operatsiya.
  • Buzilishlar va ma'lumotlar yo'qolishi haqida xabar berilgan.
  • Sekinlik.
  • Nolinchi yoki pastki maqbul miqyoslilik.

Shu vaqt ichida biz ClickHouse-dan ulkan voqealar oqimini saqlash va tahlil qilishda muvaffaqiyatli foydalandik - kuniga 300 milliard voqea. Bizni ishlashning soddaligi, so'rovlarning tezligi va MergeTree stol dvigatelining siqish darajasi bizni hayratga soldi.

ClickHouse bilan tajribamiz juda katta edi, shuning uchun biz quyidagi loyihalarni topdik:

  • clickhouse-grafana - ClickHouse uchun grafika ma'lumotlar manbai.
  • chproxy - yuklarni muvozanatlashtiruvchi va ClickHouse uchun proksi-server.
  • chclient - ClickHouse uchun tezkor mijoz.

Biz Prometey uchun masofaviy saqlash joyi sifatida ClickHouse-dan foydalanishga harakat qildik. Dastlabki natijalar juda zo'r edi - ClickHouse bitta serverda sekundiga milliardlab ma'lumotlar punktlarini skanerlash imkoniga ega bo'ldi. Afsuski, biz Prometey yorliqlari uchun samarali indeks yaratish uchun yaxshi echimni topa olmadik.

Keyin aqldan ozgan g'oya paydo bo'ldi - keling quyidagi talablarga muvofiq o'z TSDB ni yarataylik:

  • Prometey yorliqlari uchun samaradorlik indeksi aka Metrics 2.0 teglaridan iborat bo'lib, ular milliardlab yorliqlarni osongina saqlaydi va so'rab oladi.
  • Katta sana oralig'idagi so'rovlar uchun tezkorlik, noyob o'lchovlar va juda ko'p ma'lumotlar to'plamlari.
  • Saqlash yaxshi yaxshi, shuning uchun cheklangan diskda ko'proq ma'lumot saqlanishi mumkin.
  • ClickHouse-dagi bepul va tezkor onlayn zaxiralash.

Ushbu TSDB prototipi umidvor edi, shuning uchun men (valyala) VertaMedia-dagi ishimni tark etdim va TSDBda to'liq ishlay boshladim. Keyinchalik TSDB yaxshi nom oldi - VictoriaMetrics.

Texnik tafsilotlar

VictoriaMetrics Go-da yozilgan. Go quyidagi sabablarga ko'ra tanlandi:

  • TSDB-ning mavjud ko'plab echimlari Go - Prometey, InfluxDB, Thanos, M3, Cortex va boshqalarda yozilgan. Bu Go TSDB yozish uchun juda yaxshi.
  • Goda yaxshi tajribam bor. GitHub-dagi repolarimni ko'ring.
  • Men fasthttp-ning muallifiman, shuning uchun Go-da samarali dasturlarni qanday yozishni bilaman.

VictoriaMetrics-ning omborxonasi noldan, Clickhouse-ning MergeTree stol dvigatelidan foydalangan holda yaratilgan:

  • Turli xil yorliqlar nomlari, vaqt belgilari va qiymatlarni alohida saqlang (aka ustunli saqlash). Bu faqat kerakli ustunlarni skanerlash orqali so'rovlarni tezlashtiradi.
  • Har bir ustunni log tuzilgan birlashma daraxtiga (LSM) o'xshash ma'lumotlar tizimida saqlang. Bu B daraxtiga o'xshash ma'lumotlar tuzilmalari bilan taqqoslangan saralangan qiymatlarni qo'shish / skanerlashda tasodifiy I / O ni kamaytiradi. Bu HDD-larda saqlashni tezlashtiradi. LSM fayllari o'zgarmasdir. Bu tez suratlar va zaxira nusxalarini yaratishni osonlashtiradi. LSM-ning B daraxti bilan solishtiradigan bir kamchiligi bor - kichikroq fayllar katta-katta fayllarga birlashtirilganda saqlanadigan ma'lumotlar bir necha marta qayta yoziladi. Bu disk o'tkazish qobiliyatini yo'qotadi, ammo ClickHouse amaliyoti bu juda yaxshi savdo ekanligini ko'rsatmoqda.
  • Protsessor keshiga mos keladigan ma'lumotlarni ma'lumotlarni qayta ishlash. Bu protsessor samaradorligini oshiradi, chunki u tezkor xotiradan ma'lumotlarni kutmaydi. Tafsilotlarni bilish uchun har bir dasturchi bilishi kerak bo'lgan kechikish raqamlariga qarang.

Dastlab, Prometey yorliqlari uchun indeks GoD-dagi LevelDB portining tepasida qurilgan. Keyinchalik men uni yanada samarali alternativa - RocksDB bilan almashtirishga harakat qildim. Ammo bu har bir skanerlangan yorliqda to'lanishi kerak bo'lgan yuqori xarajatlar tufayli, bu muvaffaqiyatli bo'lmadi. Oxir-oqibat, LevelDB maxsus ma'lumotlar tuzilishi - mergeset bilan almashtirildi. Ushbu ma'lumotlar tuzilishi Prometheus yorliqlari indeksi uchun maxsus optimallashtirilgan.

mergeset, LevelDB bilan taqqoslaganda quyidagi farqlarga ega:

  • U faqat tugmachalarda ishlaydi. U qadriyatlardan xabardor emas.
  • Bu pastki yozish amplifikatsiyasiga ega.
  • Tezroq ko'plab buyurtma qilingan kalitlarni qidiradi.
  • U tugmachalarni yaxshiroq siqadi, shuning uchun ular kamroq saqlash joylarini talab qiladilar.
  • U lahzali ma'lumotlarni suratga olish va oson zaxiralashni ta'minlaydi.
  • Unda ClickHouse-ning MergeTree stol mexanizmi g'oyalari qo'llaniladi.

Yaqin kelajakda manba mergesetini ochishni rejalashtirmoqdamiz, shuning uchun boshqalar bundan foyda olishlari mumkin.

Dastlab VictoriaMetrics bitta serverli echim edi. Keyinchalik u klasterli eritmaga aylantirildi. O'zgartirish jarayonida bitta xizmat uchta xizmatga bo'lingan:

  • vmstorage - vminsert-dan olingan metrik qiymatlarni saqlaydi, vmselect-dan so'rovlar uchun xom metrik qiymatlarni qaytaradi.
  • vminsert - Prometheus remote_write API orqali metrik qiymatlarni qabul qiladi va ularni vmstorage-ga yuboradi.
  • vmselect - Prometheus so'rovlari API-ni amalga oshiradi. Ma'lumotni vmstorage-dan olish.

Ajratish quyidagi imtiyozlarni beradi:

  • Har bir xizmat mustaqil ravishda miqyosga ega bo'lishi mumkin.
  • Har bir xizmat xizmat ehtiyojlari uchun ideal darajada optimallashtirilgan qo'shimcha qurilmalarda ishlashi mumkin.
  • Og'ir qo'shimchalar og'ir tanlovlarga xalaqit bermaydi.
  • Vminsert-dagi xatolar vmselect-ni buzmaydi va aksincha.
  • Vmstorage-ning chidamliligi yaxshiroq, chunki u murakkab so'rovlar mantig'ini vmselect-ga yuklaydi.

Endi VictoriaMetrics Google Cloud-da ishlaydi. Resurslarni boshqarish va Deployment Manager orqali ta'minlash uchun biz infratuzilmani Kodek munosabati sifatida foydalanamiz.

So‘rov mexanizmi

Dastlab vmselect Prometheus masofaviy o'qish uchun API ta'minladi. Ammo bu juda past darajada edi, chunki API har bir so'rov uchun Prometeyga barcha xom-ashyo nuqtalarini topshirishni talab qildi. Masalan, agar Prometey har bir 10K ma'lumot nuqtalariga ega bo'lgan 1K metrik javoblarni qursa, vmselect har so'rovda Prometeyga 1K * 10K = 10M ma'lumot nuqtalarini yuborishi kerak. Bu egrilik trafigi va pulni behuda sarflashdir. Keyinchalik uzoqdan o'qilgan API PromQL-ga to'liq mos keladigan so'rovlar tizimi bilan almashtirildi.

So'rovlar tizimi murakkab so'rovlarni soddalashtirishga yo'naltirilgan qo'shimcha funktsiyalarni qo'llab-quvvatlaydi. Quyida bir nechta misollar keltirilgan:

  • Jadvalning oddiy ifodalariga o'xshash andozalar bilan WITH:
BILAN (
      commonFilters = {ish = ~ "$ ish", misol = ~ "$ misol"}
  ) node_filesystem_size_bytes {commonFilters} / node_filesystem_avail_bytes {commonFilters}

WITH andozalari haqida ko'proq ma'lumot oling va ular bilan WITH andozalar maydonchasida o'ynang.

  • Ko'p foydali funktsiyalar. Masalan, so'rov natijalarini birlashtirish uchun birlashma funktsiyasi:
uyushma (
    node_filesystem_size_bytes,
    node_filesystem_avail_bytes,
)

Qo'shimcha funktsiyalarning to'liq ro'yxati bu erda.

Ishlash faktlari

  • Boshlang'ich sinovlar shuni ko'rsatadiki, VictoriaMetrics bizning holatlarimiz uchun Prometheus 2.0-0.4.4 bayt ma'lumotlarga qaraganda 10 baravar kam bo'shliqni ishlatadi. Ma'lumot nuqtasi (vaqt belgisi, metric_value) ko'p joy.
  • Bitta vmstorage xizmati 8xCPU serverida sekundiga 4 million ma'lumot uzatishni qabul qiladi.
  • Yagona vmselect xizmati sekundiga 500 millimetrgacha ma'lumotni 8xCPU serverida skanerlaydi.
  • VictoriaMetrics TimescaleDB bilan taqqoslaganda Time Series Benchmark Suite sinov ma'lumotlariga qaraganda 70 baravar kam joy sarflaydi - 250 MB vs 18GB. Sinov ma'lumotlari 1B ma'lumotlar punktlaridan iborat - GitHub-da TSBS tavsifiga qarang.
  • Ish faoliyatini yaxshilash uchun xona mavjud. VictoriaMetrics-ning barcha xizmatlari pprof ishlov berish moslamalari bilan jihozlangan, shuning uchun biz ularning ish hajmini ishlab chiqarish hajmiga moslashtirishga tayyormiz.

VictoriaMetrics xususiyatlari

  • To'liq PromQL va WITH shablonlari bilan kengaytirilgan PromQL-ni qo'llab-quvvatlaydi. Kengaytirilgan PromQL-ni Grafana o'yin maydonchasida sinab ko'rish mumkin.
  • Oson sozlash - shunchaki taqdim qilingan remote_write URL manzilini Prometey konfiguratsiyasiga nusxa ko'chiring.
  • Operatsion xarajatlarining pasayishi. Prometey VictoriaMetrics-ga uzoqdan yozish imkoniyatini yaratgandan so'ng, fuqaroligi bo'lmagan xizmatga aylantirilishi mumkin.
  • Saqlash muddatining keng doirasi mavjud - 1 oydan 5 yilgacha.
  • Ishlash o'lchovlarini soniyasiga millionlab metrik qiymatlarga kiriting.
  • Ishlash hajmini soniyasiga milliardlab metrik qiymatlarga tanlang.
  • Saqlash ko'lami trillionlab metrik qiymatlar va millionlab noyob o'lchovlar (aka yuqori kartinali).
  • Prometeyning turli xil ixtiyoriy sonlari, agar ular bir xil uzoqdan yozish_sayt URL manzilidan foydalansa, global so'rovlar ko'rinishini ta'minlaydi.

VictoriaMetrics-dan kimga foyda keltirishi mumkin?

  • Prometeyni ishlatadigan har kim. Faqatgina VictoriaMetrics-ni masofaviy saqlash joyi sifatida o'rnating va zaxira nusxalarini yaratish, ko'paytirish, quvvatni rejalashtirish va boshqa texnik yuklar kabi mahalliy saqlash operatsiyalari haqida tashvishlanishni to'xtating.
  • Prometeyni Kubernetesda joylashtirgan foydalanuvchilar. Hozirgi vaqtda bunday foydalanuvchilar Prometey mahalliy saqlash uchun doimiy hajmlarni diqqat bilan boshqarishlari kerak. Odatda, ular Prometeyni davlat dasturlari sifatida o'rnatadilar, bu esa Kubernetesni qarorlarni rejalashtirishda cheklashi mumkin. Faqat VictoriaMetrics-ni masofaviy saqlash sifatida foydalaning va Prometheusni fuqaroligi bo'lmagan ilova sifatida ishlating.
  • Prometeyning aniq misollari bo'lgan foydalanuvchilar aniq tarmoqlarda / ma'lumotlar markazlarida joylashgan. VictoriaMetrics, Prometeyning barcha holatlarida global so'rovlar ko'rinishini ta'minlaydi.

Kelajakdagi xususiyatlar

Kelgusida quyidagi xususiyatlarni amalga oshirishni rejalashtirmoqdamiz:

  • Eski ma'lumotlarni avtomatik ravishda yig'ish.
  • Berilgan yorliq filtrlari uchun oxirgi qiymatlar.
  • Vaqt oynali hisoblagichlar.

Xulosa

Biz ViktoriaMetrics Prometey uchun eng yaxshi masofaviy omborga aylanishiga aminmiz.

Uni o'rganishda davom eting. Tez-tez beriladigan savollarni o'qing. VictoriaMetrics o'yin maydonchasida ro'yxatdan o'ting, uni Prometheus namunalari uchun masofadan turib saqlash sifatida foydalaning. Bu mutlaqo xavfsizdir, chunki Prometey uzoqdan saqlash bilan bir qatorda ma'lumotlarni lokal xotiraga yozishni davom ettirmoqda, shuning uchun masofaviy xotirani yoqishda mahalliy ma'lumotlaringiz yo'qolmaydi. Qo'shimcha ma'lumot olish uchun Tez Boshlash-ga qarang.

Grafana o'yin maydonchasida asboblar paneli va grafikalarni tahrirlash. Ushbu o'yin maydonchasi VictoriaMetrics o'yin maydonchasining ichki o'lchovlariga ishora qiluvchi VictoriaMetrics ma'lumotlar manbasidan foydalanadi, shuning uchun kengaytirilgan PromQL-ning barcha xususiyatlari mavjud.

Tez orada VictoriaMetrics mahsulotlarini sotuvga chiqaramiz. Xushyor bo'ling va bu haqda so'zni tarqating!

Yangilash: VictoriaMetrics bitta-serverli doker rasmlari bu erda mavjud. Agar siz Docker-ni yoqtirmasangiz, unda oddiy statik ikkiliklardan foydalaning.

Update2: Bizning yangi xabarimizni o'qing - TSDBning yuqori darajadagi kartochkalari: VictoriaMetrics vs TimescaleDB vs InfluxDB.

Update3: VictoriaMetrics hozirda ochiq manba!

"Slack" jamoatchiligimizga qo'shiling va har hafta Faun mavzularini o'qing

Agar ushbu maqola foydali bo'lsa, iltimos, muallifni qo'llab-quvvatlashingizni ko'rsatish uchun iltimos, below tugmasini bosing. ⬇