OpenTelemetry 說明、支持和意見反應
本文提供適用於 .NET、Java、Node.js 和 Python 應用程式的 Azure 監視器 Application Insights 上的 OpenTelemetry 說明、支援和意見反應選項。
常見問題集
什麼是 OpenTelemetry?
適用於可檢視性的新開放原始碼標準。 若要深入了解,請參閱 OpenTelemetry (英文)。
為什麼 Microsoft Azure 監視器投資 OpenTelemetry?
Microsoft 投資 OpenTelemetry 的原因如下:
- 它是廠商中立的,且跨語言提供一致的 API/SDK。
- 一段時間後,我們相信 OpenTelemetry 能讓 Azure 監視器客戶觀察使用我們支援語言以外的語言所撰寫的應用程式。
- 這會擴充您可以透過一組多樣化的檢測程式庫所收集的資料類型。
- OpenTelemetry 軟體開發套件 (SDK) 的規模比其前身 Application Insights SDK 更具效能。
- OpenTelemetry 會配合 Microsoft 的策略採用開放原始碼。
OpenTelemetry 的狀態為何?
請參閱 OpenTelemetry 狀態。
什麼是 Azure 監視器 OpenTelemetry 發行版本?
您可以將此視為精簡包裝函式,將全部 OpenTelemetry 元件組合在一起,以獲得 Azure 的絕佳體驗。 此包裝函式也稱為 OpenTelemetry 中的散發。
為何應該使用 Azure 監視器 OpenTelemetry 發行版本?
相較於原生 OpenTelemetry,從社群使用 Azure 監視器 OpenTelemetry 發行版本 的一些優點如下:
- 減少啟用工作
- Microsoft 不支援
- 引進 Azure 特定功能,例如:
- 與傳統 Application Insights SDK 相容的取樣
- Microsoft Entra 驗證
- 離線儲存和自動重試
- Statsbeat
- Application Insights 標準計量
- 偵測資源中繼資料,以在各種 Azure 環境中自動填入雲端角色名稱和雲端角色執行個體
- 即時計量
秉持 OpenTelemetry 的精神,我們設計出開放且可延伸的發行版本。 例如,您可以新增:
- OpenTelemetry 通訊協定 (OTLP) 匯出工具,並同時傳送至第二個目的地
- 發行版本未包含的其他檢測程式庫
因為散發提供 OpenTelemetry 散發,因此 Distro 支援 OpenTelemetry 所支援的任何項目。 例如,如果 OpenTelemetry 支援遙測處理器、匯出者或檢測程式庫,則您可以新增更多遙測處理器、導出者或檢測程式庫。
注意
散發會將取樣器設定為 Application Insights 的自訂固定速率取樣器。 您可以將此變更為不同的取樣器,但這樣做可能會停用部分散發包含的功能。 如需支援取樣器的詳細資訊,請參閱設定 Azure 監視器 OpenTelemetry 的啟用取樣一節。
對於沒有支援的獨立 OpenTelemetry 匯出工具的語言,Azure 監視器 OpenTelemetry 發行版本是目前唯一支援搭配 Azure 監視器使用 OpenTelemetry 的方式。 針對具有支援的獨立 OpenTelemetry 匯出工具的語言,您可以選擇使用 Azure 監視器 OpenTelemetry Distro,或視您遙測案例而定的適當獨立 OpenTelemetry 匯出工具。 如需詳細資訊,請參閱何時應該使用 Azure 監視器 OpenTelemetry 匯出工具?。
如何測試 Azure 監視器 OpenTelemetry 發行版本?
請查看 .NET、JAVA、JavaScript (Node.js) 和 Python 的啟用文件。
我應該使用 OpenTelemetry 或 Application Insights SDK 嗎?
我們建議您使用 OpenTelemetry 發行版本,除非您需要只有 Application Insights SDK中的正式支援所提供的功能。
採用 OpenTelemetry 現在可防止稍後移轉。
何時應該使用 Azure 監視器 OpenTelemetry 匯出工具?
針對 ASP.NET Core、JAVA、Node.js 和 Python,我們建議使用 Azure Monitor OpenTelemetry 發行版本。 這是開始使用的一行程式碼。
針對所有其他 .NET 案例 (包括傳統 ASP.NET、主控台應用程式、Windows Forms (WinForms) 等),建議使用 .NET Azure 監視器 OpenTelemetry 匯出工具:Azure.Monitor.OpenTelemetry.Exporter
。
如需需要進階設定的更複雜 Python 遙測案例,建議您使用 Python Azure 監視器 OpenTelemetry 匯出工具。
Azure 監視器 OpenTelemetry 發行版本功能的目前發行狀態為何?
下圖細分每個語言的 OpenTelemetry 功能支援。
功能 | .NET | Node.js | Python | Java |
---|---|---|---|---|
分散式追蹤 | ✅ | ✅ | ✅ | ✅ |
自訂計量 | ✅ | ✅ | ✅ | ✅ |
標準計量 | ✅ | ✅ | ✅ | ✅ |
固定取樣率 | ✅ | ✅ | ✅ | ✅ |
離線儲存和自動重試 | ✅ | ✅ | ✅ | ✅ |
例外狀況報告 | ✅ | ✅ | ✅ | ✅ |
記錄集合 | ✅ | ⚠️ | ✅ | ✅ |
自訂事件 | ⚠️ | ⚠️ | ⚠️ | ✅ |
Microsoft Entra 驗證 | ✅ | ✅ | ✅ | ✅ |
即時計量 | ✅ | ✅ | ✅ | ✅ |
即時計量篩選 | ✅ | ❌ | ❌ | ❌ |
偵測 VM/VMSS 和 App Service 的資源內容 | ✅ | ❌ | ✅ | ✅ |
偵測 Azure Kubernetes Service (AKS) 的資源內容和 Functions | ❌ | ❌ | ❌ | ✅ |
使用追蹤可用性 API 產生的可用性測試事件 | ❌ | ❌ | ❌ | ✅ |
依匿名使用者識別碼和綜合來源篩選要求、相依性、記錄和例外狀況 | ❌ | ❌ | ❌ | ✅ |
依作業名稱篩選相依性、記錄和例外狀況 | ❌ | ❌ | ❌ | ✅ |
調適型取樣 | ❌ | ❌ | ❌ | ✅ |
.NET Profiler | ❌ | ❌ | ❌ | ⚠️ |
快照偵錯工具 | ❌ | ❌ | ❌ | ❌ |
索引鍵
- ✅ 這項功能適用於全部擁有正式支援的客戶。
- ⚠ 這項功能目前提供於公開預覽。 請參閱 Microsoft Azure 預覽專用的使用補充條款。
- ❌ 這項功能無法使用或不適用。
OpenTelemetry 是否可以用於網頁瀏覽器?
可以,但我們不建議使用,而且 Azure 不支援。 OpenTelemetry JavaScript 已針對 Node.js進行大量最佳化。 不過,我們建議使用 Application Insights JavaScript SDK。
何時可以預期 OpenTelemetry SDK 可用於網頁瀏覽器?
OpenTelemetry Web SDK 沒有確定的可用性時間表。 我們與瀏覽器 SDK 很可能有相距數年的落差,這是 Application Insights JavaScript SDK 的可行替代方案。
我今天可以在網頁瀏覽器中測試 OpenTelemetry 嗎?
OpenTelemetry Web 沙箱是一個分支,其設計目的是讓 OpenTelemetry 在瀏覽器中運作。 尚無法將遙測傳送至 Application Insights。 SDK 不會定義一般用戶端事件。
是否支援與 AppDynamics、DataDog 和 NewRelic 等競爭對手代理程式一起執行 Application Insights?
雖然我們的發行版本可讓您 同時匯出至 OTLP 端點與 Azure 監視器,但這種做法並非我們打算測試或支援的做法。
是否可以在生產環境中使用預覽功能?
不建議這樣做。 請參閱 Microsoft Azure 預覽專用的使用補充條款。
手動和自動檢測有何不同?
請參閱 OpenTelemetry 概觀。
我可以使用 OpenTelemetry 收集器嗎?
儘管 Microsoft 尚未正式支援以代理程式型方法進行應用程式監視,有些客戶使用 OpenTelemetry 收集器作為代理程式替代方案。 同時,開放原始碼社群貢獻了 OpenTelemetry 收集器 Azure 監視器匯出工具,部分客戶目前已使用該工具來將資料傳送至 Azure 監視器 Application Insights。 Microsoft 不支援這項功能。
OpenCensus 和 OpenTelemetry 之間有何差異?
OpenCensus 是 OpenTelemetry 的前身。 Microsoft 協助整合 OpenTracing 和 OpenCensus,以建立 OpenTelemetry,這是世界上的單一可檢視性標準。 目前生產環境建議而且適用於 Azure 監視器的 Python SDK 是以 OpenCensus 為基礎。 Microsoft 致力於根據 OpenTelemetry 製作 Azure 監視器。
在 Grafana 中,為什麼我會看到 Status: 500. Can't visualize trace events using the trace visualizer
?
您可以嘗試將原始文字記錄而非 OpenTelemetry 追蹤視覺化。
在 Application Insights 中,'Traces' 資料表會儲存原始文字記錄以供診斷之用。 其有助於識別及相互關聯與使用者要求、其他事件和例外狀況報告相關的追蹤。 不過,'Traces' 資料表不會直接參與 Grafana 等視覺效果工具中的端對端交易檢視 (瀑布圖)。
隨著雲端原生做法日益普及,遙測集合和術語也逐漸演進。 OpenTelemetry 成為收集和檢測遙測資料的標準。 在此背景下,'Traces'一詞有了全新定義。 OpenTelemetry 中的 'Traces' 指的不是原始記錄,而是更豐富的結構化遙測形式,其中包含代表個別工作單位的範圍。 這些範圍對於建構詳細的交易檢視至關重要,能提供更佳的雲端原生應用程式監視和診斷。
疑難排解
步驟 1:啟用診斷記錄
Azure 監視器匯出工具使用 EventSource 進行其內部記錄。 匯出工具記錄可供任何 EventListener 使用,方法是加入宣告名為 OpenTelemetry-AzureMonitor-Exporter
的來源。 如需疑難排解步驟,請參閱 GitHub 上的 OpenTelemetry 疑難排解。
步驟 2:測試應用程式主機與擷取服務之間的連線
Application Insights 軟體開發工具包 (SDK) 和代理程式會傳送遙測,以在擷取端點取得 REST 呼叫。 若要測試從 Web 伺服器或應用程式主機電腦到擷取服務端點的連線,請使用來自 PowerShell 的 curl 命令或原始 REST 要求。 如需詳細資訊,請參閱針對 Azure 監視器 Application Insights 中遺失的應用程式遙測進行疑難排解。
已知問題
下列項目是 Azure 監視器 OpenTelemetry 匯出工具的已知問題:
相依性遙測資料中缺少操作名稱。 缺少操作名稱會導致失敗,並對性能索引標籤體驗產生負面影響。
要求和相依性遙測資料中缺少裝置型號。 缺少裝置型號會對裝置世代分析產生不利影響。
支援
選取您選擇的語言索引標籤,以探索支援選項。
- 針對 Azure 支援問題,請開啟 Azure 支援票證。
- 針對 OpenTelemetry 問題,請直接連絡 OpenTelemetry .NET 社群。
- 如需與 Azure 監視器匯出工具相關的未解決問題清單,請參閱 GitHub 問題頁面。
OpenTelemetry 意見反應
若要提供意見反應:
- 填寫 OpenTelemetry 社群的客戶意見反應問卷。
- 加入 OpenTelemetry 早期採用者社群,告知 Microsoft 有關您自己的資訊。
- 與 Microsoft Tech Community 中的其他 Azure 監視器使用者互動。
- 在 Azure 意見反應論壇中提出功能要求。