ddtrace 常见参数用法¶
Attention
当前案例使用 ddtrace 版本 1.14.0-guance
(最新版本)进行测试
前置条件¶
- 开启 DataKit ddtrace 采集器
- 准备 Shell
java -javaagent:D:/ddtrace/dd-java-agent-0.114.0.jar \
-Ddd.service=ddtrace-server \
-Ddd.agent.port=9529 \
-jar springboot-ddtrace-server.jar
参数使用¶
开启 query 参数¶
开启 query 参数,可以更直观方便地让用户看到当前请求携带了哪些参数,更直观地还原客户真实的操作流程。默认为 false,表示为默认不开启。
但 query 开启参数只能采集到 url 上的参数,request Body 里面的参数目前尚不支持。
配置远程采集链接¶
dd.agent.host
默认值是localhost
,所以默认推送的是本地的 DataKit。
如果想推送远程 DataKit ,则需要配置 dd.agent.host
。
两种添加 Tag 方式¶
ddtrace 提供两种添加 tag 方式,效果一样。但还是推荐使用 dd.tags 方式
1 dd.trace.span.tags¶
将 projectName:observable-demo
添加到每个 span 的示例:
2. dd.tags¶
以上两种方式都能生成 tag,效果一样,都会在meta
里面展示数据。
如果确实想要把 dd.tags
标记的 tag 作为观测云的 标签 ,则需要在 ddtrace.conf
配置 customer_tags
[[inputs.ddtrace]]
endpoints = ["/v0.3/traces", "/v0.4/traces", "/v0.5/traces"]
customer_tags = ["projectName","user_name"]
效果如图:
注意:如果自定义 tag 包含了 tag 关键字,则会当成标签显示。
显示数据库实例名称¶
显示数据库的名称,默认显示数据库的类型,如需要显示数据库名称,将值设置成TRUE
以上 demo 并没有加载数据库,所以想要达到这个效果,可以选择一个引入数据库的应用添加参数
效果如图:
类或方法注入 Trace¶
ddtrace 支持给方法注入 Trace ,默认情况下,ddtrace 会对所有的 API 接口动态注入 Trace。
如果想对非 API 类(方法)——— 一些重要的类和方法重点标记,可以通过 dd.trace.methods
参数配置。
- Environment Variable: DD_TRACE_METHODS
- Default: null
- Example: package.ClassName[method1,method2,...];AnonymousClass$1[call];package.ClassName[*]
List of class/interface and methods to trace. Similar to adding @Trace, but without changing code. - Note: The wildcard method support ([*]) does not accommodate constructors, getters, setters, synthetic, toString, equals, hashcode, or finalizer method calls
如对 com.zy.observable.ddtrace.service.TestService
类的getDemo
方法需要添加 Trace。
部分代码所示:
@Autowired
private TestService testService;
@GetMapping("/gateway")
@ResponseBody
public String gateway(String tag) {
String userId = "user-" + System.currentTimeMillis();
MDC.put(ConstantsUtils.MDC_USER_ID, userId);
logger.info("this is tag");
sleep();
testService.getDemo();
httpTemplate.getForEntity(apiUrl + "/resource", String.class).getBody();
httpTemplate.getForEntity(apiUrl + "/auth", String.class).getBody();
if (client) {
httpTemplate.getForEntity("http://"+extraHost+":8081/client", String.class).getBody();
}
return httpTemplate.getForEntity(apiUrl + "/billing?tag=" + tag, String.class).getBody();
}
未添加dd.trace.methods
参数,上报 11 个 span ,效果如下:
通过 header 自定义业务 tag¶
主要是通过 header 方式,以一种非侵入式方式将业务 tag 注入到 trace 中,能够跟踪对应业务的执行情况。以 Key:value 方式进行配置,key 为原始 header 的 paramName ,value 为 key 的 rename,其中 key 可以省略。
请求
链路效果:
开启 debug 模式¶
开启 debug 模式后,系统输出 ddtrace 相关日志,有利于排查 ddtrace 相关问题。
默认情况下 debug 日志会输出到 stdout,如果想要输出到文件,则需要配合以下参数
注意
-Ddd.trace.debug=true
是用来开启 ddtrace 的 debug 日志,而不是开启应用的 debug 日志。
traceId 开启 128 bit¶
traceId 默认是 64 bit(long型),为了能够更好的与 opentelemetry (traceId 为 128bit )兼容,可以手动开启 128 bit。
输出 trace 信息¶
如果需要做一些研发相关的工作,了解 trace 上报数据结构是有必要的,默认情况下,trace 信息会通过DDAgentWriter
上报到远端可观测平台,如果想在控制台输出对应的信息,可以通过配置如下参数:
也可以配置多个
开启服务名替换中间件名称¶
默认情况下,链路信息会按照中间件名称进行分组展示,导致如果应用只有中间件产生链路信息,则无法向上追溯到当前中间件所处的应用,可以通过调整参数将全局 tag service name 作为中间件的 service。通过以下参数进行配置:
启动参数方式注入
可通过环境变量方式注入以上两种方式二选一
最终效果,不再展示中间件服务名称【即应用服务名称替换了中间件的名称】,span 其他 tag 和数据不受影响。
替换前效果
替换后效果