zipkin是一个分布式追踪系统,能够收集服务间调用的时序数据,提供调用链路的追踪,在微服务架构下,十分方便地用于服务响应延迟等问题的定位。
zipkin每一个调用链路通过一个trace id来串联起来,只要你有一个trace id,就能够直接定位到这次调用链路,并且可以根据服务名、标签、响应时间等进行查询,过滤那些耗时比较长的链路节点。
zipkin还提供了依赖图的功能,可以查看到请求链路依赖的服务,甄别对于过期应用接口的访问等场景,下面让我们尝试部署并应用zipkin。
一、zipkin的安装部署
zipkin可以通过docker、java jar和source code三种方式进行部署,在云环境下强烈建议使用docker的方式,十分方便。
- 通过docker启动zipkin通过以下命令启动zipkin,如果images已经在本地则直接启动,如果是本地没有images,会从远程下载。
docker run -d -p 9411:9411 openzipkin/zipkin
- 通过Java jar的方式启动zipkin
curl -sSL https://zipkin.io/quickstart.sh | bash -s java -jar zipkin.jar
- 通过source code启动zipkin
git clone https://github.com/openzipkin/zipkin ./mvnw -DskipTests --also-make -pl zipkin-server clean install java -jar ./zipkin-server/target/zipkin-server-*exec.jar
通过以上任意方式启动以后,通过http://localhost:9441 可以查看到zipkin的UI。
二、zipkin数据收集
通过以上方式启动zipkin以后会发现数据都是空的,因为还没采集到时序数据。zipkin最常见的数据来源方式是HTTP和Kafka,还支持其他的方式如ActiveMQ、RabbitMQ、gRPC等,数据在送到zipkin以后支持内存、Cassandra、Elasticsearch多种方式存储。
这里我们可以通过zipkin提供的swagger ui的“try it out”功能,先尝试一下提交一个数据到内存中,界面查询展示效果。
打开zipkin提供的swagger ui地址:
https://zipkin.io/zipkin-api/#/default/post_spans
找到“post spans”请求,点击“try it out”>execute执行,如果看到响应码为202 Accepted则证明已经提交成功。
此时,打开本地zipkin页面,右上角“Search by Trace ID”输入trace ID,查询可以看到如下效果。