Kuidas me ehitasime jÀlgimist Prometheuse, Clickhouse'i ja ELK-ga

Minu nimi on Anton Baderin. Töötan KĂ”rgete Tehnoloogiate Keskuses ja tegelen sĂŒsteemiadministreerimisega. Kuu aega tagasi lĂ”ppes meie ettevĂ”tte konverents, kus jagasime oma teadmisi linna IT-kogukonnaga. RÀÀkisin veebirakenduste jĂ€lgimisest. Materjal oli suunatud junior vĂ”i middle tasemele, kellel ei ole seda protsessi nullist ĂŒles ehitatud.

Kuidas me ehitasime jÀlgimist Prometheuse, Clickhouse'i ja ELK-ga

Iga jĂ€lgimissĂŒsteemi nurgakivi on Ă€riĂŒlesannete lahendamine. JĂ€lgimine iseenesest ei huvita kedagi. Aga mida soovib Ă€ri? Et kĂ”ik töötaks kiiresti ja ilma vigadeta. Äri soovib proaktiivsust, et me ise tuvastaks probleemid teenuse toimimises ja lahendaks need maksimaalselt kiiresti. Just need olidki ĂŒlesanded, millega eelmisel aastal ĂŒhe meie kliendi projektis tegelesin.

Projektist

Projekt on ĂŒks suurimaid lojaalsusprogramme riigis. Aitame jaemĂŒĂŒgiketidel suurendada mĂŒĂŒgifrekventsi erinevate turundusinstrumentide, nĂ€iteks boonuskardid, kaudu. Projekti kuulub kokku 14 rakendust, mis töötavad kĂŒmnel serveril.

Vestluste kĂ€igus olen korduvalt mĂ€rganud, et administraatorid ei lĂ€henenud veebirakenduste jĂ€lgimisele alati Ă”igesti: paljud piirdusid endiselt operatsioonisĂŒsteemi mÔÔdikute jĂ€lgimisega ja harva jĂ€lgisid teenuseid.

Minu puhul pĂ”hines kliendi jĂ€lgimissĂŒsteem varem Icingal. See ei lahendanud ĂŒlaltoodud ĂŒlesandeid. Klient teatas sageli ise meile probleemidest ja meil jĂ€i tihti andmetest puudu, et sĂŒvitsi kaevata pĂ”hjuse leidmiseks.

Lisaks oli selge arusaam, et selle edasine arendamine ei ole perspektiivikas. Mulle tundub, et need, kes tunnevad Icinga, saavad mind hĂ€sti aru. Nii otsustasime tĂ€ielikult ĂŒmber kujundada veebirakenduste jĂ€lgimissĂŒsteemi projektis.

Prometheus

Valisime Prometheuse, lÀhtudes kolmest pÔhinÀitajast:

  1. Suur hulk saadaval mÔÔdikuid. Meie puhul on neid 60 000. Loomulikult tuleb mĂ€rkida, et enamikku neist me ei kasuta (ilmselt umbes 95%). Teisest kĂŒljest on need kĂ”ik suhteliselt odavad. Meie jaoks on see teine ÀÀrmuses vĂ”rreldes varasemalt kasutatud Icingaga. Seal oli mÔÔdikute lisamine eriti keeruline: olemasolevad olid kallid (piisab, kui vaadata mistahes plugina lĂ€htekoodi). Iga plugin oli kas Bash vĂ”i Python skript, mille kĂ€itamine on ressursikulu mĂ”ttes kallis.
  2. See sĂŒsteem tarbib suhteliselt vĂ€he ressursse. KĂ”ikide meie mÔÔdikute jaoks piisab 600 MB RAM-ist, 15% ĂŒhest tuumast ja paarikĂŒmnest IOPS-ist. Loomulikult tuleb kĂ€itada mÔÔdikute eksportijaid, kuid kĂ”ik need on kirjutatud Go keeles ja ei ole ka liiga nĂ€ljased. Ei arva, et see oleks praegustes oludes probleem.
  3. Pakub vĂ”imalust ĂŒleminekuks Kubernetesesse. Arvestades kliendi plaane — valik on ilmne.

