PiezÄ«me. tulk.: MÄs piedÄvÄjam jÅ«su uzmanÄ«bai tehnisko informÄciju par nesenÄs dÄ«kstÄves iemesliem mÄkoÅpakalpojumÄ, ko uztur Grafana veidotÄji. Å is ir klasisks piemÄrs tam, kÄ jauna un Ŕķietami ÄrkÄrtÄ«gi noderÄ«ga funkcija, kas paredzÄta infrastruktÅ«ras kvalitÄtes uzlaboÅ”anai... var nodarÄ«t ļaunumu, ja neparedz neskaitÄmÄs nianses tÄs pielietoÅ”anÄ ražoÅ”anas realitÄtÄ. Ir lieliski, ja parÄdÄs Å”Ädi materiÄli, kas ļauj mÄcÄ«ties ne tikai no kļūdÄm. SÄ«kÄka informÄcija ir Ŕī teksta tulkojumÄ no Grafana Labs produkta viceprezidenta.
Piektdien, 19. jÅ«lijÄ, Hosted Prometheus pakalpojums Grafana Cloud pÄrtrauca darboties aptuveni uz 30 minÅ«tÄm. Atvainojos visiem klientiem, kurus skÄris pÄrtraukums. MÅ«su uzdevums ir nodroÅ”inÄt jums nepiecieÅ”amos uzraudzÄ«bas rÄ«kus, un mÄs saprotam, ka to trÅ«kums var padarÄ«t jÅ«su dzÄ«vi grÅ«tÄku. MÄs Å”o incidentu uztveram ÄrkÄrtÄ«gi nopietni. Å ajÄ piezÄ«mÄ ir paskaidrots, kas notika, kÄ mÄs reaÄ£ÄjÄm un ko mÄs darÄm, lai nodroÅ”inÄtu, ka tas neatkÄrtojas.
AizvÄsture
Grafana Cloud Hosted Prometheus pakalpojums ir balstÄ«ts uz SmadzeÅu garoza ā CNCF projekts, lai izveidotu horizontÄli mÄrogojamu, ļoti pieejamu, vairÄku nomnieku Prometheus pakalpojumu. Cortex arhitektÅ«ra sastÄv no atseviŔķu mikropakalpojumu kopuma, no kuriem katrs veic savu funkciju: replikÄcija, glabÄÅ”ana, vaicÄjumi utt. Cortex tiek aktÄ«vi izstrÄdÄts, un tas pastÄvÄ«gi pievieno jaunas funkcijas un uzlabo veiktspÄju. MÄs regulÄri izvietojam jaunus Cortex laidienus klasteros, lai klienti varÄtu izmantot Ŕīs funkcijas ā par laimi, Cortex var atjauninÄt bez dÄ«kstÄves.
Lai nodroÅ”inÄtu nevainojamus atjauninÄjumus, pakalpojumam Ingester Cortex ir nepiecieÅ”ama papildu Ingester kopija atjauninÄÅ”anas procesa laikÄ. (PiezÄ«me. tulk.: Ingester - Cortex pamatkomponents. TÄs uzdevums ir savÄkt pastÄvÄ«gu paraugu straumi, grupÄt tos Prometheus gabalos un uzglabÄt datu bÄzÄ, piemÄram, DynamoDB, BigTable vai Cassandra.) Tas ļauj vecajiem Ingesteriem pÄrsÅ«tÄ«t paÅ”reizÄjos datus jaunajiem Ingesteriem. Ir vÄrts atzÄ«mÄt, ka Ingesteri ir resursietilpÄ«gi. Lai tie darbotos, jums ir jÄbÅ«t 4 kodoliem un 15 GB atmiÅai katrÄ podÄ, t.i. 25% no bÄzes iekÄrtas apstrÄdes jaudas un atmiÅas mÅ«su Kubernetes klasteru gadÄ«jumÄ. KopumÄ mums parasti klasterÄ« ir daudz vairÄk neizmantoto resursu nekÄ 4 kodoli un 15 GB atmiÅa, tÄpÄc jauninÄÅ”anas laikÄ mÄs varam viegli izveidot Å”os papildu resursus.
TaÄu nereti gadÄs, ka normÄlas darbÄ«bas laikÄ nevienai no maŔīnÄm nav Å”o 25% neizmantoto resursu. JÄ, mÄs pat necenÅ”amies: CPU un atmiÅa vienmÄr noderÄs citiem procesiem. Lai atrisinÄtu Å”o problÄmu, mÄs nolÄmÄm izmantot Kubernetes Pod prioritÄtes. Ideja ir pieŔķirt Ingesteriem augstÄku prioritÄti nekÄ citiem (bezvalstniekiem) mikropakalpojumiem. Kad mums ir nepiecieÅ”ams palaist papildu (N+1) Ingester, mÄs Ä«slaicÄ«gi izspiežam citus, mazÄkus pÄkstis. Å ie podi tiek pÄrsÅ«tÄ«ti uz brÄ«vajiem resursiem citÄs iekÄrtÄs, atstÄjot pietiekami lielu ācaurumuā, lai darbinÄtu papildu Ingester.
Ceturtdien, 18. jÅ«lijÄ, mÄs saviem klasteriem ieviesÄm Äetrus jaunus prioritÄÅ”u lÄ«meÅus: kritiski, augsts, vidÄja Šø zems. Tie tika pÄrbaudÄ«ti iekÅ”ÄjÄ klasterÄ« bez klientu trafika aptuveni vienu nedÄļu. PÄc noklusÄjuma tiek saÅemti podi bez noteiktas prioritÄtes vidÄja prioritÄte, klase tika noteikta Ingesteram ar augstu prioritÄte. Kritisks tika rezervÄts uzraudzÄ«bai (Prometheus, Alertmanager, mezglu eksportÄtÄjs, kube-state-metrics utt.). MÅ«su konfigurÄcija ir atvÄrta, un jÅ«s varat skatÄ«t PR Å”eit.
Nelaimes gadījums
Piektdien, 19. jÅ«lijÄ, viens no inženieriem palaida jaunu specializÄtu Cortex klasteru lielam klientam. Å Ä« klastera konfigurÄcijÄ nebija iekļautas jaunas aplikumu prioritÄtes, tÄpÄc visÄm jaunajÄm aplikÄcijÄm tika pieŔķirta noklusÄjuma prioritÄte - vidÄja.
Kubernetes klasterim nepietika resursu jaunajam Cortex klasterim, un esoÅ”ais ražoÅ”anas Cortex klasteris netika atjauninÄts (Ingesters palika bez augsts prioritÄte). TÄ kÄ jaunÄ klastera Ingesters pÄc noklusÄjuma bija vidÄja prioritÄti, un esoÅ”ie pÄksti ražoÅ”anÄ darbojÄs bez prioritÄtes vispÄr, jaunÄ klastera Ingesteri nomainÄ«ja Ingesterus no esoÅ”Ä Cortex ražoÅ”anas klastera.
ReplicaSet izliktajam Ingesteram ražoÅ”anas klasterÄ« konstatÄja izlikto aplikumu un izveidoja jaunu, lai saglabÄtu norÄdÄ«to kopiju skaitu. Jaunais pods tika pieŔķirts pÄc noklusÄjuma vidÄja prioritÄte, un kÄrtÄjais āvecaisā Ingesters ražoÅ”anÄ zaudÄja savus resursus. RezultÄts bija lavÄ«nas process, kas noveda pie visu pÄkstÄ«m no Ingester Cortex ražoÅ”anas klasteriem.
IevadÄ«tÄji ir statusa dati un glabÄ datus par iepriekÅ”ÄjÄm 12 stundÄm. Tas ļauj mums tos efektÄ«vÄk saspiest pirms to ierakstÄ«Å”anas ilgtermiÅa glabÄÅ”anÄ. Lai to panÄktu, Cortex sadala datus visÄs sÄrijÄs, izmantojot sadalÄ«to hash tabulu (DHT), un atkÄrto katru sÄriju trijos Ingesteros, izmantojot Dinamo stila kvoruma konsekvenci. Cortex neieraksta datus Ingesteriem, kas ir atspÄjoti. TÄdÄjÄdi, kad liels skaits ingesteru atstÄj DHT, Cortex nevar nodroÅ”inÄt pietiekamu ierakstu replikÄciju, un tie avarÄ.
AtklÄÅ”ana un sanÄcija
Jauni Prometheus paziÅojumi, pamatojoties uz "kļūdu budžetu" (kļūdu budžeta pamatÄ ā sÄ«kÄka informÄcija tiks parÄdÄ«ta nÄkamajÄ rakstÄ) sÄka atskanÄt trauksmi 4 minÅ«tes pÄc izslÄgÅ”anas sÄkuma. Aptuveni nÄkamo piecu minÅ«Å”u laikÄ mÄs veicÄm diagnostiku un palielinÄjÄm pamatÄ esoÅ”o Kubernetes klasteru, lai mitinÄtu gan jaunos, gan esoÅ”os ražoÅ”anas klasterus.
VÄl pÄc piecÄm minÅ«tÄm vecie ingesteri veiksmÄ«gi ierakstÄ«ja savus datus, sÄka darboties jaunie, un Cortex klasteri atkal kļuva pieejami.
VÄl 10 minÅ«tes tika pavadÄ«tas, lai diagnosticÄtu un labotu Ärpus atmiÅas (OOM) kļūdas no autentifikÄcijas reversajiem starpniekserveriem, kas atrodas Cortex priekÅ”Ä. OOM kļūdas izraisÄ«ja desmitkÄrtÄ«gs QPS pieaugums (uzskatÄm, ka klienta Prometheus serveru pÄrÄk agresÄ«vo pieprasÄ«jumu dÄļ).
efekti
KopÄjais dÄ«kstÄves laiks bija 26 minÅ«tes. Dati netika zaudÄti. Ingesters ir veiksmÄ«gi ielÄdÄjis visus atmiÅÄ esoÅ”os datus ilgtermiÅa krÄtuvÄ. IzslÄgÅ”anas laikÄ klienta Prometheus serveru buferis tika izdzÄsts (tÄlvadÄ«bas pults) ierakstus izmantojot jauns API remote_write pamatojoties uz WAL (autors Kalums Stjans no Grafana Labs) un atkÄrtoja neveiksmÄ«gos ierakstus pÄc avÄrijas.
RažoŔanas klastera rakstīŔanas darbības
Atzinumi
Ir svarÄ«gi mÄcÄ«ties no Ŕī incidenta un veikt nepiecieÅ”amos pasÄkumus, lai izvairÄ«tos no tÄ atkÄrtoÅ”anÄs.
Atskatoties, mums nevajadzÄja iestatÄ«t noklusÄjuma iestatÄ«jumu vidÄja prioritÄte, kamÄr nav saÅÄmuÅ”i visi ražoÅ”anÄ esoÅ”ie Ingesteri augsts prioritÄte. TurklÄt par tiem bija jÄparÅ«pÄjas jau iepriekÅ” augsts prioritÄte. Tagad viss ir sakÄrtots. MÄs ceram, ka mÅ«su pieredze palÄ«dzÄs citÄm organizÄcijÄm, kuras apsver iespÄju Kubernetes lietot pod prioritÄÅ”u.
MÄs pievienosim papildu kontroles lÄ«meni visu papildu objektu izvietoÅ”anai, kuru konfigurÄcijas klasterim ir globÄlas. TurpmÄk Å”Ädas izmaiÅas tiks vÄrtÄtas bŠ¾vairÄk cilvÄku. TurklÄt modifikÄcija, kas izraisÄ«ja avÄriju, tika uzskatÄ«ta par pÄrÄk nelielu atseviŔķam projekta dokumentam ā tÄ tika apspriesta tikai GitHub izdevumÄ. TurpmÄk visÄm Å”ÄdÄm izmaiÅÄm konfigurÄcijÄs tiks pievienota atbilstoÅ”a projekta dokumentÄcija.
Visbeidzot, mÄs automatizÄsim autentifikÄcijas reversÄ starpniekservera izmÄru maiÅu, lai novÄrstu OOM pÄrslodzi, ko mÄs novÄrojÄm, un pÄrskatÄ«sim Prometheus noklusÄjuma iestatÄ«jumus, kas saistÄ«ti ar atkÄpÅ”anos un mÄrogoÅ”anu, lai novÄrstu lÄ«dzÄ«gas problÄmas nÄkotnÄ.
Neveiksmei bija arÄ« dažas pozitÄ«vas sekas: saÅemot nepiecieÅ”amos resursus, Cortex automÄtiski atkopÄs bez papildu iejaukÅ”anÄs. MÄs arÄ« guvÄm vÄrtÄ«gu pieredzi, strÄdÄjot ar Grafana Loki - mÅ«su jaunÄ baļķu apkopoÅ”anas sistÄma, kas palÄ«dzÄja nodroÅ”inÄt, ka visi Ingesteri rÄ«kojÄs pareizi kļūmes laikÄ un pÄc tÄs.