MĂ€rk. tĂ”lge.: Tutvustame teile tehnilisi detaile hiljutise seisu kohta Grafana looja poolt hallatava pilveteenuse töös. See on klassikaline nĂ€ide sellest, kuidas uus ja nĂ€iliselt ÀÀrmiselt kasulik funktsioon, mille eesmĂ€rk on infrastruktuuri kvaliteeti parandada, vĂ”ib kahjustada, kui ei arvestata selle rakendamise paljusid nĂŒansse tootmises. Imeline, kui sellised materjalid ilmuvad, vĂ”imaldades Ă”ppida mitte ainult oma vigadest. Ăksikasjad leiate Grafana Labs'i toote asepresidendi tĂ”lgitud tekstist.

Reedel, 19. juulil peatus Hosted Prometheus teenus Grafana Cloudis umbes 30 minutiks. Palun vabandust kĂ”igi klientide ees, kes said rikete tĂ”ttu kannatada. Meie ĂŒlesanne on pakkuda vajalikke jĂ€lgimistööriistu ja mĂ”istame, et nende puudumine muudab teie elu keerulisemaks. Suhtume sellesse juhtumisse ÀÀrmiselt tĂ”siselt. selles mĂ€rkuses selgitatakse, mis juhtus, kuidas me sellele reageerisime ja mida me teeme, et selline asi enam ei korduks.
Eelalugu
Grafana Cloud Hosted Prometheuse teenus pĂ”hineb â CNCF projektis, mille eesmĂ€rgiks on luua horisontaalselt skaleeritav, kĂ”rge kĂ€ttesaadavuse ja mitme kliendi teenus Prometheus. Cortexi arhitektuur koosneb kogumist eraldi mikroteenustest, millest igaĂŒhel on oma funktsioon: replikatsioon, salvestamine, pĂ€ringud jne. Cortexi arendamine on aktiivne, uusi funktsioone lisandub pidevalt ning jĂ”udlus paraneb. TĂ”ukame regulaarselt uusi Cortexi versioone klastritesse, et kliendid saaksid nende vĂ”imalustest kasu - Ă”nneks suudab Cortex uuendusi teha katkestusteta.
Katkestusteta uuendamiseks nĂ”uab Cortexi Ingester teenus uuendamise ajal tĂ€iendavat Ingesteri koopiat. (MĂ€rk. tĂ”lge.: â Cortexi pĂ”hikomponent. Selle ĂŒlesanne on koguda pidev voog sample'itest, grupeerida need Prometheuse chunk'ideks ja salvestada sellistesse andmebaasidesse nagu DynamoDB, BigTable vĂ”i Cassandra. See vĂ”imaldab vanadel Ingester'itel edastada praeguseid andmeid uutele Ingester'itele. Tuleb mĂ€rkida, et Ingester'id on ressursikaded. Nende tööks on vajalikud 4 tuuma ja 15 GB mĂ€lu pod'i kohta, s.t. 25% protsessorivĂ”imsusest ja mĂ€lust pĂ”himasinas meie Kubernetes klasside puhul. Ăldiselt on meil tavaliselt palju rohkem kasutamata ressursse klastris, kui 4 tuuma ja 15 GB mĂ€lu, seega saame neid tĂ€iendavaid Ingester'eid hĂ”lpsasti kĂ€ivitada uuenduste ajal.
Kuid sageli juhtub, et normaalse töö kĂ€igus ei ole ĂŒhelgi masinal neid 25% kasutamata ressursse. Me ei pĂŒĂŒa ka: CPU ja mĂ€lu on alati vajalikud teistele protsessidele. Selle probleemi lahendamiseks otsustasime kasutada . Idee on selles, et Ingester'itele antakse kĂ”rgem prioriteet kui teistele (stateless) mikroteenustele. Kui peame kĂ€ivitama tĂ€iendava (N+1) Ingester'i, tĂ”ukame ajutiselt tagasi teised, vĂ€iksemad pod'id. Need pod'id viiakse vabadele ressurssidele teistele masinatele, jĂ€ttes piisavalt su suure "auku" tĂ€iendava Ingester'i kĂ€ivitamiseks.
NeljapĂ€eval, 18. juulil, kĂ€ivitasime oma klusterites neli uut prioriteedi taset: kriitiline, kĂ”rge, keskmine ja madal. Need testiti sisemises klustis ilma kliendiliikluse puudumisel umbes nĂ€dala jooksul. Vaikimisi podâid, millele ei olnud mÀÀratud prioriteeti, said keskmine prioriteedi; Ingesterâitele mÀÀrati klassiga kĂ”rge Reegel 4a: Kui ĂŒlesanne kasutab tĂ€ielikult ette nĂ€htud ajavahemikku, siis selle Kriitiline oli reserveeritud seire jaoks (Prometheus, Alertmanager, node-exporter, kube-state-metrics jne). Meie konfiguratsioon on avatud, ja PR-i saab vaadata .
HĂ€da
Reede, 19. juulil, kĂ€ivitas ĂŒks insener uue pĂŒhendatud Cortex klusteri suurele kliendile. Selle klusteri konfiguratsioon ei sisaldanud uusi podâide prioriteete, seega kĂ”igile uutele podâidele mÀÀrati vaikimisi prioriteet - keskmine.
Kubernetesâ klusteris puudusid ressursid uue Cortex klusteri jaoks, ja olemasolevat tootmis-kongesti Cortexâi ei uuendatud (Ingesterâid jĂ€id ilma kĂ”rge prioriteedita). Kuna uue klusteri Ingesterâid olid vaikimisi keskmine prioriteediga ning olemasolevad tootmis podâid töötasid ĂŒldse ilma prioriteedita, surusid uue klusteri Ingesterâid olemasoleva tootmis-kust kĂŒljest vĂ€lja.
ReplicaSet, mis on loodud vÀljasurnud Ingester'i jaoks tootmisklassis, tuvastas vÀljasurnud pod'i ja lÔi uue, sÀilitades mÀÀratud koopiate arvu. Uuele pod'ile anti vaikimisi keskmine prioriteet ja jÀrgmine "vana" Ingester tootmises kaotas ressursid. Tulemuseks oli lapidaarne protsess, mis tÔi kaasa kÔigi pod'ide vÀljasurumise Ingester'i jaoks tootmisklassis Cortex'i.
Ingester'id sĂ€ilitavad oleku (stateful) ja salvestavad andmeid viimase 12 tunni jooksul. See vĂ”imaldab meil neid enne pikaajalisse sĂ€ilitamisse kirjutamist tĂ”husamalt tihendada. Selleks viib Cortex lĂ€bi andmete partitsioneerimise seeriate kaupa, kasutades jaotatud rĂ€mps-tabelit (Distributed Hash Table, DHT) ja replikeerib iga seeria kolmele Ingester'ile, kasutades Dynamo stiilis kvoorumite konsensust. Cortex ei kirjuta andmeid Ingester'itesse, mis on vĂ€lja lĂŒlitatud. Seega, kui suur arv Ingester'e lahkub DHT-st, ei suuda Cortex tagada piisavat salvestusrekordite replikatsiooni, ja need "langevad".
Tuvastamine ja kÔrvaldamine
Uued Prometheuse teavitused, mis pĂ”hinevad "veabudĆŸetil" (error-budget-based â ĂŒksikasjad tulevad tulevases artiklis) hakkasid nad 4 minutit pĂ€rast katkestust hĂ€irekella lööma. JĂ€rgmise umbes viie minuti jooksul tegime diagnoosi ja suurendasime aluseks olevat Kubernetes klastrit, et majutada nii uut kui ka olemasolevat tootmisclustrit.
Veel viie minuti pÀrast olid vanad Ingester'id edukalt oma andmed salvestanud ning uued olid kÀivitatud, ja Cortex klastrid said taas kÀttesaadavaks.
Veel 10 minutit kulus diagnoosimiseks ja out-of-memory (OOM) tĂ”rgete parandamiseks autentimisteenuste tagasiprokseerijates, mis asusid Cortex'i ees. OOM-tĂ”rked olid pĂ”hjustatud kĂŒmnekordsest QPS kasvust (nagu me arvame, pĂ”hjustatud liiga agressiivsetest pĂ€ringutest kliendi Prometheuse serveritest).
TagajÀrjed
KokkuvÔttes kestis seisak 26 minutit. Andmeid ei kadunud. Ingester'id laadisid edukalt kÔik in-memory andmed pikaajalisse salvestusse. Katkestuse ajal salvestasid kliendi Prometheuse serverid eemaldatud (remote) kirjed WAL-i pÔhjal (autor Grafana Labs'ist) ja kordasid pÀrast tÔrget ebaÔnnestunud salvestusi.

