Kuidas me ehitasime jÀlgimise Prometheuse, Clickhouse'i ja ELK abil

Minu nimi on Anton Baderin. Töötan KĂ”rgete Tehnoloogiate Keskuses ja tegeleb sĂŒsteemiadministreerimisega. Kuu aega tagasi lĂ”ppes meie ettevĂ”tte konverents, kus jagasime saadud kogemusi meie linna IT-kommuuniga. RÀÀkisin veebirakenduste jĂ€lgimisest. Materjal oli mĂ”eldud junior- vĂ”i middle-taseme spetsialistidele, kes ei ole seda protsessi nullist ĂŒles ehitanud.

Kuidas me ehitasime jÀlgimise Prometheuse, Clickhouse'i ja ELK abil

Iga jĂ€lgimissĂŒsteemi aluseks olev kivi on Ă€riĂŒlesannete lahendamine. JĂ€lgimine iseenesest ei huvita kedagi. Aga mida soovib Ă€ri? Et kĂ”ik töötaks kiiresti ja tĂ”rgeteta. Äri soovib proaktiivsust, et me ise tuvastaksime teenuse tööprobleeme ja lahendaksime need vĂ”imalikult kiiresti. Just need ĂŒlesanded olid need, mida ma lahendasin kogu eelmisel aastal ĂŒhe meie kliendi projektis.

Projektist

Projekt on ĂŒks suurimaid lojaalsusprogramme riigis. Me aitame jaekettidel suurendada mĂŒĂŒgitiheduse erinevate turundusinstrumentide, nagu boonuskardid, abil. Kokku hĂ”lmab projekt 14 rakendust, mis töötavad kĂŒmnel serveril.

Kandideerimisprotsessi kĂ€igus olen korduvalt mĂ€rganud, et administraatorid ei pruugi alati Ă”igesti lĂ€heneda veebirakenduste jĂ€lgimisele: endiselt toetuvad paljud ainult operatsioonisĂŒsteemi mÔÔdikutele ja harva jĂ€lgivad teenuseid.

Minu kogemuse kohaselt pĂ”hines kliendi jĂ€lgimissĂŒsteem varem Icingal. See ei lahendanud ĂŒlaltoodud probleeme. Tihti teatas klient ise meile probleemidest ja mitte harva puudusid meil lihtsalt andmed, et vĂ€lja selgitada pĂ”hjus.

Lisaks oli selgelt mĂ”istetav, et selle edasine arendamine on perspektiivitu. Arvan, et need, kes tunnevad Icingat, saavad mind aru. Nii otsustasime projekti veebirakenduste jĂ€lgimissĂŒsteemi tĂ€ielikult ĂŒmber töötada.

Prometheus

Valisime Prometheuse, tuginedes kolmele peamisele nÀitajale:

  1. Suure hulga mÔÔdikute kĂ€ttesaadavus. Meil 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. See on meie jaoks teistsugune ÀÀrmuse vĂ”rreldes varem kasutatud Icingaga. Seal oli mÔÔdikute lisamine eriline piin: olemasolevad olid vĂ€ga kallid (piisab, kui vaadata mis tahes pistiku allikaid). Iga pistikprogramm kujutas endast Bash vĂ”i Python skripti, mille kĂ€itamine polnud ressursikasutuse mĂ”ttes odav.
  2. SĂŒsteem tarbib suhteliselt vĂ€he ressursse. KĂ”igi meie mÔÔdikute jaoks piisab 600 MB RAM-ist, 15% ĂŒhest tuumast ja paari kĂŒmne IOPS-i. Loomulikult tuleb mÔÔdikute eksportijaid kĂ€ivitada, kuid need on kirjutatud Go-s ja ei ole samuti ressursihĂ€das. Ma ei usu, et see on tĂ€napĂ€eva kontekstis probleem.
  3. Annab vĂ”imaluse ĂŒleminekuks Kubernetesesse. Arvestades kliendi plaane — valik on ilmne.

ELK

Varem ei kogunud ega töötlenud logisid. Puudused on kĂ”igile selged. Valisime ELK-i, kuna meil oli juba kogemus selle sĂŒsteemiga. SĂ€ilitame seal ainult rakenduste logisid. Peamised valikukriteeriumid olid tĂ€isteksti otsing ja selle kiirus.

Clickhouse

Alguses langes valik InfluxDB peale. MĂ”istsime vajadust koguda Nginx logisid, statistikat pg_stat_statements-st ning hoida ajaloolisi andmeid Prometheus. Influx ei meeldinud meile, kuna ta hakkas perioodiliselt tarbima suurt hulka mĂ€lu ja kukkus kokku. Lisaks soovisime rĂŒhmitada pĂ€ringuid remote_addr-i jĂ€rgi, kuid selle SÜD rĂŒhmitamine on vĂ”imalik vaid mĂ€rgistuste jĂ€rgi. MĂ€rgised on kallid (mĂ€lu), nende hulk on tinglikult piiratud.

