监控告警体系架构:指标采集、时序存储、告警分发三层
一套可用的监控告警体系由三个独立层组成:exporter负责采集指标并暴露/metrics端点,Prometheus Server按配置周期抓取并存储为时间序列,Alertmanager根据告警规则做聚合、去重、路由并分发到钉钉/飞书/邮件等渠道。三层各自独立,便于横向扩展与故障隔离。
告警链路的关键在于规则判定与分发解耦:Prometheus只负责计算表达式是否满足阈值,Alertmanager负责抑制、静默、分组与通知。多条并发告警不会轰炸接收人,同一故障引发的级联告警会被合并。
指标采集配置:node_exporter与prometheus.yml
每台目标主机部署node_exporter(默认监听9100),采集CPU、内存、磁盘、网络、文件系统指标。Prometheus主配置中的抓取任务写法:
global:
scrape_interval: 15s
evaluation_interval: 15s
alerting:
alertmanagers:
- static_configs:
- targets: ["192.168.1.30:9093"]
rule_files:
- /etc/prometheus/rules/*.yml
scrape_configs:
- job_name: "node"
static_configs:
- targets: ["192.168.1.11:9100", "192.168.1.12:9100"]
labels:
env: prod
- job_name: "nginx"
metrics_path: /metrics
static_configs:
- targets: ["192.168.1.11:9113"]
scrape_interval控制数据采集频率,evaluation_interval控制告警规则评估频率。规模超过百台主机时改用file_sd_configs或consul_sd_configs做服务发现,避免静态targets维护成本过高。
告警规则编写:PromQL表达式与阈值设计
告警规则定义在rules.yml,一条典型规则包含表达式、持续时间与标签:
groups:
- name: host_alerts
rules:
- alert: HostHighCPU
expr: 100 - (avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 85
for: 10m
labels:
severity: warning
annotations:
summary: "{{ $labels.instance }} CPU使用率超85%"
description: "持续10分钟,当前值{{ $value | humanizePercentage }}"
- alert: HostDown
expr: up == 0
for: 1m
labels:
severity: critical
annotations:
summary: "主机 {{ $labels.instance }} 失联"
for字段是告警的持续时间条件,只有表达式持续成立超过该时长才触发,过滤瞬时抖动;rate()计算5分钟内每秒增量,避免以累计值直接判断。severity标签被Alertmanager识别用于分组与路由。
Alertmanager告警路由与通知渠道配置
Alertmanager按路由树分发告警,根据标签匹配将不同级别的告警送到不同接收器:
route:
group_by: ["alertname", "instance"]
group_wait: 10s
group_interval: 5m
repeat_interval: 4h
routes:
- matchers: [severity="critical"]
receiver: webhook-critical
- matchers: [severity="warning"]
receiver: webhook-warning
receivers:
- name: webhook-critical
webhook_configs:
- url: http://monitor-tools:8080/alert/webhook
send_resolved: true
- name: webhook-warning
webhook_configs:
- url: http://monitor-tools:8080/alert/warn
send_resolved: true
group_by按告警名与实例分组,同一组的告警在group_wait窗口内合并成一条通知;repeat_interval避免故障期间反复轰炸,恢复消息由send_resolved控制。实战中还要配合抑制规则:主机失联(critical)触发时,自动抑制该主机上磁盘、CPU等二级告警,避免故障期间产生几十条无效通知。
告警静默与值班对接
变更窗口期间需要临时抑制告警,可在Alertmanager Web UI按匹配标签创建静默,到期自动失效。长期运行的监控体系应把告警数据回流到工单系统:webhook接收器配合接收脚本即可对接钉钉机器人或飞书自定义机器人,机器人webhook地址通过环境变量注入,不写进配置文件明文。告警体系上线后可用amtool check-config做配置校验,并在演练阶段验证告警端到端送达时延。
原创文章,作者:小编,如若转载,请注明出处:https://www.yunthe.com/prometheus-jian-kong-gao-jing-ti-xi-shi-zhan-zhi-biao-cai/