Continuous Monitoring – automatisering av kvalitetskontroller av programvara i CI/CD Pipeline

Just nu är DevOps ett hett ämne. Pipelines för kontinuerlig integration och leverans CI/CD implementeras av alla som orkar. Men de flesta uppmärksammar inte alltid den pålitlighet som informationssystemens drift kräver i olika skeden av CI/CD-pipelinen. I den här artikeln skulle jag vilja dela med mig av mina erfarenheter av att automatisera kvalitetskontroller av programvara och implementera möjliga scenarier för dess "självåterställning".

Continuous Monitoring – automatisering av kvalitetskontroller av programvara i CI/CD PipelineKälla

Jag arbetar som ingenjör inom IT-tjänstehantering på företaget «ЛАНИТ-Интеграция». Mitt fokusområde är implementering av olika system för övervakning av prestanda och tillgänglighet av applikationer. Jag kommunicerar ofta med IT-kunder från olika marknadssegment angående aktuella frågor kring övervakning av deras IT-tjänsters kvalitet. Huvudmålet är att minimera cykeltiden för lanseringar och öka frekvensen av dessa. Det låter bra: fler lanseringar – fler nya funktioner – fler nöjda användare – högre intäkter. Men i verkligheten går det inte alltid så bra. Med väldigt hög lanseringstakt dyker genast frågan om kvaliteten på våra lanseringar upp. Även med en helt automatiserad pipeline är en av de största problemen övergången av tjänster från testning till produktion, utan att påverka driftsäkerheten och användarnas interaktion med applikationen.

Enligt resultat av många samtal med kunder kan jag säga att kvaliteten på lanseringar, applikationens tillförlitlighet och möjligheten till dess "självåterställning" (till exempel en rollback till en stabil version) i olika skeden av CI/CD-pipelinen är bland de mest angelägna och aktuella ämnena.

Continuous Monitoring – automatisering av kvalitetskontroller av programvara i CI/CD Pipeline
Nyligen arbetade jag själv på kundens sida - inom supporttjänsten för applikationsprogramvara för en onlinebank. I vår applikations arkitektur användes ett stort antal skräddarsydda mikrotjänster. Det mest sorgliga var att inte alla utvecklare klarade av den höga utvecklingstakten; kvaliteten på vissa mikrotjänster led, vilket ledde till komiska smeknamn för dem och deras skapare. Det började cirkulera historier om vad dessa produkter verkligen består av.

Continuous Monitoring – automatisering av kvalitetskontroller av programvara i CI/CD Pipeline

«Uppgiftsformulering»

Hög frekvens av releaser och ett stort antal mikrotjänster gör det svårt att förstå hur applikationen fungerar som helhet, både under testning och drift. Förändringar sker ständigt och att kontrollera dem utan bra övervakningsverktyg är mycket svårt. Ofta sitter utvecklarna som på nålar efter en nattrelease och väntar på att ingenting ska gå fel, även om alla tester var framgångsrika under testfasen.

Det finns en annan aspekt. Under testfasen kontrolleras programvarans funktionalitet: utförandet av applikationens grundläggande funktioner och avsaknad av fel. Kvalitetsbedömningar av prestanda saknas ofta, eller så beaktar de inte alla aspekter av applikationens arbete och integrationslagret. Vissa mätvärden kan överhuvudtaget inte kontrolleras. Som ett resultat får supportavdelningen veta om ett fel i produktionsmiljön först när riktiga användare börjar klaga. Vi vill minimera påverkan av dålig programvara på slutkunder.

Ett av sätten att lösa problemet är att implementera kvalitetskontrollprocesser för programvaran på olika steg i CI/CD-pipelinen och lägga till olika scenarier för systemåterställning vid nödsituationer. Kom ihåg att vi har DevOps. Företaget förväntar sig en så snabb leverans av nya produkter som möjligt. Därför måste alla våra tester och scenarier automatiseras.

Uppgiften delas upp i två delar:

  • kontroll av kvalitén på byggen under testfasen (automatisera processen för att fånga upp dåliga byggen);
  • kontroll av kvalitén på programvaran i produktionsmiljö (automatiska mekanismer för att upptäcka problem och möjliga scenarier för att självåterhämta sig).

