
Vores virksomhed har siden 2008 arbejdet primÊrt med at administrere infrastrukturer og dÞgnet rundt teknisk support til webprojekter: vi har over 400 kunder, hvilket udgÞr cirka 15% af e-handel i Rusland. Derfor er der meget forskelligartet arkitektur i vores support. Hvis noget falder ned, er vi forpligtet til at ordne det inden for 15 minutter. Men for at forstÄ, at en nÞdsituation er opstÄet, er det nÞdvendigt at overvÄge projektet og reagere pÄ hÊndelser. Men hvordan gÞr man det?
Jeg mener, at i organisationen af det rette overvÄgningssystem opstÄr der problemer. Hvis der ikke var problemer, ville mit oplÊg bestÄ af ét punkt: «Installer venligst Prometheus + Grafana og plugins 1, 2, 3». DesvÊrre fungerer det ikke lÊngere sÄdan. Og det primÊre problem er, at alle fortsÊtter med at tro pÄ noget, der eksisterede i 2008, hvad angÄr softwarekomponenter.
NĂ„r det kommer til organisering af overvĂ„gningssystemet, tĂžr jeg sige, at... der ikke findes projekter med ordentlig overvĂ„gning. Og situationen er sĂ„ dĂ„rlig, at hvis noget falder ned, er der en risiko for, at det forbliver uset â alle er jo overbeviste om, at «alt overvĂ„ges».
MÄske overvÄges alt. Men hvordan?
Vi har alle vÊret i en lignende situation: en devops, en admin, og sÄ kommer et udviklerteam og siger - «vi har release, nu skal du overvÄge». Hvad skal overvÄges? Hvordan fungerer det?
Okay. Vi overvÄger pÄ gammeldags mÄde. Men det Êndrer sig allerede, og det viser sig, at du har overvÄget service A, som er blevet service B, som interagerer med service C. Men udviklerteamet siger til dig: «SÊt softwaren op, den skal overvÄge alt!»
Hvad er ĂŠndret? - Alt er ĂŠndret!
2008. Alt er fantastisk.
Der er et par udviklere, én server, én database server. Herfra starter det hele. Vi har nogle oplysninger, vi installerer Zabbix, Nagios, Cacti. Og derefter opretter vi forstÄelige alarmer for CPU, for diskens arbejde, for plads pÄ diskene. Vi laver ogsÄ et par manuelle tjek for at sikre, at hjemmesiden svarer, og at ordrer kommer ind i databasen. Og det er det - vi er mere eller mindre beskyttede.
Sammenlignet med den arbejdsbyrde, som systemadministratoren tidligere udfÞrte for at sikre overvÄgning, var 98% af det automatiseret: en person, der beskÊftiger sig med overvÄgning, skal forstÄ, hvordan man installerer Zabbix, hvordan man konfigurerer det og indstiller alarmer. De resterende 2% handler om eksterne kontroller: om siden svarer og foretager forespÞrgsler til databasen, og om nye bestillinger er kommet.

2010. Belastningen stiger.
Vi begynder at skalere websiderne, tilfÞjer en sÞgemaskine. Vi vil vÊre sikre pÄ, at produktkataloget indeholder alle varer. Og at produkt sÞgningen fungerer. At databasen fungerer, at ordrer bliver oprettet, at siden svarer eksternt og svarer korrekt. servere Og brugeren ikke bliver smidt af siden, mens den genbalanceres til en anden server, osv. Antallet af enheder vokser.
Derudover forbliver enheden, der relaterer til infrastrukturen, stadig den stÞrste i administratorens hoved. Ideen om, at personen der gÞr overvÄgning, er den, der installerer Zabbix og kan konfigurere det, sidder stadig fast.
Men der opstÄr ogsÄ opgaver i forbindelse med udfÞrelse af eksterne kontroller, oprettelse af et sÊt scripts til forespÞrgsler for sÞgeindeksering, et sÊt scripts til at kontrollere, at sÞgningen Êndrer sig under indeksering, et sÊt scripts, som kontrollerer, at varer bliver sendt til leveringsservice osv.

