====== grok filter======
[[elk_stack:elk_stack|{{ :elk_stack:icon.jpg?120|}}]]
===== context=====
dit document beschrijft de werking van grok.\\ Deze filter parset __raw data__ in een bruikbaar key/value paar zodat je deze makkelijker kunt doorzoeken
===== werking =====
* formaat van logboeken verschilt per toepassing
* voor logboeken worden doorgestuurd naar elaticsearch, wordt die __raw data__ doorzocht op bruikbare info
* aan deze data wordt een key/value paar toegekend
* dit paar wordt meegestuurd naar Elasticsearch
* je kan dan deze keys gaan gebruiken als zoekterm
===== voorbeeld =====
* toepassings logboek /var/log/webshop.log bevat onderstaande raw data: Feb 06 16:54:14 67.38.38.23 bestelt theeset Porcelain300
Feb 14 10:09:17 58.23.46.81 aanmelden retour theeset Porcelain300
...
* je kan deze data nu gaan opdelen in bruikbare (doorzoekbare) info:
* tijdstip
* wie: het ip-adres
* actie: een bestelling plaatsen, retour aanmelden
* artikel: aankoop
===== syntax=====
* grok kent een tekst patroon (SYNTAX) een veldnaam (SEMANTIC)toe: %{SYNTAX:SEMANTIC}
* voorbeeld:
* ''match => { "message" => "%{MONTH:maand} %{MONTHDAY:dag} %{TIME:tijdstip}" }''
* haalt maand, dag en tijdstip uit de entry en slaat die op onder genoemde keys
* voor veelgebruikte velden zijn er al grok filters [[https://github.com/logstash-plugins/logstash-patterns-core/blob/master/patterns/grok-patterns|beschikbaar]].
* filters definieer je in /etc/logstash/conf.d/:
filter {
grok {
match => { "message" => "%{MONTH:maand} %{MONTHDAY:dag} %{TIME:tijdstip} %{GREEDYDATA:webshop}" }
}
}
* bij elke aanpassing, dien je logstash te herstarten:sudo systemctl restart logstash
===== testen =====
- ga naar [[https://grokdebug.herokuapp.com/|Grokdebugger]]
- kopieer je log entry in het bovenste veld
- voeg %{GREEDYDATA} in je filter veld
- voeg stelselmatig filters toe:{{ :elk_stack:elkgrok.png? |}}
===== problemen, problemen =====
==== logentry wordt niet correct geparset ====
- controleer de syntax van je grok filter en herstart logstash: sudo systemctl restart logstash
- controleer ''/var/log/logstash/logstash-plain.log''
TER INFO: gefaalde parsing krijgen ook steeds de tag **_grokparsefailure**
==== fout: mapper_parsing_exception", "reason"=>"object mapping for [client] tried to parse field [client] as object, but found a concrete value"}}}} ====
* je gebruikt een keynaam die in logstash/filebeat wordt gebruikt. In dit geval: client
* kies een andere keynaam en herstart logstash: sudo systemctl restart logstash
===== meer info =====
* [[https://www.elastic.co/guide/en/logstash/7.6/plugins-filters-grok.html|grok basics]]
{{tag>elk_stack}}