
Jaeger V2 快速上手指南基于 OpenTelemetry Collector 的分布式追踪平台部署与源码架构解析【免费下载链接】jaegerCNCF Jaeger, a Distributed Tracing Platform项目地址: https://gitcode.com/GitHub_Trending/ja/jaegerJaeger V2本仓库 cmd/jaeger 目录下的全新主程序彻底重构为基于 OpenTelemetry Collector 的单一后端二进制集采集、存储、查询、UI 于一体并通过 OCBOpenTelemetry Collector Builder实现组件化定制。本文以官方快速上手流程为主线先带你用docker compose在几分钟内跑起 Jaeger V2 与 HotROD 演示应用再深入main.go、internal/command.go、all-in-one.yaml等源码与配置剖析其默认端口、内嵌配置机制与组件注册表读完即可独立完成部署、调试与自定义构建。背景Jaeger V2 为何基于 OpenTelemetry Collectorcmd/jaeger/README.md开宗明义Jaeger V2 based on OpenTelemetry collector。这意味着 Jaeger 的后端不再维护一套独立的 Collector 实现而是直接复用 OTel Collector 的运行时配置解析confmap、管线pipeline编排、组件工厂factory体系、遥测telemetry初始化全部来自go.opentelemetry.org/collector。Jaeger 自身则以扩展extension/ 接收器receiver/ 导出器exporter/ 处理器processor/ 连接器connector的形式注入 OTel Collector形成一个开箱即用的 all-in-one 发行版。从仓库入口文件 cmd/jaeger/main.go 可以看到最直接的证据func main() { factories, err : jaegercli.Components() if err ! nil { log.Fatal(err) } if err : jaegercli.NewCommand(factories).Execute(); err ! nil { log.Fatal(err) } }程序先通过jaegercli.Components()组装默认组件工厂集合再由jaegercli.NewCommand(factories)创建基于 cobra 的根命令并执行——这个命令本质上就是otelcol.NewCommand(settings)的封装见 cmd/jaeger/internal/command.go同时附加了version、docs、mappings等 Jaeger 专属子命令。快速上手用 docker compose 启动 Jaeger V2 与 HotRODREADME 提供的快速体验路径只需一个docker-compose.yml文件。该文件已随仓库提供examples/hotrod/docker-compose.yml其中定义了jaeger与hotrod两个服务services: jaeger: image: ${REGISTRY:-}jaegertracing/jaeger:${JAEGER_VERSION:-latest} ports: - 16686:16686 # Jaeger UI - 16687:16687 - 4317:4317 # OTLP gRPC - 4318:4318 # OTLP HTTP environment: - LOG_LEVELdebug networks: - jaeger-example hotrod: image: ${REGISTRY:-}jaegertracing/example-hotrod:${HOTROD_VERSION:-latest} ports: - 8080:8080 - 8083:8083 command: [all] environment: - OTEL_EXPORTER_OTLP_ENDPOINThttp://jaeger:4318 networks: - jaeger-example depends_on: - jaeger标准启动步骤获取 compose 文件从仓库直接引用即可无需额外下载# 方式一直接在仓库内查看 examples/hotrod/docker-compose.yml # 方式二等价于文档中的 curl 下载步骤仅需保证文件与仓库版本一致可选固定镜像版本默认情况下docker compose使用latest标签。第一次拉取时没有问题但镜像进入本地 registry 后latest不会再更新可能长期运行过期甚至不兼容的 Jaeger 与 HotROD 版本。建议通过环境变量JAEGER_VERSION与HOTROD_VERSION显式固定版本例如2.0.0与1.63.0。启动后端与演示应用JAEGER_VERSION2.0.0 HOTROD_VERSION1.63.0 docker compose -f docker-compose.yml up访问服务Jaeger UIhttp://localhost:16686HotROD 演示应用http://localhost:8080停止并清理docker compose -f docker-compose.yml down关于版本固定的一句话忠告compose 文件通过${JAEGER_VERSION:-latest}、${HOTROD_VERSION:-latest}支持环境变量注入examples/hotrod/docker-compose.yml。在第一次实验时使用latest完全没问题但若要长期运行或复现问题务必按上文固定具体版本号避免latest标签不更新导致的陈旧镜像陷阱。为什么可以零配置启动内嵌 all-in-one 配置机制你可能会好奇上面的 compose 文件里并没有给 Jaeger 挂载任何配置文件它是怎么知道监听哪些端口、把数据写到哪里的答案在 cmd/jaeger/internal/command.go 的//go:embed all-in-one.yaml与checkConfigAndRun逻辑中//go:embed all-in-one.yaml var yamlAllInOne embed.FS由于 OTel Collector 原生要求显式提供--configJaeger 拦截了官方的RunE实现代码注释也说明这是针对 OTel Collector 尚无可用的钩子而做的 workaround当命令行参数中没有出现任何--config标志时自动读取内嵌的 cmd/jaeger/internal/all-in-one.yaml并将其作为yaml:协议的配置注入随后打印日志提示你正在使用默认 All-in-One 配置与内存存储。这带来两个直接好处零配置可用docker run jaegertracing/jaeger:latest即可得到一个完整可用的追踪平台可渐进式接管一旦你传入自己的--config内嵌配置即被替换行为完全由你的配置文件决定。默认 all-in-one 配置与端口全景内嵌的 cmd/jaeger/internal/all-in-one.yaml 是理解 Jaeger V2 默认行为的最佳入口。它声明了以下服务扩展与管线service: extensions: [jaeger_storage, jaeger_query, remote_sampling, healthcheckv2, expvar, zpages] pipelines: traces: receivers: [otlp, jaeger, zipkin] processors: [batch] exporters: [jaeger_storage_exporter]管线含义清晰同时接收 OTLP、原生 Jaeger 协议与 Zipkin 三种格式的追踪数据经过batch批处理处理器后由jaeger_storage_exporter写入存储默认some_storage对应的memory后端max_traces: 100000。各组件监听的端口汇总如下均可用环境变量JAEGER_LISTEN_HOST覆盖默认的localhostDockerfile 中则固定为0.0.0.0见 cmd/jaeger/Dockerfile端口用途对应组件 / 协议4317OTLP gRPC 接收otlpreceiver4318OTLP HTTP 接收otlpreceiver14250Jaeger 原生 gRPCjaegerreceiver14268Jaeger thrift_httpjaegerreceiver6831Jaeger thrift_compact (UDP)jaegerreceiver6832Jaeger thrift_binary (UDP)jaegerreceiver9411Zipkinzipkinreceiver16686Jaeger Query UIjaeger_queryextension5778远程采样配置 HTTPremote_samplingextension5779远程采样配置 gRPCremote_samplingextension13133健康检查 HTTPhealthcheckv2extension27777expvar 运行时变量expvarextension27778zPages 调试页面zpagesextension8888Prometheus 指标拉取service telemetry其中remote_sampling默认采用文件采样策略default_sampling_probability: 1、reload_interval: 1s配置里也预留了adaptive自适应采样策略的注释示例对应 components/processor/adaptivesampling。jaeger_query还默认启用了内嵌的 MCP AI 工具端点mcp: {}用于在查询端口提供/api/ai/mcp/服务。组件注册表Jaeger V2 默认发行版包含什么如果你想知道这个开箱即用发行版到底打包了哪些组件直接看 cmd/jaeger/internal/components.go 的build()方法。它把所有 Jaeger 组件按 OTel Collector 的五类工厂组织起来Extensions标准项healthcheckv2、pprof、zpagesJaeger 附加项basicauthextension、sigv4authextension、jaegerquery、jaegerstorage、remotesampling、expvar、remotestorageReceiversotlp、nop以及 Jaeger 附加的jaeger、kafka、zipkinExportersdebug、otlp、otlphttp、nop加上storageexporter通用 Jaeger v1 spanstore.SpanWriter 导出器、kafka、prometheusProcessorsbatch、memorylimiter、tailsampling、attributes、filter以及 Jaeger 的adaptivesamplingConnectorsforward、spanmetrics。这些组件的实现分散在仓库 components 目录下每个组件均含factory.go与package_test.go是研究某一具体能力如 Kafka 接收、尾采样、SPM 服务性能监控的入口。进阶用 OCB 构建你自己的 Jaeger 发行版jaegercli包的设计目标之一就是可复用它显式暴露Components()与NewCommand(factories)以便自定义 OCB 发行版保留内嵌 all-in-one 默认配置与 Jaeger 专属子命令见 cmd/jaeger/jaegercli/command.go 的包注释。仓库提供了参考清单 cmd/jaeger/builder.yaml它逐条复刻了默认发行版的组件集既是文档也是 CI 校验产物。使用方式ocb --config cmd/jaeger/builder.yaml如需自定义拷贝该文件在对应分区追加组件条目即可跨平台编译通过GOOS/GOARCH环境变量完成例如GOOSlinux GOARCHarm64 ocb --config cmd/jaeger/builder.yaml。注意builder.yaml使用github.com/jaegertracing/jaeger v0.0.0加replaces指令以支持仓库内构建外部使用者应替换为真实发布版本如v2.19.0并移除replaces。从演示走向生产显式配置文件示例当你不满足于内存存储仓库 cmd/jaeger/config.yaml 给出了更完整的生产级配置参考存储可配置traces与traces_archive双后端、UI 通过config_file指定config-ui.json、查询扩展可启用otlp_proxy把 UI 同源的 OTLP/HTTP 数据转发到本地 4318、max_clock_skew_adjust控制时钟偏移校正默认0s表示关闭以及adaptive_sampling处理器的接入示例。将其与内嵌all-in-one.yaml对比阅读即可系统掌握 Jaeger V2 从默认到定制的能力边界。延伸阅读演示应用细节与单独运行方式含 Kubernetes 部署、源码运行examples/hotrod/README.md默认发行版组件工厂实现cmd/jaeger/internal/components.goOCB 构建清单cmd/jaeger/builder.yaml容器镜像端口与调试镜像Delve说明cmd/jaeger/Dockerfile仓库根目录总览README.md【免费下载链接】jaegerCNCF Jaeger, a Distributed Tracing Platform项目地址: https://gitcode.com/GitHub_Trending/ja/jaeger创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考