有时要用日志文件中的时间来替换filebeat自带的timestamp,同时还要解决时区问题,方法如下:
通过网上相关搜索采用JS脚本来实现,再将时区就指定为UTC,这样ES不对会它做处理,相应值不会变(网上其它办法是指定本地时区,然后再对时间做+8处理)。这样就要注意按本地时间对ES进行查询时就不要再对时间做处理了,你就认为ES中timestamp时间已经是本地时间了。
例子脚本如下:
- script:
lang: javascript
source: >
function process(event) {
var str = event.Get("message");
var date = str.substr(1,23);
event.Put("start_time",date);
}
- timestamp:
field: start_time
timezone: UTC (这里注意就用UTC时间,ES默认用UTC,这样时间值不变)
layouts:
- '2006-01-02 15:04:05.999'
#- '2006-01-02T15:04:05.999Z'
- dissect:
tokenizer: "[%{Timestamp}][%{ThreadID}][%{LogLevel}][%{Msg}]"
target_prefix: "Message"
- drop_fields:
fields: ["input","ecs","container","agent","start_time"] (将临时产生的start_time字段去掉)
注意日志中时间格式要跟timestamp中的一样,如2023-03-16 11:22:42.724179
文章讲述了如何通过JavaScript脚本在Filebeat中替换日志事件的时间戳,并设定时区为UTC,以避免Elasticsearch进一步处理。这种方法避免了对时间进行+8小时的调整,且强调在查询ES时应假设时间已是本地时间。示例脚本展示了从日志消息中提取时间并将其设置为新的时间字段的过程,同时展示了dissect和drop_fields配置来清理和结构化数据。


4615

被折叠的 条评论
为什么被折叠?



