美文网首页
logstash DATE过滤插件

logstash DATE过滤插件

作者: _str_ | 来源:发表于2019-11-25 19:05 被阅读0次

    说明

    日期过滤器用于解析字段中的日期,然后使用该日期或时间戳作为事件的logstash时间戳。

    日期过滤器对于事件排序和回填旧数据尤其重要。如果您在活动中没有得到正确的日期,那么稍后搜索它们可能会导致排序混乱。

    在没有此过滤器的情况下,如果未在事件中设置时间戳,logstash将基于它第一次看到该事件(在输入时间)选择一个时间戳。例如,对于文件输入,时间戳记设置为每次读取的时间

    所以我们需要在logstash挖掘日志的时候将时间戳换成日志本身产生的时间,不应该是logstash挖掘时候的系统时间 这样我们会混乱

    编写一个date过滤插件

    
    input { stdin { } }
    
    filter {
      grok { match => [ "message", "%{HTTPDATE:[@metadata][timestamp]}" ] }
      date { match => [ "[@metadata][timestamp]", "dd/MMM/yyyy:HH:mm:ss Z" ] }
    }
    
    output {
      stdout { codec => rubydebug }
    --------------
    date插件还可以写成这种
    date { 
          match => [ "logdate", "dd/MMM/yyyy:HH:mm:ss Z" ] 
          target => "@timestamp"
    }
    -- 修改时间戳成为日志产生的时间
    

    注意:时区偏移量只需要用一个字母 Z 即可。

    image.png

    时区问题的解释

    很多中国用户经常提一个问题:为什么 @timestamp 比我们早了 8 个小时?怎么修改成北京时间?
    • 其实,Elasticsearch 内部,对时间类型字段,是统一采用 UTC 时间,存成 long 长整形数据的!对日志统一采用 UTC 时间存储,是国际安全/运维界的一个通识——欧美公司的服务器普遍广泛分布在多个时区里——不像中国,地域横跨五个时区却只用北京时间。
    • 对于页面查看,ELK 的解决方案是在 Kibana 上,读取浏览器的当前时区,然后在页面上转换时间内容的显示。
    • 所以,建议大家接受这种设定。否则,即便你用 .getLocalTime 修改,也还要面临在 Kibana 上反过去修改,以及 Elasticsearch 原有的 ["now-1h" TO "now"]这种方便的搜索语句无法正常使用的尴尬。

    相关文章

      网友评论

          本文标题:logstash DATE过滤插件

          本文链接:https://www.haomeiwen.com/subject/vxghwctx.html