Tootmisklastra kirjutamise toimingud
JĂ€reldused
Oluline on selle juhtumi Ôppetunnid vÀlja noppida ja vÔtta vajalikud meetmed, et vÀltida selle kordumist.
Tagasi vaadates tuleb tunnistada, et me ei pidanud default'ina seadma keskmine prioriteeti, kuni kĂ”ik Ingester'id tootmises olid saanud kĂ”rge prioriteedi. Lisaks oleks pidanud hoolitsema nende kĂ”rge prioriteedi eest. NĂŒĂŒd on kĂ”ik parandatud. Loodame, et meie kogemus aitab teisi organisatsioone, kes kaaluvad pod'ide prioriteetide kasutuselevĂ”ttu Kuberneteses.
Lisame tĂ€iendava taseme kontrolli igasuguste tĂ€iendavate objektide juurutamiseks, mille konfiguratsioonid on globaalseted klastrile. Edaspidi hinnatakse sarnaseid muudatusiosuurema inimeste arvu poolt. Lisaks peeti rikutud modifikatsiooni eraldi projektidokumendi jaoks liiga tĂŒhiseks â seda arutati ainult GitHubi teemades. Alates sellest hetkest saadik kaasnevad kĂ”ik sellised konfiguratsioonimuudatused vastava projektidokumentatsiooniga.
LĂ”puks automatiseerime autentimissĂŒsteemi tagasipöörduva serveri suuruse muutmise, et vĂ€ltida OOM-i ĂŒlekoormuse korral, mida oleme kogeda saanud, ja analĂŒĂŒsime Prometheuse vaikeparameetreid, mis on seotud tagasipöördumise ja skaleerimisega, et tulevikus selliseid probleeme ennetada.
Kogetud tĂ”rkel oli ka positiivseid tagajĂ€rgi: vajalikud ressursid kĂ€eulatuses, Cortex taastati automaatselt ilma tĂ€iendava sekkumiseta. Samuti saime vÀÀrtuslikke kogemusi töötades â meie uue logide agregatsiooni sĂŒsteemiga, â mis aitas veenduda, et kĂ”ik Ingester'id kĂ€itusid Ă”igesti tĂ”rke ajal ja pĂ€rast seda.
P.S. tÔlkija mÀrkused
Lugege ka meie blogist:
- «»;
- «»;
- «»;
- «».
Allikas: habr.com
