有时要用日志文件中的时间来替换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