Verktyg för övervakning och insamling av mätvärden

För att kunna genomföra de uppsatta målen krävs ett övervakningssystem som kan upptäcka problem och vidarebefordra dem till automatiseringssystem på olika steg i CI/CD-konceptet. Det är också positivt om detta system erbjuder användbara mätvärden för olika team: utveckling, test och drift. Och det skulle vara fantastiskt om det också gynnar affärsverksamheten.

För att samla in mätdata kan en kombination av olika system (Prometheus, ELK Stack, Zabbix etc.) användas, men enligt min åsikt passar APM-lösningar (Application Performance Monitoring) bäst för dessa uppgifter och kan verkligen förenkla ert arbete.

Inom ramen för mitt arbete i supporttjänsten började jag med ett liknande projekt, där jag använde APM-lösningen från Dynatrace. Nu, i min roll som integratör, känner jag marknaden för övervakningssystem ganska väl. Min subjektiva åsikt: Dynatrace är den mest lämpliga för att lösa sådana uppgifter.
Dynatraces lösning erbjuder en horisontell visualisering av varje användaroperation med djup detaljrikedom ända ner till kodnivå. Man kan följa hela kedjan av interaktioner mellan olika informationssystem: från nivåerna av frontend webb- och mobilapplikationer, backend applikationsservrar, integrationsbuss till det specifika anropet i databasen.

Continuous Monitoring – automatisering av kvalitetskontroller av programvara i CI/CD PipelineKälla. Automatisk konstruktion av alla beroenden mellan systemkomponenterna

Continuous Monitoring – automatisering av kvalitetskontroller av programvara i CI/CD PipelineKälla. Automatisk identifiering och konstruktion av serviceoperationens väg

Kom ihåg att vi också behöver integrera med olika automatiseringsverktyg. Här har lösningen ett praktiskt API som möjliggör att skicka och ta emot olika mätdata och händelser.

Låt oss gå vidare till en mer detaljerad genomgång av hur man löser de angivna uppgifterna med hjälp av Dynatrace-systemet.

Uppgift 1. Automatisering av kvalitetskontroll av byggnader i teststeget

Den första uppgiften är att upptäcka problem så tidigt som möjligt i applikationens leveranskedja. Endast "bra" kodbyggnader bör nå produktionsmiljön. För detta ska ni i er pipeline i teststeget inkludera ytterligare övervakare för att kontrollera kvaliteten på era tjänster.

Continuous Monitoring – automatisering av kvalitetskontroller av programvara i CI/CD Pipeline

Låt oss stega igenom hur detta kan realiseras och automatiseras:

Continuous Monitoring – automatisering av kvalitetskontroller av programvara i CI/CD PipelineKälla

Diagrammet visar flödet av automatiserade steg för kvalitetskontroll av programvara:

  1. implementering av övervakningssystemet (installation av agenter);
  2. identifiering av kvalitetsbedömningshändelser för er programvara (mätdata och tröskelvärden) och överföring till övervakningssystemet;
  3. generering av belastning och prestandatester;
  4. insamling av data om prestanda och tillgänglighet i övervakningssystemet;
  5. överföring av data om tester baserade på händelser för kvalitetsbedömning av programvara, från övervakningssystemet till CI/CD-systemet. Automatisk analys av byggnader.

Steg 1. Utveckling av övervakningssystemet

Först måste du installera agenter i din testmiljö. Dynatrace-lösningen har en trevlig funktion – den använder den universella agenten OneAgent, som installeras på OS-instansen (Windows, Linux, AIX), automatiskt upptäcker dina tjänster och börjar samla in övervakningsdata om dem. Du behöver inte konfigurera en agent för varje process separat. Samma förhållande gäller för moln- och containerplattformar. Installationsprocessen för agenter kan också automatiseras. Dynatrace passar perfekt in i konceptet 'infrastruktur som kod' (Infrastructure as code eller IaC): det finns redan färdiga skript och instruktioner för alla populära plattformar. Du integrerar agenten i konfigurationen av din tjänst, och vid dess distribution får du omedelbart en ny tjänst med en redan fungerande agent.

