Elastic search ingest filter et filebeat
Par pepin le mercredi, octobre 27 2021, 16:53 - Elasticsearch - Lien permanent
Ayant mis les logs de container docker en json, j'ai installé filebeat pour shipper directement ceux-ci à elasticsearch. Seul bémol, c'est que filebeat met comme timestamp source, l'heure à laquelle il à récolté (harvest) les logs.
Pour corriger ceci, il faut passer par un process d'ingest spécifique qui modifiera le document.
Nous créons notre ingest avec la commande suivante :
curl -XPUT pvalois:xxxxxxxxx@10.10.31.60:9200/_ingest/pipeline/json_timestamp \ -H "Content-type: application/json" \ -d '{ "processors": [ { "set": { "field": "_source.@timestamp", "value": "{{json.time}}", "ignore_failure": true } } ] }'
Comme ou le voir celle-ci crée un ingest préprocesseur nommé "json_timestamp" qui copie le content de json.time dans _source.@timestamp, corrigeant ainsi l'heure de réception du message.
Cependant la création de cet ingest ne suffit pas, il faut notifier a filebeat de l'utiliser lors de la communication avec elasticsearch. Pour cela, nous configurons le /etc/filebeat/filebeat.yml comme suit :
output.elasticsearch: hosts: [pvalois:xxxxxxxx@10.10.31.60:9200] pipeline: json_timestamp
Et voila, nos messages envoyés via filebeat seront maintenant livré à notre processor json.timestamp et tout sera propre à l'importation, même si celle-ci est faite à posteriori.