发布日期: 2026-02-06
版本号: v2.15.0

Jaeger项目的此次更新包含多项后端和前端(UI)的改动。后端方面,引入了破坏性变更,限制了链路追踪和指标存储配置只能指定一种后端类型;新增了用于指标导出的Grafana仪表盘;修复了多个API在服务不存在时返回空数组而非nil的错误,以及优化了Badger存储的维护关闭流程。实验性功能方面,重点增强了ClickHouse集成,包括为事件属性元数据添加物化视图和改进属性类型查询,同时大幅推进了MCP服务器功能,新增了包括获取服务名、链路名、关键路径、拓扑结构以及搜索链路在内的一系列工具,并完成了SDK集成与HTTP传输实现。此外,还进行了多项CI改进和代码重构,如启用未处理错误检查、更新测试快照、迁移查询服务包等。UI部分,新功能包括采用了IBM调色板的Span颜色方案和优化了追踪视图的树形层级结构;修复了深色模式下的多处显示问题、文本重叠错误,并改进了追踪元数据的可读性;实验性功能主要围绕向OpenTelemetry模型迁移,推进了多个阶段的客户端和组件更新;同样完成了多项CI配置优化和代码重构,将多个React组件转换为函数式组件,并移除了过时依赖。文档方面,新增了AI使用政策、快速入门指南、安全文档、MCP服务器的架构决策记录,并更新了贡献指南。

更新内容 (中文)

后端变更

