Ebareegiline andmete struktuurimine GROK abil
Kui kasutate Elastic (ELK) steki ja olete huvitatud Logstashi kasutajalogide sobitamisest Elasticsearchiga, siis on see postitus just teile.

ELK stek on lĂŒhend kolmest avatud lĂ€htekoodiga projektist: Elasticsearch, Logstash ja Kibana. Koos moodustavad nad logihalduse platvormi.
- Elasticsearch â on otsingu- ja analĂŒĂŒsisĂŒsteem.
- Logstash â on serveripoolne andmeprotsessimise konveier, mis vĂ”tab andmed mitmest allikast korraga, muudab need ja saadab seejĂ€rel âsalveâ, nĂ€iteks Elasticsearchisse.
- Kibana vÔimaldab kasutajatel visualiseerida andmeid diagrammide ja graafikute abil Elasticsearchis.
Beats ilmus hiljem ja on kerge andmete edastaja. Beatsi tutvustamine muutis Elk Stacki Elastic Stackiks, kuid see ei ole peamine.
See artikkel on pĂŒhendatud Grokile, mis on Logstashi funktsioon, mis suudab teie logisid muuta enne, kui need saadetakse salve. Meie eesmĂ€rkide jaoks rÀÀgin ainult Logstashi andmete töötlemisest Elasticsearchisse.

Grok on Logstashi sees asuv filter, mida kasutatakse ebareeglipĂ€raste andmete analĂŒĂŒsimiseks struktuuri ja pĂ€ringute jaoks sobivaks. See pĂ”hineb regulaarsetel vĂ€ljenditel (regex) ning kasutab tekstimalle logifailide ridade sobitamiseks.
Kuidas me nÀeme jÀrgmistes osades, on Groki kasutamine ÀÀrmiselt oluline tÔhusa logihalduse jaoks.
Ilma Grokita on teie logiandmed struktuuri puuduvad.

Ilma Grokita, kui logid saadetakse Logstashist Elasticsearchisse ja visualiseeritakse Kibanas, ilmuvad nad ainult sÔnumi vÀÀrtuses.
Olulise teabe pĂ€rimine sellises olukorras on keeruline, kuna kĂ”ik logiandmed on salvestatud ĂŒhte vĂ”tmesse. Oleks parem, kui logisĂ”numid oleksid paremini struktureeritud.
EbareeglipÀrased andmed logidelt
localhost GET /v2/applink/5c2f4bb3e9fda1234edc64d 400 46ms 5bc6e716b5d6cb35fc9687c0Kui vaatate toorandmeid tĂ€helepanelikult, nĂ€ete, et need koosnevad tegelikult erinevatest osadest, millest igaĂŒks on eraldatud tĂŒhikuga.
Kogenud arendajatele, tÔenÀoliselt suudate Àra arvata, mida iga osa tÀhendab ja et see on logisÔnum API kutse kohta. Iga elemendi esitlus on allpool.
Meie andmete struktureeritud vorm
- â localhost == keskkond
- â GET == meetod
- â /v2/applink/5c2f4bb3e9fda1234edc64d == url
- â 400 == vastuse_staatus
- â 46ms == vastuse_aeg
- â 5bc6e716b5d6cb35fc9687c0 == kasutaja_id
Kuna me nÀeme struktureeritud andmetes, eksisteerib ebastruktureeritud logide jaoks mingi kord. JÀrgmine samm on toore andmete programmiline töötlemine. Just siin paistab Grok silma.
Grok mallid
Logstash tarnib enam kui 100 sisse ehitatud malliga, et struktureerida ebastruktureeritud andmeid. Te peaksite kindlasti seda vĂ”imalust Ă€ra kasutama, kui vĂ”imalik, tavaliste sĂŒsteemi logide nagu apache, linux, haproxy, aws jne jaoks.
Kuid mis juhtub, kui teil on kohandatud logid, nagu eespool toodud nÀites? Peate koostama oma Grok malli.
Kohandatud Grok mallid
Peate proovima, et koostada oma Grok mall. Mina kasutasin
Grok Debugger ja .
%{SYNTAX:SEMANTIC} Esimene asi, mida proovisin teha, oli minna vahekaardile
Avastada Grok Debuggeris. Ma arvasin, et oleks tore, kui see tööriist saaks automaatselt genereerida Grok malli, kuid see ei olnud kuigi kasulik, kuna leidis vaid kaks vastet. Seda avastust kasutades hakkasin koostama oma Grok malli Grok Debuggeris, kasutades sĂŒntaksit, mida leidsin Elastici Githubi lehelt.

