侧边栏壁纸
博主头像
LLJJJJ的博客

行动起来,活在当下

  • 累计撰写 15 篇文章
  • 累计创建 9 个标签
  • 累计收到 4 条评论

目 录CONTENT

文章目录

Alertmanager 告警设置

Administrator
2026-08-26 / 0 评论 / 0 点赞 / 10 阅读 / 0 字

前置配置

1.运行Prometheus

docker run -d \
  --name prometheus \
  --restart always \
  -p 9090:9090 \
  -v /opt/prometheus/config/prometheus.yml:/etc/prometheus/prometheus.yml \
  -v /opt/prometheus/config/alert.yml:/etc/prometheus/alert.yml \
  -v /opt/prometheus/data:/prometheus \
  prom/prometheus:v3.9.1 \
  --config.file=/etc/prometheus/prometheus.yml \
  --storage.tsdb.path=/prometheus

修改配置rule_files /opt/prometheus/config/prometheus.yml

yaml

global:
  scrape_interval: 15s
  evaluation_interval: 15s

rule_files:
  - "/etc/prometheus/alert.yml"

alerting:
  alertmanagers:
    - static_configs:
        - targets: ['192.168.83.143:9093']

scrape_configs:
  - job_name: 'prometheus'
    static_configs:
      - targets: ['localhost:9090']
  
  - job_name: 'node_exporter'
    static_configs:
      - targets: ['192.168.83.143:9100']

修改告警配置 /opt/prometheus/config/alert.yml

yaml

groups:
  - name: host_alerts
    rules:
      - alert: HostDown
        expr: up{job="node_exporter"} == 0
        for: 1m
        labels:
          severity: critical
        annotations:
          summary: "服务器 {{ $labels.instance }} 已宕机"
          description: "Node Exporter 无法采集,服务器可能已关机"

      - alert: MemoryHigh
        expr: (1 - node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes) * 100 > 80
        for: 2m      
        labels:
          severity: warning
        annotations:
          summary: "内存使用率超过 80%"
          description: "当前内存使用率: {{ $value }}%"

      - alert: CpuHigh
        expr: 100 - (avg(rate(node_cpu_seconds_total{mode="idle"}[1m])) * 100) > 80     平均1分钟负载超过百分之80
        for: 1m      持续1分钟就会发送
        labels:
          severity: warning
        annotations:
          summary: "CPU 使用率超过 80%"
          description: "当前 CPU 使用率: {{ $value }}%"

      - alert: DiskHigh
        expr: (1 - node_filesystem_avail_bytes / node_filesystem_size_bytes) * 100 > 80 and node_filesystem_readonly == 0

2.重新加载配置,验证告警规则是否生效

bash

docker kill -s HUP prometheus

等待 5 秒。


浏览器访问:

text

http://192.168.83.143:9090/alerts

3.测试告警是否能触发

bash

# 跑一个死循环占满CPU
dd if=/dev/zero of=/dev/null &

等待 2-3 分钟,刷新 http://192.168.83.143:9090/alertsCPU使用率过高 应该会变成 黄色(Pending)

测试完停止:

bash

killall dd

设置Alertmanager告警通知

第 1 步:确认 Alertmanager 容器在运行

bash

docker ps | grep alertmanager

如果没有输出,执行:

bash

docker run -d \
  --name alertmanager \
  --restart always \
  -p 9093:9093 \
  prom/alertmanager:latest

第 2 步:创建 Alertmanager 配置文件

bash

# 创建配置目录(-p:如果父目录不存在,自动创建)
mkdir -p /opt/alertmanager/config

# 创建配置文件
cat > /opt/alertmanager/config/alertmanager.yml << 'EOF'
route:                               # 路由配置开始
  group_by: ['alertname']            # 按告警名称分组,相同名称的告警合并成一条发送
  group_wait: 10s                    # 第一次告警产生后,等待10秒再发送,收集更多同组告警
  group_interval: 10s                # 同组告警如果10秒内重复发生,合并发送,不重复通知
  repeat_interval: 1h                # 告警持续未恢复,每1小时重发一次提醒
  receiver: 'webhook'                # 使用名为 webhook 的接收器

