Struktureerimata andmete struktuurimine GROK abil
Kui kasutate Elastic (ELK) steiki ja olete huvitatud Logstashi kasutajate logide vastavusest Elasticsearchi, on see postitus teie jaoks.

ELK steik on kolm avatud lÀhtekoodiga projekti: Elasticsearch, Logstash ja Kibana. Koos loovad nad logihalduse platvormi.
- Elasticsearch â see on otsing ja analĂŒĂŒsisĂŒsteem.
- Logstash â see on andmete töötlemise serverikontsesioon, mis vĂ”tab andmeid mitmest allikast korraga vastu, muudab need ja saadab seejĂ€rel âmajakasseâ, nĂ€iteks Elasticsearchi.
- Kibana Kibana vÔimaldab kasutajatel visualiseerida andmeid diagrammide ja graafikute abil Elasticsearchis.
Beats ilmus hiljem ja on kerge andmeedastaja. Beatsi tutvustamine muutis ELK steigi Elastic steigiks, kuid see pole peamine.
See artikkel keskendub Grokile, mis on Logstashi funktsioon, mis suudab teie logisid muuta, enne kui need maimasse saadetakse. Meie eesmÀrkide jaoks rÀÀgin ma ainult Logstashi andmete töötlemisest Elasticsearchis.

Grok on Logstashi sisalduv filtr, mida kasutatakse struktuurimata andmete töötlemiseks struktuureeritud ja pÀringutele vastavaks formaatideks. See asub regulaarsete vÀljende (regex) peal ja kasutab tekstimalle logifailide ridade sidumiseks.
Nagu me nĂ€eme jĂ€rgmistes jaotistes, on Groki kasutamine ĂŒlioluline, kui rÀÀkida logihalduse tĂ”hususest.
Ilma Grokita on teie logiandmed struktuurimata.

Ilma Grokita ilmuvad logid, kui need saadetakse Logstashist Elasticsearchi ja visualiseeritakse Kibanas, ainult sÔnumi vÀÀrtuses.
Olulise teabe pĂ€rimine selgelt on keeruline, kuna kĂ”ik logiandmed on salvestatud ĂŒhes vĂ”tmes. Oleks parem, kui logisĂ”numid oleksid paremini korraldatud.
Struktuurimata andmed logidest
localhost GET /v2/applink/5c2f4bb3e9fda1234edc64d 400 46ms 5bc6e716b5d6cb35fc9687c0Kui vaatate tooreid andmeid hoolikalt, nĂ€ete, et need koosnevad tegelikult erinevatest osadest, millest igaĂŒks on eraldatud tĂŒhikuga.
Kogen arendajad saavad ilmselt aru, mida iga osa tÀhendab ja et see logisÔnum pÀrineb API-kutsest. Allpool on toodud iga punkti seletus.
Meie andmete struktureeritud vaade
- localhost == keskkond
- GET == meetod
- /v2/applink/5c2f4bb3e9fda1234edc64d == url
- 400 == response_status
- 46ms == response_time
- 5bc6e716b5d6cb35fc9687c0 == user_id
Nagu nÀeme struktureeritud andmetes, on seal jÀrjekord mittestruktureeritud logide jaoks. JÀrgmine samm on toorandmete programmeeritud töötlemine. Just siin sÀrab Grok.
Grok'i mallid
Sisseehitatud Grok'i mallid
Logstash on varustatud enam kui 100 sisseehitatud malliga mittestruktureeritud andmete struktureerimiseks. Te peaksite kindlasti seda vĂ”imalust Ă€ra kasutama, kui vĂ”imalik, ĂŒldiste sĂŒsteemilogide jaoks, nagu apache, linux, haproxy, aws jne.
Aga mis juhtub, kui teil on kohandatud logid, nagu ĂŒlaltoodud nĂ€ites? Peate oma Grok'i malli looma.
Kohandatud Grok'i mallid
Proovige oma Grok'i malli loomiseks. Olen kasutanud ja .
Pange tĂ€hele, et Grok mallide sĂŒntaks nĂ€eb vĂ€lja jĂ€rgmine: %{SYNTAX:SEMANTIC}
Esimene asi, mida proovisin teha, oli minna vahelehele Discover Grok siluri. MÔtlesin, et oleks tore, kui see tööriist suudaks automaatselt genereerida Grok malli, kuid see ei olnud eriti kasulik, kuna see leidis ainult kaks vastet.

Kasutasin seda avastust, et alustada omaenda malli loomist Grok siluris, kasutades sĂŒntaksit, mille leidsin Github Elastic lehelt.

MĂ€ngides erinevate sĂŒntaksitega, suutsin lĂ”puks struktureerida logi andmed nii, nagu soovis.

Link Grok silurile
Algne tekst:
localhost GET /v2/applink/5c2f4bb3e9fda1234edc64d 400 46ms 5bc6e716b5d6cb35fc9687c0Muster:
%{WORD:environment} %{WORD:method} %{URIPATH:url} %{NUMBER:response_status} %{WORD:response_time} %{USERNAME:user_id}See, 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"
]
]
}KĂ€esoleva Grok malli ja vastandatud andmetega on viimane samm lisada see Logstashi.
Logstash.conf konfiguratsioonifaili uuendamine
Serveril, kuhu olete paigaldanud ELK stacki, minge Logstashi konfiguratsiooni:
sudo vi /etc/logstash/conf.d/logstash.confKasutage muudatusi.
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 Elasticsearchi indeksit Logstashi jaoks Kibanas!

Grokiga on teie logid struktuursed!

Nagu nĂ€eme ĂŒlaltoodud pildilt, suudab Grok automaatselt sobitada logiandmeid Elasticsearchiga. See lihtsustab logide haldamist ja kiiret teabe pĂ€rimist. Selle asemel, et kaevuda logifailidesse tĂ”rkeotsingul, saate lihtsalt filtreerida selle, mida otsite, nagu keskkond vĂ”i url.
Proovige Grok expressions 'i! Kui teil on mĂ”ni muu viis, kuidas seda teha, vĂ”i kui teil on kĂŒsimusi eelnevate nĂ€idete osas, kirjutage lihtsalt allpool kommentaar, et mulle teada anda.
AitĂ€h lugemast â ja palun jĂ€lgige mind siin, Mediumis, et saada rohkem huvitavaid artikleid tarkvarainseneri teemal!
Ressursid
P.S
Telegrami kanal
Allikas: habr.com
