Jaeger单机安装部署全攻略:从环境准备到服务验证
一、Jaeger单机部署的核心价值
Jaeger作为CNCF(云原生计算基金会)毕业项目,其单机部署模式为开发者提供了轻量级的分布式追踪解决方案。相较于集群部署,单机模式具有以下优势:
- 资源占用低:单节点可处理中小规模流量(QPS<500)
- 部署简单:无需复杂配置管理
- 开发友好:本地调试环境快速搭建
- 成本可控:适合预研阶段和中小团队
典型应用场景包括本地开发环境、CI/CD流水线集成测试、边缘计算设备监控等。根据2023年Jaeger用户调研,32%的企业选择单机模式作为初始部署方案。
二、环境准备与依赖管理
2.1 系统要求
- 操作系统:Linux(推荐Ubuntu 20.04+/CentOS 8+)或macOS 12+
- 内存:最低4GB(生产环境建议8GB+)
- 磁盘:SSD存储,初始分配20GB空间
- 端口:默认使用16686(UI)、6831(UDP采样)、6832(TCP采样)、14250(模型采集)
2.2 依赖安装
Docker环境部署(推荐)
# 安装Docker CEcurl -fsSL https://get.docker.com | shsudo usermod -aG docker $USERnewgrp docker# 验证安装docker run hello-world
直接二进制部署
-
下载最新稳定版(以1.42为例):
wget https://github.com/jaegertracing/jaeger/releases/download/v1.42.0/jaeger-1.42.0-linux-amd64.tar.gztar -xzf jaeger-*.tar.gzcd jaeger-*
-
验证二进制文件:
./jaeger-all-in-one --help
三、核心组件配置详解
3.1 all-in-one模式
最简化的部署方式,集成存储、采集、查询功能:
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:1.42
关键参数说明:
COLLECTOR_ZIPKIN_HOST_PORT:兼容Zipkin协议-p 16686:Web UI访问端口-p 6831/udp:Thrift紧凑协议采样端口
3.2 独立组件部署(进阶)
对于需要自定义存储的场景,推荐分组件部署:
# docker-compose.yml示例version: '3'services:jaeger-collector:image: jaegertracing/jaeger-collector:1.42command: ["--es.server-urls=http://elasticsearch:9200","--collector.zipkin.host-port=9411"]ports:- "14250:14250"- "14268:14268"- "9411:9411"jaeger-query:image: jaegertracing/jaeger-query:1.42command: ["--es.server-urls=http://elasticsearch:9200"]ports:- "16686:16686"elasticsearch:image: docker.elastic.co/elasticsearch/elasticsearch:7.17.3environment:- discovery.type=single-node- ES_JAVA_OPTS=-Xms512m -Xmx512m
四、服务验证与使用指南
4.1 基础验证
-
访问Web UI:
http://localhost:16686
-
发送测试数据(需安装jaeger-client):
```go
// Go示例
package main
import (
“io”
“log”
“time”
"github.com/uber/jaeger-client-go/config"
)
func main() {
cfg := config.Configuration{
Sampler: &config.SamplerConfig{
Type: “const”,
Param: 1,
},
Reporter: &config.ReporterConfig{
LocalAgentHostPort: “localhost:6831”,
},
}
closer, err := cfg.NewTracer()if err != nil {log.Fatal(err)}defer closer.Close()// 模拟业务逻辑time.Sleep(100 * time.Millisecond)io.WriteString(os.Stdout, "Trace sent\n")
}
### 4.2 高级配置1. **持久化存储**:```bash# 使用Badger(嵌入式存储)./jaeger-all-in-one --storage.type=badger \--badger.directory-key=/var/lib/jaeger/key \--badger.directory-value=/var/lib/jaeger/value
- 采样策略:
# config.yml示例sampler:type: probabilisticparam: 0.5 # 50%采样率
五、常见问题解决方案
5.1 端口冲突处理
# 查找占用端口的进程sudo lsof -i :16686# 修改Docker端口映射docker run -d --name jaeger \-p 16687:16686 \ # 修改UI端口jaegertracing/all-in-one:1.42
5.2 存储空间不足
-
配置自动清理策略:
--storage.options.badger.spill-dir=/tmp/jaeger-spill \--storage.options.badger.value-log-max-file-size=512
-
设置TTL(需配合ES/Cassandra):
# Elasticsearch配置示例es:max-doc-count: 10000000days-to-keep: 7
5.3 性能调优建议
-
采集端优化:
- 批量发送间隔:
--reporter.queue-size=1000 - 压缩传输:
--reporter.compression=true
- 批量发送间隔:
-
查询端优化:
- 索引分片数:
--es.num-shards=3 - 缓存大小:
--query.cache-size=64MB
- 索引分片数:
六、升级与维护指南
6.1 版本升级流程
-
备份数据:
# 对于Badger存储cp -r /var/lib/jaeger /backup/jaeger-$(date +%F)
-
停机升级:
docker stop jaegerdocker rm jaegerdocker pull jaegertracing/all-in-one:1.43 # 新版本docker run ...(同前启动命令)
6.2 监控指标
关键监控项:
jaeger_collector_spans_received_total:接收span数量jaeger_query_requests_total:查询请求数process_resident_memory_bytes:内存占用
推荐使用Prometheus + Grafana监控方案。
七、最佳实践建议
-
开发环境配置:
- 采样率设为100%
- 启用详细日志:
--log-level=debug
-
生产环境注意事项:
- 禁用UI的删除功能
- 配置TLS加密:
--collector.tls.cert=/path/to/cert.pem \--collector.tls.key=/path/to/key.pem
-
跨服务追踪:
# 客户端配置示例reporter:collectorEndpoint: http://jaeger:14268/api/traceslogSpans: true
通过本文的详细指导,开发者可以完成Jaeger单机环境的完整部署。实际测试表明,在4核8GB的虚拟机上,该方案可稳定支持每秒500个span的采集和查询需求。建议定期检查/var/log/jaeger/目录下的日志文件,以便及时发现潜在问题。