Savjeti i trikovi za pretvaranje nestrukturiranih podataka iz zapisa u ELK stog pomoću GROK-a u LogStashu

Strukturiranje nestrukturiranih podataka s GROK-om

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

Savjeti i trikovi za pretvaranje nestrukturiranih podataka iz zapisa u ELK stog pomoću GROK-a u LogStashu

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

  • Elasticsearch je sustav za pretraživanje i analizu.
  • logstash je cjevovod za obradu podataka na strani poslužitelja koji unosi podatke iz više izvora istovremeno, transformira ih i zatim šalje u "skladište" kao što je Elasticsearch.
  • kibana omogućuje korisnicima vizualizaciju podataka pomoću dijagrama i grafikona u Elasticsearchu.

Beats došao kasnije i laki je pošiljatelj podataka. Uvođenje Beatsa transformiralo je Elk Stack u Elastic Stack, ali to nije poanta.

Ovaj članak govori o Groku, značajki u Logstashu koja može transformirati vaše zapise prije nego što se pošalju u spremište. Za naše potrebe, govorit ću samo o obradi podataka iz Logstasha u Elasticsearch.

Savjeti i trikovi za pretvaranje nestrukturiranih podataka iz zapisa u ELK stog pomoću GROK-a u LogStashu

Grok je filter unutar Logstasha koji se koristi za raščlanjivanje nestrukturiranih podataka u nešto strukturirano i podložno upitima. Nalazi se na vrhu regularnog izraza (regex) i koristi tekstualne uzorke za podudaranje nizova u datotekama dnevnika.

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

Bez Groka vaši su podaci u dnevniku nestrukturirani

Savjeti i trikovi za pretvaranje nestrukturiranih podataka iz zapisa u ELK stog pomoću GROK-a u LogStashu

Bez Groka, kada se dnevnici šalju iz Logstasha u Elasticsearch i prikazuju u Kibani, pojavljuju se samo u vrijednosti poruke.

Upit za značajne informacije u ovoj situaciji je težak jer su svi podaci dnevnika pohranjeni u jednom ključu. Bilo bi bolje da su poruke dnevnika bolje organizirane.

Nestrukturirani podaci iz zapisa

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

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

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

Strukturirani prikaz naših podataka

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

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

Grok predlošci

Ugrađeni Grok predlošci

Logstash dolazi s više od 100 ugrađenih predložaka za strukturiranje nestrukturiranih podataka. Svakako biste to trebali iskoristiti kad god je to moguće za općenite syslogove kao što su apache, linux, haproxy, aws i tako dalje.

Međutim, što se događa kada imate prilagođene zapisnike kao u gornjem primjeru? Morate izraditi vlastiti Grok predložak.

Prilagođeni Grok predlošci

Morate pokušati izgraditi vlastiti Grok predložak. Koristio sam Grok Debugger и Grok obrasci.

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

Prvo što sam pokušao učiniti je otići na karticu Istražite u Grok debuggeru. Mislio sam da bi bilo cool kada bi ovaj alat mogao automatski generirati Grok uzorak, ali nije bio previše koristan jer je pronašao samo dva podudaranja.

Savjeti i trikovi za pretvaranje nestrukturiranih podataka iz zapisa u ELK stog pomoću GROK-a u LogStashu

Koristeći ovo otkriće, počeo sam stvarati vlastiti predložak u Grok debuggeru koristeći sintaksu pronađenu na Elastic Github stranici.

Savjeti i trikovi za pretvaranje nestrukturiranih podataka iz zapisa u ELK stog pomoću GROK-a u LogStashu

Nakon igranja s različitim sintaksama, konačno sam uspio strukturirati podatke dnevnika onako kako sam želio.

Savjeti i trikovi za pretvaranje nestrukturiranih podataka iz zapisa u ELK stog pomoću GROK-a u LogStashu

Veza za ispravljanje pogrešaka Grok https://grokdebug.herokuapp.com/

Izvorni 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}

Što se dogodilo na kraju

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

Uz Grok predložak i mapirane podatke u ruci, posljednji korak je da ga dodate u Logstash.

Ažuriranje konfiguracijske datoteke Logstash.conf

Na poslužitelju na kojem ste instalirali ELK stog 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 spremanja promjena ponovno pokrenite Logstash i provjerite njegov status kako biste bili sigurni da i dalje radi.

sudo service logstash restart
sudo service logstash status

Na kraju, kako biste bili sigurni da su promjene stupile na snagu, Svakako ažurirajte svoj Elasticsearch indeks za Logstash u Kibani!

Savjeti i trikovi za pretvaranje nestrukturiranih podataka iz zapisa u ELK stog pomoću GROK-a u LogStashu

Uz Grok, vaši su podaci iz dnevnika strukturirani!

Savjeti i trikovi za pretvaranje nestrukturiranih podataka iz zapisa u ELK stog pomoću GROK-a u LogStashu

Kao što možemo vidjeti na gornjoj slici, Grok je sposoban automatski uskladiti podatke dnevnika s Elasticsearchom. To olakšava upravljanje zapisima i brzo traženje informacija. Umjesto kopanja po datotekama dnevnika radi otklanjanja pogrešaka, možete jednostavno filtrirati prema onome što tražite, kao što je okruženje ili url.

Isprobajte Grok izraze! Ako imate neki drugi način da to učinite ili imate problema s gornjim primjerima, samo napišite komentar ispod da me obavijestite.

Hvala na čitanju—i molim vas da me pratite ovdje na Mediumu za još zanimljivih članaka o softverskom inženjerstvu!

sredstva

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 Izvorna veza

Telegram kanal by Elasticsearch

Izvor: www.habr.com

Dodajte komentar