Strukturering van ongestruktureerde data met GROK
As jy die Elastic Stack (ELK) gebruik en belangstel om persoonlike Logstash-logboeke na Elasticsearch te karteer, dan is hierdie pos vir jou.
Die ELK-stapel is 'n akroniem vir drie oopbronprojekte: Elasticsearch, Logstash en Kibana. Saam vorm hulle 'n logbestuurplatform.
- Elasticsearch is 'n soek- en analitiese stelsel.
- logstash is 'n bediener-kant data verwerking pyplyn wat data van verskeie bronne op dieselfde tyd aanvaar, dit transformeer, en dan stuur dit na 'n "stash" soos Elasticsearch.
- kibana laat gebruikers toe om data te visualiseer met behulp van grafieke en grafieke in Elasticsearch.
Slae het later verskyn en is 'n maklike dataversender. Die bekendstelling van Beats het die Elk Stack in 'n Elastic Stack omskep, maar dit is nie die punt nie.
Hierdie artikel handel oor Grok, wat 'n kenmerk in Logstash is wat jou logs kan transformeer voordat dit na die stash gestuur word. Vir ons doeleindes sal ek net praat oor die verwerking van data van Logstash na Elasticsearch.
Grok is 'n filter binne Logstash wat gebruik word om ongestruktureerde data te ontleed in iets gestruktureerd en navraagbaar. Dit sit bo-op 'n gereelde uitdrukking (regex) en gebruik tekspatrone om stringe in loglêers te pas.
Soos ons in die volgende afdelings sal sien, gaan die gebruik van Grok 'n lang pad wanneer dit kom by doeltreffende logbestuur.
Sonder Grok is u logdata ongestruktureerd
Sonder Grok, wanneer logs vanaf Logstash na Elasticsearch gestuur word en in Kibana gelewer word, verskyn dit slegs in die boodskapwaarde.
Dit is moeilik om betekenisvolle inligting in hierdie situasie te bevraagteken omdat alle logdata in dieselfde sleutel gestoor word. Dit sal beter wees as die logboodskappe beter georganiseer is.
Ongestruktureerde data uit logs
localhost GET /v2/applink/5c2f4bb3e9fda1234edc64d 400 46ms 5bc6e716b5d6cb35fc9687c0
As jy die rou data van nader bekyk, sal jy sien dat dit eintlik uit verskillende dele bestaan, elk geskei deur 'n spasie.
Vir meer ervare ontwikkelaars kan jy waarskynlik raai wat elk van die dele beteken en wat die logboodskap van die API-oproep is. Die aanbieding van elke item word hieronder uiteengesit.
Gestruktureerde siening van ons data
- localhost == omgewing
- GET == metode
- /v2/applink/5c2f4bb3e9fda1234edc64d == url
- 400 == reaksie_status
- 46ms == reaksie_tyd
- 5bc6e716b5d6cb35fc9687c0 == user_id
Soos ons in gestruktureerde data sien, is daar 'n bestelling vir ongestruktureerde logs. Die volgende stap is om die rou data programmaties te verwerk. Dis waar Grock skitter.
Grok Sjablone
Ingeboude Grok-sjablone
Logstash kom met meer as 100 ingeboude sjablone vir die strukturering van ongestruktureerde data. Jy moet beslis hieruit voordeel trek wanneer moontlik vir algemene syslogs soos apache, linux, haproxy, aws ensovoorts.
Wat gebeur egter as u gepasmaakte logs het soos in die voorbeeld hierbo? Jy moet jou eie Grok-sjabloon bou.
Grok persoonlike sjablone
Moet probeer om jou eie Grok-sjabloon te bou. ek het gebruik
Let daarop dat die sintaksis vir Grok-sjablone soos volg is: %{SYNTAX:SEMANTIC}
Die eerste ding wat ek probeer doen het, was om na die blad te gaan Vind in die Grok-ontfouter. Ek het gedink dit sal wonderlik wees as hierdie instrument outomaties 'n Grok-patroon kan genereer, maar dit was nie baie nuttig nie, aangesien dit net twee wedstryde gevind het.
Deur hierdie ontdekking te gebruik, het ek my eie sjabloon op die Grok-ontfouter begin bou deur die sintaksis op die Elastic Github-bladsy te gebruik.
Nadat ek met verskillende sintaksis gespeel het, kon ek uiteindelik die logdata struktureer soos ek wou.
Skakel na die Grok-ontfouter
Oorspronklike teks:
localhost GET /v2/applink/5c2f4bb3e9fda1234edc64d 400 46ms 5bc6e716b5d6cb35fc9687c0
patroon:
%{WORD:environment} %{WORD:method} %{URIPATH:url} %{NUMBER:response_status} %{WORD:response_time} %{USERNAME:user_id}
Wat het op die ou end gebeur
{
"environment": [
[
"localhost"
]
],
"method": [
[
"GET"
]
],
"url": [
[
"/v2/applink/5c2f4bb3e9fda1234edc64d"
]
],
"response_status": [
[
"400"
]
],
"BASE10NUM": [
[
"400"
]
],
"response_time": [
[
"46ms"
]
],
"user_id": [
[
"5bc6e716b5d6cb35fc9687c0"
]
]
}
Met die Grok-sjabloon en gekarteerde data in die hand, is die laaste stap om dit by Logstash te voeg.
Dateer die Logstash.conf-konfigurasielêer op
Op die bediener waar jy die ELK-stapel geïnstalleer het, gaan na die Logstash-konfigurasie:
sudo vi /etc/logstash/conf.d/logstash.conf
Plak jou veranderinge.
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" ]
}
}
Nadat u die veranderinge gestoor het, herbegin Logstash en kontroleer die status daarvan om seker te maak dit werk steeds.
sudo service logstash restart
sudo service logstash status
Ten slotte, om seker te maak dat die veranderinge in werking getree het, maak seker dat jy die Elasticsearch-indeks vir Logstash in Kibana opdateer!
Met Grok is u logdata gestruktureer!
Soos ons in die prent hierbo kan sien, is Grok in staat om logdata outomaties na Elasticsearch te karteer. Dit maak dit makliker om logs te bestuur en inligting vinnig navraag te doen. In plaas daarvan om deur loglêers te vroetel om te ontfout, kan jy eenvoudig uitfiltreer waarna jy soek, soos 'n omgewing of 'n url.
Probeer om Grok-uitdrukkings te probeer! As jy 'n ander manier het om dit te doen, of enige probleme met die voorbeelde hierbo het, los 'n opmerking hieronder om my te laat weet.
Dankie vir die lees - en volg my asseblief hier op Medium vir meer interessante sagteware-ingenieurswese-artikels!
Ресурсы
Telegram kanaal deur
Bron: will.com