ELK

Varasemalt me logisid ei kogunud ega töötlenud. Puudused on kĂ”igile selged. Valisime ELK, kuna meil oli selle sĂŒsteemiga juba varasem kogemus. SĂ€ilitame seal ainult rakenduste logisid. Peamisteks valikukriteeriumiteks olid tĂ€isteksti otsing ja selle kiirus.

Clickhouse

Alguses langes valik InfluxDB-le. Tunnustasime vajadust koguda Nginx logisid, statistikat pg_stat_statements-st ja sĂ€ilitada ajaloolisi andmeid Prometheuse kohta. Influx ei meeldinud meile, kuna see hakkas perioodiliselt tarbima suures koguses mĂ€lu ja lakkas töötamast. Lisaks soovisime rĂŒhmitada pĂ€ringud remote_addr jĂ€rgi, kuid selle SÜSISD-s sai rĂŒhmitada ainult siltide jĂ€rgi. Sildid on kallid (mĂ€lu), nende arv on tinglikult piiratud.

Alustasime otsingut uuesti. Vajasime analĂŒĂŒtilise baasi minimaalsete ressursinĂ”uetega, soovitavalt andmete tihendamisega kettal.

Clickhouse vastab kÔikidele nendele kriteeriumidele ja me ei ole kordagi oma valikut kahetsenud. Me ei kirjuta sinna mingeid erakordseid andmemahtusid (kandmise arvu on kokku umbes viis tuhat minutis).

NewRelic

NewRelic on ajalooliselt meiega olnud, kuna see oli kliendi valik. Me kasutame seda APM-i jaoks.

Zabbix

Kasutame Zabbixit ainult erinevate API-de Black Box'i monitooringuks.

Monitooringu lÀhenemise mÀÀratlemine

Soovisime dekomponeerida ĂŒlesande ja seelĂ€bi sĂŒsteematiseerida lĂ€henemise monitooringule.

Selle jaoks jagasin meie sĂŒsteemi jĂ€rgmisteks tasemeteks:

  • „ra hardware” ja VMS;
  • operatsioonisĂŒsteem;
  • sĂŒsteemiteenused, tarkvara kiht;
  • rakendus;
  • Ă€ri_loogika.

Miks on selline lÀhenemine mugav:

  • me teame, kes on vastutav iga taseme töö eest ja selle pĂ”hjal saame saata hĂ€ireid;
  • me saame kasutada struktuuri hĂ€irete supresseerimisel — oleks kummaline saata hĂ€ire andmebaasi kĂ€ttesaamatuse tĂ”ttu, kui kogu virtuaalne masin on kĂ€ttesaamatu.

Kuna meie eesmĂ€rk on tuvastada sĂŒsteemi töökatkestusi, peame igas tasemes vĂ€lja tooma teatud metoodika, millega tuleks hĂ€ire reeglite kirjutamisel arvestada. Edasi liigume tasemete „VMS”, „OperatsioonisĂŒsteem” ja „SĂŒsteemiteenused, tarkvara kiht” juurde.

Virtuaalsed masinad

Veebimajutus eraldab meile protsessori, ketta, mÀlu ja vÔrgu. Ja esimesega oli meil probleeme. Seega, mÔÔdud:

CPU varastatud aeg — kui ostate virtuaalmasina Amazonis (nt t2.micro), siis tuleb mĂ”ista, et teile eraldatakse mitte tĂ€iskern, vaid vaid osa selle ajast. Kui saavutate selle piiri, hakkavad nad teie protsessorit Ă€ra vĂ”tma.

