Linux中國

使用 Grafana Tempo 進行分散式跟蹤

Grafana 的 Tempo 是出自 Grafana 實驗室的一個簡單易用、大規模的、分散式跟蹤後端。Tempo 集成了 GrafanaPrometheus 以及 Loki,並且它只需要對象存儲進行操作,因此成本低廉,操作簡單。

我從一開始就參與了這個開源項目,所以我將介紹一些關於 Tempo 的基礎知識,並說明為什麼雲原生社區會注意到它。

分散式跟蹤

想要收集對應用程序請求的遙測數據是很常見的。但是在現在的伺服器中,單個應用通常被分割為多個微服務,可能運行在幾個不同的節點上。

分散式跟蹤是一種獲得關於應用的性能細粒度信息的方式,該應用程序可能由離散的服務組成。當請求到達一個應用時,它提供了該請求的生命周期的統一視圖。Tempo 的分散式跟蹤可以用於單體應用或微服務應用,它提供 請求範圍的信息,使其成為可觀察性的第三個支柱(另外兩個是度量和日誌)。

接下來是一個分散式跟蹤系統生成應用程序甘特圖的示例。它使用 Jaeger HotROD 的演示應用生成跟蹤,並把它們存到 Grafana 雲託管的 Tempo 上。這個圖展示了按照服務和功能劃分的請求處理時間。

![Gantt chart from Grafana Tempo](/data/attachment/album/202103/23/221405whe0hxj2ojjh4eeh.png "Gantt chart from Grafana Tempo")

減少索引的大小

在豐富且定義良好的數據模型中,跟蹤包含大量信息。通常,跟蹤後端有兩種交互:使用元數據選擇器(如服務名或者持續時間)篩選跟蹤,以及篩選後的可視化跟蹤。

為了加強搜索,大多數的開源分散式跟蹤框架會對跟蹤中的許多欄位進行索引,包括服務名稱、操作名稱、標記和持續時間。這會導致索引很大,並迫使你使用 Elasticsearch 或者 Cassandra 這樣的資料庫。但是,這些很難管理,而且大規模運營成本很高,所以我在 Grafana 實驗室的團隊開始提出一個更好的解決方案。

在 Grafana 中,我們的待命調試工作流從使用指標報表開始(我們使用 Cortex 來存儲我們應用中的指標,它是一個雲原生基金會孵化的項目,用於擴展 Prometheus),深入研究這個問題,篩選有問題服務的日誌(我們將日誌存儲在 Loki 中,它就像 Prometheus 一樣,只不過 Loki 是存日誌的),然後查看跟蹤給定的請求。我們意識到,我們過濾時所需的所有索引信息都可以在 Cortex 和 Loki 中找到。但是,我們需要一個強大的集成,以通過這些工具實現跟蹤的可發現性,並需要一個很贊的存儲,以根據跟蹤 ID 進行鍵值查找。

這就是 Grafana Tempo 項目的開始。通過專註於給定檢索跟蹤 ID 的跟蹤,我們將 Tempo 設計為最小依賴性、大容量、低成本的分散式跟蹤後端。

操作簡單,性價比高

Tempo 使用對象存儲後端,這是它唯一的依賴。它既可以被用於單一的二進位下,也可以用於微服務模式(請參考倉庫中的 例子,了解如何輕鬆上手)。使用對象存儲還意味著你可以存儲大量的應用程序的痕迹,而無需任何採樣。這可以確保你永遠不會丟棄那百萬分之一的出錯或具有較高延遲的請求的跟蹤。

與開源工具的強大集成

Grafana 7.3 包括了 Tempo 數據源,這意味著你可以在 Grafana UI 中可視化來自Tempo 的跟蹤。而且,Loki 2.0 的新查詢特性 使得 Tempo 中的跟蹤更簡單。為了與 Prometheus 集成,該團隊正在添加對 範例 exemplar 的支持,範例是可以添加到時間序列數據中的高基數元數據信息。度量存儲後端不會對它們建立索引,但是你可以在 Grafana UI 中檢索和顯示度量值。儘管範例可以存儲各種元數據,但是在這個用例中,存儲跟蹤 ID 是為了與 Tempo 緊密集成。

這個例子展示了使用帶有請求延遲直方圖的範例,其中每個範例數據點都鏈接到 Tempo 中的一個跟蹤。

![Using exemplars in Tempo](/data/attachment/album/202103/23/221405umi3ziab6yzp226m.png "Using exemplars in Tempo")

元數據一致性

作為容器化應用程序運行的應用發出的遙測數據通常具有一些相關的元數據。這可以包括集群 ID、命名空間、吊艙 IP 等。這對於提供基於需求的信息是好的,但如果你能將元數據中包含的信息用於生產性的東西,那就更好了。 例如,你可以使用 Grafana 雲代理將跟蹤信息導入 Tempo 中,代理利用 Prometheus 服務發現機制輪詢 Kubernetes API 以獲取元數據信息,並且將這些標記添加到應用程序發出的跨域數據中。由於這些元數據也在 Loki 中也建立了索引,所以通過元數據轉換為 Loki 標籤選擇器,可以很容易地從跟蹤跳轉到查看給定服務的日誌。

下面是一個一致元數據的示例,它可用於Tempo跟蹤中查看給定範圍的日誌。

雲原生

Grafana Tempo 可以作為容器化應用,你可以在如 Kubernetes、Mesos 等編排引擎上運行它。根據獲取/查詢路徑上的工作負載,各種服務可以水平伸縮。你還可以使用雲原生的對象存儲,如谷歌雲存儲、Amazon S3 或者 Tempo Azure 博客存儲。更多的信息,請閱讀 Tempo 文檔中的 架構部分

試一試 Tempo

如果這對你和我們一樣有用,可以 克隆 Tempo 倉庫試一試。

via: https://opensource.com/article/21/2/tempo-distributed-tracing

作者:Annanay Agarwal 選題:lujun9972 譯者:RiaXu 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國