如何抑制某些调用的 opentelemetry java 自动检测

How to suppress opentelemetry java auto instrumentation for some calls

我使用 opentelemetry java 代理进行跟踪。它为 JDBC 调用提供自动检测。最近我添加了 quartz java 库。当quartz向DB发出内部请求时,它提供了很多痕迹。

不知道有没有办法抑制特定的痕迹? 我不想为所有 JDBC 调用禁用自动检测。

已更新

我试过 -Dotel.instrumentation.quartz.enabled=false,但它只是禁用了作业执行痕迹,但 jdbc 调用仍然出现。

我尝试了 -Dotel.javaagent.exclude-classes=,但很难确定我需要将哪个 class 石英放在这里以抑制 jdbc 调用。

您可以使用以下方法来抑制石英仪器:

-Dotel.instrumentation.quartz.enabled=false

或者使用环境变量:

OTEL_INSTRUMENTATION_QUARTZ_ENABLED=false

这会禁用石英仪器,并且会避免在您的情况下过度创建跨度。
您还可以使用 fine-grained 方法进一步控制,您可以使用如下语法排除特定 类 的检测:

otel.javaagent.exclude-classes="my.package.MyClass,my.package2.*"

或者配合环境变量:

OTEL_JAVAAGENT_EXCLUDE_CLASSES="my.package.MyClass,my.package2.*"

这是关于如何抑制特定代理检测的完整文档:https://github.com/open-telemetry/opentelemetry-java-instrumentation/blob/main/docs/suppressing-instrumentation.md#suppressing-specific-agent-instrumentation

为了解决这个问题,我们禁用了 quartz 的自动检测:

-Dotel.instrumentation.quartz.enabled=false

并为我们自己的扩展提供了一个采样器,以识别石英提供的跨度。您可以在此官方示例中找到有关扩展的更多信息 https://github.com/open-telemetry/opentelemetry-java-instrumentation/tree/main/examples/extension