使用Thanos實現Prometheus指標聯邦

本文來自Rancher Labs

Prometheus是CNCF中已經畢業的項目之一,主要用於監控和告警。在Kubernetes生態中,它是應用最為廣泛的監控和告警工具之一。Rancher用戶可以通過使用內置的監控堆棧來快速利用Prometheus。

Prometheus將其指標(metrics)作為時序資料庫存儲在本地磁碟上,因此Prometheus的本地存儲會受到磁碟大小以及所能保留的指標數量的制約。但是,Prometheus允許與遠程系統集成,通過_remotewrite和_remoteread指令讀寫指標,同時它還支援大量遠程端點和存儲集成

聯邦可以實現可擴展的Prometheus監控設置,或者將相關的指標從一個服務的Prometheus拉取到另一個Prometheus中。

在本文中,我們將探索一個快速和簡單的方式來設置Rancher監控遠程端點與Thanos receive的集成。Thanos是一個開源的、高可用的Prometheus設置,有長期指標存儲功能。你可以使用這個解決方案在所有的Prometheus實例中實現聯邦指標,並允許中央Grafana dashboard在Thanos上運行。

重要提醒:作為指標聯邦的一部分,項目/集群指標將不在Rancher管理平面內。此外,集群管理員必須確保建立適當的訪問控制機制,以限制對該指標存儲的訪問。

安裝Thanos

在本篇文章中,我們可以使用kube-thanos在Kubernetes集群上快速設置Thanos。

我們將需要以下Thanos組件:

  • Thanos存儲gateway

  • Thanos接收器(receiver)

  • Thanos查詢器(querier)

  • 對象存儲

該解決方案如下所示:

                 +
Tenant's Premise | Provider Premise
                 |
                 |            +------------------------+
                 |            |                        |
                 |  +-------->+     Object Storage     |
                 |  |         |                        |
                 |  |         +-----------+------------+
                 |  |                     ^
                 |  | S3 API              | S3 API
                 |  |                     |
                 |  |         +-----------+------------+
                 |  |         |                        |       Store API
                 |  |         |  Thanos Store Gateway  +<-----------------------+
                 |  |         |                        |                        |
                 |  |         +------------------------+                        |
                 |  |                                                           |
                 |  +---------------------+                                     |
                 |                        |                                     |
+--------------+ |            +-----------+------------+              +---------+--------+
|              | | Remote     |                        |  Store API   |                  |
|  Prometheus  +------------->+     Thanos Receiver    +<-------------+  Thanos Querier  |
|              | | Write      |                        |              |                  |
+--------------+ |            +------------------------+              +---------+--------+
                 |                                                              ^
                 |                                                              |
+--------------+ |                                                              |
|              | |                PromQL                                        |
|    User      +----------------------------------------------------------------+
|              | |
+--------------+ |
                 +

來源:Thanos receive proposal

Thanos支援若干對象存儲配置。我們將使用MinIO作為我們的對象存儲。你需要在名為thanos-objectStorage的secret中定義對象存儲,它需要在你的Thanos deployment命名空間中。

thanos-config.yaml如下所示:

type: s3
config:
  bucket: thanos
  endpoint: ${minio-endpoint}
  access_key: ${minio-access-key}
  secret_key: ${minio-secret-key}
  insecure: true

你可以按照以下方式創建secret:

kubectl create secret generic thanos-objectstorage --from-file=thanos.yaml="$PATH_TO_CONFIG"/thanos-config.yaml

配置Rancher監控

與Rancher監控operator打包的Prometheus版本已經支援remote_readremote_write集成。

Thanos receive endpoint的額外設置可以通過高級選項傳遞,如下所示:

我們需要按照Prometheus remote_write規範的要求,指定一個唯一的名字。

# The name will be used in metrics and logging in place of a generated value to help users distinguish between
# remote write configs.
[ name: <string> ]

你完成了監控的部署之後,你應該可以使用Thanos查詢器查看你的指標。

已存儲的指標也將在對象存儲中獲取。

由於所有的集群指標在這個Thanos安裝中都是可用的,所以工作負載的所有者需要確保對工作負載和指標的訪問是安全的。

總 結

使用Rancher監控(即Prometheus)和Thanos接收器中的遠程讀寫功能,你可以通過幾個簡單的步驟就能夠實現長期指標存儲和多個集群指標的全局視圖。