Tempo簡介
https://grafana.com/docs/tempo/latest/getting-started/
Grafana Tempo是一個開源、易於使用的大規模分布式跟蹤后端.Tempo具有成本效益,僅需要對象存儲即可運行,並且與Grafana,Prometheus和Loki深度集成.Tempo可以與任何開源跟蹤協議一起使用,包括Jaeger、Zipkin和OpenTelemetry。它僅支持鍵/值查找,並且旨在與用於發現的日志和度量標准(示例性)協同工作.Tempo與Jaeger,Zipkin,OpenCensus和OpenTelemetry兼容.它以任何上述格式提取批處理,對其進行緩沖,然后將其寫入GCS,S3或本地磁盤.因此,它強大、便宜且易於操作!
Tempo的架構
https://grafana.com/docs/tempo/latest/architecture/architecture/

可以看到Tempo的架構仍然分為distributor、ingester、querier、tempo-query、compactor這幾個架構,熟悉Loki和Cortex的朋友可能光看名字就知道他們大概是做什么的。不熟悉的同學也沒關系,下面簡單說下各模塊的作用:
distributor
啟動多個端口,分別接受來自Jaeger、Zipkin和OpenCensus協議的數據,按照TraceID進行哈希並映射到哈希環上,並交由ingester進行存儲處理。當前distributor支持的trace協議如下:
ingester
具體負責trace數據的塊存儲(memcache、GCS、S3)、緩存(Memcache)和索引的處理
querier
負責從ingester和后端存儲里面撈取trace數據,並提供api給查詢者
compactor
負責后端存儲塊的壓縮,減少數據塊數量
tempo-query
tempo的一個可視化界面,用的jaeger query,可以在上面查詢tempo的trace數據。
tempo 的部署
前提條件是安裝好loki 相關的日志系統,具體安裝不詳細介紹了可以查看官方文檔
https://grafana.com/docs/loki/latest/installation/
部署Tempo
https://github.com/grafana/tempo/
這里推薦用Helm 安裝
https://github.com/grafana/tempo/tree/main/example/helm
線上環境還是推薦使用微服務模式
這邊測試選擇Single Binary
helm repo add grafana https://grafana.github.io/helm-charts
helm repo update
helm upgrade --install tempo grafana/tempo
kubectl create -f microservices-extras.yaml 測試用的一個實例,不安裝也可以,一會我們用loki 測試追蹤也是可以的
安裝好以后終端就可以測試

在grafana 配置tempo數據源




我們選一個追蹤ID 測試


因為測試實例安裝了ingress 所以我們也可以在節點用curl 測試





接下來配合loki來實現跟蹤traceid
創建派生字段,派生字段可用於從日志消息中提取新字段並根據其值創建鏈接
https://grafana.com/docs/grafana/next/datasources/loki/


為了后續能夠使用loki產生traceid,需要設置為loki的環境變量
https://github.com/grafana/tempo/blob/main/example/docker-compose/docker-compose.loki.yaml 相關的參考文檔,環境變量可以看這個文檔

先隨便查詢幾次以讓loki產生數據,輸入以下內容查詢loki服務產生的包含traceID的數據。
接下來讓我們來執行一個專門查詢一些 trace ids 的查詢,在操作的時候通常會使用 Loki 來搜索類似於查詢路徑或狀態碼之類的數據,這里我們只是簡單演示,使用命令
{app="loki"}|="traceID"


可以看到TraceID字段后面的Tempo按鈕,點擊可以看到對應的trace信息

總結:
grafana tempo的誕生完善了grafana traceing體系,實現了grafana apm logging、tracing、metrics最后的一環,相對來說較便捷的集成到了grafana ui中,有點對標elk stack的意思,不過elk stack的鏈路追蹤好像是付費功能。tempo其鍵值存儲實現也決定了其功能的局限性,還不支持鏈路的完整展示,在查詢時必須要先獲得traceid才能進行查詢,所以只能通過日志打印traceid,然后再根據traceid進行查詢從而進行展示。

參考文檔:
https://mp.weixin.qq.com/s?__biz=MzU4MjQ0MTU4Ng==&mid=2247486887&idx=1&sn=c4fc2e2fca7fd728396da157a2685082&chksm=fdb902bacace8bac7bb1dfd30a6daa5f0e966f75fcfd803b6aa19ea0d3ed827782008d240088&scene=126&sessionid=1603851143&key=0a19845a51c58415cd240b232fdd04332e6b87d96080be3650d92b518db23b3c47396e1de2245acef75ea5350895eaa122801b75d8e45b3db06b12a4b59f1fd354703244fcb1e5cfa3b11f0e145edff89ab42289dad17c25915fad5b217cb5258cae4219ef149043b1f793a3b8ab8b19948c4bf5853b8d90ee7b74abea6fe3c7&ascene=1&uin=NjkxMzI3MDAw&devicetype=Windows+10+x64&version=63000039&lang=zh_CN&exportkey=A9EggG6JhOqvjsTz5omWxTI%3D&pass_ticket=mKBweVAFm3VIfjfW3vHGx99RSQ9z40gM4aXAC0uZdJgZgnCScBVtKpE2565trYIK&wx_header=0
https://blog.csdn.net/weixin_49366475/article/details/109462989
