Skip to content

feat(设备接入): 补齐设备诊断链路追踪 - #761

Merged
zhou-hao merged 4 commits into
2.12from
codex/community-device-tracing
Jul 31, 2026
Merged

feat(设备接入): 补齐设备诊断链路追踪#761
zhou-hao merged 4 commits into
2.12from
codex/community-device-tracing

Conversation

@zhou-ai-bot

@zhou-ai-bot zhou-ai-bot commented Jul 31, 2026

Copy link
Copy Markdown

目的

  • 补齐社区版 2.12 设备接入链路中的消息上下文透传、响应及透明传输处理 span。
  • 修复协议包通过 context.monitor.logger 记录日志时缺少 traceId 的问题,使协议诊断日志和系统日志均可关联当前有效 span。

核心变动

  • device-manager:发布设备消息前写入 trace context,从回复消息头恢复父上下文并创建 response span,为普通透明传输消息创建 handle span。
  • protocol-component:为 ProtocolMonitorHelper 增加代理 Monitor、同步/Mono/Flux 上下文切换及恢复能力,并通过真实协议日志场景验证跨调度器 trace 关联。
  • common-component:通过 OpenTelemetry ContextStorageProvider 与 Micrometer ThreadLocalAccessor 官方 SPI 共享上下文存储,并开启 Reactor 自动上下文传播。
  • logging-component:系统日志转换时从当前有效 span 写入 traceIdspanId,无有效 span 时保持为空。
  • 范围边界:未迁移 gateway/network monitor、身份标识、集群 tracing、诊断日志持久化,也未修改协议报文、编解码规则或传输路由。

设计与测试目标

  • 设计稿:jetlinks-components/protocol-component/README.mdjetlinks-manager/device-manager/README.md
  • 用户确认:已确认迁移设备链路埋点及 ProtocolMonitorHelper,并确认从公共上下文传播层修复日志 trace 关联;明确排除 gateway/network monitor
  • 测试目标:覆盖 trace context 写入、response 父子链路、透明传输 handle span、Monitor 嵌套/响应式传播、OpenTelemetry/Micrometer SPI 注册、系统与协议日志 trace 投影,以及正常、异常、取消和乱序 Scope 关闭后的上下文恢复
  • 注释 / 公共契约:适用;已补 ProtocolMonitorHelper 公共方法、两个上下文传播 Provider/Accessor 类契约、生命周期和乱序关闭保护说明及真实 @since 2.12
  • 数据权限:不适用;未涉及 CRUD、资产查询或权限动作
  • 数据库兼容与性能:不适用;未涉及数据库、SQL、分页或批量写入
  • 链路追踪:适用;使用 TraceHolderMonoTracerDeviceTracer 创建既有业务 span,通过官方上下文传播 SPI 恢复 Span.current();本次日志修复不新增重复 span,不记录 payload 或敏感信息
  • MBean 运维可观测性:不适用;未新增常驻任务、缓存、队列、后台执行器或资源池

测试结果

  • 命令:mvn -pl jetlinks-components/common-component,jetlinks-components/logging-component,jetlinks-components/protocol-component,jetlinks-manager/device-manager -am -Dtest=TraceContextPropagationTest,SystemLoggingAppenderTest,ProtocolMonitorHelperTest,DeviceMessageConnectorTracingTest,TransparentDeviceMessageConnectorTracingTest -Dsurefire.failIfNoSpecifiedTests=false test
  • 新增/更新测试:TraceContextPropagationTest 6 个用例覆盖双 SPI、嵌套/乱序 Scope、跨调度器及正常/异常/取消清理;SystemLoggingAppenderTest 2 个用例覆盖有效和无效 span;ProtocolMonitorHelperTest 5 个用例覆盖 Monitor 上下文和真实协议日志;两个设备 connector 测试 3 个用例覆盖消息 trace header 与父子 span
  • 单元测试:16 passed, 0 failed, 0 skipped;19 个 Maven Reactor 模块构建成功
  • 集成测试:不适用;未修改数据库、外部服务、协议报文或网络传输;跨模块与启动扩展点通过真实 InternalEventBus、OpenTelemetry exporter、ServiceLoader 双 SPI 加载及公共自动配置入口验证
  • 压力测试:不适用;未引入循环、批处理、缓存或额外网络 I/O
  • 覆盖率:新增 ThreadLocalContextStorageProvider line 100%(36/36)、branch 100%(10/10);系统日志有效/无效 span 新增分支均已覆盖

文档同步情况

  • 已同步:jetlinks-components/protocol-component/README.mdjetlinks-manager/device-manager/README.md
  • 未同步:无
  • 说明:文档记录链路职责、范围边界、公共上下文传播入口和验证结果,未新增独立任务流水文档

风险与说明

  • 影响范围:OpenTelemetry 当前上下文存储、Reactor 自动上下文恢复、协议 Monitor 上下文选择、系统日志 trace 投影、设备消息事件发布和回复/透明传输处理
  • 注释 / 公共契约:已补类注释、公共方法契约、@since 2.12 及上下文恢复和乱序关闭边界说明
  • 链路追踪 / 可观测性:已补 TraceHolder 上下文写入、response/handle span、协议 Monitor 与 OpenTelemetry Context 跨调度器传播;不新增重复业务 span
  • MBean / 运维可观测性:不适用;没有新增常驻内存结构或后台任务
  • 未覆盖场景:未做真实 MQTT/TCP 设备联调;本次不改变协议报文和传输逻辑,使用内存事件总线、真实 SPI 与 OpenTelemetry exporter 验证链路行为
  • 已知限制:设备诊断仍不包含身份标识、集群 tracing、诊断日志持久化及 gateway/network monitor

zhou-hao added 4 commits July 31, 2026 15:50
透传设备消息追踪上下文并补充响应和透传处理 span。

支持协议 Monitor 在同步及响应式上下文中切换,并补充聚焦测试。
通过 OpenTelemetry ContextStorageProvider 与 Micrometer ThreadLocalAccessor 共享上下文,并开启 Reactor 自动传播,修复协议诊断日志和系统日志缺少 traceId 的问题。
@zhou-hao
zhou-hao merged commit db5b4d2 into 2.12 Jul 31, 2026
2 of 3 checks passed
@zhou-hao
zhou-hao deleted the codex/community-device-tracing branch July 31, 2026 09:10
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants