接着上篇我們來分析一下存儲在cassandra的數據結構。
對cassandra不瞭解的可以看我cassandra的博客 cassandra博客目錄
上一篇博客地址微服務應用開發進階①鏈路追蹤Zipkin
數據簡述
ZipkinServer存儲方式選擇Cassandra3,指定相應的keyspace,我們可以看到有五張表。
--STORAGE_TYPE=cassandra3
- select * from autocomplete_tags;
- select * from dependency;
- select * from span;
- select * from span_by_service;
- select * from trace_by_service_span;
autocomplete_tags: 找到半天找到一份說明,用來壓測cassandra的表(浪費時間。。)
dependency:如圖明顯可以看到是保存依賴關係的一張表
span:zipkin基本的存儲單元,包含一次請求的信息
annotations_query 字段類型text 請求的基本信息
http.method░http.method=POST
░http.path░http.path=/demo/servicea/person/save░mvc.controller.class░mvc.controller.class=PersonController░mvc.controller.method░mvc.controller.method=save░
Kind: 字段類型text server還是client;
l_ep和 e_ep :服務名和Ip等,示例如下
{service:'service-a',ipv4:'192.168.56.1',ipv6:NULL,port:0} {service:NULL,ipv4:'127.0.0.1',ipv6:NULL,port:58397}
I_service 字段類型 text serviceName
tag 字段類型 map<text,text> 具體執行信息
span_by_service:serviceName和方法的信息
trace_by_service_span:tracle和service的信息
貼一份es的完整的span信息參考(網上找的,侵刪):
{
"_index": "zipkin:span-2018-08-07",
"_type": "span",
"_id": "AWUSkiT_lG0UQ3Osck2S",
"_version": 1,
"_score": 1,
"_source": {
"traceId": "6c3c748ff257f23b",
"duration": 2928879,
"localEndpoint": {
"ipv4": "10.208.204.119",
"port": 7900,
"serviceName": "sleuthconsumer"
},
"timestamp_millis": 1533614872966,
"kind": "SERVER",
"name": "http:/consumer",
"id": "6c3c748ff257f23b",
"timestamp": 1533614872966000,
"parentId": "6c3c748ff257f23b",
"tags": {
"mvc.controller.class": "HomeController",
"mvc.controller.method": "service1",
"lc": "hystrix",
"spring.instance_id": "DESKTOP-CBSVPL2:sleuthConsumer:7900",
"thread": "hystrix-sleuthConsumer2-1"
}
}
}
簡單分析
查詢一個完整的鏈路發現(serviceb調用servicea),一次服務B調用服務A,產生了三個span;
第一次服務B作爲服務端,被調用接口
第二次服務B作爲客戶端,調用A的接口
第三次服務A作爲服務端,被服務B調用
所以servicec調用servicea,kafka有兩條消息,servicec發送了兩條消息
其他
如果不小心存儲到了低版本的cassandra中,那麼keyspace裏面有8張表;不小心存錯了一次,簡述如下:
## 總共8張表
select * from annotations_index; //
select * from autocomplete_tags;
https://github.com/openzipkin/zipkin/blob/master/zipkin-storage/cassandra/src/test/resources/autocomplete_tags-stress.yaml
select * from dependencies; // 應該就是依賴分析了
select * from service_name_index;// serviceName和bucket、traceId
select * from service_names; // 存儲服務名serverName
select * from service_span_name_index; //服務方法和traceId
select * from span_names; // 服務名和服務方法
select * from traces; // trace信息