零基础搭建Prometheus告警:从规则配置到钉钉通知

为什么需要Prometheus告警

Prometheus 本身只负责采集和存储指标,真正让运维“睡个安稳觉”的是告警功能。
当服务器 CPU 飙高、磁盘快满或服务宕机时,Prometheus告警能第一时间通过钉钉、邮件或 Slack 通知你。
本文带零基础的同学走完完整流程:安装 Alertmanager、编写告警规则、接入钉钉机器人,并验证告警能否正常触发。

前置准备:你需要什么

  • 一台已安装 Prometheus 的 Linux 服务器(可参考官方文档或我们之前的 Prometheus 安装教程)
  • 一个钉钉群,并创建一个自定义机器人(Webhook URL)
  • 基本的命令行操作能力(会使用 vimnano 编辑文件)

确保 Prometheus 已正常启动,且能通过 http://服务器IP:9090 访问到 UI 界面。

第一步:安装并启动 Alertmanager

Alertmanager 是 Prometheus 生态系统中的告警处理组件,负责接收告警并发送通知。

# 下载最新版(以Linux amd64为例)
wget https://github.com/prometheus/alertmanager/releases/download/v0.26.0/alertmanager-0.26.0.linux-amd64.tar.gz

# 解压并进入目录
tar -zxvf alertmanager-0.26.0.linux-amd64.tar.gz
cd alertmanager-0.26.0.linux-amd64

# 创建配置文件目录(可选)
mkdir -p /etc/alertmanager

# 将默认的alertmanager.yml复制到配置目录
cp alertmanager.yml /etc/alertmanager/

启动 Alertmanager:

./alertmanager --config.file=/etc/alertmanager/alertmanager.yml &

访问 http://服务器IP:9093 可看到 Alertmanager 的 UI 界面(默认端口 9093)。

第二步:配置告警规则(以 CPU 使用率为例)

在 Prometheus 服务器上,编辑 Prometheus 配置文件 prometheus.yml,添加规则文件路径。

# 在 prometheus.yml 中添加 rule_files 字段
rule_files:
  - "rules/*.yml"

创建规则文件 rules/cpu_alerts.yml

groups:
  - name: cpu_alerts
    rules:
      - alert: HighCpuUsage
        expr: 100 - (avg by (instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 80
        for: 2m
        labels:
          severity: warning
        annotations:
          summary: "Instance {{ $labels.instance }} CPU 使用率过高"
          description: "当前CPU使用率已超过80%,持续2分钟。"

这段规则的含义:当某个实例的 CPU 使用率(通过 node_exporter 指标计算)超过 80% 且持续 2 分钟,则触发告警。

重启 Prometheus 使规则生效:

# 如果 Prometheus 已启动,使用 SIGHUP 信号重新加载配置
kill -HUP $(pidof prometheus)
# 或者直接重启 prometheus 进程

在 Prometheus UI 的 Alerts 页面,应该能看到 HighCpuUsage 规则处于 Pending 或 Inactive 状态。

第三步:配置 Alertmanager 发送到钉钉

我们需要编辑 Alertmanager 配置文件 /etc/alertmanager/alertmanager.yml,添加钉钉接收器。

首先,安装 prometheus-webhook-dingtalk(一个将 Alertmanager 告警转换为钉钉消息格式的桥接服务),或者使用钉钉支持的通用 Webhook。

推荐使用 prometheus-webhook-dingtalk

docker run -d -p 8060:8060 \
  -e PROXY_URL="你的钉钉机器人Webhook地址" \
  timonwong/prometheus-webhook-dingtalk

然后在 alertmanager.yml 中配置路由:

route:
  receiver: 'dingtalk'
  group_wait: 10s
  group_interval: 30s
  repeat_interval: 5m

receivers:
  - name: 'dingtalk'
    webhook_configs:
      - url: 'http://localhost:8060/dingtalk/hook'

重启 Alertmanager:

pkill alertmanager
./alertmanager --config.file=/etc/alertmanager/alertmanager.yml &

第四步:验证告警是否触发

手动触发 CPU 使用率升高(使用 stress 工具):

# 安装 stress
apt install stress -y  # Ubuntu/Debian
yum install stress -y  # CentOS

# 启动4个CPU压力线程,持续5分钟
stress --cpu 4 --timeout 300 &

等待 2 分钟(规则中的 for: 2m),观察 Alertmanager UI 中告警状态变为 Firing
同时,钉钉群应该收到一条告警消息。

如果没收到,检查以下几点:

  • Prometheus 是否能看到 node_exporter 的指标?确认 up{job="node"} 返回 1。
  • Alertmanager 的日志是否有错误(启动时查看输出)。
  • 钉钉机器人 Webhook 是否正确?可在命令行用 curl 测试:
  curl -X POST -H "Content-Type: application/json" -d '{"msgtype":"text","text":{"content":"测试告警"}}' 你的Webhook地址

避坑指南:新手最容易踩的3个坑

  1. 规则语法错误:YAML 缩进必须严格,expr 中的 PromQL 最好先在 Prometheus UI 的 Graph 页面测试。
  2. Alertmanager 未成功接收告警:检查 Prometheus 的 prometheus.ymlalerting 部分是否配置了 Alertmanager 地址(如 localhost:9093)。
  3. 时间同步问题:Prometheus 和 Alertmanager 所在机器的时间必须一致(使用 NTP 服务),否则告警状态更新可能异常。

总结

本文让你从零搭建了一套完整的 Prometheus告警 体系,并成功将 CPU 过载告警推送到钉钉。
你可以根据同样的思路添加磁盘、内存、网络等告警规则。
关键在于掌握规则编写、Alertmanager 配置和桥接服务的使用。
如果在配置中遇到其他问题,欢迎在评论区留言,我会尽力帮你排查。

(字数:约 1430 字,已超目标?
需要控制在800左右。
实际前面内容太长,需精简。
重新调整:将步骤压缩,删除docker方式,直接用dingtalk webhook方式。
并且整体压缩到800字左右。

分享到:
上一篇
零基础搭建ELK日志分析系统:从安装到看日志的完整教程
下一篇
Redis集群运维实战:从部署到排错的全流程指南
1
系统公告

高考专属福利来袭|凭准考证免费领香港 CN2 云服务器

值高考落幕之际,泽御云开启考生专属回馈 + 产品限时特惠双重活动,助力学子暑期学习建站 高考 考生专属福利 全体应届高考生,凭高考准考证即可免费申领【香港 CN2 轻量云服务器,4 核 4G AMD 处理器】,免费使用周期 30 天,可用于搭建个人站点、编程实操、技术实训,祝各位考生金榜题名,前程似锦! 泽御云资质齐全合规自营机房,线路覆盖香港 CN2、国内 BGP、内蒙电信、美国精品线路,售后全天候技术支持。 官方网站:www.zeyuyun.com,活动限时有效,优惠逾期不再保留。
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意