
Industriell utveckling av mjukvarusystem krĂ€ver stor uppmĂ€rksamhet pĂ„ slutproduktens driftssĂ€kerhet, liksom snabb respons pĂ„ fel och avbrott om de skulle intrĂ€ffa. Ăvervakning hjĂ€lper naturligtvis till att reagera pĂ„ fel och avbrott mer effektivt och snabbt, men det Ă€r inte tillrĂ€ckligt. För det första Ă€r det mycket svĂ„rt att hĂ„lla koll pĂ„ ett stort antal servrar â det krĂ€vs en stor mĂ€ngd mĂ€nniskor. För det andra mĂ„ste man ha en god förstĂ„else för hur applikationen Ă€r strukturerad för att kunna förutsĂ€ga dess tillstĂ„nd. Följaktligen behövs mĂ„nga personer som har god kunskap om de system vi utvecklar, deras parametrar och egenskaper. Anta att vi skulle kunna hitta tillrĂ€ckligt mĂ„nga personer som vill arbeta med detta, sĂ„ krĂ€vs det Ă€ndĂ„ mycket tid för att utbilda dem.
Vad ska man göra? HÀr kommer artificiell intelligens till vÄr hjÀlp. Artikeln handlar om (predictive maintenance). Denna metod blir alltmer populÀr. Det har skrivits ett stort antal artiklar, inklusive pÄ Habré. Stora företag anvÀnder den hÀr metoden för att upprÀtthÄlla sina servrars funktionalitet. Efter att ha studerat mÄnga artiklar beslutade vi att försöka tillÀmpa denna metod. Vad blev resultatet?
Introduktion
Det utvecklade mjukvarusystemet sÀtts förr eller senare i drift. Det Àr viktigt för anvÀndaren att systemet fungerar utan avbrott. Om en oförutsedd situation trots allt intrÀffar, bör den lösas med minsta möjliga förseningar.
För att underlÀtta den tekniska supporten av mjukvarusystemet, sÀrskilt om det finns mÄnga servrar, brukar man anvÀnda övervakningsprogram som samlar in mÀtvÀrden frÄn det fungerande mjukvarusystemet, ger möjlighet att diagnostisera dess tillstÄnd och hjÀlper till att faststÀlla vad som orsakade felet. Denna process kallas övervakning av mjukvarusystemet.

