Jaeger单机安装部署全指南:从环境准备到实战配置
2025.08.20 21:22浏览量:2简介:本文详细介绍了Jaeger单机安装部署的全过程,包括环境准备、安装步骤、配置优化以及常见问题解决方案,帮助开发者快速搭建高效的分布式追踪系统。
Jaeger单机安装部署全指南:从环境准备到实战配置
引言
Jaeger是Uber开源的分布式追踪系统,用于监控和排查微服务架构中的性能问题。单机安装部署是Jaeger使用的最基础场景,适合开发者快速搭建测试环境或小规模生产环境。本文将全面讲解Jaeger单机安装部署的完整流程,涵盖环境准备、安装步骤、配置优化以及常见问题解决方案。
第一部分:环境准备
1.1 系统要求
Jaeger支持在多种操作系统上运行,包括Linux、macOS和Windows。推荐使用Linux系统进行部署,以下是最小系统要求:
- CPU:2核以上
- 内存:4GB以上
- 磁盘空间:10GB以上
- 操作系统:Ubuntu 18.04+/CentOS 7+
1.2 依赖组件安装
Jaeger运行需要以下依赖组件:
Docker:Jaeger官方提供Docker镜像,推荐使用Docker方式部署
# Ubuntu安装Docker
sudo apt-get update
sudo apt-get install docker.io
sudo systemctl start docker
sudo systemctl enable docker
Docker Compose(可选):方便管理多容器部署
sudo apt-get install docker-compose
Jaeger客户端库:根据您的开发语言选择对应的客户端
第二部分:Jaeger单机安装
2.1 使用Docker快速启动
最简单的方式是使用官方提供的all-in-one镜像,该镜像包含了Jaeger的所有组件:
docker run -d --name jaeger \
-e COLLECTOR_ZIPKIN_HOST_PORT=:9411 \
-e COLLECTOR_OTLP_ENABLED=true \
-p 6831:6831/udp \
-p 6832:6832/udp \
-p 5778:5778 \
-p 16686:16686 \
-p 4317:4317 \
-p 4318:4318 \
-p 14250:14250 \
-p 14268:14268 \
-p 14269:14269 \
-p 9411:9411 \
jaegertracing/all-in-one:1.42
2.2 验证安装
检查容器运行状态:
docker ps | grep jaeger
访问Web UI(默认端口16686):
http://localhost:16686
第三部分:组件详解与配置
3.1 Jaeger核心组件
即使在单机模式下,Jaeger也由多个组件构成:
- Agent:负责接收客户端发送的Span数据
- Collector:收集Agent发送的数据,处理后写入存储
- Query:提供查询接口和Web UI
- Storage:数据存储(all-in-one使用内存存储)
3.2 关键配置参数
可以通过环境变量调整Jaeger行为,常用配置包括:
# 存储类型(内存、Cassandra、Elasticsearch等)
-e SPAN_STORAGE_TYPE=memory
# 采样配置
-e SAMPLING_STRATEGIES_FILE=/etc/jaeger/sampling.json
# 日志级别
-e LOG_LEVEL=debug
第四部分:数据持久化方案
默认all-in-one使用内存存储,重启后数据会丢失。要实现数据持久化:
4.1 使用Elasticsearch作为存储后端
先启动Elasticsearch容器:
docker run -d --name elasticsearch \
-p 9200:9200 -p 9300:9300 \
-e "discovery.type=single-node" \
docker.elastic.co/elasticsearch/elasticsearch:7.14.0
启动配置了Elasticsearch的Jaeger:
docker run -d --name jaeger \
--link elasticsearch \
-e SPAN_STORAGE_TYPE=elasticsearch \
-e ES_SERVER_URLS=http://elasticsearch:9200 \
-p 16686:16686 \
jaegertracing/all-in-one:1.42
第五部分:客户端集成
5.1 Go语言客户端示例
package main
import (
"context"
"fmt"
"io"
"time"
"github.com/opentracing/opentracing-go"
"github.com/uber/jaeger-client-go"
"github.com/uber/jaeger-client-go/config"
)
func initTracer() (opentracing.Tracer, io.Closer) {
cfg := &config.Configuration{
ServiceName: "your-service-name",
Sampler: &config.SamplerConfig{
Type: jaeger.SamplerTypeConst,
Param: 1,
},
Reporter: &config.ReporterConfig{
LogSpans: true,
LocalAgentHostPort: "localhost:6831",
},
}
tracer, closer, err := cfg.NewTracer()
if err != nil {
panic(fmt.Sprintf("ERROR: cannot init Jaeger: %v\n", err))
}
return tracer, closer
}
func main() {
tracer, closer := initTracer()
defer closer.Close()
opentracing.SetGlobalTracer(tracer)
span := tracer.StartSpan("say-hello")
defer span.Finish()
span.SetTag("hello-to", "world")
time.Sleep(500 * time.Millisecond)
ctx := opentracing.ContextWithSpan(context.Background(), span)
spanChild := tracer.StartSpan("format", opentracing.ChildOf(span.Context()))
defer spanChild.Finish()
}
第六部分:常见问题排查
6.1 端口冲突问题
如果端口已被占用,可以修改映射端口:
-p 16686:16686 改为 -p 16687:16686
6.2 存储性能优化
对于生产环境,建议:
- 使用SSD存储
- 调整Elasticsearch的索引配置
- 合理设置采样率
结语
本文详细介绍了Jaeger单机安装部署的全流程。通过Docker方式可以快速搭建开发测试环境,而通过配置外部存储可以实现数据的持久化。Jaeger作为分布式追踪系统,能够有效帮助开发者诊断微服务架构中的性能问题,是云原生时代不可或缺的运维工具。
发表评论
登录后可评论,请前往 登录 或 注册