Bosh sahifa Wiki Prometheus

Prometheus

Prometheus — vaqt bo‘yicha o‘zgaradigan raqamli metriclarni yig‘ish, saqlash va query qilishga mo‘ljallangan monitoring tizimi. U application, server va infratuzilma holatini time series shaklida saqlaydi.

Prometheus ko‘pincha targetlardan metriclarni HTTP orqali o‘zi olib turadigan pull modeldan foydalanadi. Alert qoidalari metriclar ustida hisoblanadi.

Time series

Prometheusdagi har ma’lumot qatori:

  • metric nomi;
  • label to‘plami;
  • timestamp;
  • raqamli qiymat

bilan aniqlanadi.

Misol:

http_requests_total{
  method="GET",
  status="200"
}

Label qiymatlari boshqa bo‘lsa alohida time series hosil bo‘ladi.

Metric turlari

Counter

Faqat oshib boradigan umumiy hisoblagich.

Misollar:

  • request soni;
  • xato soni;
  • qayta ishlangan message;
  • yozilgan byte.

Process restartda counter nolga qaytishi mumkin.

Gauge

Oshishi va kamayishi mumkin bo‘lgan joriy qiymat.

Misollar:

  • memory;
  • queue length;
  • active connection;
  • temperature.

Histogram

Observationlarni bucketlarda hisoblaydi.

Masalan, request duration:

  • 0.1 soniyagacha;
  • 0.5 soniyagacha;
  • 1 soniyagacha.

Shuningdek umumiy count va sum saqlanadi.

Summary

Client tomonda observation quantile’larini hisoblashga mo‘ljallangan metric turi.

Bir nechta instance natijasini birlashtirish histogramga qaraganda murakkabroq.

Pull model

Prometheus target endpointiga davriy request yuboradi.

/metrics

endpoint text formatda metriclarni qaytaradi.

Afzalliklari:

Scrape

Har target uchun scrape interval va timeout mavjud.

Prometheus:

  1. endpointni topadi;
  2. HTTP request yuboradi;
  3. metriclarni parse qiladi;
  4. timestamp beradi;
  5. storage’ga yozadi.

Scrape muvaffaqiyatsiz bo‘lsa up kabi metric target holatini ko‘rsatadi.

Service discovery

Dynamic muhitda target IP’lar o‘zgaradi.

Prometheus targetlarni:

orqali topishi mumkin.

Relabeling orqali discovery metadata labelga aylantiriladi yoki target filtrlanadi.

Label

Label metricni o‘lchovlar bo‘yicha ajratadi.

Yaxshi label:

Yomon yuqori cardinality label:

  • user ID;
  • request ID;
  • timestamp;
  • tasodifiy URL;
  • email.

Har noyob label kombinatsiyasi yangi time series yaratadi.

Cardinality

Cardinality juda oshsa:

yuki ko‘payadi.

Metric dizaynida label qiymatlari soni oldindan baholanadi.

Request ID log va trace uchun mos, metric label uchun emas.

PromQL

Prometheus Query Language metriclarni tanlash va hisoblash uchun ishlatiladi.

Amallar:

Counter uchun oddiy farq emas, rate yoki increase kabi resetni tushunadigan funksiya ishlatiladi.

Rate

Counter bir soniyada o‘rtacha qancha oshganini hisoblaydi.

Masalan, request throughput.

Range juda qisqa bo‘lsa scrape nuqtalari yetmasligi mumkin. Juda uzun range esa qisqa spike’larni yashiradi.

Aggregation

Ko‘p instance metriclari service darajasida yig‘iladi.

Masalan:

sum by (service) (...)

Kerakli label saqlanadi, ortiqcha instance label olib tashlanadi.

Aggregationdan oldin metric semantikasi tushuniladi.

Recording rule

Ko‘p ishlatiladigan yoki qimmat query oldindan hisoblanib yangi time series sifatida saqlanadi.

Bu dashboard va alert query’larini tezlashtiradi.

Rule nomi aggregation va birlikni aniq ifodalaydi.

Alert rule

Metric ma’lum shartga mos bo‘lsa alert active bo‘ladi.

Misollar:

for muddati qisqa vaqtli spike sabab alert shovqinini kamaytiradi.

Alertmanager

Alertlar alohida komponentga yuborilib:

  • group;
  • deduplicate;
  • route;
  • silence;
  • inhibit;
  • notification

boshqariladi.

Bir incident uchun yuzlab bir xil notification yuborilmasligi kerak.

Storage

Prometheus local time-series database’da sample’larni bloklarda saqlaydi.

Retention vaqt yoki hajm bo‘yicha belgilanadi.

Bitta Prometheus instance uzoq muddatli global storage uchun yetarli bo‘lmasligi mumkin.

Remote write tashqi scalable storage’ga metric yuboradi.

Exporter

Native metric bermaydigan tizim uchun exporter ishlatiladi.

Exporter tashqi tizimni query qilib Prometheus formatida metric chiqaradi.

Misollar:

Exporter targetga qo‘shimcha yuk bermasligi uchun query interval va timeout boshqariladi.

Pushgateway

Qisqa umrli batch job scrape qilinishidan oldin tugashi mumkin.

Pushgateway ayrim service-level batch metriclarini vaqtincha saqlaydi.

U umumiy event collection yoki barcha application metriclari uchun push endpoint sifatida ishlatilmaydi.

Stale metriclarni tozalash lifecycle’i muhim.

Staleness

Target metric chiqarishni to‘xtatsa eski qiymat cheksiz davom etmasligi kerak. Prometheus time series’ni stale deb belgilaydi va query natijasidan chiqaradi.

Federation

Bir Prometheus boshqa serverdan tanlangan aggregate metriclarni scrape qilishi mumkin. Bu hierarchik monitoring uchun ishlatiladi, ammo barcha raw series’ni ko‘chirish cardinality va bandwidthni oshiradi.

High availability

Ikki Prometheus bir xil targetlarni scrape qilishi mumkin. Ikkala nusxa alert yuborsa Alertmanager deduplication qiladi. Query qatlamida replica label olib tashlanishi mumkin.

SLO

Request count, error va duration metriclari service level objective hisoblash uchun ishlatiladi. Alert faqat resource thresholdga emas, error budget sarfiga ham bog‘lanishi mumkin.

Exemplars

Histogram sample’i trace ID kabi exemplar bilan bog‘lanishi mumkin. Dashboard yuqori latency bucketidan aniq distributed trace’ga o‘tadi.

Bog‘liq tushunchalar

Monitoring, Time series, Counter, Gauge, Histogram, PromQL, Scrape, Exporter, Alertmanager, Recording rule, Cardinality