Title: Andmete klasterdamise algoritm s
1Andmete klasterdamise algoritm sündmuste logidest
mustrite kaevandamiseks
- Risto Vaarandi
- risto.vaarandi_at_eyp.ee
2Mustrite otsimine logifailidest
- Logid ja nende monitooring
- Lähteülesanne milleks otsida mustreid logidest?
- Võimalik lahendus andmekaevandamine
- Klasterdamisalgoritm
- SLCT (Simple Logfile Clustering Tool)
3Logid ja nende monitooring
- Logid ja nende monitooring mängivad infosüsteemi
halduses ja monitooringus olulist rolli - 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. - 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. - Logide monitooringut võimaldavate programmmide
olemasolu Swatch, Logsurfer, LogWatch, jt. (vt.
http//www.loganalysis.org).
4Näide logifailist
- Dec 18 084726 myhost sshd15172 connect from
10.2.211.19 - Dec 18 084726 myhost sshd15172 log
Connection from 10.2.211.19 port 1304 - Dec 18 084739 myhost sshd15172 log Password
authentication for alex accepted. - Dec 18 084828 myhost sshd15226 connect from
10.2.211.110 - Dec 18 084828 myhost sshd15226 log
Connection from 10.2.211.110 port 1413 - Dec 18 084835 myhost sshd15226 log Password
authentication for sloj accepted. - Dec 18 085009 myhost vmunix /var/tmp file
system full - Dec 18 085010 myhost imapd15399 imap service
init from 10.2.213.2 - Dec 18 085010 myhost imapd15399 Login
userristo hostristo2 10.2.213.2
5Traditsiooniline 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/bi
n/qpage -f \"\" cns \"Duty Disk space exhausted
on 4. --swatch\" mail it-server throttle
48000 - watchfor /dma errorDMA error/
exec/opt/local/bin/qpage -f \"\" cns \"Duty
RAM problems on 4. --swatch\" mail it-server
throttle 48000 - Variatsioon huvipakkuvad sündmused suunatakse
sündmuste korrelaatorisse, avastamaks
metasündmusi (lihtsündmuste kombinatsioone, mis
esinevad teatud ajalises aknas).
6Mudelipõ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).
7Võimalikud lahendused
- Andmekaevandamisalgoritmid
- Assotsiatsioonireeglite leidmise algoritmid
- Üritavad leida korrelatsioone andmebaasi kirje
elementide vahel (näit. kirjes esineb element X
gt 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.
8Klasterdamisalgoritmid
Punktid x, y ? Rn d(x, y) - kaugusfunktsioon
9Klasterdamisalgoritmide 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.
10Apriori-põhine klasterdamine
Nõutav tihedus 3
Probleem eksponentsiaalne keerukus!
11Logifailide 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,"lo
g Connection from s port d", ipaddress, port)
12Logifailide 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.
13Algoritm 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.
14Võrdlus Aprioriga
- 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.
15Apriori 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
16Probleemid
- 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
17Sõnastiku ehitamine
- Enne sõnastiku ehitamist luuakse kõigist sõnadest
n loenduriga summaarne vektor (c0,...,cn-1),
mille kõik loendurid seatakse töö algul võrdseks
nulliga. Tavaliselt n ltlt 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.
18Sõnastiku vektorfilter
A, 1
B, 3
C, 1
D, 15
E, 1
F, 1
G, 4
I, 2
H, 1
C0 5
C2 7
C1 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 ning vektori
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 palju vähem sõnu kui muidu. Kuna
vektor ise nõuab küllalt vähe mälu, on
mälu kokkuhoid reeglina märkimisväärne.
19Kandidaatide 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.
20Bitivektorid 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 Login1, for5, failed9
ja log2, 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.
21SLCT 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,
siissshd2781 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 ( gt sshd)
22SLCT 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!).
23SLCT iteratiivne rakendamine
Logi
24SLCT 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.