Steg 2. Bestämning av kvalitetsbedömningshändelser för din programvara

Nu måste du bestämma vilka tjänster och affärsoperationer som ska ingå. Det är viktigt att ta hänsyn till just de användaroperationer som är affärskritiska för din tjänst. Här rekommenderas att rådgöra med affärs- och systemanalytiker.

Därefter måste du bestämma vilka metrik du vill inkludera i kontrollen för varje nivå. Till exempel kan detta vara genomströmningstid (uppdelat på medelvärde, median, percentiler osv.), fel (logiska, tjänster, infrastruktur osv.) och olika infrastrukturmetriker (minnesheap, skräpnivå, trådantal osv.).

För att automatisera och underlätta användningen av DevOps-teamet introduceras konceptet 'Övervakning som kod'. Vad jag menar med detta är att utvecklare/testare kan skriva en enkel JSON-fil som definierar indikatorerna för programvarukvalitet.

Låt oss ta en titt på ett exempel på en sådan JSON-fil. Som en nyckel/värde-par används objekt från Dynatrace API (API-beskrivning kan ses här Dynatrace API).

{
    "timeseries": [
    {
      "timeseriesId": "service.ResponseTime",
      "aggregation": "avg",
      "tags": "Frontend",
      "severe": 250000,
      "warning": 1000000
    },
    {
      "timeseriesId": "service.ResponseTime ",
      "aggregation": "avg",
      "tags": "Backend",
      "severe": 4000000,
      "warning": 8000000
    },
    {
      "timeseriesId": "docker.Container.Cpu",
      "aggregation": "avg",
      "severe": 50,
      "warning": 70
    }
  ]
}

Filen är en array av definitioner av tidsserier (timeseries):

  • timeseriesId – den mätta metrik, som till exempel svarstid, antalet fel, använd minne osv.;  
  • aggregation – nivån för aggregering av metrik, i vårt fall avg, men du kan använda vilken som helst som du behöver (avg, min, max, sum, count, percentile);
  • tags – taggen för objektet i övervakningssystemet, eller så kan du ange ett specifikt objekt-ID;
  • severe och warning – dessa indikatorer styr tröskelvärdena för våra metrik, om testvärdet överstiger det allvarliga tröskelvärdet, så markeras vår körning som misslyckad.

Följande bild visar ett exempel på användning av sådana trösklar.

Continuous Monitoring – automatisering av kvalitetskontroller av programvara i CI/CD PipelineKälla

Steg 3. Generering av belastning

Efter att vi har fastställt kvalitetsnivåerna för vår tjänst, behöver vi generera en testbelastning. Du kan använda vilket verktyg för testning som helst som passar dig, till exempel Jmeter, Selenium, Neotys, Gatling osv.

Övervakningssystemet Dynatrace möjliggör insamling av olika metadata från dina tester och identifierar vilket test som hör till vilken releasecykel och vilken tjänst. Det rekommenderas att lägga till ytterligare headers i HTTP-begärningarna för testerna.

Följande bild visar ett exempel där vi med hjälp av den ytterligare headern X-Dynatrace-Test markerar att detta test hör till testningen av operationen att lägga en vara i varukorgen.

Continuous Monitoring – automatisering av kvalitetskontroller av programvara i CI/CD PipelineKälla

Vid varje belastningstest skickar du ytterligare kontextinformation till Dynatrace via API-händelsen från CI/CD-servern. På så sätt kan systemet särskilja olika tester.

Continuous Monitoring – automatisering av kvalitetskontroller av programvara i CI/CD PipelineKälla. Händelse i övervakningssystemet om starten av belastningstestning

Steg 4-5. Insamling av prestandadata och överföring av data till CI/CD-systemet

Tillsammans med den genererade testen skickas en händelse till övervakningssystemet om behovet av att samla in data om kvalitetsindikatorerna. Dessutom anges vår JSON-fil, i vilken nyckelmetrik har definierats.

Continuous Monitoring – automatisering av kvalitetskontroller av programvara i CI/CD PipelineEtt händelse om behovet av att verifiera programvarukvalitet som genereras på CI/CD-servern för att skickas till övervakningssystemet

