
Tööstuslike tarkvara arendamine nĂ”uab suurt tĂ€helepanu lĂ”pp-produkti töökindlusele ning kiiret reageerimist, kui tĂ”rkeid ja ebaĂ”nnestumisi ikka juhtub. JĂ€lgimine aitab loomulikult tĂ”rgete ja ebaĂ”nnestumistele efektiivsemalt ja kiiremini reageerida, kuid see ei ole piisav. Esiteks on vĂ€ga keeruline hallata suurt hulka servereid â selleks on vaja palju inimesi. Teiseks tuleb hĂ€sti mĂ”ista, kuidas rakendus töötab, et prognoosida selle seisundit. Seega on vaja palju inimesi, kes mĂ”istavad pĂ”hjalikult meie arendatavaid sĂŒsteeme, nende nĂ€itajaid ja eripĂ€rasid. Eeldame, et isegi kui leida piisavalt inimesi, kes on valmis sellega tegelema, kulub nende koolitamiseks samuti mĂ€rkimisvÀÀrselt aega.
Mida siis teha? Siin tuleb meile appi tehisintellekt. Artiklis on jutt (predictive maintenance). See lÀhenemine on aktiivselt populaarsust kogumas. On kirjutatud mitmeid artikleid, sealhulgas ka Habrile. Suured ettevÔtted kasutavad seda lÀhenemist juba tÀie hooga oma serverite töökindluse tagamiseks. PÀrast paljude artiklite uurimist otsustasime proovida seda lÀhenemist rakendada. Mis sellest vÀlja tuli?
Sissejuhatus
Arendatud tarkvarasĂŒsteem jĂ”uab varem vĂ”i hiljem kasutusse. Kasutajale on oluline, et sĂŒsteem töötaks tĂ”rgeteta. Kui siiski juhtub ÀÀrmuslik olukord, peab see olema kĂ”rvaldatud minimaalsete viivitustega.
Tehnilise toe lihtsustamiseks tarkvarasĂŒsteemis, eriti kui servereid on palju, kasutatakse tavaliselt jĂ€lgimisprogramme, mis koguvad andmeid töölt olevast tarkvarasĂŒsteemist, vĂ”imaldavad diagnoosida selle seisundit ja aitavad mÀÀrata, mis tĂ”rkeid pĂ”hjustas. Seda protsessi nimetatakse tarkvarasĂŒsteemi jĂ€lgimiseks.

