通过 Opentelemetry Java Instrumentation 为 Java 应用添加自定义埋点

ARMS Java探针从4.x版本开始基于opentelemetry-java-instrumentation全面重构,因此ARMS 4.x版本探针也继承了opentelemetry-java-instrumentation的自定义埋点能力。本文以为motan(RPC框架)自定义埋点为例演示自定义埋点的整体流程。

Opentelemetry-java-instrumentation支持通过设置-Dotel.javaagent.extensions参数或设置环境变量Key OTEL_JAVAAGENT_EXTENSIONS指定一个自定义扩展(Extensions)的JAR包路径,您可以在该JAR包中实现以下功能:

  • 自定义TraceId生成器

  • 自定义Trace上下文传播协议

  • 自定义链路采样器

  • 自定义SpanProcessor

  • 自定义埋点逻辑

出于稳定性和安全的考虑,4.x探针目前仅支持自定义埋点功能。

操作步骤

步骤1:下载并编译自定义埋点代码

  1. 执行以下命令下载自定义埋点demo项目

    该项目简单地实现了motan框架的客户端和服务端埋点,通过在客户端发起RPC调用和服务端接收RPC调用时分别生成一个Span,且在利用motan框架的协议头传递trace上下文。

    git clone git@github.com:aliyun-observability/aliyun-javaagent-extension-demo.git
  2. 进入项目根目录,执行./gradlew build命令。

    说明

    当前编译环境的JDK版本需为JDK17。

    执行该命令后,在.build/libs目录下会有编译后的JAR文件,即为自定义拓展JAR包。

    image.png

步骤2:下载ARMS探针

  1. 登录ARMS控制台

  2. 在左侧导航栏选择应用监控 > 探针管理,然后在顶部菜单栏选择目标地域。

  3. 单击探针版本发布说明页签,下载4.x或以上版本探针,并放置在合适目录。

步骤3:下载并编译motan demo应用

  1. 下载motan应用。

    git clone https://github.com/weibocom/motan.git
  2. 进入项目根目录,执行 cd motan-demo && mvn clean package命令。

    执行后,在${motan-root}/motan-demo/motan-demo-client/target${motan-root}/motan-demo/motan-demo-server/target目录下即可看到motan-demo-servermotan-demo-client示例应用。

步骤4:启动应用时加载自定义拓展包

  1. 启动server应用:java -javaagent:/path/to/aliyun-java-agent.jar -Darms.appName=motan-client -Darms.licenseKey=${your licenseKey} -Dotel.javaagent.extensions=/path/to/opentelemetry-extension-demo-1.0.jar -jar /path/to/motan-demo-server.jar

  2. 启动client应用:java -javaagent:/path/to/aliyun-java-agent.jar -Darms.appName=motan-server -Darms.licenseKey=${your licenseKey} -Dotel.javaagent.extensions=/path/to/opentelemetry-extension-demo-1.0.jar -jar /path/to/motan-demo-client.jar

根据实际情况修改以下参数:

  • /path/to/aliyun-java-agent.jar步骤2下载的探针。

  • ${your licenseKey}:可以通过DescribeTraceLicenseKey OpenAPI获取LicenseKey。

  • /path/to/opentelemetry-extension-demo-1.0.jar步骤1获取的自定义拓展JAR包。

  • /path/to/motan-demo-server.jar步骤3下载的motan-demo-server示例应用。

  • /path/to/motan-demo-client.jar步骤3下载的motan-demo-client示例应用。

步骤5:查看监控效果

  1. 多次执行curl http://localhost:8080/ ,将数据上报至ARMS。

  2. ARMS控制台查看Trace详情,可以看见已生成的motan clientspanmotan serverspan。

    image

注意事项

  1. 自定义埋点时需要引入OpenTelemetry的依赖,为了最好的兼容性,请按照下述映射关系引入OpenTelemetry依赖版本。

    ARMS Java版本

    OpenTelemetry依赖版本

    4.1.0 ~ 最新

    1.28

  2. 自定义埋点的包名不要以io.opentelemetry.javaagent.instrumentation开头,避免和ARMS探针现有增强代码出现类冲突。

  3. 自定义埋点中尽量不要引入除了OpenTelemetry以及待埋点框架外的其他框架,避免埋点代码和应用代码出现类冲突。