## FEDERATION(聯合)
---
Federation允許一個Prometheus服務從另一個Prometheus服務中獲取選中的時間序列數據。
### Use cases 用例
對于federation,有幾種不同的用例。它常常用于實現Prometheus監控的擴展,或者從另一個Prometheus服務中拉取相關度量指標數據。
#### Hierarchical federation分層擴展
分層擴展允許Prometheus擴展到數十個數據中心和上百萬的節點數量。在這個用例中,federation拓撲結構類似一顆樹,較高層級的Prometheus服務從大量較低層級的Prometheus服務中檢索和聚集時間序列數據。
例如:環境中可能包含許多以數據中心為基礎的Prometheus服務,可以從較高層級收集數據,還有一組全局的Prometheus服務,僅僅從本地服務器收集和存儲聚合的數據。這提供了一個聚合的全局視圖和本地視圖。
#### 跨服務的federation
在跨服務的federation中,一個Prometheus服務配置成從另一個Prometheus服務中獲取選中的數據,這個Prometheus服務能夠對單個服務中的兩個數據集啟用警告和查詢。
例如,一個運行多個服務的集群調度器可能暴露了集群資源使用信息(例如:CPU和內存使用量)。另一方面,運行在集群上的一個服務僅僅暴露應用程序指定的服務度量指標。經常地,獨立的Prometheus服務抓取這兩個度量指標CPU和內存。使用federation,這個Prometheus服務包含服務級別的度量指標,這個指標可以從集群Prometheus服務中獲取有關其指定的服務集群資源使用量,以便在該服務中使用兩組度量指標。
### 配置federation
任何Prometheus服務,這個`/federation`允許從服務中選中的時間序列檢索當前值。至少一個`match[]`URL參數必須指定要選擇的暴露時間序列。每一個`match[]`參數需要指定一個[即時向量選擇器](https://prometheus.io/docs/querying/basics/#instant-vector-selectors),例如:`up`或者`{job="api-server"}`。如果提供了多個`match`參數,將會選取所有匹配的時間序列數據的并集。
為了一個Prometheus服務從另一個Prometheus服務中federate度量指標,從一個源服務的`/federate`端點,配置你的目標Prometheus服務。當然,也可以使用`honor_labels`獲取選項和輸入想要的`match[]`的參數。例如,下面`scrape_config`federates任何帶有`job="prometheus`標簽的所有時間序列,或者一個以`job`開頭的度量指標名稱:從這個Prometheus服務上端口服務`prometheus-{1,2,3}:9090`上獲取其他Prometheus服務度量指標數據。
```
- 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'
```