feat(设备接入): 补齐设备诊断链路追踪 - #761
Merged
Merged
Conversation
透传设备消息追踪上下文并补充响应和透传处理 span。 支持协议 Monitor 在同步及响应式上下文中切换,并补充聚焦测试。
通过 OpenTelemetry ContextStorageProvider 与 Micrometer ThreadLocalAccessor 共享上下文,并开启 Reactor 自动传播,修复协议诊断日志和系统日志缺少 traceId 的问题。
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
目的
context.monitor.logger记录日志时缺少traceId的问题,使协议诊断日志和系统日志均可关联当前有效 span。核心变动
device-manager:发布设备消息前写入 trace context,从回复消息头恢复父上下文并创建responsespan,为普通透明传输消息创建handlespan。protocol-component:为ProtocolMonitorHelper增加代理 Monitor、同步/Mono/Flux 上下文切换及恢复能力,并通过真实协议日志场景验证跨调度器 trace 关联。common-component:通过 OpenTelemetryContextStorageProvider与 MicrometerThreadLocalAccessor官方 SPI 共享上下文存储,并开启 Reactor 自动上下文传播。logging-component:系统日志转换时从当前有效 span 写入traceId、spanId,无有效 span 时保持为空。设计与测试目标
jetlinks-components/protocol-component/README.md、jetlinks-manager/device-manager/README.mdProtocolMonitorHelper,并确认从公共上下文传播层修复日志 trace 关联;明确排除 gateway/network monitorresponse父子链路、透明传输handlespan、Monitor 嵌套/响应式传播、OpenTelemetry/Micrometer SPI 注册、系统与协议日志 trace 投影,以及正常、异常、取消和乱序 Scope 关闭后的上下文恢复ProtocolMonitorHelper公共方法、两个上下文传播 Provider/Accessor 类契约、生命周期和乱序关闭保护说明及真实@since 2.12TraceHolder、MonoTracer和DeviceTracer创建既有业务 span,通过官方上下文传播 SPI 恢复Span.current();本次日志修复不新增重复 span,不记录 payload 或敏感信息测试结果
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 testTraceContextPropagationTest6 个用例覆盖双 SPI、嵌套/乱序 Scope、跨调度器及正常/异常/取消清理;SystemLoggingAppenderTest2 个用例覆盖有效和无效 span;ProtocolMonitorHelperTest5 个用例覆盖 Monitor 上下文和真实协议日志;两个设备 connector 测试 3 个用例覆盖消息 trace header 与父子 spanInternalEventBus、OpenTelemetry exporter、ServiceLoader双 SPI 加载及公共自动配置入口验证ThreadLocalContextStorageProviderline 100%(36/36)、branch 100%(10/10);系统日志有效/无效 span 新增分支均已覆盖文档同步情况
jetlinks-components/protocol-component/README.md、jetlinks-manager/device-manager/README.md风险与说明
@since 2.12及上下文恢复和乱序关闭边界说明response/handlespan、协议 Monitor 与 OpenTelemetry Context 跨调度器传播;不新增重复业务 span