Nasveti in triki za pretvorbo nestrukturiranih podatkov iz dnevnikov v sklad ELK z uporabo GROK v LogStash

Strukturiranje nestrukturiranih podatkov z GROK-om

Če uporabljate sklad Elastic (ELK) in vas zanima preslikava dnevnikov Logstash po meri v Elasticsearch, potem je ta objava za vas.

Nasveti in triki za pretvorbo nestrukturiranih podatkov iz dnevnikov v sklad ELK z uporabo GROK v LogStash

Sklad ELK je akronim za tri odprtokodne projekte: Elasticsearch, Logstash in Kibana. Skupaj tvorijo platformo za upravljanje dnevnikov.

  • Elastično iskanje je iskalni in analitični sistem.
  • Logstash je cevovod za obdelavo podatkov na strani strežnika, ki zaužije podatke iz več virov hkrati, jih preoblikuje in nato pošlje v »skladišče«, kot je Elasticsearch.
  • Kibana uporabnikom omogoča vizualizacijo podatkov z uporabo grafikonov in grafov v Elasticsearch.

Beats prišel pozneje in je lahek pošiljatelj podatkov. Uvedba Beatsa je spremenila Elk Stack v Elastic Stack, vendar to ni bistvo.

Ta članek govori o Groku, ki je funkcija v Logstashu, ki lahko preoblikuje vaše dnevnike, preden so poslani v shrambo. Za naše namene bom govoril samo o obdelavi podatkov iz Logstasha v Elasticsearch.

Nasveti in triki za pretvorbo nestrukturiranih podatkov iz dnevnikov v sklad ELK z uporabo GROK v LogStash

Grok je filter znotraj Logstasha, ki se uporablja za razčlenitev nestrukturiranih podatkov v nekaj strukturiranega in poizvedljivega. Nahaja se na vrhu regularnega izraza (regex) in uporablja besedilne vzorce za ujemanje nizov v dnevniških datotekah.

Kot bomo videli v naslednjih razdelkih, je uporaba Groka velika razlika, ko gre za učinkovito upravljanje dnevnikov.

Brez Groka so vaši dnevniški podatki nestrukturirani

Nasveti in triki za pretvorbo nestrukturiranih podatkov iz dnevnikov v sklad ELK z uporabo GROK v LogStash

Ko so dnevniki poslani iz Logstasha v Elasticsearch in upodobljeni v Kibani brez Groka, se prikažejo samo v vrednosti sporočila.

Poizvedovanje po pomembnih informacijah v tej situaciji je težko, ker so vsi podatki dnevnika shranjeni v enem ključu. Bolje bi bilo, če bi bila sporočila dnevnika bolje organizirana.

Nestrukturirani podatki iz dnevnikov

localhost GET /v2/applink/5c2f4bb3e9fda1234edc64d 400 46ms 5bc6e716b5d6cb35fc9687c0

Če pozorno pogledate neobdelane podatke, boste videli, da so dejansko sestavljeni iz različnih delov, od katerih je vsak ločen s presledkom.

Bolj izkušeni razvijalci lahko verjetno ugibajo, kaj vsak del pomeni in kaj je to sporočilo dnevnika iz klica API-ja. Predstavitev vsake postavke je opisana spodaj.

Strukturiran pogled na naše podatke

  • ​ localhost == okolje
  • Metoda GET ==
  • ​ /v2/applink/5c2f4bb3e9fda1234edc64d == url
  • ​ 400 == status_odgovora
  • ​ 46ms == odzivni_čas
  • ​ 5bc6e716b5d6cb35fc9687c0 == user_id

Kot vidimo pri strukturiranih podatkih, obstaja vrstni red za nestrukturirane dnevnike. Naslednji korak je programska obdelava neobdelanih podatkov. Tukaj Grok blesti.

Predloge Grok

Vgrajene predloge Grok

Logstash ima več kot 100 vgrajenih predlog za strukturiranje nestrukturiranih podatkov. Vsekakor bi morali to izkoristiti, kadar koli je to mogoče, za splošne sistemske dnevnike, kot so apache, linux, haproxy, aws in tako naprej.

Vendar, kaj se zgodi, če imate dnevnike po meri, kot je v zgornjem primeru? Ustvariti morate lastno predlogo Grok.

Predloge Grok po meri

