Prhub

#21740 [CI] [Tracing] Add ci for tracing and fix bugs

sgl-project/sglang · 作者 sufeng-buaa · 合并时间 2026-04-03 01:50

分析状态 已生成
文件变更 7提交数 4 · 评论 7
代码增减 +1037 / -319
run-ci test debugging

执行摘要

添加跟踪集成测试至 CI 并修复 tokenizer manager 中的 bug。

根据PR body,动机是'Implement a simple OpenTelemetry Collector and added tracing integration tests to CI',并修复一个追踪bug,以提升测试效率和可靠性。

建议CI维护者和测试工程师精读此PR,重点关注轻量级OTLP收集器的设计、测试优化技巧以及安全绑定实践,以借鉴于其他基础设施测试中。

讨论亮点

review中gemini-code-assist[bot]提出三点核心建议:1) 安全:将OTLP收集器绑定地址从0.0.0.0改为127.0.0.1,避免网络暴露风险;2) 性能:优化_protobuf_to_dict函数使用ListFields()仅提取设置字段,减少数据冗余;3) 性能:减少setUp方法中的check_interval从2秒到更短以加速CI执行。sufeng-buaa回应了第三点,调整逻辑为三次连续空检查。讨论聚焦于测试效率和安全配置。

实现拆解

实现包括:1) 修复tokenizer_manager.py中的convert_to_span_attrs函数,添加类型检查防止对BatchEmbeddingOutput访问completion tokens;2) 修改scripts/ci/cuda/ci_install_dependency.sh,在EXTRAS中添加'tracing'依赖;3) 移除test/manual/test_tracing.py旧手动测试;4) 新增test/registered/observability/test_tracing.py和test_tracing_disaggregation.py自动化测试文件,实现轻量级OTLP收集器并覆盖trace levels、批处理请求、并行采样和PD分离模式;5) 重命名metrics测试文件以统一observability模块组织。

文件 模块 状态 重要度
python/sglang/srt/managers/tokenizer_manager.py observability/tracing modified 4.0
scripts/ci/cuda/ci_install_dependency.sh ci modified 3.0
test/registered/observability/test_tracing.py observability/tracing added 6.0
test/registered/observability/test_tracing_disaggregation.py observability/tracing added 5.0

分析完成后,这里会展示 LLM 生成的相对完整源码片段和详细注释。

关键符号

convert_to_span_attrs LightweightOtlpCollector.__init__ LightweightOtlpCollector._protobuf_to_dict TestTraceServer.setUp

评论区精华

OTLP 收集器绑定地址安全优化 安全

gemini-code-assist[bot] 建议将绑定地址从 0.0.0.0 改为 127.0.0.1,避免本地网络暴露风险。

结论:建议被提出但未在 review 中明确采纳结论,需在代码中验证。 · 讨论中

protobuf 数据提取性能优化 性能

gemini-code-assist[bot] 建议使用 ListFields() 替代迭代所有字段,减少数据冗余和提升效率。

结论:建议被提出,可能已采纳以提高测试数据清洁度。 · 讨论中

测试间隔优化以加速 CI 性能

gemini-code-assist[bot] 建议减少 check_interval,sufeng-buaa 回应调整逻辑为三次连续空检查。

结论:sufeng-buaa 采纳并修改实现,优化测试执行速度。 · 已解决

风险与影响

技术风险包括:1) 新测试可能增加CI执行时间,但优化后影响可控;2) 绑定地址更改可能导致本地网络配置问题,需确保所有端点和连接一致使用localhost;3) protobuf提取优化可能引入数据解析错误,需验证测试断言;4) 测试覆盖虽广,但可能遗漏边缘场景,如高并发或异常路径。

影响范围:1) 对用户:透明,主要提升系统稳定性和调试能力;2) 对系统:增强跟踪功能测试覆盖,提高CI可靠性,修复bug避免嵌入输出中的token计数错误;3) 对团队:简化测试部署(无需Docker),加速开发迭代,但需关注新测试框架的维护成本。

测试性能影响 网络安全配置 数据解析优化风险

关联 Issue

未识别关联 Issue

当前没有检测到明确关联的 Issue 链接,后续同步到相关引用后会出现在这里。

完整报告

执行摘要

本PR通过添加轻量级OTLP收集器和多种跟踪集成测试至CI,显著提升SGLang跟踪功能的测试覆盖和稳定性,同时修复了tokenizer manager中的一个bug,避免嵌入输出中的token计数错误。变更主要影响基础设施和测试流程,对用户透明但有益于开发者调试效率。

功能与动机

为什么做:根据PR body描述,目标是“实现简单的OpenTelemetry Collector并添加跟踪集成测试到CI”,以取代依赖Docker的部署方式,简化测试环境并提高可靠性。此外,修复了一个追踪bug,确保在处理BatchEmbeddingOutput时正确生成token使用属性。

实现拆解

按模块拆解改动

  1. bug修复模块:修改python/sglang/srt/managers/tokenizer_manager.py中的convert_to_span_attrs函数,添加类型检查:
    python if not isinstance(recv_obj, BatchEmbeddingOutput): span_attrs[SpanAttributes.GEN_AI_USAGE_COMPLETION_TOKENS] = recv_obj.completion_tokens[i]
  2. CI依赖模块:更新scripts/ci/cuda/ci_install_dependency.sh,在EXTRAS中添加“tracing”包,确保测试环境安装必要依赖。
  3. 测试框架模块:移除旧手动测试test/manual/test_tracing.py,新增自动化测试文件:
    • test/registered/observability/test_tracing.py:实现LightweightOtlpCollector类,支持gRPC接收和内存存储,覆盖trace levels 0-3、批处理请求、并行采样等场景。
    • test/registered/observability/test_tracing_disaggregation.py:扩展至PD分离模式,验证分布式环境跟踪。
  4. 文件组织模块:重命名metrics测试文件以统一observability目录结构。

评论区精华

review讨论中最有价值的交锋

  • 安全绑定地址:gemini-code-assist[bot]指出“绑定到0.0.0.0暴露测试收集器到本地网络”,建议改为127.0.0.1以提升安全性。
  • 性能优化:同一bot建议“使用ListFields()仅提取设置字段”,减少数据冗余;并提议“减少check_interval从2秒到更短值”以加速CI。
  • 开发团队响应:sufeng-buaa回应间隔优化,调整逻辑为“三次连续空检查”,平衡了测试速度和稳定性。

风险与影响

具体风险和影响分析

  • 风险:新测试可能轻微增加CI时间(本地约130秒),但优化后影响可控;绑定地址更改需确保所有连接端点一致,否则可能导致测试失败;protobuf提取优化需验证数据完整性,避免断言错误。
  • 影响:正面影响为主——提升跟踪测试覆盖,增强CI可靠性,修复bug防止数据错误;对开发者,简化测试部署(无需Docker),但引入新测试框架需额外维护。

关联脉络

与历史PR和关联Issue的关系

  • 从近期历史PR看,本PR延续了CI改进趋势(如PR 21950修复GPU依赖),并关联测试基础设施优化(如PR 21905安全扫描)。
  • 虽无直接关联Issue,但体现了团队对observability模块(跟踪、指标)的持续投入,可能为未来调试和监控功能演进奠定基础。

参与讨论