发布日期: 2026-03-30
版本号: v2.17.0

后端部分主要包括多项错误修复与改进,如优化定时器解析、修正内存错误过滤、增强监控功能及自追踪机制;实验性功能方面,点击House优化查询性能,MCP服务器增加系统提示与租户限制;CI持续集成改进涉及缓存修复与测试执行工具升级;代码重构将参数转换工具移出存储API;文档更新新增ADR说明。

UI部分新增了Span详情侧边视图及Trace日志聚合功能;修复了XSS安全漏洞、暗色模式显示问题及多项界面交互错误;实验性功能推进了侧边面板与视图模式的集成;CI改进确保工作流稳定性;代码重构完成了路由库升级、状态管理迁移及组件函数化改造。

更新内容 (中文)

后端变更

🐞 缺陷修复、小幅改进

  • 在指标初始化中实现计时器时长桶解析(@junaiddshaukat#7951
  • 修复(内存):在链路搜索中接受字符串形式的错误过滤器(@YoungHypo#8217
  • 功能(监控):恢复 grafana 到 spm docker-compose 示例(adr-007 步骤 1)(@abhay1999#8215
  • 通过 otel collector 遥测工厂实现安全的自跟踪(@yurishkuro#8208
  • 修复:防护 addjitter 函数以避免零/亚纳秒时长导致的 panic(修复 #8149)(@shivamtiwari3#8178
  • 修复:时钟偏移调整器也调整结束时间戳(@Audio431#8170
  • 更新 mcp server readme(@yurishkuro#8163
  • 功能(查询):将 metricsstorage 暴露给 ui 作为存储能力(@hharshhsaini#8154

🚧 实验性功能

  • [clickhouse] 优化 spans 表以实现更快的搜索(@mahadzaryab1#8258
  • [jaegermcp] 为 llm 客户端添加系统提示指令(adr 阶段 4)(@lopster568#8253
  • 修复(jaegermcp):强制执行响应限制(@abhay1999#8242
  • 功能(监控):go sdk 仪表盘生成器 — adr-007 步骤 2a(@abhay1999#8216
  • [clickhouse][基准测试] 添加来自基准测试的初步结果(@mahadzaryab1#8181
  • [jaegermcp] 启用租户强制执行(@whiplashvin#8203
  • [jaegermcp] 在 mcp 处理程序中强制执行配置驱动的限制(@rite7sh#8194
  • [jaegermcp] 修复 mcp server 与 claude code 的集成(@yurishkuro#8191
  • [clickhouse] 修复 trace id 时间戳表模式 / 查询以对 trace_ids 进行去重(@mahadzaryab1#8180
  • [clickhouse] 通过添加开始和结束时间过滤器优化获取链路查询(@mahadzaryab1#8152

👷 CI 改进

  • 修复:创建可重用的 setup-go action 以修复 ci 工作流中的 go 模块缓存(@Copilot#8257
  • 使用 gotestsum 执行所有测试(@Copilot#8256
  • 修复(ci):更正指标快照比较噪声(@Copilot#8246
  • Ci(监控):为 go sdk 生成器添加仪表盘同步检查(adr-007 步骤 3)(@abhay1999#8240
  • 修复(ci):为 prepare-docker-buildx 中拉取 registry:2 添加重试逻辑(@Copilot#8236
  • [ci] 改进 e2e 工作流文档和测试模式命名(@yurishkuro#8195
  • 修复 oke demo prometheus 升级(@danish9039#8183
  • [test] 添加作用域名称和版本集成测试(@Manik2708#8138
  • 修复 ci 并行模式检测针对无团队访问权限的组织成员(@yurishkuro#8182
  • 撤回 pr8106 的指标工作流变更(@yurishkuro#8175
  • Ci:修复 ci 摘要报告发布工作流中的 pr 解析(@yurishkuro#8159
  • 不在推送到主分支时运行 dependency-review(@yurishkuro#8158
  • 在 pr 评论中包含指标变更详情(@yurishkuro#8153
  • 修复(ci):防止过时的覆盖率基线在主分支运行中持续存在(@Copilot#8157
  • 修复:在 version-check 二进制路径中为调试构建使用 $(suffix)(@Copilot#8148

⚙️ 重构

  • 将参数类型转换工具从 tracestore api 移至 v1adapter(@Copilot#8255
  • 功能(监控):完成 adr-007 步骤 2b 仪表盘升级(@YoungHypo#8241

📖 文档

📊 UI 变更

✨ 新功能

  • 允许在侧面板中查看 span 详情,而不是内联视图(@yurishkuro#3578
  • [功能]:添加链路日志视图以聚合所有 span 事件(@SoumyaRaikwar#3563

🐞 缺陷修复、小幅改进

  • 🔒 [安全修复] 用 textContent 替换 innerHTML 以缓解 XSS 风险(@jkowall#3651
  • 将 plexus 演示路由添加到主 ui(仅开发用,/plexus-demo)(@Copilot#3656
  • 修复 plexus 演示(@yurishkuro#3654
  • 清理不完整图标、文本和工具提示的显示(@yurishkuro#3619
  • 撤回 “refactor(plexus): 将 digraph 迁移到函数式组件”(@yurishkuro#3600
  • 撤回 “chore: 在开发模式下动态获取后端配置 (#3541)"(@yurishkuro#3599
  • 修复:质量指标页面上的深色模式无法正常工作(@gulshank0#3583
  • 修复:在 url 中将大写链路 id 标准化为小写(@samar-703#3485
  • 修复:tracediff 槽 b 搜索填充到槽 a 而不是槽 b(@samar-703#3473
  • 修复详情行层级:父 span 缺少垂直线和白色背景回归(@Copilot#3572
  • 修复:系统架构(dag)深色模式可见性(@Parship12#3568

🚧 实验性功能

👷 CI 改进

⚙️ 重构

  • 功能:添加 zustand 和用于状态迁移的查询基础(@Parship12#3662
  • 修复:替换剩余的 tooltip 箭头属性(@YoungHypo#3663
  • 移除 store npm 依赖并抑制 lightningcss 警告(@yurishkuro#3659
  • 移除已弃用的 worker-loader,改用 webpack 5 / vite 内置 worker 支持(@yurishkuro#3646
  • 最后一部分:迁移到 react-router-dom v7 & 移除兼容层 & history(@Parship12#3645
  • 阶段 4 & 5 的一部分:将 v5 matchpath 调用签名迁移到 v6/v7 matchpath 签名(@Parship12#3617
  • 阶段 4 & 5 的一部分:将 link 迁移到 react-router-dom-v5-compat(@Parship12#3618
  • 阶段 4 的一部分:移除 redux-first-history 并将路由状态与 redux 解耦(@Parship12#3616
  • 阶段 4 清理:移除 history.replace() 和 historyupdatemiddleware(@Parship12#3615
  • 阶段 3.2 的最后部分(任务 1):重构(tracepage):将类组件转换为函数式组件(@Parship12#3613
  • 阶段 3 剩余:移除 state.router.location 用法(清理)(@Parship12#3614
  • 阶段 3.2 的一部分(任务 1):在 tracepage 中将键盘快捷键设置提取到单独函数中(@Parship12#3609
  • 修复(tracepage):修复过时的 filterspans 缓存键并移除无效代码(@thc1006#3592
  • 阶段 3.2 的一部分(任务 2):移除无效的 searchurl prop(@Parship12#3603
  • 阶段 3.2(任务 2):重构(dependencygraph):将类组件转换为函数式组件(@Parship12#3591
  • 重构(plexus):将 digraph 迁移到函数式组件(@hharshhsaini#3534
  • 任务:在开发模式下动态获取后端配置 (#3541)(@hharshhsaini#3561
  • 重构(plexus):将 node 迁移到函数式组件 (#3392)(@hharshhsaini#3531
  • 重构(plexus):将 svgedges 迁移到函数式组件 (#3397)(@hharshhsaini#3518
  • 任务:将 getconfigvalue 替换为直接的 getconfig() 属性访问(@Copilot#3589
  • 修复(监控):使用 storagecapabilities 配置作为 spm 可用性的权威信号(@yurishkuro#3587
  • 重构:通过后端的存储能力控制监控选项卡的可见性(@hharshhsaini#3554
  • 阶段 3.2(任务 3):从 redux 移除 historyupdatemiddleware & 将 navigate(url) 移至 searchform 中(@Parship12#3582
  • 阶段 3.1:用 uselocation() 替换 state.router.location(@Parship12#3574
  • 重构(plexus):将 measurablenodes 迁移到函数式组件(@hharshhsaini#3533
  • 阶段 1:将路由定义迁移到 react router v6 语法(@Parship12#3565
  • 重构(plexus):将 svgdefentry 迁移到函数式组件 (#3395)(@hharshhsaini#3528

更新内容 (原始)

Backend Changes

🐞 Bug fixes, Minor Improvements

  • Implement timer duration bucket parsing in metrics init (@junaiddshaukat in #7951)
  • Fix(memory): accept string-form error filters in trace search (@YoungHypo in #8217)
  • Feat(monitor): restore grafana to spm docker-compose example (adr-007 step 1) (@abhay1999 in #8215)
  • Safe self-tracing via otel collector telemetry factory (@yurishkuro in #8208)
  • Fix: guard addjitter against zero/sub-nanosecond durations to prevent panic (fixes #8149) (@shivamtiwari3 in #8178)
  • Fix: clock skew adjuster to also adjust endtimestamp (@Audio431 in #8170)
  • Update mcp server readme (@yurishkuro in #8163)
  • Feat(query): expose metricsstorage to ui as storage capabilities (@hharshhsaini in #8154)

🚧 Experimental Features

  • [clickhouse] optimize spans table for faster searching (@mahadzaryab1 in #8258)
  • [jaegermcp] add system prompt instructions for llm clients (adr phase 4) (@lopster568 in #8253)
  • Fix(jaegermcp): enforce response limits (@abhay1999 in #8242)
  • Feat(monitor): go sdk dashboard generator — adr-007 step 2a (@abhay1999 in #8216)
  • [clickhouse][benchmarking] add initial results from benchmarking (@mahadzaryab1 in #8181)
  • [jaegermcp] enable tenancy enforcement (@whiplashvin in #8203)
  • [jaegermcp] enforce config-driven limits in mcp handlers (@rite7sh in #8194)
  • [jaegermcp] fix mcp server integration with claude code (@yurishkuro in #8191)
  • [clickhouse] fix trace id timestamps table schema / query to deduplicate trace_ids (@mahadzaryab1 in #8180)
  • [clickhouse] optimize get traces query by adding start and end time filter (@mahadzaryab1 in #8152)

👷 CI Improvements

  • Fix: create reusable setup-go action to fix go module cache in ci workflows (@Copilot in #8257)
  • Use gotestsum for all test execution (@Copilot in #8256)
  • Fix(ci): correct metrics snapshot comparison noise (@Copilot in #8246)
  • Ci(monitor): add dashboard sync check for go sdk generator (adr-007 step 3) (@abhay1999 in #8240)
  • Fix(ci): add retry logic for pulling registry:2 in prepare-docker-buildx (@Copilot in #8236)
  • [ci] improve e2e workflow documentation and test mode naming (@yurishkuro in #8195)
  • Fix oke demo prometheus upgrade (@danish9039 in #8183)
  • [test] add scope name and version integration test (@Manik2708 in #8138)
  • Fix ci parallel mode detection for org members without team access (@yurishkuro in #8182)
  • Revert metrics workflow changes from pr8106 (@yurishkuro in #8175)
  • Ci: fix pr resolution in ci summary report publish workflow (@yurishkuro in #8159)
  • Do not run dependency-review on push to main (@yurishkuro in #8158)
  • Include metric change details in pr comment (@yurishkuro in #8153)
  • Fix(ci): prevent stale coverage baseline from persisting across main-branch runs (@Copilot in #8157)
  • Fix: use $(suffix) in version-check binary path for debug builds (@Copilot in #8148)

⚙️ Refactoring

  • Move param type conversion util out of tracestore api into v1adapter (@Copilot in #8255)
  • Feat(monitor): complete adr-007 step 2b dashboard upgrade (@YoungHypo in #8241)

📖 Documentation

📊 UI Changes

✨ New Features

  • Allow viewing span details in a side panel instead of inline view (@yurishkuro in #3578)
  • [feature]: add trace logs view to aggregate all span events (@SoumyaRaikwar in #3563)

🐞 Bug fixes, Minor Improvements

  • 🔒 [security fix] replace innerHTML with textContent to mitigate XSS risk (@jkowall in #3651)
  • Add plexus demo route to main ui (dev only, /plexus-demo) (@Copilot in #3656)
  • Fix plexus demo (@yurishkuro in #3654)
  • Clean-up display of incomplete icon, text, and tooltip (@yurishkuro in #3619)
  • Revert “refactor(plexus): migrate digraph to functional component” (@yurishkuro in #3600)
  • Revert “chore: fetch backend config dynamically in dev mode (#3541)” (@yurishkuro in #3599)
  • Fix: dark mode is not working correctly on the quality metrics page (@gulshank0 in #3583)
  • Fix: normalize uppercase trace ids to lowercase in url (@samar-703 in #3485)
  • Fix: tracediff slot b search populates slot a instead (@samar-703 in #3473)
  • Fix detail-row hierarchy: missing vertical bars for parent spans and white background regression (@Copilot in #3572)
  • Fix: system architecture (dag) dark mode visibility (@Parship12 in #3568)

🚧 Experimental Features

👷 CI Improvements

⚙️ Refactoring

  • Feat: add zustand and query foundation for state migration (@Parship12 in #3662)
  • Fix: replace remaining tooltip arrow prop (@YoungHypo in #3663)
  • Remove store npm dependency and suppress lightningcss warning (@yurishkuro in #3659)
  • Remove deprecated worker-loader in favor of webpack 5 / vite built-in worker support (@yurishkuro in #3646)
  • Final part: migrate to react-router-dom v7 & drop compat layer & history (@Parship12 in #3645)
  • Part of phase 4 & 5: migrate the v5 matchpath call signature to v6/v7 matchpath signature (@Parship12 in #3617)
  • Part of phase 4 & 5: migrate link to react-router-dom-v5-compat (@Parship12 in #3618)
  • Part of phase 4: remove redux-first-history and decouple router state from redux (@Parship12 in #3616)
  • Cleanup for phase 4: remove history.replace() and historyupdatemiddleware (@Parship12 in #3615)
  • Final part of phase 3.2 (task 1): refactor(tracepage): convert class component to functional (@Parship12 in #3613)
  • Phase 3 leftovers: remove state.router.location usages (cleanup) (@Parship12 in #3614)
  • Part of phase 3.2 (task 1): factor out keyboard shortcut setup into a separate function in the tracepage (@Parship12 in #3609)
  • Fix(tracepage): fix stale filterspans cache key and remove dead code (@thc1006 in #3592)
  • Part of phase 3.2 (task 2): remove dead searchurl prop (@Parship12 in #3603)
  • Phase 3.2 (task 2): refactor(dependencygraph): convert class component to functional (@Parship12 in #3591)
  • Refactor(plexus): migrate digraph to functional component (@hharshhsaini in #3534)
  • Chore: fetch backend config dynamically in dev mode (#3541) (@hharshhsaini in #3561)
  • Refactor(plexus): migrate node to functional component (#3392) (@hharshhsaini in #3531)
  • Refactor(plexus): migrate svgedges to functional component (#3397) (@hharshhsaini in #3518)
  • Chore: replace getconfigvalue with direct getconfig() property access (@Copilot in #3589)
  • Fix(monitor): use storagecapabilities config as authoritative signal for spm availability (@yurishkuro in #3587)
  • Refactor: control monitor tab visibility via storage capabilities of the backend (@hharshhsaini in #3554)
  • Phase 3.2 (task 3): remove historyupdatemiddleware from redux & move navigate(url) into searchform (@Parship12 in #3582)
  • Phase 3.1: replace state.router.location with uselocation() (@Parship12 in #3574)
  • Refactor(plexus): migrate measurablenodes to functional component (@hharshhsaini in #3533)
  • Phase 1: migrate route definitions to react router v6 syntax (@Parship12 in #3565)
  • Refactor(plexus): migrate svgdefentry to functional component (#3395) (@hharshhsaini in #3528)

下载链接