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.
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.
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
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
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.
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.
Nakon što sam se poigrao različitim sintaksama, konačno sam mogao strukturirati podatke dnevnika onako kako sam želio.
Grok Debugger Link
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!
Uz Grok, vaši podaci dnevnika su strukturirani!
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
PS
Telegram kanal by
izvor: www.habr.com