zipkin是分布式跟踪系统,在微服务架构中,它能够获取实时的数据帮助解决请求延迟问题。zipkin收集并展现调用链数据。zipkin是基于谷歌的Dapper系统设计的。 架构
首先在app使用zipkin的客户端,收集server,client(后面会讲)的调用关系数据,经过reporter上传到Collector,而后Collector经过Storage进行存储,最后UI展现调用链信息。app
基本工做单元,一次链路调用建立一个span,能够是httpclient,db调用。span经过parentSpanId进行关联分布式
表明一个完整的请求,期间可能横跨多个服务,用惟一标识。tace是多个span的集合。微服务
Annotation是span的tag集合。它主要有5种类型:url
cs - Client Start,表示客户端发起请求 sr - Server Receive,表示服务端收到请求 ss - Server Send,表示服务端完成处理,并将结果发送给客户端 cr - Client Received,表示客户端获取到服务端返回信息 lc - local component,表示本地span,不能跨进程,好比一次file io操做
能够在此tag种添加业务信息spa
[ { "traceId": "a0e07d61b5f6060a", "id": "a0e07d61b5f6060a", "name": "get", "timestamp": 1479457971341000, "duration": 3872769, "annotations": [ { "timestamp": 1479457971341000, "value": "sr", "endpoint": { "serviceName": "service1", "ipv4": "172.16.8.79" } }, { "timestamp": 1479457975213769, "value": "ss", "endpoint": { "serviceName": "service1", "ipv4": "172.16.8.79" } } ], "binaryAnnotations": [ { "key": "exception", "value": "asdas", "endpoint": { "serviceName": "service1", "ipv4": "172.16.8.79" } }, { "key": "http.status_code", "value": "200", "endpoint": { "serviceName": "service1", "ipv4": "172.16.8.79" } }, { "key": "http.url", "value": "/start", "endpoint": { "serviceName": "service1", "ipv4": "172.16.8.79" } } ] }, { "traceId": "a0e07d61b5f6060a", "id": "3be8fed4e9846694", "name": "get", "parentId": "a0e07d61b5f6060a", "timestamp": 1479457971444000, "duration": 41291, "annotations": [ { "timestamp": 1479457971444000, "value": "cs", "endpoint": { "serviceName": "service1", "ipv4": "172.16.8.79" } }, { "timestamp": 1479457971485291, "value": "cr", "endpoint": { "serviceName": "service1", "ipv4": "172.16.8.79" } } ], "binaryAnnotations": [ { "key": "http.url", "value": "http://www.baidu.com/", "endpoint": { "serviceName": "service1", "ipv4": "172.16.8.79" } } ] } ]