receivers:                           # 接收器列表
  - name: 'webhook'                  # 接收器名称
    webhook_configs:                 # 使用 webhook 方式发送
      - url: 'http://localhost:8080/'   # webhook 目标地址(先写一个假地址,测试用)
        send_resolved: true          # 告警恢复时也发送通知
EOF

第 3 步:重启 Alertmanager 并挂载配置

bash

docker stop alertmanager
docker rm alertmanager

docker run -d \
  --name alertmanager \
  --restart always \
  -p 9093:9093 \
  -v /opt/alertmanager/config/alertmanager.yml:/etc/alertmanager/alertmanager.yml \
  prom/alertmanager:latest

第 4 步:确认 Prometheus 已经把告警发给 Alertmanager

bash

cat /opt/prometheus/config/prometheus.yml

确保有这几行:

yaml

alerting:
  alertmanagers:
    - static_configs:
        - targets: ['192.168.83.143:9093']

如果没有,加上去,然后:

bash

docker kill -s HUP prometheus

第 5 步:测试告警是否到达 Alertmanager

先触发一个告警(比如跑 dd 让 CPU 高),然后浏览器访问:

text

http://192.168.83.143:9093

能看到告警记录,说明 Prometheus → Alertmanager 链路通了。

可以看到,当之前设置的cpu1分钟平均负载超过80%,就会变黄,状态为PENDING

之前设置的for :1 m持续超过之后,就会变红,变为FIRING,就会发送告警给Alertmanager

text

时间线(分钟)
0         1         2         3
│         │         │         │
├─────────┼─────────┼─────────┤
│ CPU跑满 │ [1m]窗口 │ for:1m  │ 告警触发
│         │ 平均值   │ 持续观察 │
│         │ 超过80%  │ 超过80% │
│         │ 变黄!   │ 变红!   │

配置钉钉通知

1.启动钉钉转换器

mkdir -p /opt/dingtalk/config
cat > /opt/dingtalk/config/config.yml << 'EOF'
targets:
  webhook:
    url: https://oapi.dingtalk.com/robot/send?access_token=你的token
    secret: 你的加签密钥
EOF

bash

docker run -d \
  --name dingtalk \
  --restart always \
  -p 8060:8060 \
  -v /opt/dingtalk/config/config.yml:/etc/prometheus-webhook-dingtalk/config.yml \
  timonwong/prometheus-webhook-dingtalk:v2.1.0

如何获取钉钉机器人 Webhook

  1. 打开钉钉群 → 群设置 → 智能群助手 → 添加机器人 → 自定义

  2. 复制 Webhook 地址(示例:https://oapi.dingtalk.com/robot/send?access_token=xxxxxx

2 .修改 Alertmanager 配置

bash

cat > /opt/alertmanager/config/alertmanager.yml << 'EOF'
route:                               # 路由配置开始
  group_by: ['alertname']            # 按告警名称分组
  group_wait: 30s                    # 首次告警等待30秒,收集更多同类告警
  group_interval: 5m                 # 同组告警5分钟内重复发送时合并
  repeat_interval: 4h                # 告警未恢复,每4小时重发一次
  receiver: 'dingtalk'               # 默认接收器改为 dingtalk

receivers:                           # 接收器列表
  - name: 'dingtalk'                 # 接收器名称
    webhook_configs:                 # webhook 配置
      - url: 'http://192.168.83.143:8060/dingtalk/webhook/send'   # 发给钉钉转换器
        send_resolved: true          # 告警恢复时也发送通知
EOF

3 重启 Alertmanager

bash

docker restart alertmanager          # 重启容器,加载新配置

最终验证

bash

# 触发告警
dd if=/dev/zero of=/dev/null &

# 等 2-3 分钟后查看:
# 1. Prometheus Alerts 页面是否有红色
# 2. Alertmanager 9093 页面是否有告警
# 3. 钉钉群是否收到消息

完整组件关系图

text

Prometheus(发现告警)
    ↓                    Prometheus 把告警推送给 Alertmanager
Alertmanager(9093)      ← 去 9093 能看到告警记录
    ↓                    Alertmanager 把告警发给钉钉转换器
钉钉转换器(8060)        ← 把告警格式转成钉钉能识别的格式
    ↓                    转换器调用钉钉机器人
钉钉机器人
    ↓                    钉钉机器人发送消息到钉钉群
你的钉钉群

0

评论区