Alustasime otsinguid uuesti. Vajasime analĂŒĂŒtilist baasi, mille ressursikasutus oleks minimaalne, eelistatavalt andmete kompresseerimisega kettale.

Clickhouse vastab kĂ”ikidele nendele kriteeriumidele ja valiku ĂŒle ei ole meil kordagi kahetsust. Me ei kirjuta sinna mingeid silmapaistvaid andmemahtusid (sĂŒstimiste arv on umbes viis tuhat minutis).

NewRelic

NewRelic on ajalooliselt olnud meiega, kuna see oli kliendi valik. Meie juures kasutatakse seda APM-ina.

Zabbix

Kasutame Zabbixit ainult erinevate API-de musta kasti jÀlgimiseks.

JÀlgimise lÀhenemise mÀÀratlemine

Me soovisime ĂŒlesandeid lahti dekomponeerida, et seelĂ€bi jĂ€lgimismeetodit sĂŒsteemsemaks muuta.

Selleks jagasin meie sĂŒsteemi jĂ€rgmistesse tasemetesse:

  • „riistvara“ ja VMS;
  • operatsioonisĂŒsteem;
  • sĂŒsteemiteenused, tarkvara kogum;
  • rakendus;
  • Ă€ri loogika.

Millised on sellise lÀhenemise eelised:

  • me teame, kes on iga tasandi töö eest vastutav ja seelĂ€bi saame hĂ€ireid saata;
  • me saame struktuuri kasutada hĂ€irete vaigistamiseks — oleks kummaline saata hĂ€ire andmebaasi kĂ€ttesaamatuse kohta, kui kogu virtuaalne masin on tegelikult kĂ€ttesaamatu.

Kuna meie ĂŒlesanne on tuvastada sĂŒsteemi töö katkemise juhtumeid, peame igal tasemel vĂ€lja tooma teatud metrikate komplekti, millele tasub tĂ€helepanu pöörata hĂ€irete seadistamisel. JĂ€tkame tasemetega „VMS“, „OperatsioonisĂŒsteem“ ja „SĂŒsteemiteenused, tarkvara kogum“.

Virtuaalmasinad

Veebihosting vÀlja tooma protsessori, ketta, mÀlu ja vÔrgu. Ja esimestega oli meil probleeme. Seega, metrikad:

CPU varastatud aeg — kui ostate virtuaalmasina Amazonis (nĂ€iteks t2.micro), tuleks mĂ”ista, et teile ei eraldata ĂŒhte tĂ€isprotsessorituuma, vaid vaid osa selle ajast. Ja kui te selle Ă€ra kasutate, hakkavad nad teie protsessorilt aega vĂ”tma.

See mÔÔdik vÔimaldab jÀlgida selliseid hetki ja teha otsuseid. NÀiteks, kas on vaja valida jÔulisem paket vÔi jagada taustprotsesside töötlemine ja API pÀringud erinevatele serveritele. serverid.

IOPS + CPU iowait aeg — miks on paljudel pilvehostimistel probleem, et nad ei anna piisavalt IOPS-i. Veelgi enam, madal IOPS graafik ei ole nende jaoks argument. SeetĂ”ttu on mĂ”istlik jĂ€lgida ka CPU iowait aega. Selle paari graafikuga — madalate IOPS-ide ja kĂ”rge sisendi/vĂ€ljundi ooteajaga — saab juba teenusepakkujaga rÀÀkida ja probleemi lahendada.

OperatsioonisĂŒsteem

OperatsioonisĂŒsteemi mÔÔdud:

  • vaba mĂ€lu protsentides;
  • swap kasutamise aktiivsus: vmstat swapin, swapout;
  • saadaval inode arv ja vaba koht failisĂŒsteemis protsentides;
  • keskmine koormus;
  • ĂŒhenduste arv olekus tw;
  • conntrack tabeli tĂ€itumus;
  • vĂ”rgu töö kvaliteeti saab jĂ€lgida utiliidiga ss, iproute2 paketiga — saab selle vĂ€ljundist RTT-ĂŒhenduste nĂ€itaja ja grupeerida sihtportide jĂ€rgi.

OperatsioonisĂŒsteemi tasandil on meil selline mĂ”isted nagu protsessid. Oluline on eristada sĂŒsteemis protsesside kogumit, mis mĂ€ngib olulist rolli selle töös. Kui teil on nĂ€iteks mitu pgpooli, peate koguma teavet igaĂŒhe kohta.

MÔÔdikute kogum on jÀrgmine:

  • CPU;
  • mĂ€lu — eelkĂ”ige residentmĂ€lu;
  • IO — soovitatavalt IOPS-ides;
  • FileFd — avatud ja limiit;
  • olulised lehekĂŒljetaandumised — nii saate aru, milline protsess vahetub.

Kogu jÀlgimine on meil vÀlja arendatud Dockeris, mÔÔdikute andmete kogumiseks kasutame Cadvisorit. Teistel masinatel rakendame process-exporterit.

SĂŒsteemiteenused, tarkvarastak

