聯邦

聯邦允許一個 Prometheus 伺服器從另一個 Prometheus 伺服器抓取選定的時間序列。

關於原生直方圖(native histograms)的說明:要透過聯邦抓取原生直方圖,執行抓取的 Prometheus 伺服器需要在其抓取配置中設定 scrape_native_histograms: true,這意味著將使用 protobuf 格式進行抓取。如果被聯邦的指標中,同一指標名稱包含不同樣本型別的混合(任何種類的浮點數、計數器直方圖或儀表盤直方圖),則聯邦的有效載荷中將包含多個同名但不同型別的指標族(由於技術原因,浮點樣本總是作為 untyped 進行聯邦,而直方圖樣本則帶有完整的型別資訊進行聯邦)。從技術上講,這違反了 protobuf 展示格式的規則,但 Prometheus 仍然能夠正確攝取所有指標。

使用場景

聯邦有不同的使用場景。通常,它被用於實現可擴充套件的 Prometheus 監控架構,或者從一個服務的 Prometheus 中拉取相關的指標到另一個服務中。

分層聯邦

分層聯邦允許 Prometheus 擴充套件到擁有數十個資料中心和數百萬節點的場景。在這種使用場景中,聯邦拓撲類似於一棵樹,較高級別的 Prometheus 伺服器從大量下級伺服器中收集聚合後的時間序列資料。

例如,一個架構可能由許多個“每個資料中心”的 Prometheus 伺服器(收集高細節的資料,支援例項級別的鑽取)以及一組“全域性”的 Prometheus 伺服器(僅從這些本地伺服器收集並存儲聚合資料,支援任務級別的鑽取)組成。這既提供了全域性的聚合檢視,又保留了詳細的本地檢視。

跨服務聯邦

在跨服務聯邦中,一個服務的 Prometheus 伺服器被配置為從另一個服務的 Prometheus 伺服器中抓取選定的資料,從而能夠在單個伺服器中對這兩個資料集執行告警和查詢。

例如,執行多個服務的叢集排程器可能會暴露關於叢集上執行的服務例項的資源使用資訊(如記憶體和 CPU 使用情況)。另一方面,執行在該叢集上的服務本身僅暴露特定於應用的業務指標。通常,這兩組指標是由獨立的 Prometheus 伺服器抓取的。透過使用聯邦,包含服務級別指標的 Prometheus 伺服器可以從叢集 Prometheus 中拉取與其特定服務相關的叢集資源使用指標,從而可以在該伺服器中同時使用這兩組指標。

配置聯邦

在任何給定的 Prometheus 伺服器上,透過 /federate 介面可以檢索該伺服器中選定時間序列的當前值。必須指定至少一個 match[] URL 引數來選擇要公開的序列。每個 match[] 引數都需要指定一個瞬時向量選擇器,例如 up{job="api-server"}。如果提供了多個 match[] 引數,則會選擇所有匹配序列的並集。

要將指標從一個伺服器聯邦到另一個伺服器,請將您的目標 Prometheus 伺服器配置為從源伺服器的 /federate 介面進行抓取,同時啟用 honor_labels 抓取選項(以避免覆蓋源伺服器暴露的任何標籤),並傳入所需的 match[] 引數。例如,以下 scrape_configs 會將來自 source-prometheus-{1,2,3}:9090 的、帶有標籤 job="prometheus" 或以 job: 開頭的指標名稱的所有序列,聯邦到執行抓取的 Prometheus 中

scrape_configs:
  - job_name: 'federate'
    scrape_interval: 15s

    honor_labels: true
    metrics_path: '/federate'

    params:
      'match[]':
        - '{job="prometheus"}'
        - '{__name__=~"job:.*"}'

    static_configs:
      - targets:
        - 'source-prometheus-1:9090'
        - 'source-prometheus-2:9090'
        - 'source-prometheus-3:9090'

本頁內容