一、Zipkin 基本配置与启动
1. 启动 Zipkin Server
方式一:官方 Jar 包
wget https://search.maven.org/remotecontent?filepath=io/zipkin/java/zipkin-server/2.24.3/zipkin-server-2.24.3-exec.jar -O zipkin.jar
java -jar zipkin.jar
- 默认端口:
9411 - Web UI:http://localhost:9411
方式二:Docker
docker run -d -p 9411:9411 openzipkin/zipkin
方式三:持久化存储(MySQL/Elasticsearch)
java -jar zipkin.jar --STORAGE_TYPE=mysql --MYSQL_HOST=localhost --MYSQL_USER=root --MYSQL_PASS=xxx --MYSQL_DB=zipkin
二、Spring Boot 微服务集成 Zipkin
1. 添加依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zipkin</artifactId>
<version>3.1.7</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-sleuth</artifactId>
</dependency>
2. application.yml 配置
spring:
zipkin:
base-url: http://localhost:9411 # Zipkin Server 地址
sender:
type: web # 发送方式,web/http/kafka/rabbitmq等
sleuth:
sampler:
probability: 1.0 # 采样比例(1.0为全采集,0.1为10%采集)
3. 启动服务
- 服务启动后自动收集链路数据,并发送到 Zipkin Server。
- 可在 Zipkin Web UI 查询和分析调用链。
三、核心参数详解
| 参数 | 作用说明 |
|---|---|
| spring.zipkin.base-url | Zipkin Server 地址 |
| spring.zipkin.sender.type | 发送方式(web、kafka、rabbitmq等) |
| spring.sleuth.sampler.probability | 采样比例(0~1) |
| STORAGE_TYPE | Zipkin Server存储类型(memory/mysql/es等) |
| MYSQL_HOST/USER/PASS/DB | MySQL存储相关参数(如用MySQL持久化) |
| ES_HOSTS | Elasticsearch地址(如用ES持久化) |
| server.port | 服务端口,默认9411 |
四、链路追踪原理与常用功能
1. Sleuth 自动埋点
- Sleuth 自动为每个 HTTP 请求、Feign调用、RestTemplate、Kafka、RabbitMQ等生成 traceId、spanId。
- traceId:全链路唯一标识。
- spanId:单服务/方法调用唯一标识。
2. Zipkin 数据收集与分析
- 微服务收集到的 trace 信息通过 HTTP/Kafka/RabbitMQ等方式发送到 Zipkin Server。
- Zipkin Server 聚合、存储、展示调用链。
- Web UI 可检索 traceId、服务名、耗时、异常等信息。
3. 自定义埋点
可在代码中自定义 span:
@Autowired
Tracer tracer;
public void doSomething() {
Span span = tracer.nextSpan().name("customSpan").start();
try (Tracer.SpanInScope ws = tracer.withSpan(span)) {
// 业务代码
} finally {
span.end();
}
}
五、进阶功能与实战技巧
1. 采样率控制
- 生产环境建议采样率调低,避免链路数据过多影响性能。
- 通过
spring.sleuth.sampler.probability控制。
2. 跨服务/多语言追踪
- Zipkin 支持多语言 SDK(Java、Go、Node.js、Python等),可实现跨语言链路追踪。
3. 持久化配置
- 推荐生产环境用 MySQL 或 Elasticsearch 持久化链路数据。
- 数据量大时需定期清理过期数据。
4. 安全与权限
- Zipkin Web UI 默认无鉴权,建议内网访问或加反向代理认证。
六、进阶配置与功能
1. 采样策略动态调整
- 默认采样率是静态配置,如果希望动态调整,可以通过 Spring Cloud Sleuth 的自定义 Sampler:
@Bean
public Sampler customSampler() {
// 只采集特定服务或请求
return Sampler.ALWAYS_SAMPLE; // 或根据业务条件动态采样
}
- 生产环境建议根据流量、业务高峰期动态调整采样率。
2. 发送方式选择
spring.zipkin.sender.type可选web(HTTP)、kafka、rabbitmq,根据企业架构和链路数据量选择合适的方式。- Kafka 适合高并发、大数据量场景,RabbitMQ 适合异步可靠传输。
3. 服务名与实例标识
- Sleuth 自动用
spring.application.name作为服务名,建议各微服务配置唯一名称,便于链路检索。 - 可通过
spring.zipkin.service.name强制指定服务名。
4. traceId 兼容性
- Sleuth 默认用128位 traceId,部分老系统或其他语言可能用64位,可通过配置兼容:
spring:
sleuth:
trace-id128: false
七、性能优化建议
1. 数据存储优化
- 如果链路数据量大,建议用 Elasticsearch,支持分片和高并发检索。
- MySQL 存储建议定期归档、清理历史数据,避免库膨胀。
2. 采样率控制
- 生产环境采样率建议 0.01~0.1,关键接口可临时调高。
- 通过自定义 Sampler 实现按接口、按用户、按异常采样。
3. JVM与网络优化
- Zipkin Server建议分配足够内存(如 2~4G),并优化 GC 参数。
- 数据发送建议用局域网,避免链路数据丢失。
八、企业级运维与监控
1. 高可用部署
- Zipkin Server可多实例部署,前端用负载均衡(如 Nginx)。
- Elasticsearch存储建议用多节点集群,提升可靠性。
2. 安全加固
- Web UI建议内网访问,或通过 Nginx、JWT、OAuth2等方式做认证和访问控制。
- 重要链路数据可加密传输(HTTPS)。
3. 自动化告警
- 可结合 Prometheus、Grafana 监控 Zipkin Server、存储、链路数据量等指标。
- 异常链路、慢服务自动触发告警。
九、常见集成场景
1. 与微服务网关集成
- 网关(如 Spring Cloud Gateway、Zuul)需集成 Sleuth/Zipkin,保证入口 traceId 生成和传递。
2. 与异步消息队列集成
- Sleuth 支持 Kafka/RabbitMQ自动埋点,消息消费链路也能追踪。
- 需确保所有服务都集成 Sleuth/Zipkin 依赖。
3. 跨语言链路追踪
- Zipkin 支持 Java、Go、Node.js、Python等多语言SDK,跨语言服务只要 traceId 传递即可实现全链路追踪。
十、常见问题排查补充
-
采样率不生效/链路丢失
- 检查 Sampler配置、服务名唯一性、链路是否跨网段丢失。
-
存储性能瓶颈
- 检查 ES/MySQL集群健康、分片数量、磁盘IO。
-
Web UI无数据/异常
- 检查服务端口、数据发送方式、日志输出,必要时抓包分析。
-
链路断裂
- 检查 traceId 传递,网关、异步消息、第三方服务是否正确集成。
-
Web UI无法访问
- 检查 Zipkin Server 是否启动、端口是否冲突、防火墙设置。
-
链路数据未采集/丢失
- 检查 Sleuth/Zipkin 依赖和配置,采样比例是否为0,服务间是否传递 traceId。
-
存储异常
- 检查 MySQL/ES配置,数据库表结构是否正确,权限是否充足。
-
性能瓶颈
- 采样率过高、存储性能不足、链路数据未清理。
十一、最佳实践总结
- 各服务配置唯一
spring.application.name,便于链路检索。 - 采样率动态调整,兼顾性能与问题定位。
- 生产环境建议用 Elasticsearch 持久化,MySQL需定期清理。
- 结合 Prometheus、Grafana 做自动化监控和告警。
- 关键接口自定义埋点,异常链路重点采集。
- 内网部署 Web UI,敏感数据加密传输。
3146

被折叠的 条评论
为什么被折叠?