Igal rakendusel on oma spetsiifika ja keeruline on eristada mingit kindlat mÔÔdikute kogumit.

Üldiseks kogumikuks on:

  • pĂ€ringute mÀÀr;
  • vigade arv;
  • latentsus;
  • saturation.

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

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

Oleme tÀheldanud kÔrget koormust kettadel, kuid logid ei nÀidanud tÀpselt midagi. Selle probleemiga tegime silmitsi pg_stat_statements, mis on vaade, kus kogutakse pÀringute statistikat.

See on kÔik, mida administreerija vajab.

Koostame lugemise ja kirjutamise pÀringute aktiivsusgraafikuid:

Kuidas me ehitasime jÀlgimise Prometheuse, Clickhouse'i ja ELK abil
Kuidas me ehitasime jÀlgimise Prometheuse, Clickhouse'i ja ELK abil

KÔik on lihtne ja arusaadav, igal pÀringul on oma vÀrv.

Mitte vĂ€hem silmatorkav nĂ€ide on Nginx-logid. Pole ĂŒllatav, et harva keegi neid analĂŒĂŒsib vĂ”i nimetab kohustuslikuks. Standardne formaat ei ole eriti informatiivne ja seda tuleb laiendada.

Isiklikult lisasin request_time, upstream_response_time, body_bytes_sent, request_length, request_id. Koostame vastusaegade ja veahulkade graafikuid:

Kuidas me ehitasime jÀlgimise Prometheuse, Clickhouse'i ja ELK abil
Kuidas me ehitasime jÀlgimise Prometheuse, Clickhouse'i ja ELK abil

Koostame vastusaegade ja veahulkade graafikuid. Kas mĂ€letate? RÀÀkisin Ă€rieesmĂ€rkidest? Kiiresti ja ilma vigadeta? Oleme nende kahe graafikuga need kĂŒsimused juba lahendanud. Ja nende pĂ”hjal on juba vĂ”imalik helistada valveadminitele.

Kuid jÀÀb veel ĂŒks probleem - tagada kiire pĂ”hjuse kĂ”rvaldamine.

Incidendi kÔrvaldamine

Kogu protsessi alates probleemist tuvastamisest kuni lahendamiseni saab jagada mitmeks sammuks:

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

Oluline on, et me teeksime seda vĂ”imalikult kiiresti. Ja kuigi probleemide tuvastamise ja teate saatmise etappidel ei saa me eriti aega kokku hoida — need vĂ”tavad igal juhul kaks minutit — siis jĂ€rgmised on lihtsalt viljatu maa parendamiseks.

Kujutage ette, et valve töötaja telefon heliseb. Mida ta teeb? Otsib vastuseid kĂŒsimustele — mis lĂ€ks katki, kus see juhtus, kuidas reageerida? Nii me nendele kĂŒsimustele vastame:

Kuidas me ehitasime jÀlgimise Prometheuse, Clickhouse'i ja ELK abil

Lihtsalt integreerime kogu selle teabe teate teksti, andes seal lingi wiki lehele, kus on kirjas, kuidas sellele probleemile reageerida, kuidas seda lahendada ja eskaleerida.

Ma pole siiani midagi öelnud rakenduse ja Àri loogika taseme kohta. Kahjuks ei ole meie rakendustes veel metoodika kogumise funktsionaalsust. Ainus allikas mingisuguste andmete jaoks nendelt tasemetelt on logid.

MÔned punktid.

Esiteks, kirjutage struktureeritud logisid. Ärge lisage konteksti teate tekstis. See raskendab nende grupeerimist ja analĂŒĂŒsimist. Logstash vajab selle normaliseerimiseks palju aega.

Teiseks, kasutage Ôigesti tÔsiduse tasemeid. Igal keelel on oma standard. Isiklikult eristaksin ma nelja taset:

  1. vigade puudumine;
  2. klientidepoolne viga;
  3. meie poolelt viga, ei kaota raha, ei kanna riske;
  4. meie poolelt viga, kaotame raha.

KokkuvĂ”tteks. Tuleb pĂŒĂŒdma jĂ€lgida just Ă€riloogikat. Tuleb pĂŒĂŒda jĂ€lgida ise rakendust ja opereerida juba selliste mÔÔdikute pĂ”hjal nagu mĂŒĂŒkide arv, uute kasutajate registreerimiste arv, hetkel aktiivsete kasutajate arv jne.

Kui kogu teie Ă€ri on ĂŒks nupp brauseris, peate jĂ€lgima, kas seda vajutatakse, kas see töötab korralikult. KĂ”ik muu ei ole oluline.

Kui teil seda ei ole, vÔite proovida seda logides, rakenduse logides, Nginx logides jmt, nagu me tegime. Te peate olema nii lÀhedal rakendusele kui vÔimalik.

OperatsioonisĂŒsteemi mÔÔdikud on loomulikult olulised, kuid Ă€ri jaoks pole need huvitavad, me ei saa nende eest raha.

Allikas: habr.com

Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster