Strukturimi i të dhënave të pastruktuara me GROK
Nëse po përdorni stack-un Elastic (ELK) dhe jeni të interesuar për të lidhur log-et e përdoruesit të Logstash me Elasticsearch, atëherë ky post është për ju.

Stacku ELK është një akronim për tre projekte me burim të hapur: Elasticsearch, Logstash dhe Kibana. Së bashku, ato formojnë një platformë për menaxhimin e log-eve.
- Elasticsearch â Ă«shtĂ« njĂ« sistem kĂ«rkimi dhe analize.
- Logstash â Ă«shtĂ« njĂ« pipeline server pĂ«r pĂ«rpunimin e tĂ« dhĂ«nave, qĂ« merr tĂ« dhĂ«na nga disa burime nĂ« tĂ« njĂ«jtĂ«n kohĂ«, i transformon ato dhe mĂ« pas i dĂ«rgon nĂ« njĂ« "stash", si Elasticsearch.
- Kibana lejon përdoruesit të vizualizojnë të dhënat me ndihmën e diagrameve dhe grafikëve në Elasticsearch.
Beats duke u shfaqur më vonë, është një dërgues të dhënash i lehtë. Hyrja e Beats e transformoi Elk Stack në Elastic Stack, por kjo nuk është thelbësore.
Ky artikull është dedikuar Grok, i cili është një funksion në Logstash që mund të transformojë log-et tuaja përpara se ato të dërgohen në stash. Për qëllimet tona, do të flas vetëm për përpunimin e të dhënave nga Logstash në Elasticsearch.

Grok është një filtrues brenda Logstash që përdoret për të analizuar të dhënat e pastruktuara në diçka të strukturuar dhe të kërkueshme. Ai ndodhet mbi shprehjet e rregullta (regex) dhe përdor modele teksti për të përputhur vargje në skedarët e log-eve.
Siç do të shohim në seksionet në vazhdim, përdorimi i Grok ka rëndësi të madhe kur bëhet fjalë për menaxhimin efektiv të log-eve.
Pa Grok, të dhënat tuaja të log-ut janë të pastruktuara

Pa Grok, kur log-et dërgohen nga Logstash në Elasticsearch dhe vizualizohen në Kibana, ato shfaqen vetëm si vlera mesazhi.
Kërkimi i informacionit të rëndësishëm në këtë situatë është i vështirë, pasi të gjitha të dhënat e log-ut ruhen në një çelës. Do të ishte më mirë nëse mesazhet e log-ut ishin organizuar më mirë.
Të dhënat e pastruktuara nga log-et
localhost GET /v2/applink/5c2f4bb3e9fda1234edc64d 400 46ms 5bc6e716b5d6cb35fc9687c0Nëse e vëreni me kujdes të dhënat e papërpunuara, do të shihni se ato në të vërtetë përbëhen nga pjesë të ndryshme, secila e ndarë me hapësirë.
Për zhvilluesit më të përvojë, ndoshta mund ta kuptoni se çfarë do të thotë secila nga pjesët dhe se kjo është një mesazh log nga thirrja e API. Prezentimi i çdo pika është renditur më poshtë.
Pamja e strukturuar e të dhënave tona
- â localhost == ambient
- â GET == metodĂ«
- â /v2/applink/5c2f4bb3e9fda1234edc64d == url
- â 400 == statusi_i_reagimit
- â 46ms == koha_e_reagimit
- â 5bc6e716b5d6cb35fc9687c0 == id_i_pĂ«rdoruesit
Siç e shohim në të dhënat e strukturuara, ekziston një rend për log-et e pa-strukturuara. Hapi tjetër është përpunimi programatik i të dhënave të papërpunuara. Këtu shkëlqen Grok.
Shabllonat Grok
Shabllonat e integruara Grok
Logstash vjen me më shumë se 100 shabllone të integruara për strukturimin e të dhënave të pa-strukturuara. Nëse keni mundësi, duhet të përfitoni nga kjo për log-et e zakonshme të sistemeve, si apache, linux, haproxy, aws etj.
Megjithatë, çfarë ndodh kur keni log-e të personalizuara, si në shembullin e mësipërm? Duhet të ndërtoni shabllonin tuaj të Grok.
Shabllonat e personalizuara të Grok
Nëse dëshironi të provoni për të ndërtuar shabllonin tuaj të Grok. Unë përdora dhe .
Vini re se sintaksa e shablloneve Grok duket si vijon: %{SYNTAX:SEMANTIC}
E para që përpiqesha të bëja ishte të kaloja te skeda Zbulo në debugger-in e Grok. Mendova se do të ishte e bukur nëse ky mjet mund të gjeneronte automatikisht shabllonin Grok, por kjo nuk ishte shumë e dobishme, pasi ai gjeti vetëm dy përputhje.

