监控集群联邦可以通过整合多个集群中的 Prometheus 或 Thanos 实例,实现跨集群统一监控、长期数据存储、查询性能优化、和异地灾备等能力。
Prometheus 集群联邦
对于第三方 Prometheus Server 而言,可以同采集 Exporter 实例一样从云平台 Prometheus Server 实例获取指标数据。其核心在于每个集群都包含一个用于获取当前实例中监控样本的接口,可观测服务支持 /federate
接口来配置 Prometheus 集群联邦。
此种联邦方案支持对监控数据进行长期存储。
第三方 Prometheus Server 配置示例如下:
scrape_configs:
- job_name: 'federate-prometheus-1'
scrape_interval: 30s
# 用户名和密码请向云管或者技术支持人员获取
basic_auth:
username: 'your_username'
password: 'your_password'
params:
'match[]':
- '{job="node-exporter"}'
# 以下域名请向云管或者技术支持人员获取
static_configs:
- targets:
- 'ecms.web.cluster-1.easystack.io'
labels:
__path__: "/shard/0/federate"
# 如果云平台开启分片,直接在下面添加新的 targets,分片数量对应 targets 数量,当前示例未开启分片
relabel_configs:
- source_labels: [__path__]
target_label: __metrics_path__
- job_name: 'federate-prometheus-2'
scrape_interval: 30s
# 用户名和密码请向云管或者技术支持人员获取
basic_auth:
username: 'your_username'
password: 'your_password'
params:
'match[]':
- '{job="node-exporter"}'
# 以下域名请向云管或者技术支持人员获取
static_configs:
- targets:
- 'ecms.web.cluster-2.easystack.io'
labels:
__path__: "/shard/0/federate"
# 如果云平台开启分片,直接在下面添加新的 targets,分片数量对应 targets 数量,当前示例开启两分片
- targets:
- 'ecms.web.cluster-2.easystack.io'
labels:
__path__: "/shard/1/federate"
relabel_configs:
- source_labels: [__path__]
target_label: __metrics_path__
如果单个集群规模过大,比如超过500节点等情况,在进行指标拉取的时候,建议将指标分散,以防止因为指标过多而导致接口超时。
比如可以配置 params 参数,根据节点将指标分散,示例如下(云平台 Prometheus Server 未开启分片):
scrape_configs:
- job_name: 'federate-prometheus-1-kubelet-0'
scrape_interval: 30s
# 用户名和密码请向云管或者技术支持人员获取
basic_auth:
username: 'your_username'
password: 'your_password'
params:
'match[]':
- '{job="kubelet",node=~"node-1[0-9]*"}'
# 以下域名请向云管或者技术支持人员获取
static_configs:
- targets:
- 'ecms.web.cluster-1.easystack.io'
labels:
__path__: "/shard/0/federate"
relabel_configs:
- source_labels: [__path__]
target_label: __metrics_path__
- job_name: 'federate-prometheus-1-kubelet-1'
scrape_interval: 30s
# 用户名和密码请向云管或者技术支持人员获取
basic_auth:
username: 'your_username'
password: 'your_password'
params:
'match[]':
- '{job="kubelet",node=~"node-2[0-9]*"}'
# 以下域名请向云管或者技术支持人员获取
static_configs:
- targets:
- 'ecms.web.cluster-1.easystack.io'
labels:
__path__: "/shard/0/federate"
relabel_configs:
- source_labels: [__path__]
target_label: __metrics_path__
kubernetes 默认使用 ClusterFirst 的 dnspolicy,如您的集群无法解析 ecms.web.cluster-1.easystack.io 等域名,需要在 prometheus 启动时添加参数 hostAliases,以支持当前 Pod 可以访问在配置中定义的域名。
Thanos 集群联邦
对于 Thanos 而言,支持通过服务发现的方式在第三方 Thanos Query 服务的启动参数中配置云平台 Thanos Query 地址来完成对接。
第三方 Thanos Query 启动参数配置示例如下:
args:
- query
# 以下域名请向云管或者技术支持人员获取
- --endpoint=ecms.grpc.cluster-1.easystack.io:443
- --endpoint=ecms.grpc.cluster-2.easystack.io:443
- --endpoint=ecms.grpc.cluster-3.easystack.io:443
- --query.replica-label=prometheus_replica
- --query.replica-label=thanos_ruler_replica
- --log.level=info
# 证书认证内容请向云管或者技术支持人员获取
- --grpc-client-tls-secure
- --grpc-client-tls-skip-verify
- --grpc-client-tls-cert=/certs/tls.crt
- --grpc-client-tls-key=/certs/tls.key
- --grpc-client-tls-ca=/certs/ca.crt
kubernetes 默认使用 ClusterFirst 的 dnspolicy,如您的集群无法解析 ecms.grpc.cluster-1.easystack.io 等域名,需要在 thanos query 启动时添加参数 hostAliases,以支持当前 Pod 可以访问在启动参数中定义的域名。