BemÊrk: Jeg har skrevet "sÊt scripts" tre gange. Det vil sige, at den ansvarlige for overvÄgning ikke lÊngere bare er den, der installerede Zabbix. Det er en person, der begynder at kode. Men i teamet Êndrer man stadig ikke tankegang.
Til gengÊld Êndrer verden sig og bliver mere kompleks. Lag af virtualisering tilfÞjes, flere nye systemer. De begynder at interagere med hinanden. Hvem sagde "det lugter af mikroservices?" Men hver service ser stadig ud som en separat hjemmeside. Vi kan kontakte den og forstÄ, at den leverer de nÞdvendige oplysninger og fungerer af sig selv. Og hvis du er administrator og konstant arbejder med et projekt, der udvikler sig i 5-7-10 Är, akkumuleres disse viden: et nyt niveau - du forstÄr det, et andet niveau - du forstÄr det...

Men sjÊldent er der nogen, der fÞlger et projekt i 10 Är.
Resume for overvÄgningsmanden.
Forestil dig, at du er kommet ind i en ny startup, der straks har samlet 20 udviklere, skrevet 15 mikrotjenester, og du er administratoren, der fÄr at vide: "Byg CI/CD. VÊr sÄ venlig." Du har bygget CI/CD og pludselig hÞrer du: "Det er svÊrt for os at arbejde med produktionen i 'kuben', uden at forstÄ, hvordan applikationen vil fungere der. Lav en sandkasse i denne samme 'kube'.
Du laver en sandkasse i denne kube. De siger straks: "Vi vil have en stage-database, der opdateres hver dag fra produktionen, sÄ vi kan forstÄ, at det fungerer pÄ databasen, men ikke ÞdelÊgger produktionsdatabasen."
Du lever i alt dette. Der er 2 uger tilbage til udgivelsen, og de siger: "Nu skal alt dette overvÄges..." Det vil sige, overvÄge den klustrede infrastruktur, overvÄge mikrotjenestearkitekturen, overvÄge arbejdet med eksterne tjenester...
Kollegerne trÊkker en velkendt skema op af hatten og siger: "SÄ her er alt klart! SÊt et program op, der kan overvÄge det hele." Ja, ja: Prometheus + Grafana + plugins.
Og de tilfÞjer samtidig: "Du har to uger, sÞrg for, at alt er pÄlideligt."
I en hel rÊkke projekter, som vi ser, tildeles én person overvÄgning. Forestil dig, at vi Þnsker at ansÊtte en person i 2 uger, der skal fokusere pÄ overvÄgning, og vi laver et CV til ham. Hvilke fÊrdigheder skal denne person have, hvis man tager alt det, vi tidligere har sagt, i betragtning?
- Han skal forstÄ overvÄgning og specifikationen for den fysiske infrastruktur.
- Han skal forstÄ overvÄgningens specifikationer for Kubernetes (og alle vil have det i 'kuben', fordi man kan abstrahere fra alting, gemme sig, for resten klarer administratoren) - selve Kubernetes, dets infrastruktur, og forstÄ, hvordan man overvÄger applikationer indeni.
- Han skal forstÄ, at tjenester kommunikerer pÄ sÊrlige mÄder, og vide om de specifikke interaktioner mellem tjenesterne. Det er fuldt ud muligt at se et projekt, hvor nogle tjenester kommunikerer synkront, fordi det ikke kan gÞres pÄ andre mÄder. For eksempel, backend gÄr via REST, via gRPC til katalogtjenesten, henter en liste over varer og returnerer det. Her kan man ikke vente. Men med andre tjenester arbejder han asynkront. OverfÞre en bestilling til leveringstjenesten, sende en e-mail osv.
Du er mĂ„ske allerede faldet af hele dette? Og administratoren, der skal overvĂ„ge det, er endnu mere forvirret. - Han skal kunne planlĂŠgge og planlĂŠgge korrekt â da arbejdet bliver mere og mere.
- Han skal derfor skabe en strategi for den oprettede service for at forstÄ, hvordan man konkret overvÄger den. Han har brug for en forstÄelse af projektets arkitektur og dets udvikling + forstÄelse for de teknologier, der bruges i udviklingen.
Lad os huske et absolut normalt tilfÊlde: en del services pÄ php, en del services pÄ Go, en del services pÄ JS. De arbejder pÄ en eller anden mÄde sammen. Heraf kommer termen «mikroservice»: antallet af separate systemer er blevet sÄ stort, at udviklerne ikke kan forstÄ projektet som helhed. En del af teamet skriver services pÄ JS, som fungerer uafhÊngigt og ikke ved, hvordan resten af systemet fungerer. En anden del skriver services pÄ Python og involverer sig ikke i, hvordan de andre services fungerer, de er isolerede inden for deres omrÄde. Den tredje del skriver services pÄ php eller noget andet.
Alle disse 20 personer er delt op i 15 services, og der er kun én admin, der skal forstÄ alt dette. Stop! Vi har lige opdelt systemet i 15 mikroservices, fordi 20 personer ikke kan forstÄ hele systemet.
Men det skal overvÄges pÄ en eller anden mÄde...
Hvad er resultatet? Resultatet er, at der er Ă©n person, der forstĂ„r alt, hvad et helt team af udviklere ikke kan forstĂ„, og samtidig skal han ogsĂ„ vide og kunne det, vi har angivet ovenfor â den fysiske infrastruktur, Kubernetes-infrastrukturen osv.
Hvad kan man sige... Houston, vi har et problem.
OvervÄgning af et moderne softwareprojekt er et softwareprojekt i sig selv.
Fra en falsk sikkerhed om, at overvÄgning er software, opstÄr der en tro pÄ mirakler. Og sÄdanne mirakler er desvÊrre ikke til. Man kan ikke bare installere Zabbix og forvente, at alt fungerer. Der er ikke nogen mening i at installere Grafana og hÄbe, at alt bliver fint. StÞrstedelen af tiden vil blive brugt pÄ at organisere tjek af, hvordan services fungerer, og deres interaktion med hinanden, samt tjek af, hvordan eksterne systemer fungerer. Faktisk vil 90% af tiden gÄ ikke pÄ at skrive scripts, men pÄ udviklingen af software. Og det skal udfÞres af et team, der forstÄr projektets arbejde.
Hvis man i denne situation kaster én person over overvÄgningen, vil der ske en katastrofe. Og det sker overalt.
For eksempel er der flere tjenester, der kommunikerer med hinanden gennem Kafka. En bestilling kommer ind, vi sender besked om bestillingen til Kafka. Der er en tjeneste, der lytter til informationen om bestillingen og hÄndterer forsendelsen af varerne. Der er en tjeneste, der lytter til informationen om bestillingen og sender en e-mail til brugeren. Og sÄ dukker der flere tjenester op, og vi begynder at forvirre os.
Og hvis du ogsÄ overdrager dette til administratoren og udviklerne i en fase, hvor der kun er kort tid tilbage til udgivelsen, skal personen forstÄ hele dette protokol. Det vil sige, et projekt af denne skala tager betydelig tid, og det skal tages i betragtning i systemets udvikling.
Men meget ofte, isĂŠr i starten af opstartsfirmaer, ser vi, hvordan overvĂ„gningen bliver udskudt. "Lad os fĂžrst lave et Proof of Concept, lade os lancere det, sĂ„ lad det falde â vi er villige til at ofre det. Og sĂ„ vil vi overvĂ„ge det hele." NĂ„r (eller hvis) projektet begynder at generere indtĂŠgter, Ăžnsker virksomheden at udvikle endnu flere funktioner â fordi det allerede fungerer, sĂ„ der skal tjenes mere! Og du befinder dig pĂ„ et punkt, hvor du fĂžrst skal overvĂ„ge alt det tidligere, hvilket tager mere end 1% af tiden, men betydeligt mere. Og for resten krĂŠver overvĂ„gningen udviklere, og det er nemmere at lade dem fokusere pĂ„ nye funktioner. I sidste ende skrives nye funktioner, alt kompliceres, og du er i en uendelig deadlock.
Hvordan kan man overvÄge et projekt fra starten, og hvad skal man gÞre, hvis du har fÄet et projekt, der skal overvÄges, men du ikke ved, hvor du skal begynde?
For det fĂžrste skal man planlĂŠgge.
En lyrisk afvigelse: man begynder ofte med at overvÄge infrastrukturen. For eksempel har vi Kubernetes. Lad os starte med at installere Prometheus med Grafana, installere plugins til overvÄgning af 'kuben'. Ikke kun udviklerne, men ogsÄ administratorerne har en beklagelig praksis: "Vi installerer denne plugin, og den ved sikkert, hvordan man gÞr det." Folk elsker at starte med enkle og forstÄelige ting, snarere end med vigtige handlinger. Og overvÄgning af infrastrukturen er bare det.
For starters, decide what and how you want to monitor, and then choose a tool, because other people can't think for you. And should they? Others have thought about themselves, about a universal system â or didn't think at all when they wrote this plugin. Just because this plugin has 5,000 users does not mean it provides any value. You might become the 5001st simply because there were already 5000 people before you.
If you have started monitoring the infrastructure and the backend of your application stops responding, all users will lose connection to the mobile app. An error will pop up. People will come to you and say, "The app isn't working, what are you doing here?" â "We are monitoring." â "How are you monitoring if you don't see that the app isn't working?!"
- I believe that monitoring should start right from the user's entry point. If the user doesn't see that the app is working â that's a failure. And the monitoring system should warn about this first and foremost.
- Only after that can we monitor the infrastructure. Or do it in parallel. Monitoring infrastructure is easier â here we can finally just set up Zabbix.
- And now we need to dig into the application's roots to understand where things are not working.
My main point is that monitoring should run parallel to the development process. If you pull the monitoring team onto other tasks (like creating CI/CD, sandboxes, reorganizing infrastructure), monitoring will start to lag behind and you may never catch up with development (or sooner or later, you'll have to stop it).
Everything in levels
Here's how I see the organization of the monitoring system.
1) Application level:
- monitoring business logic of the application;
- monitoring health metrics of services;
- integration monitoring.
2) Infrastructure level:
- monitoring the orchestration level;
- monitoring system software;
- monitoring hardware level.
3) Again, the application level â but now as an engineering product:
- collecting and observing application logs;
- APM;
- tracing.
4) Alerting:
- organization of the notification system;
- organization of the duty system;
- organization of the knowledge base and incident handling workflow.
Det er vigtigt: Vi gÄr ikke til alerting efterfÞlgende, men straks! Det er ikke nÞdvendigt at starte overvÄgningen og tÊnke pÄ, hvem der skal modtage alerterne senere. For hvad er formÄlet med overvÄgning: at forstÄ, hvor i systemet noget ikke fungerer som det skal, og informere de relevante personer. Hvis det overlades til sidst, vil de relevante personer kun hÞre om, at noget er galt, nÄr de fÄr et opkald med beskeden: 'vores system fungerer ikke'.
Applikationsniveau â overvĂ„gning af forretningslogik
Her taler vi om at kontrollere, om applikationen fungerer for brugeren.
Dette niveau skal etableres i udviklingsfasen. For eksempel har vi en hypotetisk Prometheus: den henter data fra serveren, som udfÞrer kontroller, kalder endpointet, og endpointet gÄr videre med at kontrollere API'en.
NÄr man ofte beder om at overvÄge forsiden for at sikre, at hjemmesiden fungerer, tilbyder programmÞrer et endpoint, som kan kaldes hver gang man skal bekrÊfte, at API'en fungerer. Samtidig begynder programmÞrer ogsÄ at skrive /api/test/helloworld.
Den eneste mĂ„de at sikre, at alt fungerer? â Nej!
- At oprette sĂ„danne kontroller er i det vĂŠsentlige udviklernes opgave. Unit-tests skal skrives af programmĂžrer, der skriver koden. For hvis du overlader det til en administrator med besked om: 'Hey, her er en liste over API-protokoller for alle 25 funktioner, venligst overvĂ„g alt!' â vil det ikke fungere.
- Hvis du skriver print 'hello world', vil ingen nogensinde vide, at API'en skal og faktisk fungerer. Hver ĂŠndring af API'en skal medfĂžre en tilsvarende ĂŠndring i kontrollerne.
- Hvis du allerede stÄr i denne situation - stop funktionerne og tildel udviklere til at skrive disse kontroller, eller resignér med tabene, acceptere at intet bliver kontrolleret, og at der vil ske nedbrud.
Tekniske rÄd:
- SÞrg for at organisere en ekstern server til kontrollerne - du skal vÊre sikker pÄ, at dit projekt er tilgÊngeligt for omverdenen.
- Organiser kontrol pÄ hele API-protokollen, ikke kun pÄ enkelte endpoints.
- Opret et prometheus-endpoint med resultaterne af kontrollerne.
Applikationsniveau â overvĂ„gning af sundhedsmetrikker
Nu handler det om eksterne sundhedsmetrikker for tjenester.
Vi har besluttet, at vi overvĂ„ger alle "endpoints" i applikationen ved hjĂŠlp af eksterne kontroller, som vi kalder fra et eksternt overvĂ„gningssystem. Men det er netop de "endpoints", som brugeren "ser". Vi vil gerne vĂŠre sikre pĂ„, at vores tjenester fungerer. Her ser det bedre ud: i K8s er der health checks, sĂ„ i det mindste kan "boksen" bekrĂŠfte, at tjenesten fungerer. Men halvdelen af de checks, jeg har set, er det samme print "hello world". Det vil sige, den hiver Ă©n gang efter deployment, og hvis den fĂ„r et svar om, at alt er godt â sĂ„ er det det. Men for en service, der udleverer sit API via REST, er der et stort antal indgange til det samme API, som ogsĂ„ skal overvĂ„ges, fordi vi vil vide, at det fungerer. Og vi overvĂ„ger det allerede indefra.
Hvordan implementeres dette teknisk korrekt: hver service tilvejebringer en endpoint om sin nuvĂŠrende funktionalitet, og i graferne i Grafana (eller en hvilken som helst anden applikation) ser vi status for alle tjenester.
- Hver ĂŠndring af API'et skal fĂžre til en ĂŠndring af kontrollerne.
- Opret nye tjenester straks med health-metrics.
- En administrator kan henvende sig til udviklerne og bede om "tilfÞj et par funktioner, sÄ jeg kan forstÄ det hele og tilfÞje information til mit overvÄgningssystem". Men udviklerne svarer normalt: "Vi vil ikke tilfÞje noget to uger fÞr udgivelsen."
Lad udviklingslederne vide, at der vil vĂŠre sĂ„danne tab, og lad ogsĂ„ udviklingsledernes ledelse vide besked. Fordi nĂ„r alt gĂ„r ned, vil der altid vĂŠre nogen, der ringer og krĂŠver overvĂ„gning af den "stadig-nedlagte service". - For resten, sĂžrg for at afsĂŠtte udviklere til at skrive plugins til Grafana â det vil vĂŠre en stor hjĂŠlp til administratorerne.
Applikationsniveau â IntegrationsovervĂ„gning
IntegrationsovervÄgning fokuserer pÄ overvÄgning af kommunikationen mellem kritiske forretningssystemer.
For eksempel er der 15 tjenester, der kommunikerer med hinanden. Det er ikke lĂŠngere separate sites. Det vil sige, vi kan ikke bare kalde en service, fĂ„ /helloworld og bekrĂŠfte, at tjenesten fungerer. Fordi webtjenesten til ordreplacering skal sende oplysninger om ordren til bus-systemet â fra bus-systemet skal lagertjenesten modtage denne besked og arbejde videre med den. E-mail-service skal behandle dette pĂ„ en eller anden mĂ„de og sĂ„ videre.
Derfor kan vi ikke forstÄ, nÄr vi trykker pÄ hver enkelt tjeneste, hvordan det hele fungerer. Fordi vi har en slags bus, som alt kommunikerer og interagerer gennem.
SĂ„ dette trin skal markere testen af tjenester i forhold til deres interaktion med andre tjenester. Man kan ikke, kun ved at overvĂ„ge meddelelsesbroker, organisere overvĂ„gning af kommunikationen. Hvis der er en tjeneste, der udsender data, og en anden, der modtager dem, vil vi i overvĂ„gningen af broker kun se de data, der flyver frem og tilbage. Selvom vi er lykkedes med at overvĂ„ge interaktionen af disse data â at en eller anden producerer data, og nogen lĂŠser dem, mens strĂžmmen fortsĂŠtter i Kafka â vil det stadig ikke give os information, hvis den ene tjeneste sendte meddelelsen i en version, og den anden tjeneste ikke forventede denne version og derfor gik glip af den. Det vil vi ikke finde ud af, da vores tjenester siger, at alt fungerer.
SÄdan anbefaler jeg at gÞre:
- For synkron kommunikation: endpointet udfĂžrer anmodninger til relaterede tjenester. Det vil sige, at vi tager dette endpoint, kĂžrer et lille script inden i tjenesten, som gĂ„r gennem alle punkterne og siger: «jeg kan tage fat der, og der, jeg kan tage fatâŠÂ»
- For asynkron kommunikation: indgĂ„ende meddelelser â endpointet tjekker busserne for testmeddelelser og giver en status for behandlingen.
- For asynkron kommunikation: udgĂ„ende meddelelser â endpointet sender testmeddelelser til busserne.
Som det sĂŠdvanligvis sker: vi har en tjeneste, der skyder data til bussen. Vi kommer ind i denne tjeneste og beder om at fĂ„ at vide om dens integrationsstatus. Og hvis tjenesten skal producere en meddelelse et eller andet sted (WebApp), sĂ„ producerer den denne testmeddelelse. Og hvis vi trĂŠkker tjenesten fra siden af OrderProcessing, sĂ„ poster den fĂžrst det, som den kan poste uafhĂŠngigt, og hvis der er nogle afhĂŠngige ting â sĂ„ lĂŠser den fra bussen en rĂŠkke testmeddelelser, forstĂ„r hvad den kan hĂ„ndtere, meddeler det, og om nĂždvendigt poster dem videre, og sĂ„ siger den â alt er fint, jeg er i live.
Vi hÞrer ofte spÞrgsmÄlet: "hvordan kan vi teste dette pÄ produktionsdata?" For eksempel handler det om den samme bestillingstjeneste. Ordren sender meddelelser til lageret, hvor varer bliver afskrevet: vi kan ikke teste dette pÄ produktionsdata, fordi "jeg fÄr varerne afskrevet!" LÞsningen: planlÊg hele denne test i de tidlige faser. Du har enhedstest, der laver mocks. SÄ det skal gÞres pÄ et dybere niveau, hvor du har en kommunikationskanal, der ikke skader forretningen.
Infrastruktur niveau
OvervÄgning af infrastruktur er noget, der lÊnge har vÊret anset som selve overvÄgningen.
- OvervÄgning af infrastruktur kan og bÞr starte som en separat proces.
- Det er ikke en god idĂ© at starte overvĂ„gningen af infrastrukturen pĂ„ et aktivt projekt, selvom man har lyst. Dette er et problem for alle DevOps. "FĂžrst overvĂ„ger jeg klyngen, derefter overvĂ„ger jeg infrastrukturen" â det vil sige, man overvĂ„ger fĂžrst det, der ligger nederst, men gĂ„r ikke ind i applikationen. For applikationen er en uklar ting for DevOps. Det blev givet til ham, og han forstĂ„r ikke, hvordan det fungerer. Men han forstĂ„r infrastrukturen og starter der. Men nej â man skal altid overvĂ„ge applikationen fĂžrst.
- Overdriv ikke med antallet af advarsler. Givet kompleksiteten i moderne systemer, kommer advarslerne konstant, og man skal finde en mÄde at leve med denne bunke af advarsler pÄ. Og en on-call person, der ser pÄ hundrede nye advarsler, vil tÊnke "jeg vil ikke tÊnke pÄ det." Advarsler bÞr kun informere om kritiske ting.
Applikationsniveau som forretningsenhed
NĂžglepunkter:
- ELK. Dette er industristandard. Hvis du ikke aggregerer logs af en eller anden grund, sÄ begynd med det straks.
- APM. Eksterne APM som en hurtig mÄde at lukke overvÄgningen af applikationen (NewRelic, BlackFire, Datadog). Du kan midlertidigt installere dette for at fÄ en forstÄelse af, hvad der sker.
- Tracing. I dusinvis af mikrotjenester skal du trace alt, fordi forespĂžrgslen ikke lever alene. At tilfĂžje det senere er meget svĂŠrt, sĂ„ det er bedre at planlĂŠgge tracing tidligt i udviklingen â det er et arbejde og et vĂŠrktĂžj for udviklerne. Hvis det ikke er implementeret endnu â sĂ„ implementer det! Se Jaeger/Zipkin.
Advarsel
- Organisering af varslingssystemet: under monitoreringen af mange ting skal der vĂŠre et samlet system til udsendelse af varsler. Det kan gĂžres i Grafana. I Vesten bruger alle PagerDuty. Varslerne skal vĂŠre klare (for eksempel, hvor de kommer fraâŠ). Og det er Ăžnskeligt at kontrollere, at varslerne virkelig nĂ„r frem.
- Organisering af vagtordninger: alerter mĂ„ ikke sendes til alle (ellers vil alle reagere i flok, eller ingen vil reagere). Oncall skal vĂŠre for udviklerne: definer tydeligt ansvarsomrĂ„der, lav klare instruktioner, og skriv i dem, hvem der konkret skal kontaktes om mandagen og om onsdagen, og hvem om tirsdagen og om fredagen (ellers vil ingen kontakte dem, selv i tilfĂŠlde af en stor nĂždsituation â de vil vĂŠre bange for at forstyrre: folk elsker generelt ikke at ringe og vĂŠkke andre, isĂŠr om natten). Og forklar, at det at bede om hjĂŠlp ikke er et tegn pĂ„ inkompetence ("jeg beder om hjĂŠlp â sĂ„ er jeg en dĂ„rlig medarbejder"); opmuntrer til anmodninger om hjĂŠlp.
- Organisering af "vidensbasen" og arbejdsgangen ved hÄndtering af hÊndelser: for hver alvorlig hÊndelse skal der planlÊgges en postmortem, som en midlertidig foranstaltning skal de handlinger, der lÞser hÊndelsen, dokumenteres. IndfÞr en praksis, hvor gentagne alerter er en synd; de skal rettes i koden eller infrastrukturarbejdet.
Teknologisk stack
Lad os forestille os, at vores stack er fĂžlgende:
- dataindsamling â Prometheus + Grafana;
- loganalyse â ELK;
- til APM eller Tracing â Jaeger (Zipkin).