⛔ 破坏性变更

  • 限制追踪/指标存储配置,以允许精确指定一种后端类型(@yurishkuro#7875 中)

✨ 新功能

  • Issue #7811:为指标导出器添加 grafana 仪表盘(@Anmol202005#7903 中)

🐞 错误修复,小幅改进

  • [修复] 从 api/v3/services 返回空数组而非 nil(@dee077#7926 中)
  • [修复] 从 queryservice.getservices 返回空数组而非 nil(@sujalshah-bit#7925 中)
  • [修复] 当不存在服务时,始终返回空服务列表(@Sudhanshu-NITR#7929 中)
  • [修复] 确保在现有 close() 之前停止 badger 维护(@Yashika0724#7940 中)
  • 对存储工厂使用延迟初始化(@Copilot#7887 中)

🚧 实验性功能

  • [clickhouse] 添加事件属性元数据的物化视图(@mahadzaryab1#7923 中)
  • [clickhouse] 重新设计 clickhouse 属性以查找字符串属性的类型(@mahadzaryab1#7815 中)
  • [mcp] 添加用于发现 span 名称的 get_span_names 工具(@sajal004004#7909 中)
  • 在 jaegermcp 扩展中使用 opentelemetry span_name 术语(@Copilot#7916 中)
  • [mcp] 实现 get_critical_path 工具(第 3 阶段步骤 8-9)(@Copilot#7857 中)
  • [clickhouse][杂务] 更新单元测试快照以处理多个查询(@mahadzaryab1#7865 中)
  • [mcp] 用于服务发现的 get_services 工具(@Copilot#7864 中)
  • [mcp] 添加 cors 设置并修复 null 数组错误(@yurishkuro#7863 中)
  • [mcp] get_trace_topology 工具(第 3 阶段步骤 7)(@Copilot#7862 中)
  • [mcp] 第 2 阶段步骤 5-6:get_span_details 和 get_trace_errors 工具(@Copilot#7859 中)
  • [mcp] 第 2 阶段步骤 4:search_traces(@Copilot#7858 中)
  • [clickhouse][杂务] 更新测试驱动程序以处理多个查询(@mahadzaryab1#7839 中)
  • [mcp] 第 2 阶段步骤 3:存储集成(@Copilot#7849 中)
  • Mcp 服务器/第 1.2 阶段:使用可流式传输 HTTP 传输的 SDK 集成(@Copilot#7846 中)
  • Mcp 服务器脚手架(@Copilot#7842 中)
  • [clickhouse] 在 clickhouse 查询的单元测试中转向快照测试(@mahadzaryab1#7831 中)

👷 CI 改进

⚙️ 重构

  • 启用 confusion-naming linter 规则(@SamyakBorkar#7949 中)
  • 用适当的错误处理替换 panic 调用(@aaryan359#7956 中)
  • 修复 search_traces.go 中的 time-naming linter 违规(@jkowall#7913 中)
  • [badger][v2] 重构工厂签名以使用遥测设置(@iypetrov#7902 中)
  • [cassandra] 为 keyvalue 和 traceid 的序列化器/反序列化器添加 omitempty 标记(@Manik2708#7867 中)
  • 将状态报告融合到收集器框架(@yurishkuro#7890 中)
  • [杂务] 将查询服务移至更高位置(@yurishkuro#7854 中)
  • [杂务] 移除 v1 查询服务包(@Copilot#7845 中)

文档

📊 UI 变更

✨ 新功能

🐞 错误修复,小幅改进

🚧 实验性功能

  • [otel 迁移] 为 v3 api 客户端添加运行时模式验证(@yurishkuro#3448 中)
  • [otel 迁移] 第 3.1 阶段:添加 jaegerclient v3 并用于服务 / 操作(@yurishkuro#3329 中)
  • [otel] 为阶段-3 添加更多详细信息(@yurishkuro#3323 中)
  • Otel 迁移 - 完成第 2 阶段验证(@yurishkuro#3319 中)
  • 清理 opentracing/opentelemetry 术语(@yurishkuro#3316 中)
  • 最终确定 opentracing/opentelemetry 术语的双重使用(@yurishkuro#3311 中)
  • 将 virtualizedtraceview 及其依赖组件迁移到 iotelspan(@Copilot#3289 中)
  • 用更多派生数据增强 otel 领域模型(@yurishkuro#3292 中)
  • 实现 spandetail 组件的第 2 阶段(@Copilot#3275 中)

👷 CI 改进

⚙️ 重构

  • 重构:将 detailspanel 更新为函数式组件(@Harshdev098#3358 中)
  • 更新 @types/redux-actions 至 v2.6.5(@Parship12#3498 中)
  • 重构(plexus):将 svgedgeslayer 从类转换为函数式组件(@thc1006#3409 中)
  • 将 accordionlinks 重构为函数式组件(@aaryan359#3406 中)
  • 将 measurablenodeslayer 转换为函数式组件(@Parship12#3429 中)
  • 重构:将 referencebutton 从基于类的转换为函数式组件(@gulshank0#3350 中)
  • 移除 reducers/services.ts(@yurishkuro#3455 中)
  • [杂务] 从 resultitem 中移除 history(@insane-22#3361 中)
  • 用通用内部错误捕获实现替换 @sentry/browser(@Copilot#3226 中)
  • 重构:将 diffnode 转换为函数式组件(@hxrshxz#3343 中)
  • 重构:将 hopsselector 选择器转换为函数式组件(@hxrshxz#3340 中)
  • 重构:将 app/index.tsx 文件的基于类的转换为函数式组件(@gulshank0#3342 中)
  • 将 htmllayersgroup 从类转换为函数式组件(@Parship12#3351 中)
  • 将 htmllayer 从类转换为函数式组件(@Parship12#3345 中)
  • 从 resultitemtitle 中移除 history(@Parship12#3312 中)
  • 将 searchform 转换为函数式组件(@yurishkuro#3326 中)
  • 将 searchtrace 页面中的剩余文件转换为 typescript(@yurishkuro#3325 中)
  • 将 tracepage 转换为 otel 模型(@yurishkuro#3309 中)
  • [杂务] 将更多组件迁移到 otel 模型(@yurishkuro#3308 中)
  • 将 tracepageheader 迁移到 otel 模型(@yurishkuro#3307 中)
  • 按照 adr 0002 将 trace-dag 文件迁移到 otel 类型(@Copilot#3299 中)
  • 将 otel 模型转换为使用强类型的时间/持续时间字段(@yurishkuro#3304 中)
  • 升级 searchresults 组件以接受 ioteltrace(@Copilot#3300 中)
  • 将关键路径计算升级到 otel 模型(@yurishkuro#3301 中)
  • 修复先前重构中引入的错误(@yurishkuro#3298 中)
  • 将 tracetimelineviewer 完全升级到 otel 模型(@yurishkuro#3297 中)
  • 将关键路径类型移至其自己的领域模型文件(@yurishkuro#3296 中)
  • 将领域类型 link 重命名为 hyperlink 并将 link-getter 升级到 otel(@yurishkuro#3295 中)
  • 将 otel traceid/spanid 重命名为 traceid/spanid 以匹配遗留领域模型(@yurishkuro#3294 中)
  • 将纯 typescript 文件重命名为具有 .ts 扩展名,而不是 .tsx(@yurishkuro#3290 中)

更新内容 (原始)

Backend Changes

⛔ Breaking Changes

  • Restrict trace/metric storage configs to allow exactly one backend type (@yurishkuro in #7875)

✨ New Features

🐞 Bug fixes, Minor Improvements

  • [fix] return empty array instead of nil from api/v3/services (@dee077 in #7926)
  • [fix] return empty array instead of nil from queryservice.getservices (@sujalshah-bit in #7925)
  • [fix] always return empty services list when none exist (@Sudhanshu-NITR in #7929)
  • [fix] ensure badger maintenance is stopped before existing close() (@Yashika0724 in #7940)
  • Use lazy initialization for storage factory (@Copilot in #7887)

🚧 Experimental Features

  • [clickhouse] add materialized view for event attribute metadata (@mahadzaryab1 in #7923)
  • [clickhouse] rework clickhouse attributes to look up type for string attributes (@mahadzaryab1 in #7815)
  • [mcp] add get_span_names tool for discovering span names (@sajal004004 in #7909)
  • Use opentelemetry span_name terminology in jaegermcp extension (@Copilot in #7916)
  • [mcp] implement get_critical_path tool (phase 3 steps 8-9) (@Copilot in #7857)
  • [clickhouse][chore] update unit tests snapshots to handle multiple queries (@mahadzaryab1 in #7865)
  • [mcp] get_services tool for service discovery (@Copilot in #7864)
  • [mcp] add cors setting and fix null array errors (@yurishkuro in #7863)
  • [mcp] get_trace_topology tool (phase 3 step 7) (@Copilot in #7862)
  • [mcp] phase 2 steps 5-6: get_span_details and get_trace_errors tools (@Copilot in #7859)
  • [mcp] phase 2 step 4: search_traces (@Copilot in #7858)
  • [clickhouse][chore] update test driver to handle multiple queries (@mahadzaryab1 in #7839)
  • [mcp] phase 2 step 3: storage integration (@Copilot in #7849)
  • Mcp server/phase 1.2: sdk integration with streamable http transport (@Copilot in #7846)
  • Mcp server scaffolding (@Copilot in #7842)
  • [clickhouse] move to snapshot testing in unit tests for clickhouse queries (@mahadzaryab1 in #7831)

👷 CI Improvements

⚙️ Refactoring

  • Enable confusing-naming linter rule (@SamyakBorkar in #7949)
  • Replace panic calls with proper error handling (@aaryan359 in #7956)
  • Fix time-naming linter violation in search_traces.go (@jkowall in #7913)
  • [badger][v2] refactor factory signatures to use telemetry settings (@iypetrov in #7902)
  • [cassandra] add omitempty notation for keyvalue and marshaller/unmarshaller for traceid (@Manik2708 in #7867)
  • Converge status reporting to collector framework (@yurishkuro in #7890)
  • [chore] move query service to higher location (@yurishkuro in #7854)
  • [chore] remove v1 queryservice package (@Copilot in #7845)

Documentation

📊 UI Changes

✨ New Features

🐞 Bug fixes, Minor Improvements

🚧 Experimental Features

  • [otel migration] add runtime schema validation to v3 api client (@yurishkuro in #3448)
  • [otel migration] phase 3.1: add jaegerclient v3 and use for services / operations (@yurishkuro in #3329)
  • [otel] add more details to phase-3 (@yurishkuro in #3323)
  • Otel migration - complete phase 2 validation (@yurishkuro in #3319)
  • Clean up of opentracing/opentelemetry nomenclature (@yurishkuro in #3316)
  • Finalize dual use of opentracing/opentelemetry nomenclature (@yurishkuro in #3311)
  • Migrate virtualizedtraceview and dependent components to iotelspan (@Copilot in #3289)
  • Enhance otel domain model with more derived data (@yurishkuro in #3292)
  • Implement phase 2 for spandetail component (@Copilot in #3275)

👷 CI Improvements

⚙️ Refactoring

  • Refactor: update detailspanel to functional component (@Harshdev098 in #3358)
  • Update @types/redux-actions to v2.6.5 (@Parship12 in #3498)
  • Refactor(plexus): convert svgedgeslayer from class to functional component (@thc1006 in #3409)
  • Refactor accordionlinks to functional component (@aaryan359 in #3406)
  • Convert measurablenodeslayer to functional component (@Parship12 in #3429)
  • Refactoring: converted referencebutton from class based to functional component (@gulshank0 in #3350)
  • Remove reducers/services.ts (@yurishkuro in #3455)
  • [chore] remove history from resultitem (@insane-22 in #3361)
  • Replace @sentry/browser with generic internal error capture implementation (@Copilot in #3226)
  • Refactor: convert diffnode to functional component (@hxrshxz in #3343)
  • Refactor: convert hopsselector selector to functional component (@hxrshxz in #3340)
  • Refactor: convert app/index.tsx file’s class based to functional component (@gulshank0 in #3342)
  • Convert the htmllayersgroup from class to functional component (@Parship12 in #3351)
  • Convert the htmllayer from class to functional component (@Parship12 in #3345)
  • Remove history from resultitemtitle (@Parship12 in #3312)
  • Convert searchform to functional component (@yurishkuro in #3326)
  • Convert remaining files in searchtrace page to typescript (@yurishkuro in #3325)
  • Convert tracepage to otel model (@yurishkuro in #3309)
  • [chore] migrate few more components to otel model (@yurishkuro in #3308)
  • Migrate tracepageheader to otel model (@yurishkuro in #3307)
  • Migrate trace-dag files to otel types per adr 0002 (@Copilot in #3299)
  • Convert otel model to use strongly typed time/duration fields (@yurishkuro in #3304)
  • Upgrade searchresults components to accept ioteltrace (@Copilot in #3300)
  • Upgrade critical path calculations to otel model (@yurishkuro in #3301)
  • Fix for bug introduced in previous refactoring (@yurishkuro in #3298)
  • Fully upgrade tracetimelineviewer to otel model (@yurishkuro in #3297)
  • Move critical path types to their own domain model file (@yurishkuro in #3296)
  • Rename domain type link to hyperlink and upgrade link-getter to otel (@yurishkuro in #3295)
  • Rename otel traceid/spanid to traceid/spanid to match legacy domain model (@yurishkuro in #3294)
  • Rename pure typescript files to have .ts extension, not .tsx (@yurishkuro in #3290)

下载链接