I vårt exempel kallas händelsen för kvalitetsverifiering perfSigDynatraceReport (Performance_Signature) – är färdig plugin för integration med Jenkins, som utvecklades av teamet från T-Systems Multimedia Solutions. Varje händelse om start av verifiering innehåller information om tjänsten, byggnumret och testtiden. Plugins samlar in prestandavärden under byggprocessen, utvärderar dem och jämför resultaten med tidigare byggen och icke-funktionella krav.

Continuous Monitoring – automatisering av kvalitetskontroller av programvara i CI/CD PipelineHändelsen i övervakningssystemet om start av kvalitetsverifiering av bygget. Källa

När testet är avslutat skickas alla kvalitetsvärden tillbaka till det kontinuerliga integrationssystemet, till exempel Jenkins, som genererar en rapport baserad på resultaten.

Continuous Monitoring – automatisering av kvalitetskontroller av programvara i CI/CD PipelineStatistikresultat per bygge på CI/CD-servern. Källa

För varje enskilt bygge ser vi statistiken för varje angiven mätvärde under hela testets utförande. Vi ser också om det förekommit överträdelser av vissa tröskelvärden (varning och svåra trösklar). Baserat på sammanlagda indikatorer märks hela bygget som stabilt, instabilt eller misslyckat. För bekvämlighet kan du också lägga till jämförelseindikatorer för det aktuella bygget med det föregående i rapporten.

Continuous Monitoring – automatisering av kvalitetskontroller av programvara i CI/CD PipelineVisa detaljerad statistik över byggen på CI/CD-servern. Källa

Detaljerad jämförelse av två byggen

Vid behov kan du gå till Dynatrace-gränssnittet och där mer detaljerat granska statistiken för varje av dina byggen och jämföra dem med varandra.

Continuous Monitoring – automatisering av kvalitetskontroller av programvara i CI/CD PipelineJämförelse av statistik för byggen i Dynatrace. Källa
 
Slutsatser

Resultatet är en tjänst "övervakning som en tjänst", automatiserad i den kontinuerliga integrationskanalen. Utvecklaren eller testaren behöver bara ange en lista med mätvärden i en JSON-fil, därefter sker allt automatiskt. Vi får transparent kontroll över kvaliteten på releaser: alla aviseringar om prestanda, resursförbrukning eller arkitektoniska regressioner.

Uppgift 2. Automatisering av programvarukvalitetskontroll i produktionsmiljö

Så vi har löst problemet med hur man automatiserar övervakningsprocessen under testning i pipeline. På så sätt minimerar vi andelen kvalitetsmässigt dåliga byggen som når produktionsmiljön.

Men vad ska man göra om dålig programvara ändå har nått produktion, eller om något helt enkelt har slutat fungera? För vår utopi ville vi att det skulle finnas mekanismer för automatisk upptäckte av problem och, om möjligt, att systemet självt skulle återställa sin funktionalitet, åtminstone på natten.

För detta behöver vi, i likhet med föregående avsnitt, förutse automatiska kvalitetskontroller av programvaran i produktionsmiljö och lägga in scenarier för systemets självåterställning.

Continuous Monitoring – automatisering av kvalitetskontroller av programvara i CI/CD Pipeline
Självkorrektion som kod

Flera företag har redan en samlad kunskapsbas om olika typer av vanliga problem och en lista över åtgärder för att åtgärda dem, till exempel att starta om processer, rensa resurser, återställa versioner, återställa felaktiga ändringar i konfigurationen, öka eller minska antalet komponenter i klustret, växla mellan blå eller grön miljö, och mer.

Trots att dessa användningsområden har varit kända i många år av många team, har få funderat på och investerat i deras automatisering.

Om man tänker efter, så finns det inget särskilt komplicerat i att implementera processer för självåterställning av applikationens funktionalitet; det handlar bara om att representera de kända arbetsflödena från dina administratörer i form av kodscenarier (konceptet "självkorrektion som kod"), som du har förberett i förväg för varje specifik situation. Scenarier för automatisk korrigering bör syfta till att åtgärda grundorsaken till problemet. Du bestämmer själv vilka reaktionsåtgärder som ska vidtas vid incidenter.

