ELK开发日记2-超坑爹的Filebeat-720时区漂移-UTC16-解决方案

35次阅读

共计 2369 个字符,预计需要花费 6 分钟才能阅读完成。

我是一个生活在东八区(UTC+8)的孩子,阿里云的服务器时区在部署时也默认设置为东八区
但我万万没想到,有一天会看到东十六区的存在 …

一、问题复现

原始问题我已记录在 Elastic 官方社区 里

一切坑的起源,来自于最新的 modules 命令,该命令以组件的形式管理配置文件,非常快捷:

filebeat modules enable system elasticsearch kibana

modules 命令是 filebeat 的组件化管理命令。

filebeat 7.2.0 把面向不同对象的 pipeline 视为不同的 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]
}

正文完
 0