Joonis 1. JĂ€lgimise liides Grafanas
MÔÔdikud on erinevad nĂ€itajad tarkvarasĂŒsteemi, selle töötamise keskkonna vĂ”i fĂŒĂŒsilise arvutimasina kohta, mille all sĂŒsteem on, koos ajatempli hetkega, mil mÔÔdikud saadi. Statistilises analĂŒĂŒsis nimetatakse mÔÔdikute andmeid ajas tehtud ridadeks. TarkvarasĂŒsteemi oleku jĂ€lgimiseks kuvatakse mÔÔdikud graafikutena: X- telg â aeg ja Y-telg â vÀÀrtused (joonis 1). Töötavas tarkvarasĂŒsteemis saab vĂ”tta mitut tuhat mÔÔdikut (igal sĂ”lmel). Need moodustavad mÔÔdikute ruumi (mitmemÔÔtmelised ajas tehtud read).
Kuna keeruliste tarkvarasĂŒsteemide korral kogutakse suuri mÔÔdikute koguseid, muutub kĂ€sitsi jĂ€lgimine keeruliseks ĂŒlesandeks. Juhtimise andmete hulga vĂ€hendamiseks sisaldavad jĂ€lgimisvahendid automatisatsiooni tööriistu, mis aitavad tuvastada vĂ”imalikke probleeme. NĂ€iteks saab seadistada pÀÀstiku, mis aktiveerub, kui vaba kĂ”vakettaruumi hulk langeb alla mÀÀratud lĂ€vendi. Samuti saab automaatselt diagnoosida serveri seiskumist vĂ”i teenindamise kiiruse kriitilist aeglustumist. Praktikas suudavad jĂ€lgimisvahendid hĂ€sti tuvastada juba toimunud vÀÀrasid vĂ”i lihtsaid sĂŒmptomeid tulevastest vĂ€ljasuremistest, kuid kokkuvĂ”ttes jÀÀb vĂ”imalikud rikete ennustamine neile keeruliseks pĂ€hkliks. Ennustamine kĂ€sitsi analĂŒĂŒsides mÔÔdikuid nĂ”uab kvalifitseeritud spetsialistide kaasamist. See on madala tootlikkusega. Enamik vĂ”imalikke riketeid vĂ”ivad jÀÀda mĂ€rkamatuks.
Viimasel ajal on suurte IT-ettevĂ”tete seas tarkvaraarenduse hullus kasvanud nn ennustava hoolduse populaarsus. Selle lĂ€henemise tuum seisneb tĂ”rgete leidmises, mis viivad sĂŒsteemi degradeerumiseni varases faasis, enne rikke teket tehisintellekti kasutades. See lĂ€henemine ei vĂ€lista tĂ€ielikult kĂ€sitsi sĂŒsteemi jĂ€lgimist. See on abistav jĂ€lgimisprotsessis laiemalt.
Peamine tööriist ennustava hoolduse rakendamiseks on anomaaliate otsimise ĂŒlesanne ajas tehtud ridades, kuna anomaalia ilmnemisel andmetes on suur tĂ”enĂ€osus, et mĂ”ne aja pĂ€rast vĂ”ib tekkida tĂ”rge vĂ”i rike. Anomaalia on mingi programmeerimissĂŒsteemi nĂ€itaja kĂ”rvalekalle, nĂ€iteks ĂŒhe tĂŒĂŒbi pĂ€ringu töötlemise aegade halvenemine vĂ”i keskmise teenindatavate pĂ€ringute arvu vĂ€henemine pideva kliendiseansside taseme juures.
Anomaaliate otsimise ĂŒlesanne programmeerimissĂŒsteemides omab oma eripĂ€ra. Idee kohaselt on iga programmeerimissĂŒsteemi jaoks vajalik olemasolevate meetodite vĂ€ljatöötamine vĂ”i kohandamine, kuna anomaaliate otsimine sĂ”ltub vĂ€ga andmetest, milles see toimub, ja programmeerimissĂŒsteemide andmed erinevad oluliselt sĂ”ltuvalt sĂŒsteemi teostamisest, sealhulgas sellest, millisel arvutimasinal see töötab.
Anomaaliate otsimise meetodid programmeerimissĂŒsteemide riketegude prognoosimiseks
Esiteks on oluline vĂ€lja tuua, et riketegude prognoosimise idee sai inspiratsiooni artiklist . Juhul, kui automaatsete anomaaliate otsimise lĂ€henemise tĂ”husust kontrolliti, valiti programmeerimissĂŒsteemiks âWeb-Konsolideerimineâ, mis on ĂŒks NPO âKristaâ projektidest. Selle jaoks tehti varem kĂ€sitsi monitooring saadud nĂ€itajate pĂ”hjal. Kuna sĂŒsteem on piisavalt keeruline, jĂ€lgitakse selle jaoks suurt hulka nĂ€itajaid: JVM-i nĂ€itajad (prĂŒgikogujate koormus), operatsioonisĂŒsteemi nĂ€itajad, mille all kood töötab (virtuaalne mĂ€lu, CPU koormuse %), vĂ”rgu nĂ€itajad (vĂ”rgu koormus), serveri nĂ€itajad (CPU, mĂ€lu koormus), wildfly nĂ€itajad ja rakenduse enda nĂ€itajad kĂ”ikide kriitiliste alamsĂŒsteemide pĂ”hjal.
KĂ”ik nĂ€itajad kogutakse sĂŒsteemist graphite abil. Alguses kasutati whisper andmebaasi standardlahendusena grafana jaoks, kuid klientide arvu kasvades ei suutnud graphite enam koormust taluda, ammendades andmekeskuse kettaaluste lĂ€bilaskevĂ”ime. PĂ€rast seda tehti otsus otsida tĂ”husamat lahendust. Valik langes , mis vĂ”imaldas oluliselt vĂ€hendada koormust kettaalustele ja vĂ€hendada ĂŒhe kuni kuue korra ketta mahtu. Allpool on esitatud skeem metrikate kogumise mehhanismist graphite+clickhouse abil (joonis 2).

