OpenTelemetry.initOpenTelemetry(...) 入口,以及 APMPlus 和 TLS 两类 exporter。
何时接入
- 需要观察模型调用、工具调用、知识库检索、记忆检索和 Runner 会话链路。
- 需要把 Java 智能体的 trace 与业务请求 ID、用户 ID 或会话 ID 关联。
- 需要把数据上报到火山引擎 APMPlus 或日志服务 TLS。
- 需要在进程退出前主动 flush 已排队的 trace 或 metric。
初始化 OpenTelemetry
在创建Agent 或执行 Runner 之前初始化 OpenTelemetry。OpenTelemetry.initOpenTelemetry(...) 接收 ExporterFactory 列表;列表为空时不会注册全局 provider。
forceFlush()。
APMPlus
APMPlusExporter 使用 OTLP/gRPC 同时导出 trace 和 metric。最小配置是显式提供 APMPlus AppKey:
OBSERVABILITY_OPENTELEMETRY_APMPLUS_API_KEY 时,APMPlusExporter 会通过 APMPlus GetAppKey OpenAPI 自动解析 AppKey。火山引擎模式需要 VOLCENGINE_ACCESS_KEY 和 VOLCENGINE_SECRET_KEY;CLOUD_PROVIDER=byteplus 时优先使用 BYTEPLUS_ACCESS_KEY 和 BYTEPLUS_SECRET_KEY,未设置时回退到火山引擎凭证。
TLS 日志服务
TLSExporter 把 trace 通过 OTLP/gRPC 上报到火山引擎日志服务 TLS。它会从环境变量读取 endpoint、topic 和地域,并使用火山引擎 AK/SK 构造认证 header。
同时导出到多个后端
OpenTelemetry.initOpenTelemetry(...) 会把多个 exporter 组合成一个 composite exporter。需要同时上报到 APMPlus 和 TLS 时,可以传入多个 exporter:
采集内容与隐私
OpenTelemetry span 可能包含模型、工具、知识库和记忆链路的属性。生产环境接入前,应确认以下内容:- 不把 API Key、AK/SK、Token、Cookie 或用户隐私写入 prompt、工具参数、metadata 或日志字段。
- 使用稳定的
Agent名称、RunnerappName、userId和sessionId,便于跨系统定位。 - 对需要长期留存的平台,提前确认数据保留周期、访问权限和删除策略。
- 短生命周期进程在退出前调用
forceFlush()或确保 shutdown hook 有足够时间完成导出。