Zeitstempel des Ereignisses mit dem Zeitstempel der Nachricht zu ersetzen funktioniert nicht für mich. Hier sind die Details.Logstash: Ersetzen von Zeitstempel von Nachricht funktioniert nicht
Beispielprotokoll:
20170119 144002.184140 0005B9427CA0_CU_1 user.notice ProcMon:: 10.220.0.13 is valid IP Address
Muster:
CSSYSLOGTIMESTAMP %{YEAR}%{MONTHNUM}%{MONTHDAY}[T ]%{HOUR}%{MINUTE}%{SECOND}.%{NONNEGINT:MSEC}
Filter:
filter {
grok {
patterns_dir => ["/root/logstash-5.5.0/patterns"]
match => { "message" => "^%{CSSYSLOGTIMESTAMP:syslog_timestamp} %{DATA:syslog_hostname} %{DATA:syslog_level} %{DATA:app_name}: %{GREEDYDATA:syslog_message}" }
}
date {
match => ["syslog_timestamp" , "yyyyMMdd HHmmss.SSS"]
target => "@timestamp"
add_field => { "debug" => "timestampMatched"}
}
}
Logstash Debug-Ausgabe:
[2017-07-18T10:25:01,152][DEBUG][logstash.pipeline ] filter received {"event"=>{"@timestamp"=>2017-07-18T04:54:55.170Z, "offset"=>747452, "@version"=>"1", "input_type"=>"log", "beat"=>{"hostname"=>"node1", "name"=>"node1", "version"=>"5.5.0"}, "host"=>"node1", "source"=>"/root/samplelogs/Debug.log", "message"=>"20170119 144002.184140 0005B9427CA0_CU_1 user.notice ProcMon:: 10.220.0.13 is valid IP Address", "type"=>"log", "tags"=>["beats_input_codec_plain_applied"]}}
[2017-07-18T10:25:01,154][DEBUG][logstash.filters.grok ] Running grok filter {:event=>2017-07-18T04:54:55.170Z node1 20170119 144002.184140 0005B9427CA0_CU_1 user.notice ProcMon:: 10.220.0.13 is valid IP Address}
[2017-07-18T10:25:01,159][DEBUG][logstash.filters.grok ] Event now: {:event=>2017-07-18T04:54:55.170Z node1 20170119 144002.184140 0005B9427CA0_CU_1 user.notice ProcMon:: 10.220.0.13 is valid IP Address}
[2017-07-18T10:25:01,165][DEBUG][logstash.pipeline ] output received {"event"=>{"MSEC"=>"184140", "offset"=>747452, "input_type"=>"log", "source"=>"/root/samplelogs/Debug.log", "message"=>"20170119 144002.184140 0005B9427CA0_CU_1 user.notice ProcMon:: 10.220.0.13 is valid IP Address", "type"=>"log", "syslog_message"=>"10.220.0.13 is valid IP Address", "tags"=>["beats_input_codec_plain_applied", "_dateparsefailure"], "app_name"=>"ProcMon:", "@timestamp"=>2017-07-18T04:54:55.170Z, "syslog_hostname"=>"0005B9427CA0_CU_1", "syslog_timestamp"=>"20170119 144002.184140", "@version"=>"1", "beat"=>{"hostname"=>"node1", "name"=>"node1", "version"=>"5.5.0"}, "host"=>"node1", "syslog_level"=>"user.notice"}}
Ich kann sehen, dass alle Felder korrekt extrahiert werden. Der Nachrichtenzeitstempel wird im Feld syslog_timestamp erstellt. Der @ -Zeitstempel wird jedoch nicht durch den Nachrichtenzeitstempel ersetzt. Was mache ich falsch? Vielen Dank.
Das date.match funktioniert nicht wie grok.match. Das date.match benötigt eine ganze Zeichenfolge, die genau zum Muster passt. Zusätzliche Zeichen werden nicht toleriert. – kubanczyk