3

Ich habe mit mir folgenden unten Art von Json in Elasticsearch abgeladen werden 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"}wie aus json kommenden Zeitstempel-Feld in logstash außer Kraft zu setzen

meine logstash (Version 5.1.1) config enthält, Eingang verwenden, Filter und eine Ausgabe wie unten -

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

der Typ ist richtig aber die Datumsfilter funktioniert nicht. Die @timestamp übernimmt schließlich immer den aktuellen Zeitstempel. Ich möchte es durch Original @timestamp ersetzen, das in json vorhanden ist.

+0

Verwenden Sie wirklich FileBeat, um die JSON-Daten von Metricbeat in Elasticsearch zu schreiben? –

+0

Ja, der Grund ist ein Offline-Gerät. Ich sammle Metricbeat Log und setzen sie in elastische Suche –

+0

, obwohl ich einfach ein Python-Skript verwenden kann, um die gesamte JSON in ES Dump jedoch finde ich mit filebeat praktischer für meinen Fall –

Antwort

0

Ich habe die Antwort nach diesem alten Thread https://discuss.elastic.co/t/replace-timestamp-with-actual-timestamp-from-log-file/72017, die erklärt, dass die "@timestamp":"2017-02-10T06:30:51.424Z" in Log-Zeile oben ist eine JSON-Darstellung des @ Timestamp-Feld und dessen Wert. Den Vorschlägen folgend habe ich die json-Konfiguration in filebeat hinzugefügt und es hat für mich funktioniert.

- 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 

Obwohl ich mit dieser Lösung als mein wirkliches Bedürfnis nicht glücklich bin war die beiden Zeitstempel zu erhalten, das logstash Ereignis eines (in einer anderen Variablen) und den Zeitstempel aus dem Log-in @timestamp.

0

Sie sollten die Zieleinstellung im Datumsfilter verwenden:

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

Ziel

Werttyp Zeichenfolge ist

Der Standardwert ist "@timestamp"

Speichern Sie den übereinstimmenden Zeitstempel in das angegebene Zielfeld . Falls nicht angegeben, wird standardmäßig das @timestamp-Feld des Ereignisses aktualisiert.

+0

bren, dachte ich auch gleich und hatte es versucht, es gibt '_dateparsefailure', weil das @timestamp-Feld nicht gefunden werden kann. @timestamp in Protokollen ist normalerweise keine Zeichenfolge, sondern ein Objekt. Weitere Details unter https://discuss.elastic.co/t/replace-timestamp-with-actual-timestamp-from-log-file/72017 –

Verwandte Themen