Strukturimi i të dhënave të pastrukturuara me GROK
Nëse jeni duke përdorur grupin Elastic (ELK) dhe jeni të interesuar të hartoni regjistrat e personalizuar të Logstash në Elasticsearch, atëherë ky postim është për ju.
Stacki ELK është një akronim për tre projekte me burim të hapur: Elasticsearch, Logstash dhe Kibana. Së bashku ata formojnë një platformë të menaxhimit të regjistrave.
- Elasticsearch është një sistem kërkimi dhe analitik.
- logstash është një tubacion për përpunimin e të dhënave nga ana e serverit që gëlltit të dhëna nga burime të shumta njëkohësisht, i transformon ato dhe më pas i dërgon në një "stash" siç është Elasticsearch.
- kibana i lejon përdoruesit të vizualizojnë të dhënat duke përdorur grafikët dhe grafikët në Elasticsearch.
Beats erdhi më vonë dhe është një dërgues i lehtë i të dhënave. Prezantimi i Beats e transformoi rafte Elk në Elastic Stack, por kjo nuk është çështja.
Ky artikull ka të bëjë me Grok, i cili është një veçori në Logstash që mund të transformojë regjistrat tuaj përpara se të dërgohen në ruajtje. Për qëllimet tona, unë do të flas vetëm për përpunimin e të dhënave nga Logstash në Elasticsearch.
Grok është një filtër brenda Logstash që përdoret për të analizuar të dhënat e pastrukturuara në diçka të strukturuar dhe të pyetshme. Ai ulet në krye të një shprehjeje të rregullt (regex) dhe përdor modele teksti për të përputhur vargjet në skedarët e regjistrit.
Siç do të shohim në seksionet në vijim, përdorimi i Grok bën një ndryshim të madh kur bëhet fjalë për menaxhimin efikas të regjistrave.
Pa Grok, të dhënat tuaja të regjistrit janë të pastrukturuara
Pa Grok, kur regjistrat dërgohen nga Logstash te Elasticsearch dhe jepen në Kibana, ato shfaqen vetëm në vlerën e mesazhit.
Kërkimi i informacionit kuptimplotë në këtë situatë është i vështirë sepse të gjitha të dhënat e regjistrit ruhen në një çelës të vetëm. Do të ishte më mirë nëse mesazhet e regjistrit do të organizoheshin më mirë.
Të dhëna të pastrukturuara nga regjistrat
localhost GET /v2/applink/5c2f4bb3e9fda1234edc64d 400 46ms 5bc6e716b5d6cb35fc9687c0
Nëse shikoni nga afër të dhënat e papërpunuara, do të shihni se ato në të vërtetë përbëhet nga pjesë të ndryshme, secila e ndarë nga një hapësirë.
Për zhvilluesit më me përvojë, ndoshta mund të merrni me mend se çfarë do të thotë secila nga pjesët dhe çfarë është mesazhi i regjistrit nga thirrja API. Paraqitja e secilit artikull është përshkruar më poshtë.
Pamje e strukturuar e të dhënave tona
- localhost == mjedis
- Metoda GET ==
- /v2/applink/5c2f4bb3e9fda1234edc64d == url
- 400 == status_përgjigje
- 46 ms == koha_përgjigje
- 5bc6e716b5d6cb35fc9687c0 == user_id
Siç e shohim në të dhënat e strukturuara, ekziston një urdhër për regjistrat e pastrukturuar. Hapi tjetër është përpunimi i softuerit të të dhënave të papërpunuara. Këtu shkëlqen Grok.
Shabllonet Grok
Modelet e integruara të Grok
Logstash vjen me mbi 100 shabllone të integruara për strukturimin e të dhënave të pastrukturuara. Ju duhet patjetër të përfitoni nga kjo sa herë që është e mundur për sistemet e përgjithshme si apache, linux, haproxy, aws etj.
Megjithatë, çfarë ndodh kur keni regjistra të personalizuar si në shembullin e mësipërm? Ju duhet të ndërtoni shabllonin tuaj Grok.
Modele të personalizuara të Grok
Ju duhet të përpiqeni të ndërtoni shabllonin tuaj të Grok. une e perdora
Vini re se sintaksa e shabllonit Grok është si më poshtë: %{SYNTAX:SEMANTIC}
Gjëja e parë që u përpoqa të bëja ishte të shkoja te skeda Zbuloni në korrigjuesin Grok. Mendova se do të ishte mirë nëse ky mjet mund të gjeneronte automatikisht një model Grok, por nuk ishte shumë i dobishëm pasi gjeti vetëm dy ndeshje.
Duke përdorur këtë zbulim, fillova të krijoj shabllonin tim në korrigjuesin Grok duke përdorur sintaksën e gjetur në faqen Elastic Github.
Pasi luajta me sintaksa të ndryshme, më në fund arrita t'i strukturoja të dhënat e regjistrit ashtu siç doja.
Link Debugger Grok
Teksti origjinal:
localhost GET /v2/applink/5c2f4bb3e9fda1234edc64d 400 46ms 5bc6e716b5d6cb35fc9687c0
model:
%{WORD:environment} %{WORD:method} %{URIPATH:url} %{NUMBER:response_status} %{WORD:response_time} %{USERNAME:user_id}
Çfarë ndodhi në fund
{
"environment": [
[
"localhost"
]
],
"method": [
[
"GET"
]
],
"url": [
[
"/v2/applink/5c2f4bb3e9fda1234edc64d"
]
],
"response_status": [
[
"400"
]
],
"BASE10NUM": [
[
"400"
]
],
"response_time": [
[
"46ms"
]
],
"user_id": [
[
"5bc6e716b5d6cb35fc9687c0"
]
]
}
Me shabllonin Grok dhe të dhënat e hartës në dorë, hapi i fundit është ta shtoni atë në Logstash.
Përditësimi i skedarit të konfigurimit Logstash.conf
Në serverin ku keni instaluar pirgun ELK, shkoni te konfigurimi Logstash:
sudo vi /etc/logstash/conf.d/logstash.conf
Ngjit 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" ]
}
}
Pas ruajtjes së ndryshimeve tuaja, rinisni Logstash dhe kontrolloni statusin e tij për t'u siguruar që është ende duke punuar.
sudo service logstash restart
sudo service logstash status
Së fundi, për t'u siguruar që ndryshimet kanë hyrë në fuqi, Sigurohuni që të përditësoni indeksin tuaj Elasticsearch për Logstash në Kibana!
Me Grok, të dhënat tuaja të regjistrit janë të strukturuara!
Siç mund ta shohim në imazhin e mësipërm, Grok është në gjendje të përputhë automatikisht të dhënat e regjistrit me Elasticsearch. Kjo e bën më të lehtë menaxhimin e regjistrave dhe kërkimin e shpejtë të informacionit. Në vend që të gërmoni skedarët e regjistrave për të korrigjuar, thjesht mund të filtroni sipas asaj që po kërkoni, si p.sh. një mjedis ose një url.
Provoni shprehjet e Grokut! Nëse keni një mënyrë tjetër për ta bërë këtë ose keni ndonjë problem me shembujt e mësipërm, thjesht shkruani një koment më poshtë për të më njoftuar.
Faleminderit për leximin - dhe ju lutem më ndiqni këtu në Medium për artikuj më interesantë të inxhinierisë softuerike!
burime
Kanali i telegramit nga
Burimi: www.habr.com