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:
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:
- target sog‘lomligini scrape orqali ko‘rish;
- markaziy interval;
- local debugging;
- service discovery integratsiyasi.
Scrape
Har target uchun scrape interval va timeout mavjud.
Prometheus:
- endpointni topadi;
- HTTP request yuboradi;
- metriclarni parse qiladi;
- timestamp beradi;
- 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:
- Kubernetes;
- cloud platform;
- service registry;
- file;
- static config
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:
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:
- filter;
- rate;
- aggregation;
- arithmetic;
- range;
- histogram quantile;
- label matching.
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