如何解决流利的位过滤器可将Unix Epoch时间戳转换为人类可读格式
我有一个Java应用程序,其中使用Log4j2在JSONLayout中打印日志,这是日志格式的示例:
{
"thread": "TopicStatusThreadPool-thread-1","level": "INFO","loggerName": "My Kafka Logger","message": "Topic Status List is empty,returning from summarize method","endOfBatch": false,"loggerFqcn": "org.apache.logging.slf4j.Log4jLogger","instant": {
"epochSecond": 1587980988,"nanoOfSecond": 214241000
},"threadId": 37,"threadPriority": 5
}
以这种格式打印的日志随后被Fluent Bit拾取,并推入Elasticsearch。我正在使用Kibana可视化日志,但是当我看到日志和时间为 epochSecond 和 nonOfSecond 时,将其与实际的应用程序日志联系起来将变得非常困难。格式。
是否有任何有效位过滤器,可用于将该时间格式修改为更易于阅读的格式。
当前,我正在Fluent Bit配置中使用基本JSON解析器和Kubernetes过滤器,将Kubernetes信息添加到日志消息中。
更新:
我对Log4j2的配置进行了更改,现在我得到了timeMillis字段,该字段在时间上以毫秒为单位打印在日志中。
{
"thread": "TopicStatusThreadPool-thread-1","timeMillis": 1587980988213,"threadPriority": 5
}
将其转换为人类可读格式的lua过滤器将是什么。默认情况下,Fluent Bit中的时间转换不支持毫秒级的时间,而是需要以秒为单位的时间。
我尝试过:
[PARSER]
Name json
Format json
Time_Key timeMillis
Time_Format %s
Time_Keep On
但这不会占用毫秒部分,请以秒为单位处理时间。
解决方法
您可以按如下方式使用lua过滤器:
-- test.lua
function append_converted_timestamp(tag,timestamp,record)
new_record = record
new_record["instant"]["recorded_time"] = os.date("%m/%d/%Y %I:%M:%S %p",record["instant"]["epochSecond"])
return 2,new_record
end
FluentBit配置:
[FILTER]
Name lua
Match *
script test.lua
call append_converted_timestamp
它将在您的记录中附加一个新的字段 recorded_time ,该字段具有易于阅读的日期。
更新
timeMillis字段的Lua函数可以这样实现:
-- test.lua
function append_converted_timestamp(tag,record)
new_record = record
new_record["recorded_time"] = os.date("%m/%d/%Y %I:%M:%S %p",record["timeMillis"]/1000)
return 2,new_record
end
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。