Prometheus 架构与采集配置
Prometheus 是一套开源的系统监控和报警框架。它采用 Pull(拉取)模式从各种 Target(被监控端)拉取时间序列数据,并通过 PromQL 实现强大的数据查询。
1. 核心采集配置文件(prometheus.yml)
以下是一个生产级别的 prometheus.yml 监控配置模版,涵盖了静态节点采集、K8s 动态发现以及 Alertmanager 的对接:
global:
scrape_interval: 15s # 默认抓取周期
evaluation_interval: 15s # 规则评估周期
external_labels:
monitor: 'codelab-monitor'
# 报警管理器 Alertmanager 配置
alerting:
alertmanagers:
- static_configs:
- targets:
- 'alertmanager:9093'
# 告警规则文件加载
rule_files:
- "rules/*.yml"
# 数据抓取配置
scrape_configs:
# 监控 Prometheus 自身
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
# 监控物理机/虚拟机服务器 (Node Exporter)
- job_name: 'node-exporter'
static_configs:
- targets: ['192.168.1.100:9100', '192.168.1.101:9100']
relabel_configs:
- source_labels: [__address__]
regex: '(.*):9100'
target_label: 'instance'
replacement: '$1'
# 自动发现 Kubernetes Pods(通常在 K8s 内部运行)
- job_name: 'kubernetes-pods'
kubernetes_sd_configs:
- role: pod
relabel_configs:
- source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_scrape]
action: keep
regex: true
2. PromQL 常用查询模版
CPU 使用率
# 计算节点最近 5 分钟的 CPU 平均使用率
100 - (avg by (instance) (irate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)
内存使用率
# 计算内存使用率(排除 buffer/cache 的影响)
(node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes) / node_memory_MemTotal_bytes * 100
磁盘 I/O 读写延迟
# 磁盘每秒读写次数 (IOPS)
irate(node_disk_reads_completed_total[5m]) + irate(node_disk_writes_completed_total[5m])