andmete klasterdamise algoritm sündmuste logidest mustrite kaevandamiseks

24
Andmete klasterdamise algoritm sündmuste logidest mustrite kaevandamiseks Risto Vaarandi [email protected]

Upload: margie

Post on 14-Jan-2016

57 views

Category:

Documents


0 download

DESCRIPTION

Risto Vaarandi [email protected]. Andmete klasterdamise algoritm sündmuste logidest mustrite kaevandamiseks. Mustrite otsimine logifailidest. Logid ja nende monitooring Lähteülesanne: milleks otsida mustreid logidest? Võimalik lahendus: andmekaevandamine Klasterdamisalgoritm - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Andmete klasterdamise algoritm sündmuste logidest mustrite kaevandamiseks

Andmete klasterdamise algoritm sündmuste logidest mustrite

kaevandamiseks

Risto [email protected]

Page 2: Andmete klasterdamise algoritm sündmuste logidest mustrite kaevandamiseks

Mustrite otsimine logifailidest

● Logid ja nende monitooring● Lähteülesanne: milleks otsida mustreid logidest?● Võimalik lahendus: andmekaevandamine● Klasterdamisalgoritm● SLCT (Simple Logfile Clustering Tool)

Page 3: Andmete klasterdamise algoritm sündmuste logidest mustrite kaevandamiseks

Logid ja nende monitooring

● Logid ja nende monitooring mängivad infosüsteemi halduses ja monitooringus olulist rolli:

o Sündmuste logimine on osa tootmissüsteemide “headest tavadest” – rõhuv enamus süsteemirakendusi, operatsioonisüsteeme ja võrguseadmeid on võimelised logima oma töös ettetulevaid sündmusi ja/või oma staatusinfot kas kohalikku või logiserveris asuvasse logifaili. Seetõttu on logifailid väärtuslik (ja tihti ainus) allikas süsteemi töös esinevate vigade avastamiseks.

o Logimisstandardite olemasolu – BSD syslog logimisprotokolli toetavad kõik suuremad süsteemitarkvara, serverite ja võrguseadmete tootjad (Sun, IBM, HP, Cisco, Nortel, jne.). See lihtsustab märgatavalt tsentraliseeritud logisüsteemi ehitamist - kõik süsteemi sõlmedes tekkivad logid kogutakse kesksele logiserverile, kus toimub analüüs ja sündmuste korrelatsioon.