Joonis 2. Metrikate kogumise skeem
Skeem on saadud sisejuhendist. Sellel on kujutatud andmevahetust grafana (kasutajaliides jĂ€lgimiseks, mida me kasutame) ja graphite'i vahel. Rakendusest mÔÔtmete vĂ”tmiseks kasutatakse eraldi tarkvara â . See samuti salvestab need graphite'i.
Veebikonsolideerimise sĂŒsteemil on mitmeid omadusi, mis tekitavad probleemide ennustamisel:
- trendide vahetamine toimub sageli. Sellel tarkvarasĂŒsteemil ilmuvad erinevad versioonid. Igas neist on muudatused sĂŒsteemi programmitasandil. Seega mĂ”jutavad arendajad otse selle sĂŒsteemi mÔÔtmeid ja vĂ”ivad pĂ”hjustada trendide muutumist;
- rakenduse eripĂ€ra, samuti sĂŒsteemi klientide kasutusmotiivid toovad sageli esile anomaaliaid ilma eelneva degradatsioonita;
- anomaaliate osakaal kogu andmekogus on vÀike (< 5%);
- kĂ”ige mÔÔtmete saamisel vĂ”ib esineda katkestusi. MĂ”nel lĂŒhikesel ajaperioodil ei suuda jĂ€lgimissĂŒsteem mÔÔtmeid hankida. NĂ€iteks, kui server on ĂŒle koormatud. Kuidas see mĂ”jutab nĂ€rvivĂ”rku, on kriitiline. Tekkib vajadus tĂ€ita lĂŒnki sĂŒnteesiliselt;
- Anomaaliad on sageli olulised ainult konkreetse arvu/kuid/aja jaoks (hooaegsus). Sellel sĂŒsteemil on selged reeglid kasutamiseks. Seega on mÔÔdud аĐșŃŃалŃĐœŃ ŃĐŸĐ»ŃĐșĐŸ ĐșĐŸĐœĐșŃĐ”ŃĐœĐŸĐŒŃ ĐČŃĐ”ĐŒĐ”ĐœĐž. SĂŒsteemi vĂ”ib kasutada mitte pidevalt, vaid ainult teatud kuudel: valikuliselt sĂ”ltuvalt aastast. Tekkivad olukorrad, kus sama mÔÔtmete kĂ€itumine ĂŒhes olukorras vĂ”ib pĂ”hjustada tarkvarasĂŒsteemi tĂ”rke, samas kui teises see ei pruugi;
Alustuseks analĂŒĂŒsiti meetodeid anomaalide avastamiseks tarkvarasĂŒsteemide jĂ€lgimisandmetes. Seda teemat kĂ€sitlevates artiklites, kui anomaaliate osakaal on vĂ€ike, on sageli soovitatud kasutada nĂ€rvivĂ”rke.
Peamine loogika anomaaliate leidmiseks nÀrvivÔrkude abil on kujutatud joonisel 3:

