Jaeger单机安装部署全攻略

Jaeger单机安装部署全攻略

摘要

在分布式系统日益复杂的今天,分布式追踪系统成为监控和调试应用不可或缺的工具。Jaeger作为由Uber开源的高性能分布式追踪系统,能够帮助开发者快速定位和解决分布式环境中的性能问题。本文将详细介绍如何在单机环境下安装部署Jaeger,包括环境准备、安装步骤、配置与启动以及验证方法,旨在为开发者提供一个清晰、可操作的指南。

一、环境准备

1.1 硬件要求

Jaeger单机部署对硬件的要求相对较低,但为了确保系统的稳定性和性能,建议至少配备:

  • CPU:4核或以上,以应对可能的追踪数据量。
  • 内存:8GB或以上,Jaeger存储和查询大量追踪数据时需要较大的内存支持。
  • 磁盘:SSD固态硬盘,至少100GB可用空间,用于存储追踪数据。

1.2 软件要求

  • 操作系统:Linux(推荐Ubuntu或CentOS)、macOS或Windows(需使用WSL或Docker)。
  • Docker:Jaeger官方提供了Docker镜像,便于快速部署。确保已安装Docker并配置好环境。
  • Go语言环境(可选):如果选择从源代码编译安装,需要安装Go语言环境。

1.3 网络配置

确保单机网络配置正确,能够访问互联网以下载Jaeger相关资源。如果是在企业内网环境,可能需要配置代理或镜像源。

二、安装步骤

2.1 使用Docker部署(推荐)

步骤1:安装Docker
根据操作系统选择合适的Docker安装方式,如Ubuntu下可使用以下命令:

  1. sudo apt-get update
  2. sudo apt-get install docker-ce docker-ce-cli containerd.io

步骤2:拉取Jaeger镜像

  1. docker pull jaegertracing/all-in-one:latest

步骤3:运行Jaeger容器

  1. docker run -d --name jaeger \
  2. -e COLLECTOR_ZIPKIN_HOST_PORT=:9411 \
  3. -p 5775:5775/udp \
  4. -p 6831:6831/udp \
  5. -p 6832:6832/udp \
  6. -p 5778:5778 \
  7. -p 16686:16686 \
  8. -p 14250:14250 \
  9. -p 14268:14268 \
  10. -p 14269:14269 \
  11. -p 9411:9411 \
  12. jaegertracing/all-in-one:latest

上述命令中,-d表示后台运行,--name jaeger指定容器名称为jaeger,-e设置环境变量,-p将容器端口映射到宿主机端口。

2.2 从源代码编译安装(高级用户)

步骤1:安装Go语言环境
确保已安装Go 1.13或更高版本,并配置好GOPATHGOROOT环境变量。

步骤2:克隆Jaeger仓库

  1. git clone https://github.com/jaegertracing/jaeger.git
  2. cd jaeger

步骤3:编译Jaeger

  1. make build-all-in-one

编译完成后,会在cmd/all-in-one/目录下生成可执行文件jaeger-all-in-one

步骤4:运行Jaeger

  1. ./cmd/all-in-one/jaeger-all-in-one

三、配置与启动

3.1 配置文件

Jaeger支持多种配置方式,包括环境变量、配置文件和命令行参数。对于单机部署,通常使用环境变量或默认配置即可满足需求。如需自定义配置,可创建config.yml文件,并参考Jaeger官方文档进行配置。

3.2 启动选项

使用Docker部署时,可通过环境变量调整Jaeger的行为,如设置存储后端(ES、Cassandra等)、采样率等。从源代码编译安装时,可通过命令行参数传递配置,如:

  1. ./cmd/all-in-one/jaeger-all-in-one --collector.zipkin.host-port=:9411

3.3 日志与监控

Jaeger容器运行时,日志会输出到控制台。可通过docker logs jaeger查看日志。对于长期运行的Jaeger实例,建议配置日志收集系统(如ELK)进行日志管理和分析。

四、验证方法

4.1 访问UI界面

Jaeger提供了Web UI,用于查看和管理追踪数据。通过浏览器访问http://localhost:16686,应能看到Jaeger的UI界面。

4.2 发送测试数据

可以使用Jaeger提供的示例应用或编写简单的客户端代码发送测试数据。例如,使用OpenTelemetry SDK初始化一个追踪器,并发送一个简单的追踪数据:

  1. package main
  2. import (
  3. "context"
  4. "go.opentelemetry.io/otel"
  5. "go.opentelemetry.io/otel/exporters/jaeger"
  6. "go.opentelemetry.io/otel/sdk/resource"
  7. sdktrace "go.opentelemetry.io/otel/sdk/trace"
  8. semconv "go.opentelemetry.io/otel/semconv/v1.4.0"
  9. )
  10. func main() {
  11. // 创建Jaeger exporter
  12. exp, err := jaeger.New(jaeger.WithCollectorEndpoint(jaeger.WithEndpoint("http://localhost:14268/api/traces")))
  13. if err != nil {
  14. panic(err)
  15. }
  16. // 创建trace provider
  17. tp := sdktrace.NewTracerProvider(
  18. sdktrace.WithBatcher(exp),
  19. sdktrace.WithResource(resource.NewWithAttributes(
  20. semconv.SchemaURL,
  21. semconv.ServiceNameKey.String("example-service"),
  22. )),
  23. )
  24. defer func() {
  25. if err := tp.Shutdown(context.Background()); err != nil {
  26. panic(err)
  27. }
  28. }()
  29. otel.SetTracerProvider(tp)
  30. // 创建并结束一个span
  31. tracer := otel.Tracer("example-tracer")
  32. ctx, span := tracer.Start(context.Background(), "example-span")
  33. defer span.End()
  34. // 模拟业务逻辑
  35. // ...
  36. }

运行上述代码后,应在Jaeger UI中看到名为example-service的服务和example-span的追踪数据。

五、总结与展望

通过本文的介绍,开发者应该能够在单机环境下成功安装部署Jaeger,并通过UI界面和测试数据验证其功能。Jaeger作为强大的分布式追踪系统,能够帮助开发者快速定位和解决分布式环境中的性能问题,提升系统的稳定性和可靠性。未来,随着分布式系统的不断发展,Jaeger将在更多场景中发挥重要作用。