Figur 1. GrÀnssnitt för övervakning grafana
Metriker Àr olika indikatorer frÄn det programvarusystem, den körmiljö eller den fysiska berÀkningsmaskin dÀr systemet körs, med en tidsstÀmpel för den tidpunkt dÄ mÀtningarna erhölls. I statisk analys kallas mÀtdata för tidsserier. För att övervaka tillstÄndet hos programvarusystemet visas mÀtvÀrden i form av grafer: tid pÄ X-axeln och vÀrden pÄ Y-axeln (figur 1). Ett fungerande programvarusystem kan generera flera tusen mÀtvÀrden (frÄn varje nod). Dessa bildar ett mÀtutrymme (flerdimensionella tidsserier).
Eftersom komplexa programvarusystem samlar stora mÀngder mÀtvÀrden blir manuell övervakning en utmanande uppgift. För att minska mÀngden data som administratören mÄste analysera innehÄller övervakningsverktyg funktioner för automatisk identifiering av potentiella problem. Till exempel kan en trigger stÀllas in för att aktiveras nÀr det fria diskutrymmet minskar under en angiven grÀns. Serverstopp eller kritisk försÀmring av servicenivÄ kan ocksÄ automatiskt diagnostiseras. I praktiken hanterar övervakningsverktyg relativt bra att upptÀcka redan intrÀffade fel eller identifiera enkla symptom pÄ framtida fel, men övergripande förblir förutsÀgelsen av möjliga haverier en svÄr nöt att knÀcka. FörutsÀgelse genom manuell analys av mÀtningar krÀver kvalificerade specialister och Àr oftast ineffektiv. MÄnga potentiella haverier kan förbli oupptÀckta.
PÄ senare tid har prediktivt underhÄll av programvarusystem blivit alltmer populÀrt bland stora IT-företag som utvecklar mjukvara. KÀrnan i denna metod Àr att identifiera problem som leder till systemdegradering i ett tidigt skede, före haveriet, med hjÀlp av artificiell intelligens. Denna metod utesluter inte helt manuell övervakning av systemet. Den Àr ett komplement till övervakningsprocessen i sin helhet.
Huvudverktyget för att genomföra prediktivt underhÄll Àr uppgiften att hitta avvikelser i tidsserier, eftersom vid uppkomsten av en avvikelse i datan Àr sannolikheten stor att om en tid ett fel eller avbrott kommer att intrÀffa. En avvikelse Àr en viss avvikelse i programvarusystemets indikatorer, sÄsom upptÀckten av en nedgÄng i hastigheten för ett visst typ av förfrÄgan eller en minskning av det genomsnittliga antalet hanterade förfrÄgningar vid en konstant nivÄ av kundsessioner.
Uppgiften att upptÀcka avvikelser i programvarusystem har sin egen specifik. I teorin krÀvs det att varje programvarusystem utvecklar eller förbÀttrar sina metoder, eftersom upptÀckten av avvikelser Àr starkt beroende av de data i vilka det utförs, och dessa data varierar mycket beroende pÄ vilka verktyg som anvÀnds för att implementera systemet, Ànda ner till vilken typ av berÀkningsmaskin det körs pÄ.
Metoder för att upptÀcka avvikelser vid prognostisering av fel i programvarusystem
Först och frÀmst bör det nÀmnas att idéen om prognostisering av fel inspirerades av artikeln . För att kontrollera effektiviteten av metoden för automatisk upptÀckte avvikelser valdes programvarusystemet «Web-Konsolidering», vilket Àr ett av projekten hos NPO «Krista». För detta system genomfördes tidigare manuell övervakning av de erhÄllna metrikarna. Eftersom systemet Àr ganska komplext samlas det in ett stort antal metrikar: JVM-indikatorer (belastning av skrÀpmÀngd), indikatorer för det operativsystem som kör koden (virtuellt minne, % CPU-belastning), nÀtverksindikatorer (nÀtverksbelastning), servrarna (CPU-belastning, minnesbelastning), wildfly-metrik och egna metrikar för applikationen pÄ alla kritiska delsystem.
Alla metrikar samlas in frÄn systemet med hjÀlp av graphite. Inledningsvis anvÀndes databasen whisper som en standardlösning för grafana, men med tillvÀxten av kundbasen kunde graphite inte lÀngre hantera detta, vilket utmattade diskens kapacitet i datacentret. Efter detta fattades beslutet att söka en mer effektiv lösning. Valet föll pÄ , vilket gjorde det möjligt att kraftigt minska belastningen pÄ diskens subsystem och minska det upptagna diskutrymmet fem till sex gÄnger. Nedan visas schemat för mekanismen för att samla in metrikar med hjÀlp av graphite+clickhouse (figur 2).