Joonis 3. Anomaaliate leidmine nÀrvivÔrgu abil
Prognoosi vĂ”i hetkevoo metrikate taastamise tulemuses arvutatakse kĂ”rvalekalle saadud andmetest aktiivse tarkvarasĂŒsteemi puhul. Suure erinevuse korral saadud metrikate ja nĂ€rvivĂ”rgu vahel vĂ”ib jĂ€reldada, et kĂ€esolev andmeosa on ebanormaalne. Tekivad jĂ€rgmised probleemid nĂ€rvivĂ”rkude kasutamisel:
- korrektseks tööks voogesituse reĆŸiimis peavad nĂ€rvivĂ”rkude mudelite koolitamiseks kasutatavad andmed sisaldama vaid "normaalseid" andmeid;
- peab olema olemas ajakohane mudel korrektseks avastamiseks. Suundumuse ja hooajalisuse muutmine metrikates vÔib pÔhjustada palju valehÀireid mudelis. Selle vÀrskendamiseks on vajalik selgelt mÀÀratleda aeg, millal mudel muutub aegunuks. Kui mudel uuendatakse liiga vara vÔi liiga hilja, siis on tÔenÀoliselt tagajÀrjeks suur hulk valehÀireid.
Samuti ei tohi unustada valehĂ€irete sagedase esinemise otsimist ja ennetamist. Eeldatakse, et need esinevad kĂ”ige sagedamini avariiliste olukordade korral. Kuid need vĂ”ivad olla ka nĂ€rvivĂ”rgu vea tagajĂ€rg selle ebapiisava koolituse tĂ”ttu. On oluline vĂ€hendada mudeli valehĂ€irete arvu. Vastasel juhul kulutavad valeprognoosid palju administraatori aega sĂŒsteemi kontrollimiseks. Varem vĂ”i hiljem jĂ”uab see sinnamaale, et administraator lĂ”petab lihtsalt "paranoilise" jĂ€lgimissĂŒsteemi jĂ€lgimise.
Rekurentsne nÀrvivÔrk
Ajavahemike anomaaliate avastamiseks vÔib kasutada LSTM mÀluga. Probleem on vaid selles, et seda saab kasutada ainult prognoositavate ajavahemike puhul. Meie juhul ei ole kÔik metrikad prognoositavad. Katse kasutada RNN LSTM-i ajavahemiku jaoks on esitatud joonisel 4.

Joonis 4. NÀide rekurentsse nÀrvivÔrgust LSTM mÀluelementidega
Nagu jooniselt 4 nĂ€htub, suutis RNN LSTM tuvastada anomaalia selle ajavahemiku jooksul. Seal, kus tulemuste prognoosimisviga (keskmine viga) on kĂ”rge, toimus tĂ”eliselt anomaalia. Ăhe RNN LSTM kasutamine on selgelt ebapiisav, kuna see sobib ainult vĂ€ikese arvu mÔÔdikute rakendamiseks. Anomaaliate tuvastamiseks vĂ”ib kasutada kĂ”rvalmeetodina.
Autokooder riketega prognoosimiseks
â sisuliselt tehisneurovĂ”rk. Sissevoolu kiht â kodeerija, vĂ€ljundkiht â dekodeerija. KĂ”ikide antud tĂŒĂŒpi nĂ€rvivĂ”rkude puuduseks on halvasti lokaliseeritud anomaaliad. Valiti sĂŒnkroonse autokooderi arhitektuur.

Joonis 5. Autokooderi töö nÀide
Autokooderid koolitatakse normaaldatasetel ja seejĂ€rel tuvastavad nad mudelile sisendatud andmevĂ€li anomaaliad. Just see, mida antud ĂŒlesanne vajab. Peab ainult valima, milline autokooder sobib antud ĂŒlesande jaoks. Arhitektiilis kĂ”ige lihtsam autokooder on sirge, tagasipöördumatud nĂ€rvivĂ”rk, mis on vĂ€ga sarnane (multilayer perceptron, MLP), millel on sisendkiht, vĂ€ljundkiht ja ĂŒks vĂ”i mitu peidetud kihti, mis neid ĂŒhendavad.
Kuid erinevused autokooderite ja MLP vahel seisnevad selles, et autokooderi vÀljundkiht sisaldab sama palju sÔlmi kui sisendkiht ning et autokooder Ôpib rekonstrueerima oma X vÀÀrtusi, mitte prognoosima sihtvÀÀrtust Y, mis on mÀÀratud sisendi X jÀrgi. Seega on autokooderid mittetÀieliku juhendamisega Ôppe mudelid.
Autokooderi ĂŒlesanne on leida ajaliselt indekseid r0 ... rn, mis vastavad anomaalsetele elementidele sisendvektoris X. See efekt saavutatakse kvadratuurse vea otsimise kaudu.