See mÔÔde vĂ”imaldab jĂ€lgida selliseid hetki ja teha otsuseid. NĂ€iteks, kas on vajalik kĂ”rgem hinnapakett vĂ”i tuleks taustĂŒlesannete töötlemine ja API pĂ€ringud eraldi jagada serverilt.

IOPS + CPU iowait aeg — kummalisel kombel paljud pilvehostingute pakkujad ei paku piisavalt IOPS-i. Veelgi enam, madalate IOPS-idega graafik ei ole neile argument. SeetĂ”ttu tasub koguda ka CPU iowait. Selle kahe graafiku — madalate IOPS-ide ja kĂ”rge sisend-vĂ€ljundi ootega — abil saab juba rÀÀkida hostingsĂŒsteemiga ja lahendada probleemi.

OperatsioonisĂŒsteem

OperatsioonisĂŒsteemi mÔÔdud:

  • kasutatava mĂ€luhulga protsent;
  • swap kasutamise aktiivsus: vmstat swapin, swapout;
  • olemasolevate inode'ide arv ja vaba koht failisĂŒsteemis protsentides;
  • keskmine koormus;
  • ĂŒhenduste arv, mis on olekus tw;
  • conntrack tabeli tĂ€ituvus;
  • vĂ”rgu töö kvaliteeti saab jĂ€lgida utiliidi ss abil, iproute2 pakett — saada selle vĂ€ljundist RTT-ĂŒhenduste nĂ€it ja grupeerida siht-portide jĂ€rgi.

Samuti ilmub operatsioonisĂŒsteemi tasemel meil selline ĂŒksus nagu protsessid. Oluline on tuvastada sĂŒsteemis protsesside kogum, mis mĂ€ngib olulist rolli selle töös. Kui teil on nĂ€iteks mitu pgpooli, siis tuleb ĂŒles ehitada informatsioon igaĂŒhe kohta.

MÔÔtmete kogum on jÀrgmine:

  • CPU;
  • mĂ€lu — eelkĂ”ige resideeruv;
  • IO — soovitavalt IOPS-is;
  • FileFd — avatud ja limiit;
  • olulised lehevead — nii saate aru, milline protsess vahetub.

Kogu jÀlgimine on meil seadistatud Dockeris, andmemÔÔdikute kogumise jaoks kasutame Хadvisor. Teistes masinates rakendame process-exporter'i.

SĂŒsteemiteenused, tarkvarariba

Igal rakendusel on oma spetsiifika ning on keeruline vÀlja tuua teatud mÔÔdikute komplekti.

Universaalne komplekt on:

  • pĂ€ringute mÀÀr;
  • vea arv;
  • latentsus;
  • saturatsioon.

KĂ”ige silmapaistvamad nĂ€ited selle taseme jĂ€lgimisest meie juures on — Nginx ja PostgreSQL.

Meie sĂŒsteemis on kĂ”ige koormatud teenus andmebaas. Varem oli meil sageli probleeme vĂ€lja selgitada, millega andmebaas tegeleb.

Oleme nÀinud kÔrget koormust kettale, kuid aeglasi logisid ei nÀidanud suurt midagi. Selle probleemi lahendasime pg_stat_statements abil, vaate abil, kuhu kogutakse pÀringute statistikat.

See on kÔik, mis administraatorile vajalik.

Koonname tegevusgraafikud lugemiseks ja kirjutamiseks:

Kuidas me ehitasime jÀlgimist Prometheuse, Clickhouse'i ja ELK-ga
Kuidas me ehitasime jÀlgimist Prometheuse, Clickhouse'i ja ELK-ga

KĂ”ik on lihtne ja arusaadav, igal pĂ€ringul — oma vĂ€rv.

VĂ€hemalt sama silmapaistev nĂ€ide on Nginx-i logid. Ei ole ĂŒllatav, et vĂ€he kellelgi neid analĂŒĂŒsida vĂ”i kohustuslikena loetleda. Standardvorming pole vĂ€ga informatiivne ja seda tuleb laiendada.