MĂ€ngides erinevate sĂŒntaksitega, suutsin lĂ”puks struktureerida logiandmed nii, nagu ma tahtsin.

Link Grok Debuggerile

Algne tekst:
Muster:
localhost GET /v2/applink/5c2f4bb3e9fda1234edc64d 400 46ms 5bc6e716b5d6cb35fc9687c0%{WORD:environment} %{WORD:method} %{URIPATH:url} %{NUMBER:response_status} %{WORD:response_time} %{USERNAME:user_id}
KĂŒsimus, mis lĂ”puks vĂ€lja tuli{ "environment": [ [ "localhost" ] ], "method": [ [ "GET" ] ], "url": [ [ "\/v2\/applink\/5c2f4bb3e9fda1234edc64d" ] ], "response_status": [ [ "400" ] ], "BASE10NUM": [ [ "400" ] ], "response_time": [ [ "46ms" ] ], "user_id": [ [ "5bc6e716b5d6cb35fc9687c0" ] ] }
Olles Grok malli ja vastetega andmed, on viimane samm lisada see Logstashi.Logstash.conf konfiguratsioonifaili vÀrskendamine
Serveris, kuhu olete paigaldanud ELK kraani, liikuge Logstashi konfiguratsiooni:
sudo vi /etc/logstash/conf.d/logstash.conf
Pange muudatused sisse.input { file { path => "\/your_logs\/*.log" } } filter{ grok { match => { "message" => "%{WORD:environment} %{WORD:method} %{URIPATH:url} %{NUMBER:response_status} %{WORD:response_time} %{USERNAME:user_id}"} } } output { elasticsearch { hosts => [ "localhost:9200" ] } }
input {
file {
path => "/your_logs/*.log"
}
}
filter{
grok {
match => { "message" => "%{WORD:environment} %{WORD:method} %{URIPATH:url} %{NUMBER:response_status} %{WORD:response_time} %{USERNAME:user_id}"}
}
}
output {
elasticsearch {
hosts => [ "localhost:9200" ]
}
}PÀrast muudatuste salvestamist taaskÀivitage Logstash ja kontrollige selle olekut, et veenduda, et see töötab endiselt.
sudo service logstash restart
sudo service logstash statusLÔpuks, et veenduda, et muudatused on jÔustunud, uuendage kindlasti Logstashi Elasticsearchi indeksit Kibanas!

Grokiga on teie logide andmed struktureeritud!

Nagu nĂ€eme ĂŒlaltoodud pildil, suudab Grok automaatselt siduda logifailide andmed Elasticsearchiga. See lihtsustab logide haldamist ja teabe kiiret pĂ€rimist. Selle asemel, et logifailides ĂŒles otsida, saate lihtsalt filtreerida, mida otsite, nĂ€iteks keskkonda vĂ”i url-i.
Proovige anda Grok expressions vĂ”imalus! Kui teil on mĂ”ni muu viis selle tegemiseks vĂ”i kui teil tekib ĂŒlaltoodud nĂ€idete osas mingeid probleeme, andke lihtsalt allpool kommentaarides teada.
AitĂ€h lugemise eest â ja palun jĂ€rgige mind siin, Mediumis, et saada rohkem huvitavaid artikleid tarkvaraarhitektuurist!
Resursid
P.S
Telegrami kanal teemal
Allikas: habr.com