Poskusite sestaviti lastno predlogo Grok. uporabil sem Odpravljalnik napak Grok и Grokovi vzorci.

Upoštevajte, da je sintaksa predloge Grok naslednja: %{SYNTAX:SEMANTIC}

Prva stvar, ki sem jo poskušal narediti, je bila iti na zavihek Odkrijte v razhroščevalniku Grok. Mislil sem, da bi bilo kul, če bi to orodje lahko samodejno ustvarilo vzorec Grok, vendar ni bilo preveč uporabno, saj je našlo le dve ujemki.

Nasveti in triki za pretvorbo nestrukturiranih podatkov iz dnevnikov v sklad ELK z uporabo GROK v LogStash

S tem odkritjem sem začel ustvarjati lastno predlogo v razhroščevalniku Grok z uporabo sintakse, ki jo najdem na strani Elastic Github.

Nasveti in triki za pretvorbo nestrukturiranih podatkov iz dnevnikov v sklad ELK z uporabo GROK v LogStash

Po igranju z različnimi sintaksami sem končno lahko strukturiral podatke dnevnika, kot sem želel.

Nasveti in triki za pretvorbo nestrukturiranih podatkov iz dnevnikov v sklad ELK z uporabo GROK v LogStash

Povezava za odpravljanje napak Grok https://grokdebug.herokuapp.com/

Izvirno besedilo:

localhost GET /v2/applink/5c2f4bb3e9fda1234edc64d 400 46ms 5bc6e716b5d6cb35fc9687c0

vzorec:

%{WORD:environment} %{WORD:method} %{URIPATH:url} %{NUMBER:response_status} %{WORD:response_time} %{USERNAME:user_id}

Kaj se je zgodilo na koncu

{
  "environment": [
    [
      "localhost"
    ]
  ],
  "method": [
    [
      "GET"
    ]
  ],
  "url": [
    [
      "/v2/applink/5c2f4bb3e9fda1234edc64d"
    ]
  ],
  "response_status": [
    [
      "400"
    ]
  ],
  "BASE10NUM": [
    [
      "400"
    ]
  ],
  "response_time": [
    [
      "46ms"
    ]
  ],
  "user_id": [
    [
      "5bc6e716b5d6cb35fc9687c0"
    ]
  ]
}

S predlogo Grok in preslikanimi podatki v roki je zadnji korak, da jih dodate v Logstash.

Posodabljanje konfiguracijske datoteke Logstash.conf

Na strežniku, kjer ste namestili sklad ELK, pojdite na konfiguracijo Logstash:

sudo vi /etc/logstash/conf.d/logstash.conf

Prilepite spremembe.

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" ]
  }
}

Ko shranite spremembe, znova zaženite Logstash in preverite njegovo stanje, da se prepričate, da še vedno deluje.

sudo service logstash restart
sudo service logstash status

Nazadnje, da zagotovite, da so spremembe začele veljati, Bodite prepričani, da posodobite svoj indeks Elasticsearch za Logstash v Kibani!

Nasveti in triki za pretvorbo nestrukturiranih podatkov iz dnevnikov v sklad ELK z uporabo GROK v LogStash

Z Grokom so vaši dnevniški podatki strukturirani!

Nasveti in triki za pretvorbo nestrukturiranih podatkov iz dnevnikov v sklad ELK z uporabo GROK v LogStash

Kot lahko vidimo na zgornji sliki, je Grok sposoben samodejno ujemati podatke dnevnika z Elasticsearch. To olajša upravljanje dnevnikov in hitro iskanje informacij. Namesto brskanja po dnevniških datotekah za odpravljanje napak, lahko preprosto filtrirate glede na to, kar iščete, na primer okolje ali url.

Preizkusite izraze Grok! Če imate to drugače ali imate kakršne koli težave z zgornjimi primeri, spodaj napišite komentar, da me obvestite.

Hvala za branje – in sledite mi tukaj na Mediumu za več zanimivih člankov o programskem inženiringu!

Viri

https://www.elastic.co/blog/do-you-grok-grok
https://github.com/elastic/logstash/blob/v1.4.2/patterns/grok-patterns
https://grokdebug.herokuapp.com/

PS Povezava do vira

Telegram kanal avtorja Elastično iskanje

Vir: www.habr.com

Dodaj komentar