在 OpenTelemetry 中有提到 trace 的概念。而 Trace 由多個 Span 組成。今天的內容組要是針對 Jaeger 這個服務進行簡易的介紹,並使用官方提供範例來搭建環境。
一個 span 代表系統中具有開始時間和執行時長的邏輯運行單元。會有以下資訊:
可在調用服務之間進行傳送。包含從父 Span 傳播到子 Span 的追蹤標識和選項。
每個 Span 包含如下狀態:
詳細內容可參考 opentelemetry 此鏈接或 opentracing 參考資源
用於監控和診斷基於微服務的分散式系統,包括以下
在 Jaeger 中工作單元為 Span,該 Span 有觸發時間、持續時間,並利用嵌套方式建立父子因果關係。一個 Trace 是一個執行路徑,可說是是由一組 Span 定義的有向無環圖(DAG)組合。
官方描述可直接將數據寫入 DB 或是使用 Kafka 做一個緩衝在送至 DB。
為一個守護程序,監聽 UDP 端口發送的 Span,然後將其分批發送給收集器(jaeger-collector)。他為一個基本組件,將會佈署至每台主機,
從 Jaeger Agent 接收 tracing,並藉由管道運行處裡它們。管道中會驗證 tracing,為其建立索引,執行任何轉換最後儲存它們。
是一項從儲存中檢索追蹤並交給 UI 來顯示追蹤的服務
是一個從 Kafka topic 讀取並寫入儲存後端(Elasticsearch等)的服務。
啟動 Jaeger 服務,但這邊需要啟用 Elasticsearch 作為儲存。
docker run -it -d --name=jaeger -e SPAN_STORAGE_TYPE=elasticsearch -e ES_SERVER_URLS=http://192.168.101.129:3001 -e ES_TAGS_AS_FIELDS_ALL=true -p 3006:16686 jaegertracing/opentelemetry-all-in-one
官方提供的測試數據
docker run --rm --link jaeger --env JAEGER_AGENT_HOST=jaeger --env JAEGER_AGENT_PORT=6831 -p8080-8083:8080083 jaegertracing/example-hotrod:latest all
UI 呈現
明天會使用 Spring boot 作為範例,結合 Opentelemetry 和 Jaeger 來實現鏈路追蹤。更詳細的細節可以直接看官方