2015-01-30 9 views
5

Ich Veranstaltungen wieWie debugge ich den Abgleich des Datums?

[Sun Jan 11 10:43:35 2015][3205.51466981] user idp : testing 10.234.22.220 (10.234.22.220) [61673782] 

mit

%{SYSLOG5424SD:timestamp}%{GREEDYDATA}user %{WORD:user} : testing %{HOST:ip} 

Es funktioniert, sehe ich die verschiedenen Felder in Elasticsearch/Kibana entsprechen. Insbesondere timestamp in dem obigen Beispiel ist abgestimmt mit [Sun Jan 11 10:43:35 2015]

Ich mag nun dieses Spiel zu verwenden, mit date um @timestamp das Recht zu haben.

ich in filter

date 
    { 
     match => [ "timestamp", "SYSLOG5424SD" ] 
    } 

verwenden versucht, aber diese Abstürze logstash mit einem Ausgang was darauf hindeutet, einen Fehlerbericht einreichen - Ich öffnete a ticket.

In der Zwischenzeit habe ich versucht, über

date 
    { 
     match => [ "timestamp", "\[EEE MMM dd HH:mm:ss y\]" ] 
    } 

das Muster explizit passen Wie Sie vermuten - sie paßt nicht, wird @timestamp auf die Zeit eingestellt, wenn das Ereignis von logstash angemeldet ist.

Können Sie das Problem erkennen, oder gibt es eine clevere Möglichkeit, solche Fälle zu debuggen?

Antwort

6

Der Zeitstempel, der vom Datumsfilter erstellt wird, basiert nicht auf regulären Ausdrücken oder grok-Ausdrücken. Deshalb funktioniert SYSLOG5424SD dort nicht. Abgesehen von ein paar Sonderfällen, die in der filter documentation aufgeführt sind, können Sie nur Token verwenden, die von der Joda-Time-Bibliothek erkannt werden. Siehe die Dokumentation der Klasse joda.time.format.DateTimeFormat.

Sie waren ganz in der Nähe es richtig zu machen - escape nicht nur die eckigen Klammern:

date { 
    match => ["timestamp", "[EEE MMM dd HH:mm:ss y]"] 
} 

Auch hier sind Joda-Time-Muster nicht reguläre Ausdrücke so eckige Klammer Literale Sie nicht übereinstimmen tun müssen etwas Besonderes tun. Zitieren der Joda-Time-Dokumentation:

Alle Zeichen im Muster, die nicht in den Bereichen ['a' .. 'z'] und ['A' .. 'Z'] sind, werden wie behandelt zitierter Text. Zum Beispiel Zeichen wie ':', '.', '', '#' Und '?' wird im resultierenden Zeittext angezeigt, auch wenn sie nicht in einfache Anführungszeichen eingeschlossen sind.

+0

Muss es "Timestamp" genannt werden - das gleiche wie im Grok Filter? – Tjorriemorrie

+1

@Tjorriemorrie In diesem Fall ist "timestamp" der Name des Felds, das du parsen willst. Wenn du also dieses Feld über einen grok-Filter (der typisch ist) füllen willst, muss es mit dem Namen des Feldes übereinstimmen, das mit dem grok extrahiert wurde Filter. –

2

Ihre zweite Frage zu: Ja, es gibt eine kluge Art und Weise ist, solche Fälle zu debuggen, gibt ein Online-grok Debugger (http://grokdebug.herokuapp.com/) ist, und eine joda Zeit Debugger, habe ich von der ersten inspiriert: https://java-time-parse-debugger.herokuapp.com/

Update: Da Benutzer aufgefordert werden, auf die DateTime-API von Java 8 zu migrieren, habe ich diese debuggung-Webanwendung migriert, um die DateTime-API von Java 8 ohne JodaTime zu verwenden.

+0

Hinzufügen eines Beispiels zu Ihrer Website würde einem Neuling helfen.Jetzt gibt es ein fehlendes Format, fml :( – Tjorriemorrie

+0

@Tjorriemorrie, danke für das Feedback. Ich aktualisierte diese App, jetzt mit Beispiel und ein wenig mehr Informationen. –