Vaatame ĂŒle Kubernetes'e jĂ€lgimise kontseptsiooni, tutvume vahendiga Prometheus ja rÀÀgime alerteerimisest.
JĂ€lgimise teema on ulatuslik, ĂŒhe artikli raames ei saa seda tĂ€ielikult kĂ€sitleda. Selle teksti eesmĂ€rk on anda ĂŒlevaade tööriistadest, kontseptsioonidest ja lĂ€henemistest.
Artikli materjal on vÀljavÔte . Kui soovite minna lÀbi tÀiendava koolituse, registreeruge kursusele .

Mida jÀlgitakse Kubernetes'e klastris

FĂŒĂŒsilised serverid. Kui Kubernetes'i klaster on pĂŒstitatud oma serveritele, tuleb jĂ€lgida nende tervist. Selle ĂŒlesande tĂ€idab Zabbix; kui te töötate selle tööriistaga, ei pea te loobuma, konflikte ei teki. Meie serverite seisundit jĂ€lgib just Zabbix.
Liigume edasi klastritasandi jÀlgimise juurde.
Control Plane komponendid: API, Scheduler ja teised. VÀhemalt tuleb jÀlgida, et API serverite vÔi etcd arv oleks suurem kui 0. Etcd suudab anda palju mÔÔdikuid: kettad, millel see töötab, oma klastrite etcd tervis ja teised.
Docker on ilmus ammu ja kĂ”ik teavad tema probleemidest: palju konteinerite tekitab riputusi ja muid probleeme. SeetĂ”ttu tuleb ka Dockerit kui sĂŒsteemi jĂ€lgida, vĂ€hemalt selle kĂ€ttesaadavust.
DNS. Kui klastris DNS töölt kukub, siis kukub vĂ€lja ka kogu Discovery teenus, podide vahelised pĂ€ringud lakkavad töötamast. Minu praktikas sarnaseid probleeme ei ole olnud, kuid see ei tĂ€henda, et DNS-i seisukorras ei peaks jĂ€lgima. Kutsu arvestust pĂ€ringute viivituste ja teiste metrikate ĂŒle CoreDNS-is.
Ingress. Peame jÀlgima sissepÀÀsud (kaasa arvatud Ingress Controller) kÀttesaadavust, kuna need on projekti sissepÀÀsud.
Peamised klastri komponendid on ĂŒle vaadatud â nĂŒĂŒd liigume madalamale, abstraktsioonide tasemele.
Tundub, et rakendused kĂ€ivitatakse podides, seega peaks neid jĂ€lgima, kuid tegelikult ei ole see vajalik. Podid on efemeersed: tĂ€na töötavad nad ĂŒhel serveril, homme teisel; tĂ€na on neid 10, homme 2. Seega pole kellegi jaoks pelgalt podide jĂ€lgimine oluline. Mikroteenuste arhitektuuri raames on olulisem jĂ€lgida rakenduse ĂŒldist kĂ€ttesaadavust. Eriliste tĂ€helepanu all on teenuse lĂ”pp-punktide kĂ€ttesaadavus: kas midagi ĂŒldse töötab? Kui rakendus on kĂ€ttesaadav, siis mis toimub selle taga, kui palju replikate on â need on teisejĂ€rgulised kĂŒsimused. Ăksikute instantside jĂ€lgimine pole vajalik.
Viimasel tasemel tuleb jÀlgida rakenduse enda toimimist, koguda Àrimeetmeid: tellimuste arv, kasutajate kÀitumine jne.
Prometheus
Parim sĂŒsteem klastri jĂ€lgimiseks on . Ma ei tunne ĂŒhtegi tööriista, mis suudaks Prometheusega kvaliteedi ja kasutusmugavuse poolest vĂ”rreldav olla. See sobib suurepĂ€raselt paindlikule infrastruktuurile, seega kui rÀÀgitakse "Kubernetes'e jĂ€lgimisest", mĂ”eldakse tavaliselt just Prometheusele.
On paar varianti, kuidas Prometheusega alustada: Helm'i abil saab installida tavalise Prometheuse vÔi Prometheus Operatori.
- Taval Prometheus. Sellega on kĂ”ik hĂ€sti, kuid ConfigMap'i seadistamine on vajalik â pĂ”himĂ”tteliselt peate kirjutama tekstilisi konfiguratsioonifailesid, nagu me varem tegime enne mikroteenuste arhitektuuri.
- Prometheus Operator on natuke keerukam, natuke keerukama siseloomuga, kuid selle kasutamine on lihtsam: seal on eraldi objektid, abstraktsioonid lisanduvad klastrisse, seega on neid palju mugavam hallata ja seadistada.
Kuna soovite tootega tutvuda, soovitan kĂ”igepealt installida tavalise Prometheuse. Peate kĂ”ik seadistama konfi kaudu, kuid see on kasulik: saate aru, mis millele vastab ja kuidas seadistada. Prometheus Operator investeerib teid kohe kĂ”rgemale abstraktsioonitasemele, kuigi soovi korral saate sĂŒveneda ka sĂŒgavale.
Prometheus on hÀsti integreeritud Kubernetesega: see vÔib pöörduda API serveri poole ja suhelda sellega.
Prometheus on populaarne, seetĂ”ttu toetab seda suur hulk rakendusi ja programmeerimiskeeli. Tugi on vajalik, kuna Prometheusel on oma metrikate formaat ning selle edastamiseks on vajalik kas teek rakenduses vĂ”i valmis eksportija. Ja selliseid eksportijaid on ĂŒsna palju. NĂ€iteks on olemas PostgreSQL Exporter: see vĂ”tab andmed PostgreSQL-st ja konverteerib need Prometheuse formaati, et Prometheus saaks nendega töötada.
Prometheuse arhitektuur

