在 Rust 中使用 OpenTelemetry 做分佈式跟蹤

在本文中,將分享如何在 Rust 應用程序中添加 OpenTelemetry 做分佈式跟蹤。

OpenTelemetry 是什麼?

OpenTelemetry 是一個 api 和 sdk 的集合,它允許我們收集跟蹤、導出日誌和生成指標 (也稱爲可觀察性的三大支柱)。

它是 CNCF 社區 (雲原生計算基金會) 驅動的開源項目。在雲原生環境中,我們使用 OpenTelemetry(簡稱 OTel)從應用系統的操作和事件中收集數據。換句話說,爲我們的分佈式服務提供觀測工具。這些數據使我們能夠理解和調查我們的軟件的行爲,並排除性能問題和錯誤。

OpenTelemetry 是一個標準的可觀測框架,它捕獲單個規範下的所有數據。它提供了幾個組件,包括:

關於使用 OpenTelemetry,以下是你需要知道的術語:

Rust 中的跟蹤

在 Rust 中有一個很棒的 crate 叫 tracing。它是我們追蹤 Rust 程序的核心框架,它的文檔概述了它的核心概念和由這些術語組成的 api — spans, events, and subscribers.

前面已經介紹了 span 和 Events 是什麼,但 subscriber 是一個新的術語。要記錄 span 和 event,必須實現 subscriber 特徵。這意味着需要實現以下方法:

要開始記錄跟蹤,我們需要初始化訂閱者。

我們需要先初始化註冊表 struct:

let subscriber = tracing_subscriber::Registry::default()

這個 struct 實現了一個 subscriber,並向我們展示了另一個重要特性——層。通過使用層,我們可以配置 subscriber,以便在與 span 和 event 交互時應用特定的行爲。

例如,如果我們希望過濾、導出、格式化或編輯一些數據,可以創建或使用現有層,並將其與註冊表的 subscriber 組合在一起。

let subscriber = tracing_subscriber::Registry::default().with(SomeLayer)

我們將在實踐部分看到更多如何使用這些 crate 來編寫 Rust 程序的例子。

Rust 中的 OpenTelemetry

在 Rust 中提供 OpenTelemetry 支持的 crate 就被稱爲 OpenTelemetry。它的介紹是 “OpenTelemetry 提供了一組 api、庫、代理和收集器服務,用於從應用程序中捕獲分佈式跟蹤數據和指標”。

讓我們來看看它的一些關鍵 api:

Rust 中的分佈式跟蹤

使用 opentelemetry-rust,我們可以跨多個服務檢測我們的應用程序,並將它們發送到分佈式平臺。

例如,我們可以使用 opentelemetry-jaeger crate 將我們的跟蹤數據發送到一個遠程的 Jaeger 平臺。

另一個例子是 OpenTelementy-otlp crate,可以使用導出器將 OTLP 格式的跟蹤數據導出到 OpenTelemetry 收集器。OpenTelemetry Collector 以與供應商無關的方式接受、處理和導出跟蹤數據。

在 Rust 應用如何使用 OpenTelemetry 來集成和可視化跟蹤數據,請參考 << 用 Rust 實現 KV Server-6 併發連接限制和測量監控 >> 這篇文章。

本文翻譯自:

https://medium.com/@team_Aspecto/guide-to-opentelemetry-distributed-tracing-in-rust-f1d9294b662e

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/UimE4oiWb2ZUz8gWPpV8yQ