logstash毫秒时间戳转日期以及使用业务日志时间戳替换原始@timestamp

文章目录

问题

在使用Kibana观察日志排查问题时发现存在很多组的@timestamp 数据一样,如下所示
在这里插入图片描述
详细观察内部数据发现其中日志数据有一个timestamp字段保存的是业务日志的毫秒级时间戳,经过和@timestamp数据对比发现二者的时间不匹配。经过分析得知@timestamp是按照logstash插入es数据的时间来排序,而且数据是按照批次来的,每一批次的时间可能都是大径相同,结果就是导致上面描述的一系列问题。

解决方式

针对该问题,我们可以使用logstash中的filter中date属性来进行日期的转换,即使用业务日志中的timestamp字段去替换掉logstash自己生成@timestamp时间。

date属性的使用参考如下:
https://www.elastic.co/guide/en/logstash/current/plugins-filters-date.html

date {
    match => [ "biz_time", "yyyyMMdd HH:mm:ss.SSS" ]
    target => "new_time"
}

简单的使用配置参考如上所示,其中match匹配处理输入日志数据的那个字段以及对应的数据类型,target表示要去匹配映射的字段,可以是一个已存在的字段也可以是一个新的字段。
需要注意的是,你必须要严格匹配输入日志对应属性的日期类型,如果你是类似2023-01-01 12:12那么就需要指定为这样的日期格式,如果是时间戳那么就需要指定为UNIX或者UNIX_MS,前者为秒级的时间戳后者为毫秒级的时间戳,需要严格对应的,否则会无法匹配转换。

举例:下面为项目的业务日志信息,我想要使用红色框内的timestamp字段为@timestamp时间

在这里插入图片描述
参考配置如下:

filter{
    
    
    date{
    
    
        match=>["timestamp",  "UNIX_MS" ]
        target=>"@timestamp"
    }
}

修改配置完后,重启logstash,观察启动日志,然后再看索引数据
在这里插入图片描述

参考

【如何将时间戳转换为日期字段数据】
https://discuss.elastic.co/t/how-to-convert-a-unix-timestamp-field-to-a-new-date-field/50966

【logstash中date转换】
https://www.elastic.co/guide/en/logstash/current/plugins-filters-date.html

猜你喜欢

转载自blog.csdn.net/Octopus21/article/details/128988756
今日推荐