我是一个生活在东八区(UTC+8)的孩子,阿里云的服务器时区在部署时也默认设置为东八区
但我万万没想到,有一天会看到东十六区的存在...
一、问题复现
原始问题我已记录在 Filebeat cannot recognize timezone in syslog
一切坑的起源,来自于最新的modules命令,该命令以组件的形式管理配置文件,非常快捷:
filebeat modules enable system elasticsearch kibana
modules命令是filebeat的组件化管理命令,具体使用方法参考 Quick start: modules for common log formatsedit
filebeat 7.2.0把面向不同对象的采集器视为不同的Modules,通过控制modules的开关来快速管理不同对象的日志采集状态。
启用模组后,使用setup命令配置环境:
filebeat setup -e
service filebeat start #使用service启动filebeat
启动之后一切就开始正常工作了,然而接下来神奇的事情出现了
在我打开kibana进行可视化分析的时候,所有的日志时间往前漂移了8个小时,也就是UTC+8再+8!
神奇的时间漂移日志,红线是当前时间,绿色直方图是日志时间分布
可以看到所有日志的时间都比真实时间快了8个小时
二、问题溯源
我起初怀疑filebeat二次解析,把utc+8时间再加了个8
然而日志原始JSON数据告诉我并不是这样
filebeat的文档中@timestamp的记录值和系统时间相同(UTC+8),但@timestamp本身记录的应该是UTC值
于是kibana将其解析为UTC值,并在此之上把时区又加了一个8。
于是UTC+16出现了...
系统时间
UTC+8 2019/07/29 20:56:14
日志时间
Jul 29 20:56:14
@timestamp 记录的时间
2019-07-29T20:56:14.000Z
@timestamp 应该记录的时间
2019-07-29T12:56:14.000Z
三、解决方案
在我调了一天bug,在github上翻阅无数个Pull Request,整个人接近崩溃的时候,一个帖子点亮了我:
[官方论坛] Filebeat 6.4.2 the timestamp is not right
这是我第一次在帖子里看到有人讨论covert_timezone配置,这个配置项一看就是跟时区有关的
只需要在path/to/conf/module.d/
目录里所有的.yml
开启var.convert_timezone
就行!!!
但是这也太尼玛不显眼了吧!!
四、附录
日志文档原始JSON数据,@timstamp
被记录成了UTC+8时区(@timestamp应该是UTC记录):
{
"_index": "filebeat-7.2.0-2019.07.28-000001",
"_type": "_doc",
"_id": "qRLNPWwBaHGrHZ27tQUU",
"_version": 1,
"_score": null,
"_source": {
"agent": {
"hostname": "bigiron",
"id": "3eb06835-b68e-4b25-9ec1-1ebf0bac83a3",
"ephemeral_id": "fd8648df-4eab-4fd2-b915-97fb631211b6",
"type": "filebeat",
"version": "7.2.0"
},
"process": {
"name": "filebeat",
"pid": 28369
},
"log": {
"file": {
"path": "/var/log/syslog"
},
"offset": 1964308
},
"fileset": {
"name": "syslog"
},
"message": "2019-07-29T20:56:14.994+0800#011INFO#011log/harvester.go:253#011Harvester started for file: /var/log/apache2/access.log",
"cloud": {
"availability_zone": "cn-beijing-a",
"instance": {
"id": "i-2ze74ci7j8m68giheosd"
},
"provider": "ecs",
"region": "cn-beijing"
},
"input": {
"type": "log"
},
"@timestamp": "2019-07-29T20:56:14.000Z",
"system": {
"syslog": {}
},
"ecs": {
"version": "1.0.0"
},
"service": {
"type": "system"
},
"host": {
"hostname": "bigiron",
"os": {
"kernel": "4.4.0-146-generic",
"codename": "xenial",
"name": "Ubuntu",
"family": "debian",
"version": "16.04.6 LTS (Xenial Xerus)",
"platform": "ubuntu"
},
"containerized": false,
"name": "bigiron",
"id": "a76d0b1176a3140a8e07cb725964722b",
"architecture": "x86_64"
},
"event": {
"timezone": "+08:00",
"module": "system",
"dataset": "system.syslog"
}
},
"fields": {
"@timestamp": [
"2019-07-29T20:56:14.000Z"
],
"suricata.eve.timestamp": [
"2019-07-29T20:56:14.000Z"
]
},
"sort": [
1564433774000
]
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。