Som en trigger för att starta scenariet kan vilken som helst metrisk från ditt övervakningssystem användas, så länge dessa metrik exakt identifierar att något är fel, eftersom man inte vill få falska larm i produktionsmiljö.

Du kan använda vilket system eller kombination av system som helst: Prometheus, ELK Stack, Zabbix och så vidare. Men jag kommer att ge några exempel baserade på APM-lösningar (som återigen kommer att vara Dynatrace), vilket också kommer att underlätta ditt liv.

För det första finns allt som rör funktionalitet sett ur applikationens perspektiv. Lösningen erbjuder hundratals metrik på olika nivåer som du kan använda som triggers:

  • användarnivå (webbläsare, mobilappar, IoT-enheter, användarbeteende, konvertering etc.);
  • tjänst- och driftsnivå (prestanda, tillgänglighet, fel etc.);
  • applikationsinfrastrukturnivå (OS-metrik för värd, JMX, MQ, webbserver etc.);
  • plattformsnivåer (virtualisering, moln, behållare etc.).

Continuous Monitoring – automatisering av kvalitetskontroller av programvara i CI/CD PipelineÖvervakningsnivåer i Dynatrace. Källa

För det andra, som jag nämnde tidigare, har Dynatrace ett öppet API som gör det mycket enkelt att integrera med olika tredjepartssystem. Till exempel att skicka en notifikation till automatiseringssystemet vid överskridande av kontrollparametrar.

Nedan följer ett exempel på interaktion med Ansible.

Continuous Monitoring – automatisering av kvalitetskontroller av programvara i CI/CD PipelineKälla

Jag kommer nu att ge några exempel på vilka automatiseringar som kan göras. Dessa är bara en del av fallen, och listan i din miljö kan begränsas av endast din fantasi och de verktyg du använder för övervakning.

1. Dålig deploy – återställning av version

Även om vi kontrollerar allt mycket noggrant i testmiljön finns det alltid en chans att den nya utgåvan kan döda din applikation i produktionsmiljön. Den mänskliga faktorn kan inte negligeras.

I nästa bild ser vi att det sker ett plötsligt hopp i operationernas genomförandetid på tjänsten. Början av detta hopp sammanfaller med tiden för deployment på applikationen. All denna information överförs som händelser till automatiseringssystemet. Om tjänstens funktionalitet inte normaliseras efter den angivna tiden, så anropas automatiskt ett script som återställer versionen till den gamla.

Continuous Monitoring – automatisering av kvalitetskontroller av programvara i CI/CD PipelinePrestandadegradering av operationer efter deployment. Källa

2. Resursbelastning på 100% – lägg till en nod i routingen

I nästa exempel identifierar övervakningssystemet att en av komponenterna visar 100% CPU-belastning.

Continuous Monitoring – automatisering av kvalitetskontroller av programvara i CI/CD PipelineCPU-belastning 100%
 
Det finns flera olika scenarier som kan följas för detta evenemang. Till exempel kontrollerar övervakningssystemet om resursbristen är relaterad till ökad belastning på tjänsten. Om ja, körs ett script som automatiskt lägger till en nod i routingen, vilket återställer systemets funktionalitet som helhet.

Continuous Monitoring – automatisering av kvalitetskontroller av programvara i CI/CD PipelineSkalning efter incidenten

3. Ingen lagringsutrymme på hårddisken – rensa disken

Jag tror att många redan har automatiserat dessa processer. Med hjälp av APM kan man också övervaka det lediga utrymmet på lagersystemet. Vid brist på utrymme eller långsam diskarbete kan vi köra ett skript för att rensa eller lägga till mer utrymme.

Continuous Monitoring – automatisering av kvalitetskontroller av programvara i CI/CD Pipeline
Continuous Monitoring – automatisering av kvalitetskontroller av programvara i CI/CD PipelineDiskanvändning 100%
 
4. Låg användaraktivitet eller låg konvertering – växling mellan blå och grön gren

