在現代雲原生監控生態系中,Prometheus 與 OpenTelemetry 作為兩大核心工具,各自具備獨特的監控能力與生態整合性。Prometheus 以拉取式(Pull-based)模型著稱,擅長即時監控與高效資料處理;而 OpenTelemetry 則以推送式(Push-based)模式支援分散式追蹤與觀察。兩者的互操作性成為雲原生架構中關鍵的整合點,本文將深入探討其技術差異、協議改進與未來整合方向,並分析現有架構的優勢與挑戰。
Prometheus 是一個開源的監控與警報系統,透過拉取式模型定期收集指標資料,並儲存於時序列資料庫(TSDB)中,支援強大的查詢語言 PromQL。其核心特性包括自動服務發現、高效資料壓縮與可擴展的儲存機制。
OpenTelemetry 是一個開放標準的觀察工具集,提供追蹤(Tracing)、度量(Metrics)與日誌(Logs)的統一框架。其推送式模型透過 OpenTelemetry Collector 收集、轉換與導出資料,支援多種協議(如 OTLP、JSON、Prometheus Exposition Format)。
兩者的協議整合需透過遠端寫入(Remote Write)與資料轉換處理器,例如 Prometheus 3.0 引入 Delta to Cumulative 處理器,將 OpenTelemetry 的 Delta 指標轉換為 Cumulative 格式。
Prometheus 3.0 預設支援 UTF-8 字元集,解決 OpenTelemetry 語義約定中常見的點號(.)問題。OpenTelemetry Collector 配置需設定旗標避免預設暴露寫入資料庫的端點,並提供 UTF-8 轉換為底線(_)的名稱策略,以符合 Prometheus 的命名規範。
Prometheus 3.0 引入 Delta to Cumulative 處理器,用於將 OpenTelemetry 的 Delta 指標轉換為 Cumulative 格式,需維護狀態以計算轉換。未來計畫支援在查詢階段處理 Delta 指標,或新增 PromQL 函數以提升效率。
Prometheus 3.0 引入原生直方圖,提升效能與準確性,支援單一請求內包含完整直方圖,並用於 OpenTelemetry Collector 的遠端接收器。需完善 OpenMetrics 文本格式的實現,並解決查詢集的後續需求,目前已接近穩定狀態。
新增對原生與經典直方圖、Exemplars(連結指標與追蹤)、元數據(作用於系列而非指標名稱)、時間戳等支援。支援部分寫入統計資訊(如寫入成功/失敗資料量),並計畫整合至遠端寫入出口。
當前策略將資源屬性轉換為單一指標(target_info),並透過 PromQL JOIN 結合,但 JOIN 操作被視為使用門檻。未來計畫允許用戶自訂需轉換為標籤的屬性,但需重啟 Prometheus 並可能導致時間序列 ID 變更,增加記憶體負擔。正進行 UX 研究,探討如何更有效地處理資源屬性,並計畫整合 OpenTelemetry 的 Entities 提案以區分 Kubernetes、容器等屬性。
promote resource attributes
選項,將資源屬性轉換為標籤,並監控 Delta 轉換處理器的狀態。優勢:
挑戰:
Prometheus 與 OpenTelemetry 的互操作性透過遠端寫入協議、資料轉換處理器與資源屬性整合,逐步實現高效監控架構。未來需進一步優化 UTF-8 支援、Delta 轉換查詢效能,並整合 OpenTelemetry 的 Entities 設計以提升資源屬性處理的語境感知能力。建議用戶根據實際需求選擇合適的監控模型,並透過 OpenTelemetry Collector 進行資料轉換與導出,以實現靈活的雲原生監控方案。