====== 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}}