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下可使用以下命令:
sudo apt-get updatesudo apt-get install docker-ce docker-ce-cli containerd.io
步骤2:拉取Jaeger镜像
docker pull jaegertracing/all-in-one:latest
步骤3:运行Jaeger容器
docker run -d --name jaeger \-e COLLECTOR_ZIPKIN_HOST_PORT=:9411 \-p 5775:5775/udp \-p 6831:6831/udp \-p 6832:6832/udp \-p 5778:5778 \-p 16686:16686 \-p 14250:14250 \-p 14268:14268 \-p 14269:14269 \-p 9411:9411 \jaegertracing/all-in-one:latest
上述命令中,-d表示后台运行,--name jaeger指定容器名称为jaeger,-e设置环境变量,-p将容器端口映射到宿主机端口。
2.2 从源代码编译安装(高级用户)
步骤1:安装Go语言环境
确保已安装Go 1.13或更高版本,并配置好GOPATH和GOROOT环境变量。
步骤2:克隆Jaeger仓库
git clone https://github.com/jaegertracing/jaeger.gitcd jaeger
步骤3:编译Jaeger
make build-all-in-one
编译完成后,会在cmd/all-in-one/目录下生成可执行文件jaeger-all-in-one。
步骤4:运行Jaeger
./cmd/all-in-one/jaeger-all-in-one
三、配置与启动
3.1 配置文件
Jaeger支持多种配置方式,包括环境变量、配置文件和命令行参数。对于单机部署,通常使用环境变量或默认配置即可满足需求。如需自定义配置,可创建config.yml文件,并参考Jaeger官方文档进行配置。
3.2 启动选项
使用Docker部署时,可通过环境变量调整Jaeger的行为,如设置存储后端(ES、Cassandra等)、采样率等。从源代码编译安装时,可通过命令行参数传递配置,如:
./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初始化一个追踪器,并发送一个简单的追踪数据:
package mainimport ("context""go.opentelemetry.io/otel""go.opentelemetry.io/otel/exporters/jaeger""go.opentelemetry.io/otel/sdk/resource"sdktrace "go.opentelemetry.io/otel/sdk/trace"semconv "go.opentelemetry.io/otel/semconv/v1.4.0")func main() {// 创建Jaeger exporterexp, err := jaeger.New(jaeger.WithCollectorEndpoint(jaeger.WithEndpoint("http://localhost:14268/api/traces")))if err != nil {panic(err)}// 创建trace providertp := sdktrace.NewTracerProvider(sdktrace.WithBatcher(exp),sdktrace.WithResource(resource.NewWithAttributes(semconv.SchemaURL,semconv.ServiceNameKey.String("example-service"),)),)defer func() {if err := tp.Shutdown(context.Background()); err != nil {panic(err)}}()otel.SetTracerProvider(tp)// 创建并结束一个spantracer := otel.Tracer("example-tracer")ctx, span := tracer.Start(context.Background(), "example-span")defer span.End()// 模拟业务逻辑// ...}
运行上述代码后,应在Jaeger UI中看到名为example-service的服务和example-span的追踪数据。
五、总结与展望
通过本文的介绍,开发者应该能够在单机环境下成功安装部署Jaeger,并通过UI界面和测试数据验证其功能。Jaeger作为强大的分布式追踪系统,能够帮助开发者快速定位和解决分布式环境中的性能问题,提升系统的稳定性和可靠性。未来,随着分布式系统的不断发展,Jaeger将在更多场景中发挥重要作用。