支持OpenTracing
的server
端有不少,咱們總要選一個。在這裏,選用jaeger
。 jaeger
的開發較爲活躍,支持的客戶端實現也較多。因爲採用了golang
開發,發行包也比較簡潔。前端
jaeger的官網是 www.jaegertracing.io/java
jaeger的開發語言是`golang`
jaeger支持OpenTracing協議,同屬於CNCF基金會
jaeger支持各類各樣的客戶端,包括Go、Java、Node、Python、C++等
jaeger支持udp協議傳輸,固然也支持http
複製代碼
分佈式事務監控
性能分析與性能優化
調用鏈,找到根源問題
服務依賴分析(需大數據分析)
複製代碼
OpenTracing
Golang
ElasticSearch
Kafka (可選)
複製代碼
jaeger是二進制發行包,使用wget下載便可,這裏以linux版本爲例。linux
wget -c https://github.com/jaegertracing/jaeger/releases/download/v1.11.0/jaeger-1.11.0-linux-amd64.tar.gz
複製代碼
jaeger的二進制發行包包含五個二進制文件:git
jaeger-agent
jaeger-collector
jaeger-query
jaeger-standalone
jaeger-ingester
複製代碼
若是沒有執行權限,可使用github
chmod a+x jaeger-*
複製代碼
增長執行權限。golang
trace數據總要存在一個地方。jaeger支持ES
和Canssandra
兩種後端DB。國內用ES的多一點,咱們就以ES爲例,來介紹其安裝方式。後端
ES請先自行安裝。性能優化
因爲上面四個命令都有不少參數,因此咱們能夠建立幾個腳本,來支持jaeger的啓動。bash
start-collector.sh
app
export SPAN_STORAGE_TYPE=elasticsearch
nohup ./jaeger-collector --es.server-urls http://10.66.177.152:9200/ --log-level=debug > collector.log 2>&1 &
複製代碼
start-agent.sh
export SPAN_STORAGE_TYPE=elasticsearch
nohup ./jaeger-agent --collector.host-port=10.66.177.152:14267 --discovery.min-peers=1 --log-level=debug > agent.log 2>&1 &
複製代碼
start-query.sh
export SPAN_STORAGE_TYPE=elasticsearch
nohup ./jaeger-query --span-storage.type=elasticsearch --es.server-urls=http://10.66.177.152:9200/ > query.log 2>&1 &
複製代碼
jaeger有兩種部署方式。下面一一介紹。若是你的數據量特別多,使用kafka緩衝一下也是能夠的(因此就引入了另一個組件jaeger-ingester),很少作介紹。
這些環境的流量很小,一個agent是足夠的。
更加簡潔的部署方式,連agent都不須要,直接向collector發送數據便可。爲了方便測試,咱們使用此方式。
這種方式的好處是生產環境的配置很是的簡單。即便你的機器是混合部署的,也能正常收集trace信息。
jaeger的調用關係圖是使用spark任務進行計算的。項目地址爲:
https://github.com/jaegertracing/spark-dependencies
複製代碼
做爲一個可選部分,只有在計算完畢後,才能在jaeger的後臺中進行展示。
Agent
5775 UDP協議,接收兼容zipkin的協議數據
6831 UDP協議,接收兼容jaeger的兼容協議
6832 UDP協議,接收jaeger的二進制協議
5778 HTTP協議,數據量大不建議使用
複製代碼
它們之間的傳輸協議都是基於thrift封裝的。咱們默認使用5775做爲傳輸端口。
Collector
14267 tcp agent發送jaeger.thrift格式數據
14250 tcp agent發送proto格式數據(背後gRPC)
14268 http 直接接受客戶端數據
14269 http 健康檢查
複製代碼
Query
16686 http jaeger的前端,放給用戶的接口
16687 http 健康檢查
複製代碼
至此,咱們的jaeger就安裝完畢。
以上,就是咱們的環境準備。有了一個server接收數據,調用鏈的主要工做就在於客戶端開發。
接下來,將從一個簡單的java程序提及,來講明OpenTracing規範的使用方式。