Java 应用中追踪的非侵入式集成

INFO

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

功能概述

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

使用场景

Java 应用可集成于以下场景:

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

前置条件

使用该功能前,请确保:

  • 目标服务已部署在 Alauda Container Platform 上
  • 服务使用的 JDK 版本为 Java 8 或更高
  • 具备目标命名空间中 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 环境变量,可通过标签关联或固定值设置。
  3. 配置 SERVICE_NAMESPACE 环境变量,值为 metadata.namespace

操作结果

Java 应用适配完成后:

  • 新启动的 Java 应用 Pod 中若包含 opentelemetry-auto-instrumentation-java init 容器,表示注入成功。
  • 向 Java 应用发送测试请求。
  • Container Platform 视图中,选择 Java 应用所在的 项目集群命名空间
  • 进入 Observability -> Tracing 页面,查看 Java 应用的追踪数据和时间线瀑布图。