跨語言分布式追蹤系統Jaeger使用介紹和案例【PHP Hprose Go】

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

原文:跨語言分布式追蹤系統Jaeger使用介紹和案例【PHP Hprose Go】

前言

  隨著公司的發展,業務不斷增加,模組不斷拆分,系統間業務調用變得越複雜,對定位線上故障帶來很大困難。整個調用鏈不透明,猶如系統被蒙上一塊黑紗,當線上遇到故障時,整個技術部就陷入痛苦的漩渦。這時候分布式追蹤系統應運而生,如揭開了黑紗,讓陽光照進黑暗。

分布式系統調用過程

opentracing 協議

 opentracing是一套分布式追蹤協議,與平台,語言無關,統一介面,方便開發接入不同的分布式追蹤系統。

簡單理解opentracing

一個完整的opentracing調用鏈包含 Trace + span + 無限極分類

  • Trace:追蹤對象,一個Trace代表了一個服務或者流程在系統中的執行過程,如:test.com,redis,mysql等執行過程。一個Trace由多個span組成
  • span:記錄Trace在執行過程中的資訊,如:查詢的sql,請求的HTTP地址,RPC調用,開始、結束、間隔時間等。
  • 無限極分類:服務與服務之間使用無限極分類的方式,通過HTTP頭部或者請求地址傳輸到最低層,從而把整個調用鏈串起來。

相關文檔

  • 官方文檔
  • OpenTracing語義規範(中文版)
  • OpenTracing語義慣例
  • opentracing文檔中文版 ( 翻譯 ) 吳晟

分布式追蹤系統Jaeger

 Jaeger是Uber開發的一套分布式追蹤系統,已在Uber大規模使用。並在2017-9-13 加入CNCF 開源組織。使用Jaeger可以非常直觀的展示整個分布式系統的調用鏈,由此可以很好發現和解決問題:

作用

  • 分布式環境下資訊傳播
  • 分布式交易監控
  • 展示跨進程調用鏈
  • 效能最佳化
  • 定位問題

特性

  • 使用udp傳輸資料,相對於HTTP,優點在於,不用擔心Jaeger服務宕機或者網路傳輸有問題而影響正常的業務。缺點就是丟包,影響了整條調用鏈。
  • 資料通過Thrift進行序列化,和json對比
介面 Thrift/byte json/byte 節省
介面1 987 2396 約1.5倍
介面2 1212 2916 約1.4倍
介面3 12830 18893 約40%
介面4 17158 22465 約24%
介面5 11025 14282 約23%

 從中可以看出thrift相對json減少了不少空間。在我們採集公司介面的資料大小都集中在10~20k,所以使用thrift會更有優勢。

  • 採集策略

Jaeger 官方提供了多種採集策略,使用者可以按需選擇使用

  1. ConstSampler,全量採集
  2. ProbabilisticSampler ,機率採集,預設萬份之一
  3. RateLimitingSampler ,限速採集,每秒只能採集一定量的資料
  4. RemotelyControlledSampler ,一種動態採集策略,根據當前系統的訪問量調節採集策略
  • 用戶端
  1. Go
  2. Java
  3. node
  4. python
  5. php

官方提供了 go,java,node,python用戶端,其他用戶端還在開放中,php用戶端為個人開發【歡迎start】

部署

快速部署 ------ All in one Docker image

 all-in-one 是Uber官方打包好的鏡像,可以直接部署使用,但是只能用於測試環境,不能用於線上,因為它把資料放入了記憶體。

docker run -d -e COLLECTOR_ZIPKIN_HTTP_PORT=9411 -p5775:5775/udp -p6831:6831/udp -p6832:6832/udp \  -p5778:5778 -p16686:16686 -p14268:14268 -p9411:9411 jaegertracing/all-in-one:latest

通過 http://localhost:16686 可以在瀏覽器查看 Jaeger的後台

官方提供的使用例子,需要go環境

go get github.com/uber/jaegercd $GOPATH/src/github.com/uber/jaegermake install_examplescd examples/hotrodgo run ./main.go all

http://localhost:8080 瀏覽器開啟查看

cassandra + docker 部署,單機模式

docker run -itd \
--name=cassandra -p9042:9042 \
-v /data/cassandra:/var/lib/cassandra \
cassandra

進入容器建立資料表空間

按照官方指令碼整理了一份建表語句jaeger_tables,進入cassandra,執行語句即可建立所需的表。

keyspaces:jaeger_v1_dc

運行 jaeger-query

docker run -itd --network=bridge \
--name=jaeger-query \
-p16686:16686 \
jaegertracing/jaeger-query \
/go/bin/query-linux \
--span-storage.type=cassandra \
--cassandra.keyspace=jaeger_v1_dc \
--cassandra.servers={{ cassandra }}:9042 \
--query.static-files=/go/jaeger-ui/

運行 jaeger-collector

docker run -itd --network=bridge \
--name=jaeger-collector \
-p14267:14267 \
-p14268:14268 \
-p9411:9411 \
jaegertracing/jaeger-collector \
/go/bin/collector-linux \
--span-storage.type=cassandra \
--cassandra.keyspace=jaeger_v1_dc \
--cassandra.servers={{ cassandra }}:9042

運行 jaeger-agent

docker run \
-itd --network=bridge \
--name=jaeger-agent \
-p5775:5775/udp \
-p6831:6831/udp \
-p6832:6832/udp \
-p5778:5778/tcp \
jaegertracing/jaeger-agent \
/go/bin/agent-linux --collector.host-port={{ jaeger-collector }}:14267

跨語言調用案例

  • php
  • Hprose
  • Go【beego】

beego

  • install beego
go get github.com/astaxie/beego
  • Download trace_example
git clone git@github.com:jukylin/trace_example.gitcd  trace_examplebee run trace_example

PHP

  • install jaeger-php
  • Run Hprose.php
cd vendor/jukylin/jaeger-php/examplephp Hprose.php

Trace Result View

PS

  • 優步分布式追蹤技術再度精進
  • Jaeger還在發展中,官方也希望得到社區的支援。
  • Jaeger和Jaeger-php,在公司測試環境運行了1個多月,於2017-10-18發布上線。
  • 選擇好採集策略,日誌資料會爆炸性增長。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.