Figur 2. Schema för insamling av metrikar
Diagrammet Ă€r hĂ€mtat frĂ„n intern dokumentation. Den visar datakommunikationen mellan grafana (anvĂ€ndargrĂ€nssnittet för övervakning som vi anvĂ€nder) och graphite. MĂ€tningarna frĂ„n applikationen görs av en separat programvara â . Den lagrar dem i graphite.
Systemet "Web-Konsolidering" har ett antal sÀrdrag som skapar problem för felprognoser:
- trender förÀndras ofta. För detta mjukvarusystem kommer olika versioner ut. Varje version medför förÀndringar i systemets programdel. DÀrmed pÄverkar utvecklarna direkt mÀtningarna i systemet och kan orsaka trendförÀndringar;
- implementeringsspecifika sÀrdrag samt anvÀndningsmÄl för detta system skapar ofta anomalier utan föregÄende nedgradering;
- andelen anomalier i förhÄllande till hela datamÀngden Àr lÄg (< 5%);
- det kan uppstÄ avbrott i mottagningen av indikatorer frÄn systemet. Under korta tidsperioder kan övervakningssystemet misslyckas med att fÄ mÀtningar, till exempel om servern Àr överbelastad. För att trÀna neuronnÀtet Àr detta kritiskt. Det finns ett behov av att fylla luckorna syntetiskt;
- Anomalifall Àr ofta relevanta endast för ett specifikt nummer/mÄnad/tid (sÀsongsbetonat). Detta system har tydliga riktlinjer för hur anvÀndarna ska anvÀnda det. DÀrför Àr mÀtningarna endast aktuella för en specifik tid. Systemet kan anvÀndas intermittens, endast under vissa mÄnader, beroende pÄ Äret. Det uppstÄr situationer dÀr samma beteende hos mÀtningarna i ett fall kan leda till ett fel i mjukvarusystemet, medan det i ett annat inte gör det.
Först analyserades metoder för att upptÀcka anomalier i övervakningsdata frÄn programvarusystem. I artiklar om detta Àmne föreslÄs ofta att anvÀnda neuronnÀt vid lÄga procentandelar av anomalier i förhÄllande till den övriga datamÀngden.
Den grundlÀggande logiken för att hitta anomalier med hjÀlp av neuronnÀt presenteras i figur 3:

Figur 3. Sökning av anomalier med hjÀlp av neuronnÀt
I resultatet av prognosen eller ÄterstÀllningen av det aktuella flödet av mÀtvÀrden berÀknas avvikelsen frÄn det erhÄllna frÄn det fungerande programvarusystemet. Vid stor skillnad mellan de erhÄllna mÀtvÀrdena frÄn programvarusystemet och neurala nÀtverket kan ett uttalande göras om anomaliteten hos det aktuella datasegmentet. Följande problem uppstÄr för anvÀndningen av neurala nÀtverk:
- för korrekt funktion i strömmande lÀge mÄste data för att trÀna modeller för neurala nÀtverk bara innehÄlla "normala" data;
- det Àr nödvÀndigt att ha en aktuell modell för korrekt detektion. FörÀndring av trender och sÀsongsbetonade faktorer i mÀtningar kan orsaka ett stort antal falska positiva resultat för modellen. För att uppdatera den mÄste man tydligt definiera tidpunkten nÀr modellen Àr förÄldrad. Om modellen uppdateras för sent eller för tidigt Àr det troligt att mÄnga falska positiva resultat följer.
Man fÄr inte glömma att söka och förhindra frekventa falska positiva resultat. Det antas att de oftast uppstÄr i icke-standardiserade situationer. Men de kan ocksÄ vara en följd av ett neuralt nÀtverks fel pÄ grund av otillrÀcklig trÀning. Det Àr nödvÀndigt att minimera antalet falska positiva resultat frÄn modellen. Annars kommer falska prognoser att ta mycket tid frÄn administratören som Àr avsedd för systemövervakning. SÄ smÄningom kommer det att leda till att administratören helt enkelt slutar reagera pÄ det "paranoida" övervakningssystemet.
Rekurrent neurala nÀtverk
För att upptÀcka anomalier i tidsserier kan man anvÀnda med LSTM-minne. Problemet Àr endast att det kan tillÀmpas endast pÄ förutsÀgbara tidsserier. I vÄrt fall Àr inte alla mÀtningar förutsÀgbara. Försöket att tillÀmpa RNN LSTM pÄ en tidsserie presenteras i bild 4.

Bild 4. Exempel pÄ hur ett rekurrent neuralt nÀtverk med LSTM-minnesceller fungerar
Som det framgÄr av figur 4 lyckades RNN LSTM hantera anomalidetektering under denna tidsperiod. DÀr resultatet har en hög prognosfel (mean error) intrÀffade faktiskt en avvikelse i mÀtvÀrdena. Endast att anvÀnda en RNN LSTM kommer tydligt att vara otillrÀckligt eftersom den Àr tillÀmpbar pÄ ett begrÀnsat antal mÀtvÀrden. Den kan anvÀndas som en hjÀlpmekanism för att hitta avvikelser.
Autokodare för felprognoser
â Ă€r i grunden ett artificiellt neuronnĂ€t. Inmatningslagret Ă€r encoder, utmatningslagret Ă€r decoder. Nackdelen med alla neuronnĂ€t av denna typ Ă€r att de dĂ„ligt lokaliserar avvikelser. En arkitektur för synkront autokodare valdes.

