當您使用適用於 Rust 的 Azure SDK Crate 時,您需要查看 SDK 作業,以偵錯問題、監視效能,以及瞭解應用程式如何與 Azure 服務互動。 本文說明如何實作有效的 OpenTelemetry 型記錄和遙測策略,以深入瞭解 Azure 上 Rust 應用程式的內部運作方式。
適用於 Azure 開發人員的遙測
適用於 Rust 的 Azure SDK 會透過 OpenTelemetry 整合提供完整的可觀察性,我們建議將其用於監視和分散式追蹤案例。 無論您是針對驗證流程進行疑難排解、監視 API 要求週期,還是分析效能瓶頸,本指南都涵蓋您取得 Azure SDK 作業可見度所需的 OpenTelemetry 工具和技術。
適用於 Rust 的 Azure SDK 會使用 OpenTelemetry 作為可觀測性的標準方法,提供:
- 行業標準遙測: 使用與監控平台兼容的 OpenTelemetry 格式
- 分散式追蹤:追蹤跨多個服務和 Azure 資源的要求
- 進階匯出器:將資料傳送至 Jaeger、Prometheus、Grafana 和其他可觀測性平台
- 跨服務的關聯性:在微服務之間自動傳播追蹤內容
- 生產監控: 專為大規模生產環境構建,具有採樣和性能優化功能
這很重要
目前,Microsoft 尚未提供直接的 Azure 監視器 OpenTelemetry 匯出器給 Rust 應用程式。 Azure 監視器 OpenTelemetry 發行版僅支援 .NET、Java、Node.js和 Python。 針對 Rust 應用程式,您必須將 OpenTelemetry 資料匯出至中繼系統 (例如 Azure 儲存體、事件中樞或 OpenTelemetry 收集器),然後使用支援的擷取方法將該資料匯入 Azure 監視器。
設定 OpenTelemetry 記錄
要使用 OpenTelemetry,您需要 azure_core_opentelemetry 板條箱。
azure_core該套件本身不包含 OpenTelemetry 支援。
登入 Azure CLI:
az login使用 Azure CLI 建立 Azure 監視器資源:
# Set variables RESOURCE_GROUP="rust-telemetry-rg" LOCATION="eastus" APP_INSIGHTS_NAME="rust-app-insights" LOG_ANALYTICS_WORKSPACE="rust-logs-workspace" # Create resource group az group create --name $RESOURCE_GROUP --location $LOCATION # Create Log Analytics workspace WORKSPACE_ID=$(az monitor log-analytics workspace create \ --resource-group $RESOURCE_GROUP \ --workspace-name $LOG_ANALYTICS_WORKSPACE \ --location $LOCATION \ --query id -o tsv) # Create Application Insights instance az extension add --name application-insights INSTRUMENTATION_KEY=$(az monitor app-insights component create \ --app $APP_INSIGHTS_NAME \ --location $LOCATION \ --resource-group $RESOURCE_GROUP \ --workspace $WORKSPACE_ID \ --query instrumentationKey -o tsv) # Get connection string CONNECTION_STRING=$(az monitor app-insights component show \ --app $APP_INSIGHTS_NAME \ --resource-group $RESOURCE_GROUP \ --query connectionString -o tsv) echo "Application Insights Connection String: $CONNECTION_STRING"配置您的 Rust 專案。 將必要的依賴項添加至您的
Cargo.toml:[dependencies] azure_core_opentelemetry = "*" azure_security_keyvault_secrets = "*" azure_identity = "*" opentelemetry = "0.31" opentelemetry_sdk = "0.31" opentelemetry-otlp = "0.31" # For exporting to OpenTelemetry Collector tokio = { version = "1.47.1", features = ["full"] }備註
opentelemetry-otlp包含 Crate,用於將遙測資料匯出至 OpenTelemetry Collector,然後可以將資料轉送至 Azure 監視器。 不支援從 Rust 應用程式直接匯出至 Azure 監視器。使用 OpenTelemetry 組態建立您的主要應用程式。 如需詳細資訊,請參閱 azure_core_opentelemetry 文件。
設定必要的環境變數並執行您的應用程式:
# Set Key Vault URL (replace with your actual Key Vault URL) export AZURE_KEYVAULT_URL="https://mykeyvault.vault.azure.net/" # Run the application cargo run
在應用程式中設定 OpenTelemetry 並執行之後,您可以新增自訂檢測並監控遙測資料。
將遙測匯出至 Azure 監視器
由於 Rust 沒有直接的 Azure 監視器 OpenTelemetry 匯出工具,因此您必須實作間接方法,才能將遙測資料匯入 Azure 監視器。 以下是推薦的方法:
選項 1:OpenTelemetry Collector (建議)
OpenTelemetry 收集器可作為中間層,可從 Rust 應用程式接收遙測,並將它轉送至 Azure 監視器:
- 在您的環境中部署 OpenTelemetry Collector (作為側車、代理程式或閘道)
- 設定您的 Rust 應用程式 以使用 OTLP(OpenTelemetry 協定)匯出到收集器
- 使用 Azure 監視器匯出工具設定收集器,以將資料轉送至 Application Insights
選項 2:Azure 儲存體 + 資料擷取 API
對於您需要對資料處理進行更多控制的案例:
- 將遙測匯出至 Azure 儲存體 (Blob 儲存體或 資料湖)
- 使用 Azure Functions、邏輯應用程式或自訂應用程式來處理資料
- 使用記錄擷取 API 將已處理的資料內嵌至 Azure 監視器
選項 3:事件中樞串流
即時遙測資料處理:
- 將遙測從 Rust 應用程式串流至 Azure 事件中樞
- 使用 Azure 串流分析、Azure Functions 或自訂取用者來處理事件
- 將已處理好的遙測資料轉發 至 Azure 監視器 或 Application Insights
自訂遙測資料
OpenTelemetry 提供了一個靈活的框架,用於自訂遙測資料以滿足應用程式的需求。 使用這些策略來增強遙測:
請為你的應用程式碼進行工具化
將自訂檢測新增至應用程式程式碼可協助您將商務邏輯與 Azure SDK 作業相互關聯。 這種關聯性使更容易理解完整的操作流程。
| Technique | 目標 | Implementation |
|---|---|---|
| Azure 作業的自訂範圍 | 建立清楚的階層,以顯示應用程式邏輯如何與 Azure 作業相關 | 使用 OpenTelemetry span 創建方法來包裝 Azure SDK 呼叫 |
| 將應用程式邏輯與 SDK 呼叫產生關聯 | 將商務作業與基礎 Azure SDK 呼叫連線 | 使用範圍上下文將業務運作與被觸發的 Azure 服務呼叫連結 |
| 建立診斷導覽路徑 | 擷取跨工作流程中的重要遙測內容 | 將結構化欄位 (使用者 ID、要求 ID、商業物件 ID) 新增至範圍 |
效能分析
OpenTelemetry 提供 Azure SDK 效能模式的詳細深入解析。 這些見解可協助您識別和解決效能瓶頸。
| 分析類型 | 它揭示了什麼 | 如何使用 |
|---|---|---|
| SDK 作業持續時間 | 不同的 Azure 作業需要多長時間 | 使用 OpenTelemetry 自動擷取的跨度計時來識別緩慢的作業 |
| 服務呼叫瓶頸 | 您的應用程式花費時間等候 Azure 回應的位置 | 比較 Azure 服務和作業之間的計時,以尋找效能問題 |
| 並行作業模式 | 作業之間的重疊和相依性 | 分析遙測資料,以瞭解進行多個 Azure 呼叫時的平行化機會 |
錯誤診斷
OpenTelemetry 捕獲了豐富的錯誤上下文,而不僅僅是簡單的錯誤消息。 這種上下文不僅可以幫助您了解失敗的內容,還可以幫助您了解為什麼以及在什麼情況下。
瞭解 SDK 錯誤傳播:追蹤錯誤如何透過應用程式程式碼和 Azure SDK 層傳遞。 此追蹤可協助您瞭解完整的錯誤路徑並識別根本原因。
記錄暫時性失敗與永久失敗:區分暫時失敗 (例如重試時可能成功的網路逾時) 和永久失敗 (例如需要設定變更的驗證錯誤)。 這種區別可協助您建置復原應用程式。
了解記錄、計量和警示
您的應用程式和服務會產生遙測資料,以協助您監控其運作狀態、效能和使用情況。 Azure 會將此遙測分類為記錄、計量和警示。
Azure 提供四種遙測:
| 遙測類型 | 它給了你什麼 | 可以在何處找到每項服務 |
|---|---|---|
| Metrics | 數值、時間序列資料 (CPU、記憶體等) | 入口網站或 CLI 中的az monitor metrics |
| 警示 | 達到閾值時主動通知 | 入口網站或 CLI 中的az monitor metrics alert |
| 日誌 | 文字型事件和診斷 (網頁、應用程式) | App Service 記錄、函式 監視器、容器應用程式 診斷 |
| 自訂記錄 | 透過 App Insights 進行您自己的應用程式遙測 | Application Insights 資源的 記錄 (追蹤) 資料表 |
為您的問題挑選正確的遙測:
| Scenario | 使用記錄 | 使用指標 | 使用警示 |
|---|---|---|---|
| 「我的 Web 應用程式是否啟動並回應?」 | App Service 網頁伺服器日誌(記錄) | N/A | N/A |
| 「我的函數是逾時還是失敗?」 | 函數調用日誌 (監視器) | 函數執行持續時間指標 | 「功能錯誤 >0」警報 |
| 我的服務很忙嗎?能擴展嗎? | N/A | 指標中的服務吞吐量/CPU | CPU 使用率自動調整警示 > 70% |
| 「我的程式碼擲回哪些例外狀況?」 | Application Insights 中的自訂追蹤記錄 | N/A | 「ServerExceptions >0」的警報 |
| 「我是否超出了交易或配額限制?」 | N/A | 配額相關指標 (交易、節流) | 「ThrottlingCount >0」的警示 |
檢視 Azure 監視器中的遙測資料
在 Rust 應用程式中設定 OpenTelemetry 並設定中繼匯出機制之後,您可以透過 Application Insights 檢視 Azure 監視器中的遙測資料。 由於 Rust 沒有直接的 Azure 監視器匯出功能,因此您必須實作下列其中一種方法:
- OpenTelemetry 收集器:設定 OpenTelemetry 收集器 ,以從 Rust 應用程式接收資料,並將它轉送至 Azure 監視器
- Azure 儲存體整合:將遙測匯出至 Azure 儲存體,並使用 Azure 監視器資料擷取 API 匯入資料
- 事件中樞串流:透過 Azure 事件中樞串流遙測資料並加以處理,以便併入 Azure 監視器
一旦您的遙測資料透過下列其中一種方法到達 Azure 監視器,您就可以對其進行分析:
流覽至 Azure 入口網站中的 Application Insights:
az monitor app-insights component show \ --app $APP_INSIGHTS_NAME \ --resource-group $RESOURCE_GROUP \ --query "{name:name,appId:appId,instrumentationKey:instrumentationKey}"檢視追蹤和記錄:
- 移至 Application Insights>交易搜尋
- 尋找包含作業名稱如
get_keyvault_secrets的痕跡 - 檢查 [記錄] 區段並執行 KQL 查詢:
traces | where timestamp > ago(1h) | where message contains "Azure operations" or message contains "secrets" | order by timestamp desc檢視分散式追蹤:
- 移至 Application Map 以查看服務相依性
- 選取 [ 效能 ] 以查看作業時間
- 使用 端對端交易詳細資料 來查看完整的要求流程
Rust 應用程式的自訂 KQL 查詢:
// View all custom logs from your Rust app traces | where customDimensions.["service.name"] == "rust-azure-app" | order by timestamp desc // View Azure SDK HTTP operations dependencies | where type == "HTTP" | where target contains "vault.azure.net" | order by timestamp desc // Monitor error rates traces | where severityLevel >= 3 // Warning and above | summarize count() by bin(timestamp, 1m), severityLevel | render timechart
實時監控
設定即時監控以查看到達的資料:
# Stream live logs (requires Azure CLI)
az monitor app-insights events show \
--app $APP_INSIGHTS_NAME \
--resource-group $RESOURCE_GROUP \
--event traces \
--start-time $(date -u -d '1 hour ago' +%Y-%m-%dT%H:%M:%S)
成本優化
您可以藉由瞭解設定選項的最佳做法,以及減少 Azure 監視器收集的資料量的機會,大幅降低 Azure 監視器的成本。
Rust 應用程式的關鍵策略:
- 使用適當的日誌級別: 為生產適當地配置 OpenTelemetry 日誌級別以減少數量
- 實作取樣:為大量應用程式配置 OpenTelemetry 取樣
- 過濾敏感資料:避免記錄機密資料、權杖或可能增加成本的大型載荷。
- 監視資料擷取:定期檢閱您的 Application Insights 資料使用量和成本