Joonis 6. SĂŒnkroonne autokooder
Autokooderi jaoks valiti . Selle eelised: voogude töötlemise reĆŸiimi kasutamise vĂ”imalus ning vĂ”rreldes teiste arhitektuuridega on nĂ€rvivĂ”rgu parameetreid mĂ€rgatavalt vĂ€hem.
ValehÀirete minimeerimise mehhanism
Seoses erinevate erandlike olukordade esinemise ja tehisintellekti koolituse vÔimalikest puudustest, on vÀlja töötatavatele anomaaliate avastamise mudelitele otsustatud luua valehÀirete minimeerimise mehhanism. See mehhanism pÔhineb administraatori klassifitseeritud mallide andmebaasil.
(DTW-algoritm, inglise keeles dynamic time warping) vÔimaldab leida optimaalse vaste ajajÀrjendite vahel. Esmakordselt rakendati seda kÔnetuvastuses, et mÀÀrata, kuidas kaks kÔnesignaalivid esindavad sama algset hÀÀldatud fraasi. Hiljem leiti selle jaoks rakendusi ka teistes valdkondades.
ValehĂ€irete minimeerimise pĂ”hialus on referentside kogumine operaatori abil, kes klassifitseerib kahtlased juhtumid, mis on tuvastatud nĂ€rvivĂ”rkude abil. SeejĂ€rel vĂ”rreldakse klassifitseeritud referentsi juhtumiga, mille sĂŒsteem avastas, ning tehakse jĂ€reldus, kas juhtum on valehĂ€ire vĂ”i tĂ”rke pĂ”hjustaja. Just kahe ajajĂ€rgu vĂ”rdlemiseks kasutatakse DTW algoritmi. Peamine tööriist valehĂ€irete minimeerimiseks on siiski klassifitseerimine. Eeldatakse, et pĂ€rast suure hulga referentsjuhtumite kogumist hakkab sĂŒsteem operaatorilt vĂ€hem kĂŒsima, kuna enamik juhtumeid on sarnased ja esinevad sarnased.
Tulemusena, tuginedes ĂŒlaltoodud nĂ€rvivĂ”rkude meetoditele, on loodud eksperimentaalne programm âWeb-Konsolideerimineâ sĂŒsteemi tĂ”rgete prognoosimiseks. Selle programmi eesmĂ€rk oli kasutada olemasolevat jĂ€lgimisandmete arhiivi ja juba toimunud tĂ”rgete teavet, et hinnata selle lĂ€henemise sobivust meie tarkvarasĂŒsteemide jaoks. Programa töö skeem on esitatud allpool, joonisel 7.

Joonis 7. TĂ”rgete prognoosimise skeem metrikate ruumi analĂŒĂŒsi pĂ”hjal
Skeemil vĂ”ib eristada kahte pĂ”hiblokki: anomaliseeritud ajavahemike otsimine jĂ€lgimisandmete (metrikate) voos ja valehĂ€irete minimeerimise mehhanism. MĂ€rkus: eksperimentaalsetes eesmĂ€rkides saadakse andmed JDBC-ĂŒhenduse kaudu andmebaasist, kuhu need salvestatakse graphite.
Allpool on esitatud arendatud monitooringusĂŒsteemi liides (joonis 8).

Joonis 8. Eksperimentaalse monitooringusĂŒsteemi liides
Liideses kuvatakse saadud meetmete anomaalsuse protsent. Meie puhul simuleeritakse saadud andmeid. Meil on juba olemas andmed mitme nĂ€dala jooksul ja laadime need jĂ€rk-jĂ€rgult, et kontrollida juhtumit, millega kaasneb rike. Alumises staatusteenuses kuvatakse andmete ĂŒldine anomaalsuse protsent antud ajahetkel, mis mÀÀratakse automaatkooderija abil. Samuti kuvatakse prognoositavate meetmete jaoks eraldi protsent, mida arvutab RNN LSTM.
NÀide CPU nÀitajate anomaalsuse tuvastamisest RNN LSTM nÀrvivÔrgu abil (joonis 9).

