awslogs推送PHP日志至CloudWatch时时间不准确如何解决
问题原因
时间偏差的核心原因是你配置的datetime_format规则和实际PHP日志的时间戳格式不匹配,awslogs无法从日志行中正确解析出日志生成时间,此时agent会默认把「采集到该条日志的系统时间」作为事件时间上报到CloudWatch,也就是你看到的和实际日志生成时间差十几天的那个时间戳。
你当前配置的时间格式是[%Y-%m-%dT%H:%M:%S],仅能匹配到秒级时间,但你本地日志的时间戳包含微秒段、时区偏移段,实际格式为[2022-06-09T12:27:51.280621+00:00],现有格式串没有覆盖.280621和+00:00这两部分内容,直接导致解析失败。
修复步骤
- 修改awslogs配置文件中对应日志段的
datetime_format项,替换为能完整匹配日志时间戳的规则,完整配置参考如下:
格式串里的datetime_format = [%Y-%m-%dT%H:%M:%S.%f%z] file = /var/log/dev.log buffer_duration = 5000 log_stream_name = {instance_id} initial_position = start_of_file log_group_name = /var/log/dev.log%f对应微秒部分,%z对应+00:00格式的时区偏移部分。 - 保存配置后重启awslogs服务让配置生效,根据你的系统初始化类型选择对应命令:
- Systemd管理的系统执行:
sudo systemctl restart awslogs - 老版本SysVinit系统执行:
sudo service awslogs restart
- Systemd管理的系统执行:
- 验证效果:新产生的PHP日志上报到CloudWatch后,展示的事件时间就会和日志本身记录的生成时间一致。
补充说明
- 已经上报到CloudWatch的历史日志时间无法自动修正,仅新生成的日志会按正确规则上报
- 如果重启后仍存在时间异常,可以查看awslogs自身运行日志排查问题,默认路径为
/var/log/awslogs.log,日志中会明确记录时间戳解析失败的相关报错信息
内容的提问来源于stack exchange,提问作者Ali
相关产品推荐
相关产品推荐

