Logstash 日期过滤器无法正常工作

Logstash Date filter not working properly

我试图过滤消息以获取时间戳并使用日期过滤器将字符串转换为日期,但转换后的日期与原始日期不同。

过滤代码:

filter {
   grok {
      match => [ "message", "%{TIMESTAMP_ISO8601:timestamp} \| %{LOGLEVEL:loglevel} \| %{NOTSPACE:taskid} \| %{NOTSPACE:logger} \| %{WORD:label}( \| %{INT:duration:int})?" ]
   }
  
   date {
      match => ["timestamp", "YYYY-MM-DD HH:mm:ss,SSS"]
      target => "timestamp"
   }
}

输入

2021-04-19 12:06:39,586 | INFO | 12345 | TASK_START | start

输出

 "timestamp" => 2021-01-19T06:36:39.586Z,

小时和分钟变了

logstash 和 elasticsearch 将日期存储为 UTC,而 kibana 会将其映射到浏览器的时区。默认情况下,日期过滤器将使用本地时区。因此,如果您处于 Asia/Kolkata 时区,与 UTC 相比为 +05:30,则这完全符合预期。如果时间戳字段在不同的时区,则使用日期过滤器的时区选项来告诉它哪个时区。

如果日志中的时间戳不是 UTC,您可以提供时区信息。 例如:

date {
    match => ["timestamp", "YYYY-MM-DD HH:mm:ss,SSS"]
    timezone => "Asia/Kolkata"
    target => "@timestamp" // <--- this is optional, @timestamp is default
}