让我们从“为什么”开始,甚至要费心在本地机器上设置 Datadog。我可以分享我设置它的动机
我强烈的“为什么”:试图理解这些不稳定的测试:
我们有一个广泛的端到端测试套件,覆盖率很高。但遗憾的是,随着时间的推移,测试变得越来越不稳定。令我沮丧的是,当测试单独运行时,它们会通过。当我们运行整个测试套件时,许多测试将开始失败。测试对应的应用日志应该可以帮助我们调试。但我什至无法理解特定测试的日志从哪里开始和结束,更不用说理解它们了。
Datadog 来救援🦸!
我们一直在使用
我们的应用程序是用 Java 编写的,我的本地计算机在 MacOS 上运行。您可以调整以下步骤以满足您的需要。
你需要设置什么:
- 注册 Datadog
这里 .我们这里的范围只是本地调试,所以免费试用 应该足够了。 - Datadog Agent 是监控其运行所在主机的软件。可以在代理中进行服务名称、环境等设置。
dd-trace-java ,Datadog 的 APM(App Performance Monitoring)客户端 Java 库。dd-trace-java
是一个包含自动或手动 API 的 jar痕迹 和轮廓 Java 应用程序。
第 1 步 — 注册过程:
在提供您的电子邮件 ID 和其他详细信息后,系统会提示您在下一页上选择您的技术栈。
单击“下一步”后,最重要的部分来了。您将获得“代理设置”说明。我的本地机器是 MacOSX,所以我选择得当。请记下DD_API_KEY和DD_SITE值,因为它们将在后续步骤中使用。
第 2 步 — Datadog 代理安装:
对于 MacOS,您可以通过安装
如下图自定义
datadog-agent
完成上述步骤后,系统会要求您在 Datadog-web-UI 中“完成”。
- 系统将提示您添加任何
integrations
。您可以添加Java
、Docker
等(根据您的项目需要)。
第 3 步 — 安装 Datadog 跟踪器:
从下载
dd-java-agent
jar这里 ²
对于您的 Java 应用程序,请确保您使用的是带有内置FlightRecorder的 Java 版本。这是跟踪所必需的。 OpenJdK8 带有一个内置的FlightRecorder 。如果您使用的是 Oracle Java,则需要商业许可证才能使用 **FlightRecorder。**³
运行您的应用程序:
- 为我们的 java 应用程序添加 VM 选项:
-javaagent:"/Users/home/Downloads/dd-java-agent.jar" -Ddd.profiling.enabled=true -Ddd.logs.injection=true -Ddd.agent.port=8126 -Ddd.service=ecommerce-service -Ddd.env=local -XX:FlightRecorderOptions=stackdepth=256
- 如果您使用的是
gradle
任务,则可以包含如下的jvmArgs
:
jvmArgs = ["-javaagent:/Users/home/Downloads/dd-java-agent.jar", "-XX:FlightRecorderOptions=stackdepth=256", "-Ddd.profiling.enabled=true", "-Ddd.logs.injection=true", "-Ddd.agent.port=8126", "-Ddd.service=ecommerce-service", "-Ddd.env=local"]
- 现在启动您的 Java 应用程序。如果跟踪正确进行,您应该会看到以下日志:
登录Datadog:
- 要使日志能够流式传输到 Datadog,请按照 Datadog Web UI 中的说明进行操作。 ⁴
- 对于
macOS
— 配置目录是~/.datadog-agent/conf.d/java.d
,文件位于~/.datadog-agent/conf.d/java.d/conf.yaml
现在,
logs
应该开始在 Datadog 中流动。
一些技巧:
在应用程序中每个方法的开头和结尾添加适当的
debug
日志。它在调试时非常有用。
添加一种机制来注入
span id
和trace id
。这是一个了不起的救星,并将日志放在适当的上下文中。⁵
结论:
一旦我在本地启动并运行了 Datadog 代理,我就能够根据上下文查看所有请求。
瞧!我所有的端到端测试现在都通过了 🙂 快乐的日志记录!
附加信息:
¹或者,您也可以下载
药物包 并安装它。这个链接也可以在上面的“代理设置”步骤中获得(参考截图)
²直接下载
dd-trace-java 罐。
³ 从 JDK 11 开始,我们可以在不激活任何东西的情况下使用
FlightRecorder
。可以找到更多详细信息这里 .
⁴更多细节是
这里 .
⁵如果你的应用程序是 Java,你可以使用这个库
春云侦探 用于将span_id
和trace_id
添加到请求中。