首页 > 解决方案 > 使用正确的时间戳将 log4j2 JSON 格式的日志文件上传到 AWS CloudWatch

问题描述

我正在尝试将日志文件上传到 AWS CloudWatch。该应用程序正在将 log4j2 样式的 JSON 输出到一个文件中:

https://logging.apache.org/log4j/2.x/manual/layouts.html#JSONLayout

AWS 为此任务提供了 2 个 cloudwatch 日志代理。一个“老”代理和一个“统一”代理:

https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CWL_GettingStarted.html

我尝试使用这两个代理,但遇到了以下问题,主要与解析时间戳有关,以及代理在整个日志行上进行正则表达式匹配并且没有将其解析为 JSON 的事实:

示例日志消息(省略其他字段):

{"message": "Processing data for previous day: 2019-06-17T02:01:00", "timestamp": "2019-06-18T17:16:19.338000+0100"}

  1. 旧代理引发异常,因为它试图使用我配置的时间戳格式来解析消息中的时间戳,而不是timestamp字段中的时间戳。
  2. 统一代理无法解析具有亚秒精度的时间戳,这在尝试组合来自多个源的日志流时会导致问题。

那么,是否有更好的工具/策略将 JSON 格式的 log4j2 文件上传到 CoudWatch?

标签: amazon-web-serviceslogginglog4j2amazon-cloudwatchamazon-cloudwatchlogs

解决方案


推荐阅读