3

Je le suivant ci-dessous sorte de JSON présent avec moi à être sous-évaluées à la recherche élastique en utilisant filebeat {"@timestamp":"2017-02-10T06:30:51.424Z","beat":{"hostname":"myhostname","name":"mydevice-logger","version":"5.2.0"},"fields":{"device_type":"mydevice","env":"staging"},"metricset":{"module":"system","name":"cpu","rtt":211},"system":{"cpu":{"cores":4,"idle":{"pct":0.000000},"iowait":{"pct":0.000000},"irq":{"pct":0.000000},"nice":{"pct":0.000000},"softirq":{"pct":0.000000},"steal":{"pct":0.000000},"system":{"pct":0.000000},"user":{"pct":0.000000}}},"tags":["automata","box"],"type":"metricbeat-test-log"}comment remplacer champ d'horodatage provenant de JSON dans logstash

ma logstash (version 5.1.1) contient config, entrée, filtre et sortie comme ci-dessous -

input { 
    beats { 
     port => 5046 
     codec => json 
    } 
} 

filter { 
    if ...{} 
    else if [type] == "metricbeat-test-log" { 

     date { 
     match => ["@timestamp", "ISO8601"] 
     } 

     } 
    } 

} 


output { 
    if ...{} 
    else if [type] == "metricbeat-test-log" { 
     stdout { codec => rubydebug } 
    } 
} 

Le type est bon mais le filtre de date ne fonctionne pas. Le @timestamp prend toujours l'horodatage actuel toujours. Je veux le remplacer par l'original @timestamp présent dans json.

+0

Utilisez-vous réellement Filebeat pour écrire les données JSON de Metricbeat dans Elasticsearch? –

+0

Oui, la raison en est un appareil hors ligne. Je collectionne le journal de metricbeat et les met dans la recherche élastique –

+0

bien que je puisse simplement employer un script de python pour vider le json entier dans l'ES cependant je trouve using le battement de fil plus pratique pour mon cas –

Répondre

0

J'ai la réponse à la suite de cet ancien thread https://discuss.elastic.co/t/replace-timestamp-with-actual-timestamp-from-log-file/72017 qui explique que le "@timestamp":"2017-02-10T06:30:51.424Z" dans la ligne de journal ci-dessus est une représentation JSON du champ @timestamp et de sa valeur. Suite aux suggestions j'ai ajouté la configuration de json dans le fichier et cela a fonctionné pour moi.

- input_type: log 
    paths: 
    - /var/logs/mylogs/*.log 
    fields: 
    environment: testing 
    document_type: test-metric-document 

    json.keys_under_root: true # added this line 
    json.overwrite_keys: true # added this line 

Bien que je ne suis pas satisfait de cette solution comme mon vrai besoin était d'obtenir l'horodatage à la fois, l'événement logstash un (dans une autre variable) et l'horodatage du journal en @timestamp.

0

Vous devez utiliser le paramètre cible dans le filtre Date:

De https://www.elastic.co/guide/en/logstash/5.1/plugins-filters-date.html#plugins-filters-date-target

cible

type de valeur est une chaîne

Valeur par défaut est "@timestamp"

Stocke l'horodatage correspondant dans le champ cible donné . S'il n'est pas fourni, la mise à jour du champ @timestamp de l'événement est effectuée par défaut.

+0

bren, je pensais également même et l'avais essayé, donne '_dateparsefailure' car il ne trouve pas le champ @timestamp. @timestamp dans les logs n'est généralement pas une chaîne mais un objet. Plus de détails discutés dans https://discuss.elastic.co/t/replace-timestamp-with-actual-timestamp-from-log-file/72017 –