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
