2017-09-06 4 views
0

Ich habe einige alte Protokolldateien (eine Datei pro Tag). log-2017.09.01.json log-2017.09.02.json etcElasticsearch/Logstash definieren Zeit oder Datum beim Importieren alter Protokolldateien

Es gibt keine aktuellen Informationen in der JSON-Datei.

Standardmäßig ist der Zeitstempel des Index das Datum der Indexerstellung.

Ich versuche, einen Index für jede dieser Protokolldatei zu erstellen, und ich möchte, dass der Zeitstempel des Index, der jeder Protokolldatei entspricht, mit dem durch den Namen der Datei definierten identisch ist. dh ich möchte einen Index "log-2017.09.01" für den der Zeitstempel wäre 2017.09.01 und ein anderer Index "log-2017.09.02" für den der Zeitstempel wäre 2017.09.02

Weiß jemand wie einfach machen?

+0

Offenbar, wenn das Dateieingabe-Plugin verwendet wird, wird ein 'Pfad'-Feld erstellt, das den Pfad zu der Datei enthält, die gelesen wird, siehe diese Frage: https://stackoverflow.com/questions/22916200/logstash-how-to -add-Dateiname-als-ein-Feld. Sie müssen das Datum immer noch aus dem Pfad extrahieren und den Rest erledigen. – baudsp

Antwort

0

Es gibt hier kein einfaches, aber es kann getan werden. Es dauert ein paar Schritte.

Der erste Schritt, erhalten Sie das Datum aus dem Dateipfad.

filter { 
    grok { 
    match => { "path", "^log-%{DATA:date_partial}$" } 
    } 
} 

Der zweite Schritt besteht darin, Ihre Timestamp-Daten aus den Log-Zeilen zu ziehen. Ich nehme an, Sie wissen, wie man das macht.

Der dritte Schritt besteht darin, ein Datumsfeld aus Teilen zusammenzusetzen.

filter { 
    mutate { 
    add_field => { "full_timestamp", "%{date_partial} %{date_hour}:%{date_minute}" } 
    } 
} 

Der letzte Schritt ist es, die date{} Filter auf diesem aufgebauten Feld zu verwenden.

filter { 
    date { 
    match => [ "full_timestamp", "yyyy.MM.dd HH:mm" ] 
    } 
} 

Dies sollte Ihnen eine Idee geben, wie die Technik benötigt wird.

Verwandte Themen