o Logide monitooringut võimaldavate programmmide olemasolu – Swatch, Logsurfer, LogWatch, jt. (vt. http://www.loganalysis.org).

Page 4: Andmete klasterdamise algoritm sündmuste logidest mustrite kaevandamiseks

Näide logifailist

Dec 18 08:47:26 myhost sshd[15172]: connect from 10.2.211.19

Dec 18 08:47:26 myhost sshd[15172]: log: Connection from 10.2.211.19 port 1304

Dec 18 08:47:39 myhost sshd[15172]: log: Password authentication for alex accepted.

Dec 18 08:48:28 myhost sshd[15226]: connect from 10.2.211.110

Dec 18 08:48:28 myhost sshd[15226]: log: Connection from 10.2.211.110 port 1413

Dec 18 08:48:35 myhost sshd[15226]: log: Password authentication for sloj accepted.

Dec 18 08:50:09 myhost vmunix: /var/tmp: file system full

Dec 18 08:50:10 myhost imapd[15399]: imap service init from 10.2.213.2

Dec 18 08:50:10 myhost imapd[15399]: Login user=risto host=risto2 [10.2.213.2]

Page 5: Andmete klasterdamise algoritm sündmuste logidest mustrite kaevandamiseks

Traditsiooniline logide monitooring

● Traditsiooniline logifailide monitooring – antakse ette vigu tähistavad mustrid, millele vastava rea lisandumisel logifaili genereerib monitooringusüsteem (logifaili monitor) alarmi.

watchfor = /file system full/ exec=/opt/local/bin/qpage -f \"\" cns \"Duty: Disk space exhausted on $4. --swatch\" mail = it-server throttle = 480:00

watchfor = /dma error|DMA error/ exec=/opt/local/bin/qpage -f \"\" cns \"Duty: RAM problems on $4. --swatch\" mail = it-server throttle = 480:00

● Variatsioon – huvipakkuvad sündmused suunatakse sündmuste korrelaatorisse, avastamaks metasündmusi (lihtsündmuste kombinatsioone, mis esinevad teatud ajalises aknas).

Page 6: Andmete klasterdamise algoritm sündmuste logidest mustrite kaevandamiseks

Mudelipõhine monitooring ning lähteülesanne

● Traditsiooniline logifailide monitooring – antakse ette vigu tähistavad mustrid, millele vastava rea lisandumisel logifaili genereerib monitooringusüsteem (logifaili monitor) alarmi. Puudus: ei avastata uusi, senitundmatuid vigu

● Mudelipõhine monitooring – lisaks veamustritele on ette antud süsteemi tavapärase käitumise profiil. Kui logisse ilmub rida, mis ei sobi profiiliga ning mis ei ole viga, loetakse teade anomaalseks ning suunatakse ta edasisse töötlusse (näit. genereeritakse alarm). Puudus: logifaili mudeli loomine on töömahukas ning aeganõudev

● Ülesanne: vaja on tarkvara, mis hõlbustaks logifaili mudeli loomist (ehk tarkvara, mis aitaks leida nii süsteemi tavapärast käitumist kajastavad mustreid kui vigu esindavaid mustreid).

Page 7: Andmete klasterdamise algoritm sündmuste logidest mustrite kaevandamiseks

Võimalikud lahendused

● Andmekaevandamisalgoritmid– Assotsiatsioonireeglite leidmise algoritmid

● Üritavad leida korrelatsioone andmebaasi kirje elementide vahel (näit. kirjes esineb element X => kirjes esineb 99% tõenäosusega element Y)

● Siiani on neid kasutatud peamiselt ajaliste mustrite leidmiseks (näit. sündmustele A ja B järgneb 1m jooksul 95% tõenäosusega sündmus C)

● Leiavad vaid piisavalt tihti esinevate sündmuste mustreid, kuid meie jaoks sageli on huvipakkuvad ka harvaesinevad sündmused (näit. veasituatsioonid on reeglina huvipakkuvad, kuid samas ei ole need normaalses süsteemis sagedased!)

– Klasterdamisalgoritmid - üritavad etteantud andmehulga jagada gruppideks (klastriteks), kus igasse klastrisse kuuluvad sarnased elemendid.

Page 8: Andmete klasterdamise algoritm sündmuste logidest mustrite kaevandamiseks

Klasterdamisalgoritmid

Punktid x, y Rn d(x, y) - kaugusfunktsioon

Page 9: Andmete klasterdamise algoritm sündmuste logidest mustrite kaevandamiseks

Klasterdamisalgoritmide puudused

● Tänapäeval on suur hulk andmeid tekstilised, ning andmepunktidel võib olla erinev arv atribuute:

– log: Connection from 192.168.1.1 port 1468

– log: RSA key generation complete.

– connect from 172.26.10.12

● Kui ruumi dimensioon n on suurem, siis kaugusfunktsioon kaotab oma tähenduse (n ≥ 10 korral muutub probleem küllalt tõsiseks)

● Nendel põhjustel on viimastel aastatel leiutatud mõned Apriori-põhised klasterdamisalgoritmid (CLIQUE ja MAFIA), mis ei kasuta kaugusfunktsioone, vaid üritavad leida ruumis tihedaid regioone ning formeerida neist regioonidest klastreid.

Page 10: Andmete klasterdamise algoritm sündmuste logidest mustrite kaevandamiseks

Apriori-põhine klasterdamine

Nõutav tihedus = 3Probleem: eksponentsiaalne keerukus!

Page 11: Andmete klasterdamise algoritm sündmuste logidest mustrite kaevandamiseks

Logifailide omadused

● Mängivad klasterdamisalgoritmi loomisel olulist rolli:

– Rõhuv enamus sõnu esineb logifailis väga harva (tüüpiliselt alla 5 korra). Suur osa sõnu esineb vaid ühel korral. Teisalt on vaid vähesed sõnad sagedased (näit. esinevad vähemalt korra iga 10,000 logirea kohta). Sama fenomeni on täheldatud loomulike keelte korral, kus sõnade esinemissagedused alluvad Zipf'i jaotusele.

– Logifailides on paljude sagedasti esinevate sõnade vahel tugev korrelatsioon, mis muudab Apriori meetodi kasutamise mõttetuks. Põhjus: teated vormindatakse enne logimist mingi formaatstringi alusel, näiteks sprintf(message,"log: Connection from %s port %d", ipaddress, port);

Page 12: Andmete klasterdamise algoritm sündmuste logidest mustrite kaevandamiseks

Logifailide klasterdamine

● Algoritm võtab arvesse logifailide omadusi ning üritab iga klastri luua nii, et see vastaks teatud mustrile (näit. connection from * closed).

● Igas klastris peab olema vähemalt N rida, kus parameetri N väärtuse annab ette kasutaja.

● Logiread, mis ei sobi ühessegi leitud klastrisse, paigutatakse omaette nn. kõrvalejääjate klastrisse.

Page 13: Andmete klasterdamise algoritm sündmuste logidest mustrite kaevandamiseks

Algoritm logifailide klasterdamiseks

● Vaadata andmehulk läbi ning leida kõik sagedased sõnad (sõnad, mis esinevad antud positsioonil rohkem arv kordi kui kasutaja poolt etteantud lävi N).

● Vaadata andmehulk teist korda läbi ning formeerida klastrikandidaadid. Iga rea puhul, millel esinevad sagedased sõnad, formeeritakse nendest sõnadest kandidaat. Näiteks kui sõnad Connection, from ja port on sagedased, siis rea Connection from 192.168.1.1 port 2014 puhul formeeritakse kandidaat Connection from * port. Kui formeeritud kandidaati pole kandidaatide tabelis, paigutada ta sinna loenduri väärtusega 1, vastasel korral liita loendurile 1.

● Defragmenteerimine (optional): iga kandidaadi K puhul leida kandidaadid, mis esindavad spetsiifilisemaid mustreid, ning lisada nende loendurite väärtused K omale (väldib väga paljude ebapiisava suurusega klastrikandidaatide teket, lubades samas klastrite ühisosasid).

● Lugeda klastriteks need kandidaadid, mille loenduri väärtus ületab kasutaja poolt etteantud läve N (ehk need kandidaadid, mis sisaldavad vähemalt N rida).

● Vaadata andmehulk veelkord läbi ning leida kõrvalejääjate klaster.

Page 14: Andmete klasterdamise algoritm sündmuste logidest mustrite kaevandamiseks

Võrdlus Apriori’ga

● Erinevalt Apriori meetodist genereeritakse kandidaadid andmete ühe läbivaatusega:

+ niimoodi välditakse eksponentsiaalset keerukust, kus iga k-mustrini jõudmiseks läbitakse 2k-2 üldisemat mustrit.

+ kuna logifaili sagedaste sõnade vahel on tihti tugevad korrelatsioonid, on mõttetu testida kõikvõimalikke kombinatsioone sagedastest sõnadest.

- Apriori algoritm avastab mustreid, mida klasterdamisalgoritm ei avasta. Näiteks kui A, B ja C on sageli esinevad sõnad, mis esinevad tekstis kombinatsioonidena AB, AC ja BC, kusjuures ükski kombinatsioon eraldivõetuna ei ole sageli esinev, siis klasterdamisalgoritm ei pea mustreid A, B ja C klastriteks.

Page 15: Andmete klasterdamise algoritm sündmuste logidest mustrite kaevandamiseks

Apriori vs. klasterdamisalgoritm

Lävi 50% Lävi 25% Lävi 10% Lävi 5% Lävi 1%

Klaster A (180KB)

1s 1s 1s 2s 2s

Apriori A (180KB)

2s 16s 96s 145s 5650s

Klaster B (1814KB)

5s 5s 5s 6s 6s

Apriori B (1814KB)

9s 28s 115s 206s 2770s

Klaster C (4005KB)

10s 10s 12s 12s 13s

Apriori C (4005KB)

182s 182s 18950s 29062s 427791s

Page 16: Andmete klasterdamise algoritm sündmuste logidest mustrite kaevandamiseks

Probleemid

● Probleem1 – algoritmi esimese sammu jaoks (sõnastiku ehitamine) ei pruugi jätkuda mälu,

● Probleem2 – kuigi tänu sagedaste sõnade vahelistele korrelatsioonidele ei ole kandidaatide tabel võrreldes sagedaste sõnade arvuga väga suur, võib see olukord ülimadala läve korral muutuda. See toob kaasa:- suure mälukulu- kuna defragmenteerimise keerukus on O(n2), siis ka suure ajakulu

Page 17: Andmete klasterdamise algoritm sündmuste logidest mustrite kaevandamiseks

Sõnastiku ehitamine

● Enne sõnastiku ehitamist luuakse kõigist sõnadest n loenduriga summaarne vektor (c

0,...,c

n-1), mille kõik loendurid seatakse töö

algul võrdseks nulliga. Tavaliselt n << erinevate sõnade arv.

● Andmed vaadatakse läbi ning iga sõna viiakse kiire räsifunktsiooniga (shift-add-xor) täisarvude lõiku [0,...,n-1]. Kui sõna puhul saadakse tulemuseks väärtus i, siis suurendatakse vektori i-ndat loendurit 1 võrra.

● Kui vektor on loodud, ehitatakse sõnastik, kuid sõnastikku paigutatakse vaid need sõnad, millele vastav vektori loendur ületab läve N. Kuna enamus sõnu esineb failis väga harva, on enamus vektori loendureid lävest N väiksema väärtusega, mistõttu sõnastiku maht väheneb oluliselt. Vektor ise palju mälu ei nõua.

Page 18: Andmete klasterdamise algoritm sündmuste logidest mustrite kaevandamiseks

Sõnastiku vektorfilter

A, 1 B, 3 C, 1 D, 15 E, 1 F, 1 G, 4 I, 2H, 1

C0 = 5 C2 = 7C1 = 17

Kui lävi N = 10, siis saavad ainult sõnad D, E ja F olla sagedased, ülejäänud sõnu pole aga mõtet nende sageduse mõõtmiseks sõnastikku salvestada.Üks räsifunktsioonide omadusi ühtlus - kui erinevaid sõnu on W tükki ningvektori suurus on m, siis iga vektori loendur vastab W / m sõnale.Kuna enamus sõnu on harvaesinevad ning sagedasi sõnu on väga vähe, siis eiületa suurem osa vektori loenduritest läve ning sõnastikku sisestatakse paljuvähem sõnu kui muidu. Kuna vektor ise nõuab küllalt vähe mälu, on mälukokkuhoid reeglina märkimisväärne.

Page 19: Andmete klasterdamise algoritm sündmuste logidest mustrite kaevandamiseks

Kandidaatide tabel

● Kui tabel nõuab liiga palju mälu, saab tabelisse kantud kandidaatide arvu vähendamiseks rakendada vektor-filtrit (defragmenteerimise puhul see meetod ei sobi).

● Defragmenteerimine on keerukusega O(n2) (kuna iga kandidaati K peab võrdlema kõigi ülejäänutega) ning suurema tabeli korral on ajakulu märkimisväärne. Selle vältimiseks jagatakse tabel osadeks, kus igas osas leiduvate kandidaatide fikseeritud sõnu kirjeldab bitivektor. Kui bitivektor ei sisalda kõiki neid sõnu, millest koosneb kandidaat K, siis pole mõtet kandidaati K antud tabeli osas paiknevate kandidaatidega võrrelda.

Page 20: Andmete klasterdamise algoritm sündmuste logidest mustrite kaevandamiseks

Bitivektorid kandidaatide tabelile

● Tähistame sagedased sõnad naturaalarvudega 1..W, sagedasele sõnale M vastab bitivektoris positsioon M. Bitivektori suurus on int(W / 8) + 1 baiti.

● Kui tabeli osas on näiteks kandidaadid Login for * failed ja log: , ning Login=1, for=5, failed=9 ja log:=2, siis antud tabeliosa jaoks on bitivektoriks 110010001 (s.t. positsioonid 1,2,5,9 on seatud).

● Analoogilisel viisil saab igale üksikule kandidaadile seada vastavusse bitivektori.

● Kui kandidaadi K bitivektor on K’ ja tabeliosa T vektor on T’, ning K’ AND T’ K’, siis pole mõtet kandidaati K tabeliosa T kandidaatidega võrrelda.

Page 21: Andmete klasterdamise algoritm sündmuste logidest mustrite kaevandamiseks

SLCT – simple logfile clustering tool

● Kirjutatud C-keeles, testitud RedHat8.0 ja Solaris8 platvormidel

● Koduleht http://kodu.neti.ee/~risto/slct/, litsents GNU GPL

● Sõnade eraldaja saab ette anda regulaaravaldisena - vaikimisi on sõnade eraldajaks [ \t]+ (üks või rohkem tühikut või tab-sümbolit)

● Ainult teatud tüüpi ridade töötlemiseks saab ette anda regulaaravaldisest filtri, peale filtri rakendumist võib rea teisendada uuele kujule ($1, $2, ... muutujate abil):kui filter on sshd\[[0-9]+\]: (.+) ja template on “$1”, siissshd[2781]: connect from 10.1.1.1 connect from 10.1.1.1

● Mustrites sisalduvaid metsikuid sümboleid saab "lihvida" konstantsete prefiksite ja sufiksite otsimise abil (* => sshd[*])

Page 22: Andmete klasterdamise algoritm sündmuste logidest mustrite kaevandamiseks

SLCT – tabelid ja räsifunktsioon

● Sõnastiku ja kandidaatide tabeli realiseerimiseks on kasutusel ettenihutamisega paisktabel (move-to-front hash table). Erinevalt tavalisest paisktabelist on tabeli positsioonide arv palju väiksem tabelisse paigutatavate elementide arvust. Tabeli loomisel tekib iga positsiooni juurde seetõttu pikk välisahel. Iga kord, kui tabelist otsitakse või tabelisse lisatakse element X, tõstetakse element X välisahela esimeseks elemendiks. Selline paisktabel sobib eriti hästi selliste andmehulkade jaoks, kus vaid vähesed elemendid esinevad sageli, kuna siis sagedased elemendid viibivad peaaegu kogu aeg välisahelate alguses ning nad leitakse kiiresti.

● Räsifunktsioonina on kasutusel Zobeli ja Ramakrishna kiire funktsioon, kus on tehetena kasutusel vaid liitmine, bitikaupa nihutamine ja bitikaupa XOR (puudub kulukas jagamistehe!).

Page 23: Andmete klasterdamise algoritm sündmuste logidest mustrite kaevandamiseks

SLCT iteratiivne rakendamine

Logi

Klaster1Klaster2

Kõrvale-jääjad

Klaster5 Kõrvale-jääjad

Klaster3 Klaster4 Kõrvale-jääjad

Analüüs jätkub

Page 24: Andmete klasterdamise algoritm sündmuste logidest mustrite kaevandamiseks

SLCT – näiteid leitud mustritest

Dec 18 * myhost.mydomain sshd[*]: connect from 10.1.1.17

Dec 18 * myhost.mydomain sshd[*]: log: Connection from 10.1.1.17 port *

Dec 18 * myhost.mydomain sshd[*]: fatal: Did not receive ident string.

Dec 18 * myhost.mydomain * log: * * * *

Dec 18 * myhost.mydomain sshd[*]: connect from 10.*

Dec 18 * myhost.mydomain sshd[*]: log: Connection from 10.* port *

Dec 18 * myhost.mydomain sshd[*]: log: * authentication for * accepted.

Dec 18 * myhost.mydomain sshd[*]: log: Closing connection to 10.*