Prometheus Server â see on Prometheuse serveripool, aju Prometheuses. Siin hoitakse ja töödeldakse metrikaid.
Metrikaid hoiab ajaserverite andmebaas (TSDB). TSDB ei ole eraldi andmebaas, vaid Go keeles loodud pakett, mis on sisse ehitatud Prometheusesse. ĂkskĂ”ik, kĂ”ik on ĂŒhes binÀÀrfailis.
Ărge hoidke andmeid TSDB-s kaua
Prometheuse infrastruktuur ei sobi metrikate pikaajaliseks hoidmiseks. Vaikimisi on sĂ€ilitamise aeg 15 pĂ€eva. Seda piirangut on vĂ”imalik ĂŒletada, kuid tuleks arvesse vĂ”tta: mida rohkem andmeid te taastate TSDB-s ja mida pikemalt te seda teete, seda rohkem ressursse see kasutab. Ajalooliste andmete hoidmine Prometheuses loetakse halva praktikana.
Kui teie liiklus on suur, ja mÔÔdikute arv ulatub sadade tuhandete sekundis, on parem piirata nende salvestamist kas kettaruumi vĂ”i ajakava jĂ€rgi. Ăldiselt salvestatakse TSDB-s âkuumi andmeidâ, mÔÔdikuid vaid mĂ”ne tunni jooksul. Pikemaajaliseks sĂ€ilitamiseks kasutatakse vĂ€liseid ladustamisi neis andmebaasides, mis on selleks tĂ”eliselt sobivad, nĂ€iteks InfluxDB, ClickHouse ja nii edasi. Rohkem heade arvustustega olen nĂ€inud ClickHouse'i kohta.
Prometheus Server töötab mudeli jĂ€rgi pull: see kĂ€ib ise mÔÔdikute jĂ€rele nendes lĂ”pp-punktides, mille oleme talle edastanud. Ătlesime: âmine API Serverisseâ, ja ta lĂ€heb igal n-ndal sekundil sinna ning toob mÔÔdikud.
LĂŒhiajaliste elutsĂŒklitega objektide (nt töö vĂ”i cron job), mis vĂ”ivad ilmuda kraapimise perioodide vahele, jaoks on olemas komponent Pushgateway. Sellesse saadetakse mÔÔdikud lĂŒhiajalistest objektidest: töö kĂ€ivitus, sooritas toimingu, saatis mÔÔdikud Pushgateway'sse ja lĂ”petas. Teatud aja pĂ€rast korjab Prometheus oma rĂŒtmis need mÔÔdikud Pushgateway'st.
Prometheuses teavituste seadistamiseks on olemas eraldi komponent â Alertmanager. Ja hĂ€irete reeglid â alerting rules. NĂ€iteks, tuleks luua alert, kui API serverid on 0. Kui sĂŒndmus aktiveerub, edastatakse alert hĂ€irete haldurile edasist saatmist jaoks. HĂ€irete halduril on piisavalt paindlikud marsruutimise seaded: ĂŒhte gruppi hĂ€ireid saab saata adminside Telegrami vestlusesse, teise arendajate vestlusesse, kolmanda infrastruktuuri spetsialistide vestlusesse. Teateid vĂ”ib saada Slackis, Telegramis, e-kirjade teel ja teistes kanalites.
Ja viimaseks rÀÀgin Prometheuse tapja-funktsioonist â Avastamine. Prometheusega töötades ei pea te mÀÀrama konkreetseid objektide aadresse jĂ€lgimiseks, piisab nende tĂŒĂŒbi mÀÀramisest. See tĂ€hendab, et pole vaja kirjutada âsiin on IP-aadress, siin on port â jĂ€lgiâ, selle asemel tuleb mÀÀrata, milliste pĂ”himĂ”tete alusel neid objekte leida (targets â sihid). Prometheus ise, sĂ”ltuvalt sellest, millised objektid on aktiivsed, tĂ”mbab vajalikud objectid ja lisab need jĂ€lgimisele.
Selline lĂ€henemine sobib hĂ€sti Kubernetes'i struktuuri, kus kĂ”ik on kaaskĂŒjne: tĂ€na 10 serverit, homme 3. Et iga kord IP-aadressi mitterĂ€memata, on kord kirjutatud, kuidas seda leida â ja Avastamine tegeleb sellega.
Prometheuse keel nimetatakse PromQL. Selle keele abil on vĂ”imalik hankida konkreetsete mÔÔdikute vÀÀrtusi ja seejĂ€rel neid töödelda, et koostada analĂŒĂŒtilisi jĂ€reldusi.
https://prometheus.io/docs/prometheus/latest/querying/basics/
Lihtne pÀring
container_memory_usage_bytes
Matemaatilised toimingud
container_memory_usage_bytes / 1024 / 1024
Sisseehitatud funktsioonid
sum(container_memory_usage_bytes) / 1024 / 1024
PÀringu tÀpsustamine
100 - avg by (instance) (rate(node_cpu_seconds_total{mode="idle"}[5m]) * 100)Prometheuse veebiliides
Prometheusel on oma, ĂŒsna minimalistlik veebiliides. Sobib peamiselt silumiseks vĂ”i demonstreerimiseks.