Valgmulighederne er ikke kritiske. Fordi, hvis du i starten forstod, hvordan du skulle overvÄge systemet og lagde en plan, sÄ begynder du derefter at vÊlge vÊrktÞjer efter dine behov. SpÞrgsmÄlet er, hvad du valgte at overvÄge i begyndelsen. Fordi det kan vÊre, at det vÊrktÞj, du valgte i starten, slet ikke opfylder dine krav.
Nogle tekniske punkter, som jeg ser overalt for tiden:
Prometheus presses ind i Kubernetes â hvem fandt pĂ„ det?! Hvis din klynge falder, hvad vil du sĂ„ gĂžre? Hvis du har en kompleks klynge indeni, sĂ„ skal der vĂŠre et eller andet overvĂ„gningssystem indeni klyngen, og et andet â udenfor, som samler data fra indersiden af klyngen.
Inden i klyngen samler vi logs og alt andet. Men systemet til overvÄgning skal vÊre udenfor. Meget ofte i et cluster, hvor der er Promtheus installeret indeni, stÄr der ogsÄ systemer, der udfÞrer eksterne checks af webstedets drift. Og hvis dine forbindelser til omverdenen falder, og applikationen ikke fungerer? SÄ er alt godt indeni, men det hjÊlper ikke brugerne.
Konklusioner
- Udviklingen af overvÄgning er ikke installation af vÊrktÞjer, men udvikling af et softwareprodukt. 98% af den nuvÊrende overvÄgning er kodning. Kodning i tjenester, kodning af eksterne kontroller, kontrol af eksterne tjenester, og alt muligt andet.
- Spar ikke tid for udviklerne pÄ overvÄgning: det kan tage op til 30% af deres arbejde, men det er det vÊrd.
- DevOps, vÊr ikke bekymret over, at du ikke kan overvÄge noget, for nogle ting er en helt anden tankegang. Du har ikke vÊret programmÞr, og overvÄgningsarbejdet er netop deres arbejde.
- Hvis projektet allerede kĂžrer og ikke er overvĂ„get (og du er leder) â afsĂŠt ressourcer til overvĂ„gning.
- Hvis produktet allerede er i produktion, og du er DevOps, der har fĂ„et besked om "at opsĂŠtte overvĂ„gning" â prĂžv at forklare ledelsen det, jeg har skrevet om.
Dette er en udvidet version af prÊsentationen pÄ konferencen Saint Highload++.
Hvis du er interesseret i mine idĂ©er og tanker om it og relaterede emner, sĂ„ kan du đ
Kilde: habr.com
