all-in-one 镜像默认使用内存存储,重启后追踪数据会丢失,生产环境需另配存储后端;UI 默认监听 16686 端口,OTLP 分别走 4317(gRPC)和 4318(HTTP),端口未映射则无法访问或上报;Jaeger v2 基于 OpenTelemetry Collector,部分 v1 CLI 参数与配置项已废弃,需按弃用公告迁移。
jaeger
jaegertracingApache-2.0活跃维护CNCF 出品的分布式追踪平台,采集服务调用链路并做可视化分析,帮你在微服务和 LLM 应用里定位延迟与故障根因。
CNCF Jaeger, a Distributed Tracing Platform
docker run --rm --name jaeger -p 16686:16686 -p 4317:4317 -p 4318:4318 jaegertracing/jaeger:latestREADME 未说明 CPU、内存或 GPU 要求,也未提及 GPU 厂商支持;仅说明可用 Docker 运行 all-in-one 镜像(含内存存储)。
CNCF 毕业的分布式追踪平台,采集、存储并可视化微服务调用链路,帮你定位跨服务延迟
CNCF 出品的分布式追踪平台,采集服务调用链路并做可视化分析,帮你在微服务和 LLM 应用里定位延迟与故障根因。
核心能力
- 用 Collector 接收 OTLP gRPC 与 HTTP 上报的追踪数据
- 提供 Query 服务与 Web UI 按 trace ID 检索调用链
- 支持 Elasticsearch、Cassandra、ClickHouse 等多种存储后端
- 通过存储插件机制以 gRPC 对接外部存储实现
- Jaeger v2 基于 OpenTelemetry Collector 组件构建
容易踩的坑
- v2.23.0Release v2.23.0最新正式版2026-11-05 · 2026-11-05 06:31 UTC
Backend Changes
⛔ Breaking Changes
- Fix(storage): remove unused clickhouse feature gates (@albertteoh in #9988)
- Fix(storage): resolve auth extension references deterministically (@jkowall in #9772)
- Chore(ai-sidecar): remove the gemini reference sidecar (@alishair7071 in #9841)
- Feat(clickhouse): require an explicit table engine when creating the schema (@ysh-bot in #9813)
✨ New Features
- Feat(mcp): accept a sql statement in the search_traces tool (@ysh-bot in #9925)
- Feat(query): add a sql query surface that compiles to rfc 0005 filters (@ysh-bot in #9922)
- Feat(query): serve storage search capabilities over api_v3 http (@ysh-bot in #9804)
- Feat(query): serve storage search capabilities over api_v3 grpc (@ysh-bot in #9803)
- Build(idl): bump jaeger-idl to v0.14.0 (@ysh-bot in #9802)
- Feat(clickhouse): route structured query filters to sql where (rfc 0005 m3) (@om7057 in #9701)
🐞 Bug fixes, Minor Improvements
- Fix(mcp): start the investigation strategy with read_skill (@lopster568 in #10038)
- Fix(otel-demo): add 30-day opensearch index retention (@jkowall in #9917)
- Fix(es): store non-finite doubles as otlp/json string tags (@jkowall in #9912)
- Fix(query): deduplicate shared span ids in linear time (@jkowall in #9764)
- Fix(query): recover from panics in query grpc and mcp handlers (@jkowall in #9766)
- Feat(query): forward captured identity headers onto the acp agent handshake (@ysh-bot in #10007)
- Fix(mcp): guard trace walks against duplicate span ids (@jkowall in #9763)
- Fix(query): check filter nesting depth before decoding api_v3 parameters (@jkowall in #10006)
- Feat(query): support prettyprint on the v3 http api (@sksingh2005 in #9990)
- Fix(jaegermcp): expose total_span_count in get_trace_topology (@alliasgher in #8530)
- Feat(storage): honor anchors and case folding in regex filter patterns (@ysh-bot in #9923)
- Fix(query): reject durations that overflow (@sublimemonk in #9877)
- Fix(query): render non-finite float attributes as strings (@ayush00git in #9901)
- Feat(query): add
- v2.22.0Release v2.22.02026-10-06 · 2026-10-06 14:27 UTC
查看更新说明
Backend Changes
⛔ Breaking Changes
- Fix(es): configure numeric attribute indexing instead of gating it (@ysh-bot in #9694)
- Refactor(es): give the span index its own options type (@ysh-bot in #9693)
- Fix(remote-storage): configure the service from one confmap-decoded file (@ysh-bot in #9699)
- Fix(es): honor index-prefix in dependencies/sampling legacy templates (@zarna1parekh in #9684)
- Feat(es): promote the native trace summaries gate to stable (@ysh-bot in #9609)
- Feat(query): promote the structured filters feature gate to beta (@ysh-bot in #9607)
- Feat(query): give span searches their own query interceptor hooks (@ysh-bot in #9597)
- Feat(es): promote the omitparentspanidreference gate to beta (@ysh-bot in #9586)
✨ New Features
- Feat(es): declare span search and pagination (@baroquebobcat in #9729)
- Feat(memory): execute caller-selected span ordering (@ysh-bot in #9672)
- Feat(query): expose span ordering in api v3 (@ysh-bot in #9671)
- Feat(storage): forward span ordering over grpc (@ysh-bot in #9670)
- Feat(query): validate and bind span ordering (@ysh-bot in #9669)
🐞 Bug fixes, Minor Improvements
- Fix(memory): skip same-service parents when building dependency links (@lopster568 in #9090)
- Fix(es-rollover): reject unknown --unit values in lookback (takeover #9442) (@jkowall in #9732)
- Fix(jaegerquery,remotestorage): remove nil error wrap in start() (@g-k-s-03 in #8882)
- Fix(memory): use read locks for read-only samplingstore methods (@shayannab in #9005)
- Fix(es): return an error for a nil predicate instead of panicking (@RudraDudhat2509 in #9709)
- Feat(es): break span sort ties on the backing index and document id (@baroquebobcat in #9720)
- Feat(es): search spans in the core reader (@baroquebobcat in #9704)
- Fix(release): re-enable slsa provenance with valid tag reference (#9046) (@Kartikupadhyay44 in #9702)
- Feat(es): wire span search through the elasticsearch reader (@baroquebobcat in #9700)
- Feat(es): lower starttime comparisons into filter (rfc 0016 m4) ([@baroquebobcat](https://github.com/baroquebo
- v2.21.0Release v2.21.02026-09-14 · 2026-09-14 23:05 UTC
查看更新说明
Backend Changes
⛔ Breaking Changes
- Feat(query)!: remove v1 http endpoints the ui no longer calls (@ysh-bot in #9260)
- Replace ai.enable_mcp with an optional ai.mcp config block (@SoumyaRaikwar in #9194)
- Fix(es): reject five unsupported elasticsearch config keys at startup (@ysh-bot in #9076)
- Feat(clickhouse): promote clickhouse storage feature gate to stable (@ysh-bot in #9058)
✨ New Features
- Feat(mcp): let search_traces omit the service name (@ysh-bot in #9262)
- Feat(storage): let backends declare that search can omit the service name (@ysh-bot in #9256)
🐞 Bug fixes, Minor Improvements
- Fix(memory): match unset-status spans in error=false trace search (@hharshhsaini in #9096)
- Fix(anonymizer): register the gogo codec (@DsThakurRawat in #9540)
- Fix(release): paginate the commits query in the release notes script (@ysh-bot in #9560)
- Fix(release): fail the release notes script on PRs that cannot be categorized (@ysh-bot in #9561)
- Fix(es): surface failed _msearch items instead of dropping traces silently (@hharshhsaini in #9008)
- Feat(featuregate): normalize Jaeger gate names (@maindevhoon in #9037)
- Fix(mcp): use inclusive bound for critical path child search (@Harizz076 in #9174)
- Feat(es): accept --feature-gates in esmapping-generator and es-rollover init (@ysh-bot in #9546)
- Fix(anonymizer): read the writer's zero-span capture without panicking (@DsThakurRawat in #9528)
- Validate targetsamplespersecond is positive (@Atul-Koundal in #9379)
- Fix(es-index-cleaner): quote index prefix in index name pattern (@DsThakurRawat in #9525)
- Feat(es): add optional index.mapping.total_fields.limit to the span index template (@zarna1parekh in #9523)
- Fix(mcp): respect search_depth when maxresults is unlimited (0) (@shashankvarma499 in #9517)
- Es tracestore: set flags("none") on tag regexpquery (#9387) (@SHIVANSH-ux-ys in #9454)
- Fix(query): cap searchdepth at 10000 and reject negatives (@jkowall in #9492)
- Fix(security): clear open codeql and scorecard token-permission alerts (@jkowall in #9488)
- Fix(otel-demo): upgrade opensearch
- v2.20.0Release v2.20.02026-07-20 · 2026-07-20 03:34 UTC
查看更新说明
Backend Changes
⛔ Breaking Changes
- Feat(es): promote es.* rotation and index-cleaner feature gates to beta (@ysh-bot in #9018)
- Feat(es): remove support for elasticsearch v6 (@yurishkuro in #8948)
- Feat(mcp): merge jaegermcp extension into jaegerquery extension (@Nabil-Salah in #8894)
- Feat(es): add configurable max_trace_duration and improve time-range design (@yurishkuro in #8840)
✨ New Features
- Feat(es): add --backend flag to esmapping-generator for opensearch selection (@ysh-bot in #8985)
- Feat(es): native trace summaries (summaryreader) (@Me-Priyank in #8812)
🐞 Bug fixes, Minor Improvements
- Feat(es): add synchronous bulk write primitive to the elasticsearch client (@ysh-bot in #8992)
- Feat(es): gate parentspanid reference-compat write behind a feature gate (@ysh-bot in #9015)
- Fix(ci): resolve published snapshot shas for oke demo deploy (@FlamingSaint in #8999)
- feat(jaegerai): add genai span attributes and gateway↔sidecar trace propagation (@SoumyaRaikwar in #8942)
- Chore(storage): remove expired stable feature gates (@Anujkumar9081 in #8970)
- Chore(es): scrub lingering olivere references from code comments (@ysh-bot in #8983)
- Feat(es): migrate template creation to esclient and retire legacy mapping rendering (@Me-Priyank in #8963)
- Fix(storage): reject mutually-exclusive es auth methods in validate() (@Anujkumar9081 in #8946)
- Make "spm not configured" error message more explicit (@Saithej2k in #8878)
- Feat(es): migrate span writes onto an owned bounded bulk indexer (@yurishkuro in #8944)
- Fix(auth): synchronize fallback token in tokenproviderwithtime closure (@yurishkuro in #8952)
- Feat(es): migrate service/operation reads onto owned searcher and query ast (@yurishkuro in #8943)
- [es] add bearer-token and api-key cli flags to es admin tools (rfc 0006 m3.5c) (@yurishkuro in #8939)
- [es] route admin plane through the shared auth stack (rfc 0006 m3.5b) (@yurishkuro in #8937)
- Fix(clickhouse): validate decoded trace/span id lengths to prevent panic on corrupted rows (@iammdzaidalam in #8935)
- Fix(es): apply custom_headers to all elasticsearch clients and honor host overri
- v2.19.0Release v2.19.02026-06-03 · 2026-06-03 14:25 UTC
查看更新说明
Backend Changes
✨ New Features
- Feat(apiv3): implement findtracesummaries grpc handler (@yurishkuro in #8634)
🐞 Bug fixes, Minor Improvements
- Fix(apiv3): support query.attributes filter in get /api/v3/traces (@yurishkuro in #8687)
- Feat(clickhouse): add tls configuration (@Pulkit7070 in #8650)
- [clickhouse] add linter for clickhouse (@mahadzaryab1 in #8641)
- [es] add missing scope and link fields to index templates (@Manik2708 in #8643)
- Fix: tools api mismatch between acp and jaeger gateway (@Nabil-Salah in #8608)
- Fix(apiv3): fix traceid casing, add snapshot test, and default searchdepth in trace-summaries endpoint (@yurishkuro in #8633)
- Feat: add get /api/v3/trace-summaries endpoint for lightweight search results (@yurishkuro in #8604)
- Fix(apiv3): accept camelcase http query params, keep snake_case as deprecated aliases (@yurishkuro in #8625)
- Fix(apiv3): rename query.num_traces to query.search_depth, keep deprecated alias (@yurishkuro in #8618)
- Ci(metrics): make pr metric diffs informational (@yurishkuro in #8605)
- Fix(storage/v2): use findtraceidsrequest for findtraceids rpc (@yurishkuro in #8603)
- Fix(storage): remove misleading error wrapper in getstoragefactory (@yurishkuro in #8593)
- Feat(grpc-storage): add max_recv_msg_size_mib config for grpc storage client (@yurishkuro in #8576)
🚧 Experimental Features
- Refactor(apiv3): replace hand-written json scaffolding with proto types in http gateway (@yurishkuro in #8646)
- Feat(grpc): implement summaryreader in grpc storage adapter (@yurishkuro in #8642)
- Feat(querysvc): compute trace summaries natively or fall back to full-trace aggregation (@yurishkuro in #8638)
- Feat(jaeger): implement ag-ui endpoint (@Nabil-Salah in #8505)
👷 CI Improvements
- Ci: reduce github actions token permissions (@jkowall in #8640)
- Fix(ci): always use submodule for npm cache key in setup-node.js action (@yurishkuro in #8654)
- Feat(ci): use latest jaeger-ui/main commit in snapshot builds (@yurishkuro in #8653)
- Fix(ci): stabilize codeql check results (@jkowall in [#8615](https://github.com/jaegertracing/j
用户点评
登录用户的真实使用记录,可按版本和硬件筛选还没有人点评。第一个说出真实体验的人最有价值。
Jaeger - a Distributed Tracing System
💥💥💥 Jaeger v2 is out! Read the blog post and try it out.
Quick Start
Get Jaeger running in seconds with Docker:
# Run Jaeger all-in-one (includes UI, collector, query, and in-memory storage)
docker run --rm --name jaeger \
-p 16686:16686 \
-p 4317:4317 \
-p 4318:4318 \
jaegertracing/jaeger:latest
# Access the UI at http://localhost:16686
# Send traces via OTLP: gRPC on port 4317, HTTP on port 4318
For production deployments and more options, see the Getting Started Guide.
Architecture
graph TD
SDK["OpenTelemetry SDK"] --> |HTTP or gRPC| COLLECTOR
COLLECTOR["Jaeger Collector"] --> STORE[Storage]
COLLECTOR --> |gRPC| PLUGIN[Storage Plugin]
COLLECTOR --> |gRPC/sampling| SDK
PLUGIN --> STORE
QUERY[Jaeger Query Service] --> STORE
QUERY --> |gRPC| PLUGIN
UI[Jaeger UI] --> |HTTP| QUERY
subgraph Application Host
subgraph User Application
SDK
end
end
Jaeger is a distributed tracing platform created by Uber Technologies and donated to Cloud Native Computing Foundation.
See Jaeger documentation for getting started, operational details, and other information.
Jaeger is hosted by the Cloud Native Computing Foundation (CNCF) as the 7th top-level project, graduated in October 2019. See the CNCF Jaeger incubation announcement and Jaeger graduation announcement.
Get Involved
Jaeger is an open source project with open governance. We welcome contributions from the community, and we would love your help to improve and extend the project. Here are some ideas for how to get involved. Many of them do not even require any coding.
Version Compatibility Guarantees
Since Jaeger uses many components from the OpenTelemetry Collector we try to maintain configuration compatibility between Jaeger releases. Occasionally, configuration options in Jaeger (or in Jaeger v1 CLI flags) can be deprecated due to usability improvements, new functionality, or changes in our dependencies. In such situations, developers introducing the deprecation are required to follow these guidelines.
In short, for a deprecated configuration option, you should expect to see the following message in the documentation or release notes:
(deprecated, will be removed after yyyy-mm-dd or in release vX.Y.Z, whichever is later)
A grace period of at least 3 months or two minor version bumps (whichever is later) from the first release containing the deprecation notice will be provided before the deprecated configuration option can be deleted.
For example, consider a scenario where v2.0.0 is released on 01-Sep-2024 containing a deprecation notice for a configuration option. This configuration option will remain in a deprecated state until the later of 01-Dec-2024 or v2.2.0 where it can be removed on or after either of those events. It may remain deprecated for longer than the aforementioned grace period.
Go Version Compatibility Guarantees
The Jaeger project attempts to track the currently supported versions of Go, as defined by the Go team. Removing support for an unsupported Go version is not considered a breaking change.
Starting with the release of Go 1.21, support for Go versions will be updated as follows:
- Soon after the release of a new Go minor version
N, updates will be made to the build and tests steps to accommodate the latest Go minor version. - Soon after the release of a new Go minor version
N, support for Go versionN-1will be removed and versionNwill become the minimum required version.
Note: All importable code has been moved to internal packages, so there is no need to maintain backward compatibility with older compilers (previously version N-1 was used).
Storage Backend Version Support Policy
This policy covers storage backend versions only while they are reasonable for the project to test, maintain, and recommend for production use. Policy coverage is distinct from versions that may remain technically compatible with Jaeger.
For backends with a published upstream lifecycle, Jaeger bases its policy on the backend project's or vendor's supported-version or end-of-life policy, with the exact coverage defined below. Once upstream support ends, Jaeger may remove CI coverage, stop proactively fixing backend-specific issues for that version, and require users to upgrade before troubleshooting.
For backends without a clear upstream lifecycle, Jaeger supports the current stable major version and the immediately preceding major version. Older versions are best-effort only and may be removed when they block development, security fixes, dependency updates, or CI reliability.
Backend-specific policy:
- Elasticsearch: follow Elastic's Product and Version End of Life Policy.
- OpenSearch: follow the OpenSearch Release Schedule and Maintenance Policy. In practice, this means the current major version and the previous major version while they remain maintained.
- Cassandra: follow Apache Cassandra's maintained release lines, as published on the Cassandra download page, with the Jaeger support target being the current major version and the previous major version.
- ClickHouse: follow ClickHouse's release and backport policy and production guidance for stable and LTS releases. Jaeger treats LTS releases as its support lines and covers the current and previous LTS releases, which ClickHouse supports simultaneously for at least 12 months. Monthly stable releases may remain compatible or appear in CI but are not covered by this policy.
Support means backend versions are in scope for proactive compatibility fixes. CI coverage is not the definitive support matrix: it may test only a subset of supported versions and may retain older versions on a best-effort basis. CI coverage alone does not make a backend version supported. Jaeger does not provide support for the backend product itself, vendor-specific distributions, or versions outside the upstream maintenance window.
The table below translates the policy into where each backend's versions are defined. The image pins in the per-backend Docker Compose files are what CI tests, and the upstream lifecycle page is what decides which versions the policy covers.
| Backend | Versions covered by policy | Versions tested in CI |
|---|---|---|
| Elasticsearch | Per Elastic's EOL policy | Pins in docker-compose/elasticsearch/ |
| OpenSearch | Current and previous major, per the OpenSearch maintenance policy | Pins in docker-compose/opensearch/ |
| Cassandra | Current and previous major, per the maintained Apache release lines | Pins in docker-compose/cassandra/ |
| ClickHouse | Current and previous LTS release | Pins in docker-compose/clickhouse/ |
Compose files for versions outside the policy may remain on a best-effort basis; their presence in CI does not extend the support policy.
Related Repositories
Components
Documentation
- Published: https://www.jaegertracing.io/docs/
- Source: https://github.com/jaegertracing/documentation
Building From Source
See CONTRIBUTING.
Contributing
See CONTRIBUTING.
Thanks to all the people who already contributed!
Maintainers
Rules for becoming a maintainer are defined in the GOVERNANCE document.
The official maintainers of the Jaeger project are listed in the MAINTAINERS file.
Please use @jaegertracing/jaeger-maintainers to tag them on issues / PRs.
Some repositories under jaegertracing org have additional maintainers.
Project Status Meetings
The Jaeger maintainers and contributors meet regularly on a video call. Everyone is welcome to join, including end users. For meeting details, see https://www.jaegertracing.io/get-in-touch/.
Roadmap
See https://www.jaegertracing.io/docs/roadmap/
Get in Touch
Have questions, suggestions, bug reports? Reach the project community via these channels:
- Slack chat room
#jaeger(need to join CNCF Slack for the first time) jaeger-tracingmail group- GitHub issues and discussions
Security
Third-party security audits of Jaeger are available in https://github.com/jaegertracing/security-audits. Please see Issue #1718 for the summary of available security mechanisms in Jaeger.
Adopters
Jaeger as a product consists of multiple components. We want to support different types of users, whether they are only using our instrumentation libraries or full end to end Jaeger installation, whether it runs in production or you use it to troubleshoot issues in development.
Please see ADOPTERS.md for some of the organizations using Jaeger today. If you would like to add your organization to the list, please comment on our survey issue.
Sponsors
The Jaeger project owes its success in open source largely to the Cloud Native Computing Foundation (CNCF), our primary supporter. We deeply appreciate their vital support. Furthermore, we are grateful to Uber for their initial, project-launching donation, and for the continuous contributions of software and infrastructure from 1Password, Codecov.io, Dosu, GitHub, Google Analytics, Netlify, and Oracle Cloud Infrastructure. Thank you for your generous support.
License
Copyright (c) The Jaeger Authors. Apache 2.0 License.