VÀljendi real saab kirjutada pÀringud PromQL keeles.
Alerdite vahekaardil on hoiatusreeglid â alerting rules, ja nendel on kolm staatust:
- inactive â kui hetkel on alert mitteaktiivne, see tĂ€hendab, et kĂ”ik on korras ja see ei aktiveerunud;
- pending â see kehtib juhul, kui alert aktiveerus, kuid teavitus pole veel lĂ€inud. Viivitus seadistatakse, et kompenseerida vĂ”rgu vilkumist: kui antud teenus on minutiga tööle hakanud, siis alarmi anda ei ole vaja;
- firing â see on kolmas staatus, kui alert sĂŒttib ja saadab teateid.
MenĂŒ Status sisaldab teavet selle kohta, mis on Prometheus. Seal on ka link sihtkohtadele (targets), millest me eelnevalt rÀÀkisime.

TĂ€psema ĂŒlevaate Prometheuse liidesest leiate .
Integreerimine Grafanaga.
Prometheuse veebi liideses ei leia te kauneid ja arusaadavaid graafikuid, mille abil saaksite hinnata klastrite seisukorda. Nende koostamiseks integreeritakse Prometheus Grafanaga, mille tulemuseks saavad sellised juhtpaneelid.

Prometheuse ja Grafana integreerimine ei ole sugugi keeruline, juhised leiate dokumentatsioonist: , aga sellega lÔpetan.
JĂ€rgmistes artiklites jĂ€tkame jĂ€lgimisteemat: rÀÀgime logide kogumisest ja analĂŒĂŒsist Grafana Loki ja alternatiivsete tööriistade abil.
Autor: Marcell Ibraev, sertifitseeritud Kubernetes administraator, praktikainsener , esineja ja Slërmi kursuste arendaja.
Allikas: habr.com
