Prometheus 代理模式

Prometheus 代理模式

Prometheus Agent(代理)是內置於 Prometheus 二進位制檔案中的一種執行模式,具有相同的抓取 API、語義、配置和發現機制;該代理模式停用了 Prometheus 的一些常用功能(TSDB、告警和規則評估),並針對抓取指標以及向遠端位置進行遠端寫入(Remote Write)優化了二進位制檔案。

Prometheus 遠端寫入協議將 Prometheus 收集的全部或部分指標轉發(流式傳輸)到遠端位置;您可以配置 Prometheus,將部分指標(如果需要,還可以帶上所有元資料和樣本示例/exemplars!)轉發到一個或多個支援 Remote Write API 的位置。

透過遠端寫入,Prometheus 仍然使用拉取(pull)模型從應用程式收集指標,這使我們能夠了解那些不同的故障模式。隨後,我們將樣本和時間序列進行打包,並將資料匯出、複製(推送)到遠端寫入端點,從而限制了中心端監控未知情況的數量。從這種抓取器流式傳輸資料可以使您將指標資料儲存在中心位置,從而支援全域性檢視(Global View)用例。這實現了關注點分離,當管理應用程式的團隊與管理可觀測性或監控流水線的團隊不同時,這非常有用。

代理模式針對遠端寫入用例對 Prometheus 進行了最佳化。它停用了查詢、告警和本地儲存,並將其替換為定製的 TSDB WAL。其他所有內容保持不變:抓取邏輯、服務發現和相關配置。如果您只想將資料轉發到遠端 Prometheus 伺服器或任何其他符合遠端寫入規範的專案,它可以作為 Prometheus 的即插即用替代品。

本質上,它看起來像這樣:Prometheus Agent 遠端寫入

代理模式的優勢

  • 提高效率。定製的 Agent TSDB WAL 在成功寫入後會立即刪除資料。如果無法連線到遠端端點,它會將資料臨時持久化在磁碟上,直到遠端端點重新上線。目前,這與非代理模式的 Prometheus 類似,僅限於兩小時的緩衝區。這意味著無需在記憶體中構建資料塊,也無需為查詢目的維護完整的索引。本質上,在類似的情況下,代理模式使用的資源只是普通 Prometheus 伺服器所用資源的一小部分。
  • 代理模式能夠實現更簡單的資料攝入水平擴充套件

代理模式的缺點

  • 無法進行本地查詢。您無法查詢本地 Prometheus 例項。
  • 無法使用記錄規則。您無法在傳送到遠端寫入之前預先彙總資料。規則必須在遠端端執行。
  • 無告警功能。所有告警必須由遠端系統處理。

如何詳細使用代理模式

如果您檢視 Prometheus 的幫助輸出(使用 --help 標誌),應該會看到類似以下的內容

usage: prometheus [<flags>]

The Prometheus monitoring server

Flags:
  -h, --help                     Show context-sensitive help (also try --help-long and --help-man).
      (... other flags)
      --storage.tsdb.path="data/"
                                 Base path for metrics storage. Use with server mode only.
      --storage.agent.path="data-agent/"
                                 Base path for metrics storage. Use with agent mode only.
      (... other flags)
      --[no-]agent               Run Prometheus in 'Agent mode'.

使用 --agent 標誌在代理模式下執行 Prometheus。其餘標誌要麼同時適用於伺服器和代理模式,要麼僅適用於特定模式。您可以透過檢視標誌幫助字串的最後一句來了解該標誌適用於哪種模式。“僅在伺服器模式下使用(Use with server mode only)”表示它僅適用於伺服器模式。如果沒有看到類似說明,則意味著該標誌是通用的。

代理模式接受相同的抓取配置,並具有相同的服務發現選項和遠端寫入選項。它還在埠 9095 上提供一個 Web UI,其中停用了查詢功能,但像普通的 Prometheus 伺服器一樣,顯示構建資訊、配置、目標(targets)和服務發現資訊。

本頁內容