JSON 日志& Datadog

为什么要使用 JSON 进行日志记录

如果你现在还没有使用 JSON 日志,那么你可能还在依赖纯文本日志和 regex 来理解它们。这在一开始可能会奏效,但随着系统的发展,它将开始断裂、失去结构并变得越来越糟。JSON 日志是标准。在现代应用中,拥有结构化、易于解析的日志已不再是可有可无的事情。它使各种服务保持一定程度的一致性,同时又具有灵活性。

Datadog 推荐使用 JSON 日志是有原因的。当日志以有效的 JSON 格式发布时,Datadog 的预处理器会自动解析日志并将其映射到大量保留属性,从而减少开销并确保字段提取的一致性。无需额外配置,因为这些保留属性提供了最相关的字段,使其更容易与其他系统集成、过滤日志、高效搜索和设置警报。重要的保留属性包括主机、服务、状态、跟踪 id、跨度 id 等,这些属性对于可观察性和故障排除至关重要。

如何设置

根据我的经验,在如何以最佳方式配置 JSON 日志方面有大量资源。我使用的主要参考资料是 Datadog 的文档: https://docs.datadoghq.com/logs/log_collection/java/?tab=logback. 我觉得这样最好,因为 Datadog 是我们使用的主要可观察性工具,如果出现任何问题,他们能够更容易地排除故障。

在 Datadog 文档的指导下,我首先创建了 logback-spring.xml 配置文件。大部分工作都是在这里完成的。最初,我尝试了各种 JSON 编码器,并添加了我认为可能有用的字段。最终,我意识到了简单的力量:简洁、最小化的配置更容易维护,也更不容易损坏。

<springProfile name="json-logs">

        <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
            <encoder class="net.logstash.logback.encoder.LogstashEncoder" />
        </appender>

        <root level="INFO">
            <appender-ref ref="CONSOLE"/>
        </root>

添加所需的 Logback 依赖项并将此代码添加到我的 logback-spring.xml 文件后,最后一个主要步骤是在应用程序 YAML 中将 "json-logs "设置为活动的 Spring 配置文件。这可确保在整个环境中启用 JSON 日志,并在所有服务中一致运行。

如果这些步骤正确无误,您应该可以跟踪日志并查看结果。它们应该保存在类似这样的键值日志中:

{"@timestamp":"2025-1-13T13:02:27.512333-02:00","@version":"1","message":"Tomcat initialized with port 8080(http)",
"logger_name":"org.springframework.boot.web.embedded.tomcat.TomcatWebServer","thread_name":"main","level":"INFO",
"level_value":20000,"appName":"json-logs"}  

此时,Datadog 中的日志应该是结构化的,跟踪相关性应该适用于具有跟踪 ID 的日志,而且您应该看到更详细、更一致的属性。

常见错误& 建议

通过正确的设置,Datadog 中的 JSON 日志变得可靠且更易于维护。通过消除传统假设并保持配置简单,您可以获得结构化日志、一致字段、跟踪相关性以及更简便的过滤和警报功能。JSON 日志不仅是一种最佳实践,而且对于提高现代应用程序的可观察性至关重要。

关于作者

大通-霍兰德
Arbory Digital 的 AEM 开发人员

具有 AEM 经验的敏捷认证专业人士、开发人员和顾问

通过 Linkedin 与大通联系

喜欢你听到的吗?对什么适合您有疑问?我们很乐意与您交谈!联系我们

相关文章

category
AEM Technical Help
tags
number of rows
1