Isiklikult lisasin request_time, upstream_response_time, body_bytes_sent, request_length, request_id. Koonname vastuse aja ja vea arvu graafikud:

Kuidas me ehitasime jÀlgimist Prometheuse, Clickhouse'i ja ELK-ga
Kuidas me ehitasime jÀlgimist Prometheuse, Clickhouse'i ja ELK-ga

Koonname vastuse aja ja vea arvu graafikud. Kas mĂ€letate? RÀÀkisin Ă€riĂŒlesannetest? Et kiiresti ja ilma vigadeta? Me oleme juba kahe graafiku abil need kĂŒsimused lahendanud. Ja nende pĂ”hjal saab juba helistada valveadminnidele.

Kuid on veel ĂŒks probleem — tagada kiire lahendus juhtumi pĂ”hjustele.

Juhtumite lahendamine

Kogu protsessi probleemide tuvastamisest kuni lahendamiseni saab jagada mitmeks sammuks:

  • probleemi tuvastamine;
  • valveadministraatori teavitamine;
  • reaktsioon juhtumile;
  • pĂ”hjuste kĂ”rvaldamine.

Oluline on, et me peaksime seda tegema vĂ”imalikult kiiresti. Ja kui probleemide tuvastamise ja teavitamise etappidel me palju aega kokku hoida ei saa — need vĂ”tavad igal juhul kaks minutit, siis jĂ€rgmised — on tĂ€iesti avatud valdkond parendamiseks.

Kujutage ette, et valves oleva inimese telefon heliseb. Mida ta teeb? Otsib vastuseid kĂŒsimustele - mis katki lĂ€ks, kus see juhtus, kuidas reageerida? Nii vastame nendele kĂŒsimustele:

Kuidas me ehitasime jÀlgimist Prometheuse, Clickhouse'i ja ELK-ga

Me lihtsalt lisame kogu selle teabe teate tekstis, anname seal lingi lehele Vikis, kus on kirjas, kuidas sellele probleemile reageerida, kuidas seda lahendada ja eskaleerida.

Ma pole siiani midagi öelnud rakenduse ja Àriloogika tasemest. Kahjuks ei ole meie rakendustes veel mÔÔdikute kogumine rakendatud. Ainus allikas mingisuguste andmete jaoks nendelt tasemetelt on logid.

Kaks punkti.

Esiteks, kirjutage struktureeritud logisid. Ärge lisage konteksti sĂ”numi tekstis. See raskendab nende grupeerimist ja analĂŒĂŒsi. Logstashil kulub palju aega, et kĂ”ik see normaliseerida.

Teiseks, kasutage Ôigesti severity-tasemeid. Igal keelel on oma standard. Isiklikult eristan nelja taset:

  1. viga puudub;
  2. viga kliendi poolel;
  3. viga meie poolel, me ei kaota raha, ei kanna riske;
  4. viga meie poolel, me kaotame raha.

KokkuvĂ”tteks. Tuleb pĂŒĂŒda ehitada jĂ€lgimine just Ă€riloogikast. PĂŒĂŒda jĂ€lgida ise rakendust ja opereerida juba selliste mÔÔdikutega nagu mĂŒĂŒk, uute kasutajate registreerimine, aktiivsete kasutajate arv ja nii edasi.

Kui teie kogu Ă€ri on ĂŒks nupp brauseris, tuleb jĂ€lgida, kas see nupp töötab, kas see toimib Ă”igesti. KĂ”ik muu ei ole oluline.

Kui teil seda pole, vÔite proovida seda tagantjÀrele leida rakenduse logides, Nginx logides ja nii edasi, nagu meie tegime. Te peate olema vÔimalikult lÀhedal rakendusele.

OperatsioonisĂŒsteemi mÔÔdikud on muidugi olulised, kuid Ă€ri jaoks ei ole need huvitavad, me ei saa nende eest maksu.

Allikas: habr.com

Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster