【问题标题】:Extract specific time field from timestamp in logstash从logstash中的时间戳中提取特定的时间字段
【发布时间】:2015-11-20 05:58:32
【问题描述】:

我有一个默认格式的自动生成的@timestamp。我想要的是提取时间戳的小时/月/工作日,并将其放在另一个字段中。

例如,现在我的时间戳是这样的:

@timestamp: "2015-08-26T09:04:42.284Z"

有没有办法获取以下字段?

  • 小时:09(或9)?数字格式。
  • month:08(或 8,或 Aug、August...)数字或字符串格式。
  • 工作日:周一、周二、周三……

我希望它根据连接的小时/天制作一个 kibana4 直方图,并带有一个平均指标。如果有其他方法可以实现,请告诉我!

我已经在整个网络上进行了搜索,但找不到任何解决方案。我将不胜感激。

【问题讨论】:

    标签: elasticsearch timestamp logstash kibana kibana-4


    【解决方案1】:

    终于明白了。

    您可以使用符号%{} 来做到这一点。简单地说:

    add_field => {"[hour]" => "%{+HH}"}
    add_field => {"[weekday]" => "%{+EEE}"}
    

    Here 是要使用的符号的引用。

    就是这样!

    【讨论】:

    • 非常感谢!我尝试了其他人推荐的各种其他解决方案,但它们要么不起作用,要么在最新产品版本中不再受支持,或者需要额外的 gem 插件,这会导致其他 SSL 证书相关错误。该解决方案优雅且有效。您在哪里找到有关使用 %{} 语法的文档?
    • 在 grok 过滤器中使用了 %{} 语法。如需更多文档,请参阅elastic.co/guide/en/logstash/current/plugins-filters-grok.html
    • 你是在约会中做add_field 还是作为约会的一部分?您能否发布一个使用此代码的插件的更完整示例?
    • 对此的进一步测试表明%{+...}语法适用于@timestamp,不适用于其他日期时间字段。
    【解决方案2】:

    %{+HH} 值取自@timestamp。 使用 UTC 的时间戳。

    如果您想要本地时间的小时数,您需要使用 ruby​​ 过滤器。

      ruby {
        code => "tstamp = event.get('logdatetime').to_i
                 event.set('logdatetime', Time.at(tstamp).strftime('%Y-%m-%d %H:%M:%S'))
                 event.set('logdate', Time.at(tstamp).strftime('%Y-%m-%d'))"
      }
    

    来自: https://altinity.com/blog/2017/12/18/logstash-with-clickhouse

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-11-29
      • 1970-01-01
      • 2015-01-10
      • 2016-08-10
      • 1970-01-01
      • 2016-12-30
      • 1970-01-01
      相关资源
      最近更新 更多