Prometheus 服务发现:Consul 注册中心与 K8s 原生服务的整合
Prometheus 服务发现:Consul 注册中心与 K8s 原生服务的整合
Prometheus 的服务发现机制支持多种来源,包括 Consul 注册中心和 Kubernetes 原生服务。以下是整合方案及实施步骤:
一、核心概念
-
服务发现原理
Prometheus 通过定期扫描目标源(Consul/K8s API)获取动态变化的监控端点列表,无需手动配置 IP 列表。
更新周期由scrape_interval控制,通常设为 $15\text{s} \sim 1\text{min}$。 -
数据流架构
$$ \begin{array}{c} \text{Consul/K8s} \ \downarrow \ \text{Prometheus Server} \ \downarrow \ \text{Alertmanager + Grafana} \end{array} $$
二、Consul 服务发现配置
步骤:
-
注册服务到 Consul
在服务启动时通过 HTTP API 注册元数据:curl -X PUT -d '{ "ID": "node-exporter-01", "Name": "node-exporter", "Address": "192.168.1.10", "Port": 9100, "Tags": ["prod", "metrics"] }' http://consul-server:8500/v1/agent/service/register -
Prometheus 配置
在prometheus.yml添加 Consul SD 作业:scrape_configs: - job_name: 'consul-services' consul_sd_configs: - server: 'consul-server:8500' services: ['node-exporter', 'redis'] # 指定发现的服务 relabel_configs: - source_labels: [__meta_consul_tags] regex: .*prod.* action: keep # 仅保留带 prod 标签的服务
三、Kubernetes 服务发现配置
支持三种模式:
-
Node 模式
发现所有 K8s 节点:- job_name: 'k8s-nodes' kubernetes_sd_configs: - role: node # 发现集群节点 relabel_configs: - replacement: '${1}:9100' source_labels: [__address__] regex: '(.*)' -
Pod 模式
自动发现指定命名空间的 Pod:- job_name: 'k8s-pods' kubernetes_sd_configs: - role: pod namespaces: names: [monitoring] relabel_configs: - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_scrape] regex: "true" action: keep # 仅监控带注解的 Pod -
Service 模式
通过 Service 发现后端端点:- job_name: 'k8s-services' kubernetes_sd_configs: - role: service metrics_path: /metrics scheme: https
四、整合方案
场景:混合环境(部分服务在 K8s,部分在 Consul)
scrape_configs:
# Consul 发现
- job_name: 'consul-apps'
consul_sd_configs: [{server: 'consul:8500'}]
# K8s 发现
- job_name: 'k8s-apps'
kubernetes_sd_configs: [{role: pod}]
# 通用重标记规则
relabel_configs:
- source_labels: [__meta_consul_service]
target_label: service_name
- source_labels: [__meta_kubernetes_pod_name]
target_label: pod_name
五、最佳实践
-
标签统一
使用relabel_configs将不同来源的元数据转为统一标签,例如:- Consul 的
__meta_consul_service$\to$service - K8s 的
__meta_kubernetes_namespace$\to$namespace
- Consul 的
-
动态配置
通过模板生成配置:template: | global: scrape_interval: {{ .Values.interval }} -
安全加固
- Consul:启用 ACL 和 TLS
- K8s:使用 ServiceAccount RBAC 权限控制
故障排查工具:
访问http://prometheus:9090/service-discovery查看实时发现的端点列表
整合后架构可支撑 $10\text{k}$ 节点规模,服务变更 $5\text{s}$ 内生效,显著降低运维复杂度。
更多推荐
所有评论(0)