前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何使Kibana中TimeStamp和日志时间一致

如何使Kibana中TimeStamp和日志时间一致

作者头像
用户3013098
发布2022-06-01 08:49:17
2.6K0
发布2022-06-01 08:49:17
举报
文章被收录于专栏:devops运维先行者

开篇

接上篇文章:运维神器 -- ELK ,介绍了何为ELK,如何部署生产级别的监控系统 -- ELK。本篇介绍在使用ELK中,如何使KibanaTimeStamp日志时间一致性问题。

案例

如图,我们在使用中会碰到,Kibana的时间「@timestamp」和业务系统中输出的时间不一致。这样带来的问题就是日志混乱、并且不能按照日志时间来排序。为什么?因为Kibana是按照「@timestamp」排序的,而@timestamp是按照logstash插入es数据的时间来排序,而且数据是按照批次来的,每一批次的时间可能都是大径相同,这样子的结果就是导致上诉描述的一系列问题。

解决方法

那如何解决上诉问题呢?请看下面👇👇👇

代码语言:javascript
复制
filter {
###替换@timestamp时间为日志真实时间######
    grok {
        match => {  "message" => "(?<timestamp>%{TIMESTAMP_ISO8601})"  }
    }
    date {
        match => [ "timestamp", "ISO8601" ]
    }
    mutate {
         remove_field => [ "timestamp" ]
    }
}

只需要在logstash中增加一个filter,提取日志中的时间,并替换@timestamp,重启logstash就可以轻松解决。如果不需要timestamp field,可以remove。

提示

时间戳

代码语言:javascript
复制
ISO8601 - 应解析任何有效的ISO8601时间戳,如2011-04-19T03:44:01.103Z
UNIX - 将解析float或int值,表示自1346149001.132以及1326149001.132以来的秒数(以秒为单位)
UNIX_MS - 将分析int值表示unix时间(以毫秒为单位),如1366125117000
TAI64N - 将解析tai64n时间值

Date插件

Date常见的配置如下:

代码语言:javascript
复制
date {
    match => [ "time_field", "yyyyMMdd HH:mm:ss.SSS" ]
    # timezone => "UTC"
    target => "end_time"
}

上述配置的含义是,将time_field字段按照yyyyMMdd HH:mm:ss.SSS格式解析后存到target指定的字段end_time字段去。time_field必须是已经定义的字段,最常见的就是在grok里面解析出来的某个时间字段。时间格式可查看Date插件的文档。如果没有指定target,默认就是@timestamp字段,这就是为什么我们可以使用该插件来修改@timestamp字段值的原因。

结语

OK,ELK拓展文章就先结束一篇。未完待续,欢迎各位看客老爷关注收藏·······

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-12-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 devops运维先行者 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 开篇
  • 案例
  • 解决方法
  • 提示
    • 时间戳
      • Date插件
      • 结语
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档