所有的配置都可以用静态配置来监控,只不过用servicemonitor简单,但是域名需要静态配置
如果使用 Prometheus 静态配置(Static Configuration),确实不需要 ServiceMonitor、Service 和 Endpoints,但这也意味着失去了 Kubernetes 自动发现(Service Discovery, SD) 的能力,需要手动维护监控目标。
一、静态配置 vs ServiceMonitor
1. 两种方式
在 Kubernetes 中,监控 Pod 或 Service 通常有两种方式:
- 静态配置(Static Configuration):直接在
prometheus.yml
里写static_configs
。 - 动态发现(ServiceMonitor + Prometheus Operator):使用
ServiceMonitor
让 Prometheus 自动发现Service
。
静态配置(手动指定目标,不用 ServiceMonitor)
如果不想用 ServiceMonitor
,可以在 prometheus.yml
里直接写 static_configs
,但需要手动维护 Service 地址。
使用 ServiceMonitor(自动发现 Service,不用手写 IP)
如果用的是 Prometheus Operator,用 ServiceMonitor
,这样 Prometheus 自动发现 目标,而不需要手动维护 prometheus.yml
。
2. 什么时候用静态配置?什么时候用 ServiceMonitor?
方式 | 适用场景 | 优缺点 |
---|---|---|
静态配置 | 目标固定(物理机、固定 VM、少量 Kubernetes Service) | ✅ 简单直接,不依赖 Operator ; ❌ Pod 变更时需要手动修改 |
ServiceMonitor | Kubernetes 内部监控(Pod、Deployment、StatefulSet) | ✅ 自动发现,适合动态环境; ❌ 需要 Prometheus Operator |
如果你的 Kubernetes 目标少,可以用静态配置,手动写 prometheus.yml
。
但如果你的应用 Pod 会动态扩缩容,推荐用 ServiceMonitor
,让 Prometheus 自动发现 Service,减少维护成本。
二、什么是 Prometheus 静态配置?
Prometheus 主要通过 scrape_configs
配置采集目标(targets),可以使用 静态配置(Static Configuration) 或 服务发现(Service Discovery, SD) 来定义采集目标。
- 静态配置:直接在配置文件
prometheus.yml
里写死 目标地址,适用于 少量、固定的目标。 - 服务发现(SD):自动发现目标,适用于 动态环境(如 Kubernetes、Docker Swarm、Consul 等)。
静态配置简单易用,但维护大量目标时不够灵活。
三、Prometheus 静态配置格式
静态配置使用 static_configs
指定需要采集的 目标地址(targets),例如:
scrape_configs:
- job_name: 'my-app'
static_configs:
- targets: ['192.168.1.100:9100', '192.168.1.101:9100']
labels:
instance: 'server1'
- targets: ['192.168.1.102:9100']
labels:
instance: 'server2'
说明:
job_name
:采集任务名称,Prometheus 通过这个名称管理数据。targets
:指定采集的 IP 或域名 + 端口(通常是 Exporter 暴露的端口)。labels
:可选,给采集目标添加 自定义标签,用于查询和分类。
四、常见静态配置示例
(1)监控 Node Exporter
scrape_configs:
- job_name