Duke përdorur këtë zbulim, fillova të krijoja shabllonin tim në debugger-in Grok, duke përdorur sintaksën e gjetur në faqen Github Elastic.

Pas lojës me sintaksat e ndryshme, përfundimisht arrita të strukturizoj të dhënat e log-ut ashtu siç doja.

Linku në debugger-in Grok
Teksti origjinal:
localhost GET /v2/applink/5c2f4bb3e9fda1234edc64d 400 46ms 5bc6e716b5d6cb35fc9687c0Shabllon:
%{WORD:ambient} %{WORD:metodë} %{URIPATH:url} %{NUMBER:statusi_i_reagimit} %{WORD:koha_e_reagimit} %{USERNAME:id_i_përdoruesit}Kjo që rezultoi në fund
{
"ambient": [
[
"localhost"
]
],
"metodë": [
[
"GET"
]
],
"url": [
[
"\/v2\/applink\/5c2f4bb3e9fda1234edc64d"
]
],
"statusi_i_reagimit": [
[
"400"
]
],
"NUMBASE10": [
[
"400"
]
],
"koha_e_reagimit": [
[
"46ms"
]
],
"id_i_përdoruesit": [
[
"5bc6e716b5d6cb35fc9687c0"
]
]
}Duke pasur në duar shabllonin Grok dhe të dhënat e përputhura, hapi i fundit është ta shtoni atë në Logstash.
Përditësimi i skedarit të konfigurimit Logstash.conf
Në serverin ku keni instaluar paketën ELK, shkoni te konfigurimi i Logstash:
sudo vi /etc/logstash/conf.d/logstash.confShtoni ndryshimet.
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" ]
}
}Pasi të ruani ndryshimet, rindez Logstash dhe kontrolloni gjendjen e tij për t'u siguruar që ai ende funksionon.
sudo service logstash restart
sudo service logstash statusNë fund, për t'u siguruar që ndryshimet kanë hyrë në fuqi, sigurohuni të përditësoni indeksin Elasticsearch për Logstash në Kibana!

Me Grok, të dhënat tuaja nga logët janë të strukturuara!

Siç e shohim në imazhin e mësipërm, Grok është në gjendje të lidhë automatikisht të dhënat e logëve me Elasticsearch. Kjo lehtëson menaxhimin e logëve dhe kërkimin e shpejtë të informacionit. Në vend që të kërkoni në skedarët e logëve për debug, ju mund thjesht të filtroni atë që po kërkoni, siç është ambienti ose url-ja.
Provo t'i japësh mundësi Grok expressions! Nëse ke një mënyrë tjetër për ta bërë këtë ose ke ndonjë problem me shembujt e mësipërm, thjesht lë një koment më poshtë për të më njoftuar për këtë.
Faleminderit pĂ«r leximin â dhe, ju lutem, mĂ« ndiqni kĂ«tu, nĂ« Medium, pĂ«r artikuj mĂ« interesantĂ« rreth inxhinierisĂ« sĂ« softuerit!
Burime
P.S
Kanal Telegrami për
Burimi: habr.com
