首页 资源列表 文章列表

自动化运维部署学习日记--安装 Alertmanager告警体系

整套告警体系的核心是 Prometheus 发现异常,Alertmanager 统一处理和发送通知。我把从零开始搭建的完整流程拆解成5步,跟着操作就行:


第一步:安装 Alertmanager

Alertmanager 需要作为独立服务安装,并让它与 Prometheus 通信。


下载与安装:


bash

# 创建专用用户

sudo useradd -M -r -s /bin/false alertmanager


# 下载并解压(去官网找最新版本替换链接)

wget https://github.com/prometheus/alertmanager/releases/download/v0.28.0/alertmanager-0.28.0.linux-amd64.tar.gz

tar xvfz alertmanager-0.28.0.linux-amd64.tar.gz

sudo cp alertmanager-0.28.0.linux-amd64/alertmanager /usr/local/bin/

sudo cp alertmanager-0.28.0.linux-amd64/alertmanager.yml /etc/alertmanager/

创建 Systemd 服务:


bash

sudo vim /etc/systemd/system/alertmanager.service

写入以下内容:


ini

[Unit]

Description=Prometheus Alertmanager

Wants=network-online.target

After=network-online.target


[Service]

User=alertmanager

Group=alertmanager

Type=simple

ExecStart=/usr/local/bin/alertmanager --config.file=/etc/alertmanager/alertmanager.yml --storage.path=/var/lib/alertmanager/


[Install]

WantedBy=multi-user.target


启动并验证:


bash

sudo systemctl daemon-reload

sudo systemctl enable alertmanager

sudo systemctl start alertmanager


# 访问 http://你的IP:9093,能看到 Alertmanager 界面就成功


第二步:配置 Prometheus,让它找到 Alertmanager

修改 Prometheus 的配置文件 prometheus.yml,在 alerting 部分添加 Alertmanager 的地址。


yaml

alerting:

 alertmanagers:

   - static_configs:

       - targets: ["localhost:9093"]  # 如果不在同一台机器,换IP

重启 Prometheus 使配置生效,并通过 systemctl restart prometheus 重启。


第三步:在 Prometheus 中定义告警规则

创建告警规则文件,例如 node_alerts.yml,定义在什么情况下触发告警。


yaml

groups:

- name: node_alerts

 rules:

 - alert: HighCPUUsage

   expr: 100 - (avg by (instance) (irate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 80

   for: 5m  # 持续5分钟才触发,防止误报

   labels:

     severity: critical

   annotations:

     summary: "High CPU usage detected on {{ $labels.instance }}"

     description: "CPU usage is above 80% for 5 minutes."

在 Prometheus 主配置文件 prometheus.yml 中引用这个规则文件:


yaml

rule_files:

 - "node_alerts.yml"

再次重启 Prometheus。在它的 Web 界面“Alerts”页面,能看到刚配置的规则就对了。


第四步:配置 Alertmanager 发送通知

修改 Alertmanager 的配置文件 /etc/alertmanager/alertmanager.yml,配置通知渠道。


方式一:邮件告警

配置 SMTP 服务器信息,这是最通用的方式。


yaml

route:

 group_by: ['alertname', 'instance']

 group_wait: 30s

 group_interval: 5m

 repeat_interval: 4h

 receiver: 'multi-receiver'


receivers:

 - name: 'multi-receiver'

   email_configs:

     - to: '接受邮件@qq.com'

       from: '来自邮件@qq.com'

       smarthost: 'smtp.qq.com:465'

       auth_username: '授权邮箱@qq.com'

       auth_password: '邮件授权码'

       send_resolved: true

       require_tls: false

   webhook_configs:

     - url: 'http://127.0.0.1:5001/'

       send_resolved: true


inhibit_rules:

 - source_matchers: ['severity="critical"']

   target_matchers: ['severity="warning"']

   equal: ['instance']

方式二:钉钉告警(适合国内团队)

Alertmanager 不直接支持钉钉,需要借助 prometheus-webhook-dingtalk 这个转发工具。


获取钉钉机器人的 Webhook URL:


在钉钉群里添加一个“自定义机器人”,安全设置建议选择“加签”。


完成后,复制机器人的 Webhook 地址。


部署转发工具:


bash

# 创建配置文件

cat > dingtalk.yaml <<EOF

targets:

 webhook1:

   url: https://oapi.dingtalk.com/robot/send?access_token=你的_token

EOF


# 启动容器

docker run -d --name dingtalk-webhook -p 8060:8060 -v $(pwd)/dingtalk.yaml:/etc/prometheus-webhook-dingtalk/config.yml --restart always timonwong/prometheus-webhook-dingtalk:latest

配置 Alertmanager 调用这个工具:


yaml

route:

 receiver: 'dingtalk'


receivers:

- name: 'dingtalk'

 webhook_configs:

 - url: 'http://你的IP:8060/dingtalk/webhook1/send'

   send_resolved: true

第五步:启动并验证整个链路

重启 Alertmanager 让配置生效:


bash

sudo systemctl restart alertmanager

验证连通性:在 Prometheus 界面 “Status” -> “Targets” 里,检查 Alertmanager 是否正常显示。执行类似 prometheus_notifications_alertmanagers_discovered 的查询,返回 1 就表示连通了。


触发一次测试:可以手动把告警规则的阈值调低,或者等待 CPU 使用率超限。当告警状态变为 Firing 时,就应该能收到钉钉或邮件通知了。


几个关键注意事项

告警通道需要监控:告警链路本身也可能出问题,可以额外配置一条规则,监控 Alertmanager 自身是否正常。


钉钉配置的地址:prometheus-webhook-dingtalk 服务必须能被 Alertmanager 访问。如果它们都在同一台机器,url 里可以用 http://127.0.0.1:8060/...,但要注意容器网络隔离问题。


邮件配置:使用企业或个人邮箱时,密码那一栏通常要填写 SMTP 授权码,而不是邮箱的登录密码


第三步:检查存储目录权限

Alertmanager 需要读写 /var/lib/alertmanager/ 目录:


bash

# 创建目录并设置权限

sudo mkdir -p /var/lib/alertmanager

sudo chown root:root /var/lib/alertmanager

sudo chmod 755 /var/lib/alertmanager

第四步:手动前台启动看报错

这是最直接的办法,可以实时看到错误输出:


bash

sudo -u root /usr/local/bin/alertmanager \

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

 --storage.path=/var/lib/alertmanager

前台启动时,如果配置文件有问题,会直接在终端打印详细的错误信息(比如 yaml: line X: did not find expected key)。看到具体错误后,按 Ctrl+C 退出,修复后再试。


第五步:修复后重新加载并启动

bash

# 重新加载 systemd 配置

sudo systemctl daemon-reload


# 重置失败状态

sudo systemctl reset-failed alertmanager


# 启动服务

sudo systemctl start alertmanager


# 查看状态

sudo systemctl status alertmanager

第六步:验证是否成功

bash

# 本地测试

curl http://localhost:9093/-/healthy

如果返回 Healthy,说明 Alertmanager 已正常运行。然后浏览器访问 http://你的IP:9093,应该能看到 Alertmanager 的 Web UI。


如果还是失败

把以下命令的输出发给我,我帮你精准定位:


bash

# 1. 配置文件内容

cat /etc/alertmanager/alertmanager.yml


# 2. 完整错误日志

sudo journalctl -u alertmanager -n 50 --no-pager


# 3. 手动启动的错误输出

sudo -u root /usr/local/bin/alertmanager --config.file=/etc/alertmanager/alertmanager.yml --storage.path=/var/lib/alertmanager 2>&1 | head -20