Savjeti i trikovi za pretvaranje nestrukturiranih podataka iz dnevnika u ELK Stack koristeći GROK u LogStash

Strukturiranje nestrukturiranih podataka pomoću GROK-a

Ako koristite Elastic (ELK) stog i zainteresirani ste za mapiranje prilagođenih Logstash dnevnika u Elasticsearch, onda je ovaj post za vas.

Savjeti i trikovi za pretvaranje nestrukturiranih podataka iz dnevnika u ELK Stack koristeći GROK u LogStash

ELK stack je akronim za tri projekta otvorenog koda: Elasticsearch, Logstash i Kibana. Zajedno čine platformu za upravljanje dnevnikom.

  • Elasticsearch je sistem za pretragu i analizu.
  • Logstash je cevovod za obradu podataka na strani servera koji istovremeno unosi podatke iz više izvora, transformiše ih, a zatim ih šalje u "skladište" kao što je Elasticsearch.
  • Kibana omogućava korisnicima da vizualiziraju podatke koristeći grafikone i grafikone u Elasticsearch-u.

Beats je došao kasnije i lagani je dostavljač podataka. Uvođenje Beats-a transformisalo je Elk Stack u Elastic Stack, ali to nije poenta.

Ovaj članak je o Groku, što je značajka u Logstash-u koja može transformirati vaše zapise prije nego što se pošalju u skladište. Za naše potrebe, govorit ću samo o obradi podataka iz Logstasha u Elasticsearch.

Savjeti i trikovi za pretvaranje nestrukturiranih podataka iz dnevnika u ELK Stack koristeći GROK u LogStash

Grok je filter unutar Logstasha koji se koristi za raščlanjivanje nestrukturiranih podataka u nešto strukturirano i upitno. Nalazi se na vrhu regularnog izraza (regex) i koristi tekstualne obrasce za podudaranje nizova u datotekama evidencije.

Kao što ćemo vidjeti u sljedećim odjeljcima, korištenje Groka čini veliku razliku kada je u pitanju efikasno upravljanje dnevnikom.

Bez Groka vaši podaci dnevnika su nestrukturirani

Savjeti i trikovi za pretvaranje nestrukturiranih podataka iz dnevnika u ELK Stack koristeći GROK u LogStash

Bez Groka, kada se logovi šalju iz Logstash-a u Elasticsearch i renderiraju u Kibani, oni se pojavljuju samo u vrijednosti poruke.

Upitivanje značajnih informacija u ovoj situaciji je teško jer su svi podaci dnevnika pohranjeni u jednom ključu. Bilo bi bolje da su poruke dnevnika bolje organizirane.

Nestrukturirani podaci iz dnevnika

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

Ako pažljivo pogledate neobrađene podatke, vidjet ćete da se oni zapravo sastoje od različitih dijelova, od kojih je svaki odvojen razmakom.

Za iskusnije programere, vjerovatno možete pogoditi šta svaki od dijelova znači i koja je poruka dnevnika iz API poziva. Prezentacija svake stavke je navedena u nastavku.

Strukturirani prikaz naših podataka

  • ​ localhost == okruženje
  • GET == metoda
  • ​ /v2/applink/5c2f4bb3e9fda1234edc64d == url
  • ​ 400 == status_odgovora
  • ​ 46ms == vrijeme_odgovora
  • ​ 5bc6e716b5d6cb35fc9687c0 == user_id

Kao što vidimo u strukturiranim podacima, postoji red za nestrukturirane zapise. Sljedeći korak je softverska obrada sirovih podataka. Ovdje Grok blista.

Grok Templates

Ugrađeni Grok šabloni

Logstash dolazi sa preko 100 ugrađenih šablona za strukturiranje nestrukturiranih podataka. Definitivno biste trebali iskoristiti ovo kad god je to moguće za opće sistemske dnevnike kao što su apache, linux, haproxy, aws i tako dalje.

Međutim, što se događa kada imate prilagođene dnevnike kao u primjeru iznad? Morate napraviti svoj vlastiti Grok šablon.

Prilagođeni Grok šabloni

Morate pokušati da napravite sopstveni Grok šablon. koristio sam Grok Debugger и Grok Patterns.

Imajte na umu da je sintaksa Grok šablona sljedeća: %{SYNTAX:SEMANTIC}

Prva stvar koju sam pokušao je da odem na karticu Discover u Grok debuggeru. Mislio sam da bi bilo super kada bi ovaj alat mogao automatski generirati Grok obrazac, ali nije bio previše koristan jer je pronašao samo dva podudaranja.

Savjeti i trikovi za pretvaranje nestrukturiranih podataka iz dnevnika u ELK Stack koristeći GROK u LogStash

Koristeći ovo otkriće, počeo sam kreirati vlastiti predložak u Grok debuggeru koristeći sintaksu koja se nalazi na stranici Elastic Github.

Savjeti i trikovi za pretvaranje nestrukturiranih podataka iz dnevnika u ELK Stack koristeći GROK u LogStash

Nakon što sam se poigrao različitim sintaksama, konačno sam mogao strukturirati podatke dnevnika onako kako sam želio.

Savjeti i trikovi za pretvaranje nestrukturiranih podataka iz dnevnika u ELK Stack koristeći GROK u LogStash

Grok Debugger Link https://grokdebug.herokuapp.com/

Originalni tekst:

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

uzorak:

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

Šta se desilo na kraju

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

Sa Grok šablonom i mapiranim podacima u ruci, posljednji korak je dodavanje u Logstash.

Ažuriranje konfiguracijske datoteke Logstash.conf

Na serveru na kojem ste instalirali ELK stack idite na Logstash konfiguraciju:

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

Zalijepite promjene.

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

Nakon što sačuvate promjene, ponovo pokrenite Logstash i provjerite njegov status kako biste bili sigurni da i dalje radi.

sudo service logstash restart
sudo service logstash status

Konačno, kako bismo bili sigurni da su promjene stupile na snagu, Obavezno ažurirajte svoj Elasticsearch indeks za Logstash u Kibani!

Savjeti i trikovi za pretvaranje nestrukturiranih podataka iz dnevnika u ELK Stack koristeći GROK u LogStash

Uz Grok, vaši podaci dnevnika su strukturirani!

Savjeti i trikovi za pretvaranje nestrukturiranih podataka iz dnevnika u ELK Stack koristeći GROK u LogStash

Kao što možemo vidjeti na gornjoj slici, Grok je sposoban automatski upariti podatke dnevnika sa Elasticsearch-om. Ovo olakšava upravljanje evidencijama i brzo traženje informacija. Umjesto da kopate po log datotekama da biste otklonili greške, možete jednostavno filtrirati prema onome što tražite, kao što je okruženje ili URL.

Isprobajte izraze Groka! Ako imate neki drugi način da to učinite ili imate bilo kakvih problema s primjerima iznad, samo napišite komentar ispod kako biste me obavijestili.

Hvala na čitanju—i pratite me ovdje na Medijumu za još zanimljivijih članaka o softverskom inženjerstvu!

Resursi

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 Izvor veze

Telegram kanal by Elasticsearch

izvor: www.habr.com

Dodajte komentar