Jag stöter ofta på kunder som använder två konturer (blue-green deploy) för applikationer i produktionsmiljö. Detta gör det möjligt att snabbt växla mellan grenarna vid leverans av nya versioner. Ofta kan det inträffa drastiska förändringar efter en deployment som inte omedelbart märks. Under tiden kan degradering av prestanda och tillgänglighet vara oobserverad. För att snabbt kunna reagera på sådana förändringar är det bättre att använda olika metriker som reflekterar användarbeteende (antal sessioner och användaråtgärder, konvertering, bounce rate). På nästa bild visas ett exempel där växling mellan programvarugrenar sker vid en minskning av konverteringen.

Continuous Monitoring – automatisering av kvalitetskontroller av programvara i CI/CD PipelineEn minskning av konverteringen efter växling mellan programvarugrenar. Källa

Automatiska mekanismer för att identifiera problem

I slutet ger jag ytterligare ett exempel på vad jag gillar mest med Dynatrace.

I delen av min berättelse om automatisering av kvalitetskontroll av byggen i testmiljö definierade vi alla tröskelvärden manuellt. För testmiljö är detta normalt, testaren definierar själv indikatorer före varje kontroll beroende på belastning. I produktionsmiljö är det önskvärt att problem upptäcks automatiskt med beaktande av olika baslinjemekanismer.

Dynatrace har intressanta inbyggda verktyg för artificiell intelligens som, baserat på mekanismer för att identifiera anomalier (baselining) och bygga en interaktionskarta mellan alla komponenter, jämför och korrelerar händelser, identifierar anomalier i din tjänsts arbete och ger detaljerad information om varje problem och rotorsak.

Genom automatisk analys av beroenden mellan komponenter identifierar Dynatrace inte bara om den problematiska tjänsten är den primära orsaken, utan också dess beroende av andra tjänster. I exemplet nedan övervakar och utvärderar Dynatrace automatiskt prestandan hos varje tjänst under transaktioner och identifierar Golang-tjänsten som huvudorsaken.

Continuous Monitoring – automatisering av kvalitetskontroller av programvara i CI/CD PipelineExempel på identifiering av rotorsaken till ett fel. Källa

I bilden nedan visas processen för att övervaka problem med din applikation från början av incidenten.

Continuous Monitoring – automatisering av kvalitetskontroller av programvara i CI/CD PipelineVisualisering av det uppkomna problemet med visning av alla komponenter och händelser kring dem

Övervakningssystemet har samlat en komplett tidslinje över händelser för det uppkomna problemet. I fönstret under tidslinjen ser vi alla nyckelhändelser för varje komponent. Baserat på dessa händelser kan du ställa in rutiner för automatisk reparation i form av kodscenarier.

Jag rekommenderar även att integrera övervakningssystemet med Service Desk eller buggrapporteringssystem. Vid problem får utvecklarna snabbt all information för analys på kodenivå i produktionsmiljön.

Slutsats

Resultatet blev en CI/CD-pipeline med inbyggda automatiserade kvalitetskontroller i pipeline. Vi minimerar antalet dåliga versioner, ökar systemets tillförlitlighet som helhet, och om systemets funktionalitet ändå påverkas, aktiverar vi mekanismer för att återställa den.

Continuous Monitoring – automatisering av kvalitetskontroller av programvara i CI/CD Pipeline
Att automatisera övervakningen av mjukvarukvalitet är definitivt värt ansträngningen, det är inte alltid en snabb process, men med tiden ger det sina resultat. Jag rekommenderar att efter att ha löst en ny incident i produktionsmiljön, direkt tänka på vilka övervakningar som kan läggas till för tester i testmiljön för att förhindra att en dålig version går till produktion, samt att utarbeta ett skript för automatisk reparation av dessa problem.

Jag hoppas att mina exempel kommer att hjälpa dig i dina strävanden. Jag skulle också vara intresserad av att se dina exempel på använda metrik för att implementera självåterställning av systemens funktionalitet.

Continuous Monitoring – automatisering av kvalitetskontroller av programvara i CI/CD PipelineKälla

Källa: habr.com

Köp pålitlig webbhotell med DDoS-skydd, VPS VDS-servrar 🔥 Köp pålitlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster