跳转到主内容
新派编程网 - 新潮编程理念,全新技术课堂!

如何配置Java的分布式追踪环境_Zipkin微服务链路搭建

Zipkin服务端应使用java -jar独立启动,默认端口9411,开发可内存存储,测试/预发需配置MySQL或Elasticsearch存储,Docker部署须正确挂载连接串并确认ES版本与安全配置。 Zipkin服务端怎么启动才不踩坑 Zipkin服务端本身不强制依赖Java应用容器,但默认启动方式容易忽略存储选型和端口冲突问题。直接运行官方jar包最稳妥,别急着塞进Tomcat或Spring Boot里打包。 用
java -jar zipkin-server-2.24.0-exec.jar
启动,这是官方推荐的独立进程方式;
zipkin-server
默认监听
9411
端口,若被占用需加
--server.port=9412
不配存储时数据全在内存,重启即丢——开发环境可以接受,但测试/预发环境务必加
--STORAGE_TYPE=mysql
或
--STORAGE_TYPE=elasticsearch
,否则查不到跨小时段的链路 如果用Docker,别只拉
openzipkin/zipkin
镜像就完事:MySQL版要额外挂载
mysql://...
连接串,ES版得确认ES 7.x+且
xpack.security.enabled=false
,否则
Health check failed
报错卡住启动 Spring Boot服务怎么正确上报trace到Zipkin 不是加个starter就自动上报,关键在采样率、传输协议和endpoint配置。Spring Cloud Sleuth 3.x起默认用
Brave
实现,但底层HTTP上报易被防火墙拦截,gRPC更稳。 必须显式配置
spring.zipkin.base-url=http://localhost:9411/
,否则Sleuth会尝试连
http://localhost:9411/api/v2/spans
但收不到响应(无报错,只是静默丢数据) 采样率控制靠
spring.sleuth.sampler.probability=1.0
,设
0.1
时每10个请求只上报1个——线上调高可能压垮Zipkin,调低则漏掉关键异常链路 HTTP上报走
/api/v2/spans
,如果Zipkin启用了HTTPS或反向代理,得同步配
spring.zipkin.sender.type=web
并确保
Content-Type: application/json
没被中间件篡改;更推荐
spring.zipkin.sender.type=grpc
,需额外加
zipkin-sender-grpc
依赖 Feign调用为啥链路断在服务间 Feign默认不透传traceId,尤其当服务A用OpenFeign调B,而B是老Spring MVC写法时,
X-B3-TraceId
头根本收不到,链路直接切成两段。 确认A服务已引入
spring-cloud-starter-openfeign
且
@EnableFeignClients
开启,Feign Client接口方法上别加
@RequestHeader
覆盖默认透传头 B服务如果是非Spring Cloud项目,得手动解析
X-B3-TraceId
、
X-B3-SpanId
等头,并用
Tracer.currentSpan()
或
Tracing.newBuilder().build().tracer()
重建上下文,否则Sleuth无法关联 如果B服务用了Dubbo,Feign和Dubbo混用时,
TraceFilter
可能被Dubbo的
Filter
优先拦截导致丢失,此时需在Dubbo侧显式注入
TracingFilter
查不到链路?先盯紧这三处日志 Zipkin链路不上报,80%问题出在客户端日志盲区。服务端Zipkin的日志只告诉你“收到了什么”,但不告诉你“客户端是否真发了”。 Eclipse导入Android或其他的JAVA项目的正确方法 WORD版 本文档主要讲述的是Eclipse导入Android或其他的JAVA项目的正确方法;希望本文档会给有需要的朋友带来帮助;感兴趣的朋友可以过来看看 下载 立即学习 “ Java免费学习笔记(深入) ”; 客户端启动时搜
Started Zipkin Brave auto-configuration
,没这句说明Sleuth没生效,检查
spring-cloud-starter-sleuth
是否漏加或版本冲突 发起一次调用后,在客户端日志里grep
Reporting span
,有输出说明已生成span并准备上报;若无,可能是
Sampler
返回了
NEVER_SAMPLE
,或
Tracing
Bean被自定义Bean覆盖 Zipkin服务端日志搜
Accepted 1 spans
,没有则说明网络不通或客户端发到了错地址;若有但UI查不到,大概率是时间戳偏差太大(客户端和服务端时钟差超60秒),Zipkin会直接丢弃 时钟同步这事容易被忽略——K8s里Pod之间、宿主机和容器之间,ntp没对齐就会让span看起来“发生在未来”,Zipkin干脆不存。

相关文章