Figur 5. Exempel pÄ autokodare i arbete
Autokodarna trÀnas pÄ normala data och hittar sedan nÄgot avvikande i den data som matas in i modellen. Precis vad som behövs för denna uppgift. Det ÄterstÄr bara att vÀlja vilken av autokodarna som Àr lÀmplig för denna uppgift. Den mest arkitektoniskt enkla formen av autokodare Àr ett direkt, icke-cyklist neuronnÀt som liknar (multilayer perceptron, MLP), med ett inmatningslager, ett utmatningslager och ett eller flera dolda lager som förbinder dem.
Men skillnaderna mellan autokodare och MLP ligger i att utgÄngsnivÄn i autokodaren har samma antal noder som ingÄngen, och att istÀllet för att trÀna för att förutsÀga ett mÄlvÀrde Y, som ges av ingÄngen X, trÀnar autokodaren för att rekonstruera sina egna X. DÀrför Àr autokodare oövervakade inlÀrningsmodeller.
Autokodarens uppgift Àr att hitta tidsindex r0 ⊠rn som motsvarar avvikande element i ingÄngsvektorn X. Denna effekt uppnÄs genom att söka efter kvadratisk fel.

Figur 6. Synkront autokodare
För autokodaren valdes en . Dess fördelar: möjligheten att anvÀnda strömmande bearbetning och ett relativt mindre antal parametrar i neuronnÀtet jÀmfört med andra arkitekturer.
Mekanismen för att minimera falska larm
Eftersom olika oregelbundna situationer kan uppstÄ och det ocksÄ kan finnas en brist pÄ utbildning av neuralnÀtverket, har det beslutats att utveckla en mekanism för att minimera falska larm för den utvecklade modellen för anomalidetektion. Denna mekanism baseras pÄ en mall databas som klassificeras av administratören.
(DTW-algoritm, frÄn engelska dynamic time warping) gör det möjligt att hitta den optimala överenskommelsen mellan tidsserier. Det tillÀmpades först inom taligenkÀnning: anvÀnts för att bestÀmma hur tvÄ talade signaler representerar samma ursprungliga uttalade fras. Senare har det hittat tillÀmpningar Àven inom andra omrÄden.
Huvudprincipen för att minimera falska larm Àr insamlingen av en databas av referenser genom en operatör som klassificerar misstÀnkta fall upptÀckta av neurala nÀtverk. DÀrefter jÀmförs den klassificerade referensen med det fall som systemet upptÀckte, och det dras slutsatser om fallet tillhör falskt larm eller en verklig störning. Algoritmen DTW anvÀnds specifikt för att jÀmföra tvÄ tidsserier. Huvudverktyget för minimisering Àr dock fortfarande klassifikationen. Det antas att efter att ha samlat in ett stort antal referensfall kommer systemet att frÄga operatören mindre pÄ grund av likheten hos de flesta fall och uppkomsten av liknande hÀndelser.
Som ett resultat av de ovan beskrivna metoderna för neurala nÀtverk har ett experimentellt program skapats för att förutsÀga systemfel i "Web-Konsolidering". Syftet med detta program var att anvÀnda det existerande arkivet av övervakningsdata och information om redan intrÀffade fel för att utvÀrdera kompetensen hos denna metod för vÄra programvarusystem. Programschema visas nedan, i figur 7.

Figur 7. Schema för förutsÀgelse av fel baserat pÄ analys av metrikrymden
I schemat kan tvÄ huvudsakliga block identifieras: sökandet efter anomala tidssegment i övervakningsdata (metrik) och mekanismen för att minimera falska larm. Obs: För experimentella syften erhÄlls data via JDBC-anslutning frÄn databasen dÀr de lagras graphite.
Nedan visas grÀnssnittet för det system för övervakning som utvecklades (figur 8).

