Skip to content

18 OpenTelemetry APM 遥测

配置

参数
ExporterOTLP HTTP (OtlpHttpSpanExporter)
Endpointhttps://saas.api.example.com/v1/traces
Compressiongzip
采样率100% (traceIdRatioBased(1.0))
传播格式W3C Trace Context + W3C Baggage

批处理配置

参数
Export Timeout30 秒
Schedule Delay5 秒
Max Queue Size2048
Max Batch Size512

重试策略

参数
Max Attempts2
Initial Backoff1 秒
Max Backoff5 秒
Backoff Multiplier1.5x

SSL

  • 使用自定义 SSL Context,信任所有证书 (X509TrustManager no-op)
  • 支持系统代理 (通过反射读取代理设置)

Resource 属性

属性
service.name服务名称
system.username系统用户名
idea.versionIDE 版本
plugin.version插件版本

Tracer 枚举 (TracerEnum)

Tracer说明
IDEA_RUN插件/IDE 启动
AGENT_RUNAgent 进程执行
AGENT_FAILUREAgent 失败事件
AGENT_RESTARTAgent 重启事件
AGENT_ERRORAgent 错误事件
CODE_COMPLETE_PARENT代码补全父 Span
CODE_COMPLETE_INLINE_CHAT_PARENT内联聊天父 Span
CODE_COMPLETE单次代码补全
RECORD_EXCEPTION异常记录

Span 属性 (SpanAttrEnum)

系统属性

属性说明
SYSTEM_USERNAME系统用户名
IDEA_VERSIONIDE 版本
PLUGIN_VERSION插件版本
DISABLE_GPUGPU 禁用状态

Agent 属性

属性说明
AGENT_VERSIONAgent 版本
AGENT_START_REASON启动原因
AGENT_START_CODE启动退出码
AGENT_ERROR_REASON错误原因

设置属性

属性说明
SETTING_TRIGGER_ON_PAUSE暂停触发开关
SETTING_TRIGGER_TIME_DELAY触发延迟时间
SETTING_CODE_MODE代码模式 (SINGLE_LINE/INTELLIGENT)
SETTING_MESSAGE_TYPE发送键类型
SETTING_JAVA_TESTJava 测试框架
SETTING_JAVA_MOCKJava Mock 框架

补全属性

属性说明
COMPLETE_RESULT补全结果
COMPLETE_IS_STREAM是否流式
COMPLETE_FIRST_DURATION首次响应耗时
COMPLETE_DURATION总耗时
COMPLETE_FORCE是否强制触发
COMPLETE_FILE_SIZE文件大小
COMPLETE_FILE_LINE文件行数
COMPLETE_ACCEPT接受操作
COMPLETE_REJECT拒绝操作

错误属性

属性说明
EXCEPTION_COMMAND异常关联的命令
EXCEPTION_CODE异常码
EXCEPTION_MESSAGE异常消息

其他属性

属性说明
USER_USERNAME用户名
HTTP_SCHEMEHTTP URL
COMMAND_ID命令 ID
PLUGIN_UPDATE插件更新状态

Span 注入流程

sendWsMessage()

    ├─► OpenTelemetryUtil.buildWithCommand() — 创建 Span

    ├─► FF() — 注入属性:
    │   ├─► SpanAttr.USER_USERNAME
    │   ├─► SpanAttr.PLUGIN_UPDATE
    │   ├─► SpanAttr.SETTING_TRIGGER_ON_PAUSE
    │   ├─► SpanAttr.SETTING_TRIGGER_TIME_DELAY
    │   ├─► SpanAttr.SETTING_CODE_MODE
    │   ├─► SpanAttr.SETTING_MESSAGE_TYPE
    │   ├─► SpanAttr.SETTING_JAVA_TEST
    │   ├─► SpanAttr.SETTING_JAVA_MOCK
    │   └─► SpanAttr.COMMAND_ID (如果是非 USER_LOGIN)

    ├─► W3C Trace Context 传播:
    │   GlobalOpenTelemetry.getPropagators()
    │     .getTextMapPropagator()
    │     .inject(Context.current(), headersMap, setter)
    │   → 提取 "traceparent" header

    ├─► 设置 MessageDto.traceparent

    └─► span.end()

用户控制

用户可通过设置启用/禁用 APM:

java
// AICodeSettingsState
Boolean apmEnable;  // null = 默认, true/false = 手动控制
String apmUrl;      // 自定义 OTLP 端点

本项目仅供学习研究,逆向分析内容归原厂商所有。