Joonis 9. RNN LSTM tuvastamine
Suhteliselt lihtne juhtum, pĂ”himĂ”tteliselt tavaline vĂ€ljajĂ€tmine, kuid sĂŒsteemi rikke pĂ”hjustav, tuvastati edukalt RNN LSTM abil. Anomaalsuse nĂ€itaja sel ajal oli 85 â 95%, kĂ”ik, mis ĂŒletab 80% (lĂ€vi mÀÀratleti eksperimentaalselt), loetakse anomaaliaks.
NĂ€ide anomaalsuse tuvastamisest, kui sĂŒsteem ei suutnud pĂ€rast vĂ€rskendust kĂ€ivituda. Antud olukorra tuvastab automaatkooderija (joonis 10).

Joonis 10. NĂ€ide automaatkooderija tuvastamisest
Nagu jooniselt nĂ€ha, jĂ€i PermGen ĂŒhele tasemele. Automaatkooderija pidas seda kummaliseks, kuna ta ei olnud varem midagi sarnast nĂ€inud. Siin hoiab anomaalsus 100% kuni sĂŒsteemi töövĂ”ime taastumiseni. Anomaalsus kuvatakse kĂ”ikide meetmete puhul. Nagu mainitud, ei oska automaatkooderija anomaaliat lokaliseerida. Operaatoreid ootab see funktsioon antud olukordades.
KokkuvÔte
PC "Web-Konsolideerimine" on arendatud mitte esimest aastat. SĂŒsteem on piisavalt stabiilses seisundis ja registreeritavate intsidentide arv on vĂ€ike. Siiski on Ă”nnestunud tuvastada anomaaliad, mis viivad rikkeni 5 â 10 minutit enne rikke tekkimist. Mitmetel juhtudel aitaks rikkehoiatus aegsasti kokku hoida regulatiivset aega, mis on eraldatud "remonditööde" tegemiseks.
KĂ€teval pĂ”hinevad katsed on nĂ€idanud, et lĂ”plikke jĂ€reldusi on veel vara teha. Praegused tulemused on vastuolulised. Ăhelt poolt on nĂ€ha, et nĂ€rvivĂ”rgupĂ”hised algoritmid suudavad tuvastada "kasulikke" anomaaliaid. Teiselt poolt jÀÀb suur osa valehĂ€ireid ja kĂ”ik anomaaliad, mille kvalifitseeritud spetsialist tuvastab, ei pruugi nĂ€rvivĂ”rk suuta avastada. Negatiivseks kĂŒljeks on samuti see, et praegu vajab nĂ€rvivĂ”rk normaalseks toimimiseks Ă”petajaga Ă”petamist.
SĂŒsteemi rikkeennustuse edasiseks arendamiseks ja selle viimiseks rahuldavale tasemele on vĂ”imalik kaaluda mitmeid teid. Need hĂ”lmavad ĂŒksikasjalikumat analĂŒĂŒsi anomaaliatest, mis pĂ”hjustavad rikkeid, muutes oluliseks metrikate loetelu, mis tugevalt mĂ”jutavad sĂŒsteemi seisundit, ning kĂ”rvaldades need, mis ei mĂ”juta seda. Kui liikuda sellel teel edasi, vĂ”iks proovida spetsialiseerida algoritme just meie anomaaliate juhtumitele, mis pĂ”hjustavad rikkeid. On ka teine tee. See on nĂ€rvivĂ”rkude arhitektuuride tĂ€iustamine ja seelĂ€bi avastuste tĂ€psuse tĂ”stmine, vĂ€hendades samal ajal Ă”pikestuse aega.
TĂ€nan kolleege, kes aitasid mul selle artikli kirjutamisel ja ajakohasena hoidmisel: ja Sergei Finogenov.
Allikas: habr.com
