Java 应用无侵入方式接入调用链

INFO

自动注入的 OpenTelemetry Java Agent 支持 Java 8+ 版本。

功能简介

调用链追踪是分布式系统可观测性的核心能力,能够完整记录请求在系统内的调用路径与性能数据。本文介绍如何通过自动注入 OpenTelemetry Java Agent 的方式,实现 Java 应用无侵入接入调用链追踪体系。

使用场景

适用于以下场景的 Java 应用接入:

  • 需要快速为 Java 应用添加调用链追踪能力
  • 需要避免修改应用程序源代码
  • 使用 Kubernetes 进行服务部署
  • 需要可视化服务间调用关系和性能瓶颈分析

前置条件

使用本功能前,需确保:

  • 目标服务部署在 Alauda 容器平台
  • 服务使用 Java 8 或更高 JDK 版本
  • 具有目标命名空间的 Deployment 编辑权限
  • 平台已完成调用链部署

操作步骤

对要接入 Alauda Container Platform 调用链的 Java 应用,需要进行以下适配:

  • 为 Java Deployment 配置自动注入注解。
  • 设置 SERVICE_NAME 环境变量。
  • 设置 SERVICE_NAMESPACE 环境变量。

Deployment 适配示例:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-java-deploy
spec:
  template:
    metadata:
      annotations:
        instrumentation.opentelemetry.io/inject-java: cpaas-system/acp-common-java
      labels:
        app.kubernetes.io/name: my-java-app
    spec:
      containers:
      - env:
        - name: SERVICE_NAME
          valueFrom:
            fieldRef:
              apiVersion: v1
              fieldPath: metadata.labels['app.kubernetes.io/name']
        - name: SERVICE_NAMESPACE
          valueFrom:
            fieldRef:
              apiVersion: v1
              fieldPath: metadata.namespace
  1. 选择 cpaas-system/acp-common-java Instrumentation 作为注入 Java Agent 的配置。
  2. 配置 SERVICE_NAME 环境变量,可通过 labels 关联或固定值的方式。
  3. 配置 SERVICE_NAMESPACE 环境变量,其值为 metadata.namespace

操作结果

Java 应用适配后:

  • 新启动的 Java 应用 pod 中若存在 opentelemetry-auto-instrumentation-java 初始化容器,则表示注入成功。
  • 向 Java 应用发送测试请求。
  • Container Platform 视图中,选择 Java 应用所在的项目集群命名空间
  • 导航到 可观测性 -> 调用链 页面,查看 Java 应用的调用链数据和时序瀑布图。