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

Posted

技术标签:

【中文标题】Logstash 日期过滤器无法正常工作【英文标题】:Logstash Date filter not working properly 【发布时间】:2021-04-28 15:49:49 【问题描述】:

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

过滤代码:

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,

小时和分钟已更改

【问题讨论】:

在这种情况下,您可以使用 dissect 过滤器,而不是使用 grok,它应该会更高效 【参考方案1】:

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

【讨论】:

【参考方案2】:

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

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

【讨论】:

以上是关于Logstash 日期过滤器无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章

Logstash:如何在日期过滤器模式中匹配时区 ID“CET”?

未找到 logstash grok 过滤器模式

无法以编程方式在视图 Drupal 7 中为日期设置公开过滤器

丢弃过滤器不工作logstash

Logstash:使用 Ruby 过滤器

3. Logstash8.1 工作原理