Figur 8. GrÀnssnitt för det experimentella övervakningssystemet
PÄ grÀnssnittet visas procentandelen av anomaliteter för de mottagna mÀtvÀrdena. I vÄrt fall simulerar vi mottagningen. Vi har redan all data frÄn flera veckor och laddar dem gradvis för att kontrollera fallet med en anomali som leder till ett fel. I den nedre statusfÀltet visas den totala procentandelen av anomaliteter vid denna tidpunkt, vilket bestÀms av en autoencoder. För de förutsagda mÀtvÀrdena visas ocksÄ en separat procentandel, som berÀknas av en RNN LSTM.
Exempel pÄ anomaliupptÀckning baserat pÄ CPU-prestanda med hjÀlp av RNN LSTM-nÀtverket (figur 9).

Figur 9. UpptÀckning med RNN LSTM
Ett ganska enkelt fall, i sjÀlva verket en vanlig avvikelse, som dock ledde till ett systemfel, har framgÄngsrikt berÀknats med hjÀlp av RNN LSTM. AnomalinivÄn under denna tidsperiod Àr 85 - 95 %, allt över 80 % (tröskelvÀrdet definierat experimentellt) anses vara en anomali.
Exempel pÄ anomaliupptÀckning nÀr systemet inte kunde starta efter en uppdatering. Denna situation detekteras av autoencodern (figur 10).

Figur 10. Exempel pÄ upptÀckning med autoencodern
Som syns i bilden har PermGen fastnat pÄ en nivÄ. Autoencodern ansÄg detta vara mÀrkligt, eftersom den tidigare inte hade sett nÄgot liknande. HÀr hÄlls anomalitetsnivÄn pÄ 100 % tills systemet ÄtergÄr till ett fungerande tillstÄnd. Anomaliteter visas över alla mÀtvÀrden. Som nÀmnts tidigare kan autoencodern inte lokalisera anomalier. Operatören Àr avsedd att utföra denna funktion i sÄdana situationer.
Slutsats
PC "Web-Konsolidering" har utvecklats under flera Är. Systemet Àr relativt stabilt och antalet registrerade incidenter Àr lÄgt. Trots detta har det varit möjligt att upptÀcka anomalier som leder till ett fel 5 - 10 minuter innan felet intrÀffar. I vissa fall skulle tidig varning om fel ha hjÀlpt till att spara den planerade tid som avsatts för "reparationsarbete".
UtifrÄn de experiment som har utförts Àr det fortfarande för tidigt att dra definitiva slutsatser. För nÀrvarande Àr resultaten motstridiga. à ena sidan Àr det tydligt att algoritmer baserade pÄ neurala nÀtverk kan hitta "anvÀndbara" anomalier. à andra sidan finns det en stor andel falska positiva och inte alla anomalier som en kvalificerad specialist identifierar kan upptÀckas av neuronnÀtet. En nackdel Àr ocksÄ att neuronnÀtet för nÀrvarande krÀver lÀrande med en lÀrare för att fungera normalt.
För att vidareutveckla systemet för att förutsÀga fel och fÄ det till ett tillfredsstÀllande tillstÄnd kan flera vÀgar övervÀgas. En vÀg Àr att göra en mer detaljerad analys av fallen med anomalier som leder till fel, genom att komplettera listan över viktiga mÀtvÀrden som pÄverkar systemets tillstÄnd och filtrera bort de som inte gör det. Om man gÄr i denna riktning kan man Àven försöka specialisera algoritmerna för vÄra specifika fall med anomalier som leder till fel. Det finns ocksÄ en annan vÀg. Det handlar om att förbÀttra arkitekturerna för neurala nÀtverk och dÀrigenom öka detekteringsnoggrannheten samtidigt som trÀningstiden minskar.
Jag vill uttrycka min tacksamhet till kollegorna som hjÀlpt mig med att skriva och hÄlla denna artikel aktuell: och Sergey Finogenov.
KĂ€lla: habr.com
