2015-04-01 10 views
6

Ich verfüge meine Logs in Elasticsearch. Also für einen Index von Log-Datum der Erstellung in seiner Zeitstempel, verwende ich date Filter wie folgt aus:Syslog Zeitstempel ohne Jahr?

date { 
       "locale" => "en" 
       match => ["timestamp", "MMM d HH:mm:ss", "MMM dd HH:mm:ss", "ISO8601"] 
       target => "@timestamp" 
     } 

I Protokolle von syslog benutze und syslog Zeitformat doest haben nicht Jahr:

# Syslog Dates: Month Day HH:MM:SS 
SYSLOGTIMESTAMP %{MONTH} +%{MONTHDAY} %{TIME} 

So Nach dem Verwenden des Datumsfilters ist der erstellte Index wie logstash-2015.12.26 , wenn ich ein Protokoll vom 26. Dezember 2014 lese. Da der Zeitstempel im Protokoll nicht verfügbar ist, wird standardmäßig das aktuelle Jahr ausgewählt.

Irgendeine Idee, wie man den korrekten Index bildet?

Antwort

7

Wenn ein Jahr in der Zeichenkette fehlt, die von Joda Time analysiert wird, ist Logstash standardmäßig auf das Jahr eingestellt, in dem der Logstash-Prozess gestartet wurde. Siehe github.com/logstash-plugins/logstash-filter-date bug #3. Als temporäre Problemumgehung fügen Sie einen temporären Filter hinzu, um das korrekte Jahr (2014) an das Ende des Zeitstempelfelds anzuhängen, und passen Sie Ihr date filter Muster an, um YYYY einzuschließen.

filter { 
    mutate { 
    replace => ["timestamp", "%{timestamp} 2014"] 
    } 
    date { 
    locale => "en" 
    match => ["timestamp", 
       "MMM d HH:mm:ss YYYY", 
       "MMM dd HH:mm:ss YYYY", 
       "ISO8601"] 
    } 
} 
+1

Also außer dem temporären Fest Code gibt ist keine Problemumgehung? –

+0

Ich glaube nicht, dass es gibt, nein. Nun, außer dass die Zeit auf der Maschine, auf der Logstash läuft, zurückgesetzt wird, aber das wäre eine wirklich schlechte Idee. –

0

Wenn die Protokolldateien Sie laden das Jahr im Dateinamen haben, können Sie es mit einem grok Filter extrahieren können, erstellen Sie ein neues Feld, das das Datum hat man aus dem syslog plus das Jahr aus dem gezogen hat Dateiname.

Ein Beispiel, wie das Datum/Zeit aus dem Dateinamen zu extrahieren finden Sie hier: Logstash: How to use date/time in a filename as an imported field

1

Sie können Ihre Kette von Datum zu einem Datumsformat Datumsfilter konvertieren. Wenn Sie den Datumsfilter verwenden, überschreibt das Datum (oder datetime) Ihres Protokolls standardmäßig den @ -Zeitstempel. Also, in Ihrem Filter brauchen Sie kein Ziel. Sie verwenden es nur, wenn Sie eine variable Zeichenfolge in Datum konvertieren möchten.

Beispiel: match => [ "Zeitstempel", "MMM d HH: mm: ss", "MMM HH dd: mm: ss", "ISO8601"]