日志

编辑

Elastic Java APM Agent 提供以下日志功能

这些功能是 应用程序日志采集策略的一部分。

也可以使用 ecs-logging-java 库,以便在没有 APM Agent 的情况下使用 ECS 日志格式。当与 Java APM Agent 一起部署时,该 Agent 将提供 日志关联 ID。

日志关联

编辑

日志关联允许您导航到属于特定跟踪的所有日志,反之亦然:对于特定日志,查看它在哪个上下文中被记录以及用户提供了哪些参数。

从 APM Agent 1.30.0 版本开始,默认情况下启用日志关联。在以前的版本中,必须通过将 enable_log_correlation 配置变量设置为 true 来显式启用日志关联。

为了将应用程序中的日志与 Elastic APM Java Agent 捕获的跟踪和错误相关联,该 Agent 将以下 ID 注入到 slf4j-MDC支持的日志框架等效项中

对于不提供像 java.util.logging (JUL) 这样的 MDC 的框架,仅在使用 ECS 日志库或 日志重新格式化时才支持关联。

对于纯文本日志,需要修改日志配置的模式布局,以便将 MDC 值写入日志文件。如果使用 Logback 或 log4j,请将 %X 添加到格式以记录所有 MDC 值,或将 %X{trace.id} 添加到格式以仅记录跟踪 ID。

当应用程序以 ECS 格式记录日志时(通过使用 ecs-logging-java日志重新格式化),但未提供服务字段时,该 Agent 将自动从其自身的配置中提供回退值以提供服务级别的关联

日志重新格式化(实验性)

编辑

该 Agent 可以自动将应用程序日志重新格式化为 ECS 格式,而无需添加对 ecs-logging-java 的依赖、修改应用程序日志配置并使应用程序始终使用 ECS 日志格式。简而言之,它在运行时提供了 ECS 日志的优势,而无需对应用程序进行任何更改。

日志重新格式化由 log_ecs_reformatting 配置选项控制,默认情况下禁用。

重新格式化的日志将同时包含 跟踪和服务关联 ID。

错误捕获

编辑

该 Agent 会自动捕获通过诸如 logger.error("message", exception) 之类的调用发送给日志记录器的异常。

这样做时,自 1.16.0 版本起,error.id 也被添加到 MDC 中,以进行 日志关联

因此,当向日志记录器报告异常时

  • 该 Agent 会将错误连同提供的异常一起报告给 APM Server
  • 将生成一个 error.id 并将其注入到日志记录器 MDC 中,以便在日志记录器调用期间使用
  • 如果日志格式允许(纯文本仍然需要一些配置),则日志记录器输出将包含 error.id

请注意,我们捕获的是异常,而不是传递给 logger.error 的消息。

要收集传递给 logger.error 的消息,您需要采集应用程序的日志(请参阅 日志关联)。

日志发送(实验性)

编辑

该 Agent 可以自动捕获日志并将其直接发送到 APM Server,从而无需依赖 filebeat 即可采集日志事件。日志发送由 log_sending 配置选项控制,默认情况下禁用。