一、Alertmanager 概述

Prometheus 自身提供了强大的监控与指标收集能力,但告警需要交由 Alertmanager 处理。
Alertmanager 主要功能:

  • 接收来自 Prometheus 的告警;
  • 去重、分组、抑制告警;
  • 多种通知方式(邮件、钉钉、企业微信、Slack…);
  • 支持自定义模板,让告警内容更清晰直观。

二、Alertmanager 部署

1、拉取镜像

docker pull prom/alertmanager:v0.27.0
docker run -d \
  --network host \
  --restart always \
  --name alertmanager \
  prom/alertmanager:v0.27.0

2、配置文件 alertmanager.yml

在这里插入图片描述

global:
  resolve_timeout: 5m
  smtp_from: '1909529369@qq.com'
  smtp_smarthost: 'smtp.qq.com:465'
  smtp_auth_username: '1909529369@qq.com'
  smtp_auth_password: 'ysillwzfsynr'   # QQ 邮箱授权码
  smtp_require_tls: false
  smtp_hello: 'qq.com'

route:
  group_by: ['alertname']
  group_wait: 5s
  group_interval: 5s
  repeat_interval: 5m
  receiver: 'email'

receivers:
- name: 'email'
  email_configs:
  - to: '1909529369@qq.com'
    send_resolved: true

inhibit_rules:
- source_match:
    severity: 'critical'
  target_match:
    severity: 'warning'
  equal: ['alertname', 'dev', 'instance']

📌 核心参数说明:

相关参数说明:
global:
  resolve_timeout:
  	解析超时时间。
  smtp_from:
  	发件人邮箱地址。
  smtp_smarthost:
  	邮箱的服务器的地址及端口,例如:  'smtp.qq.com:465'。
  smtp_auth_username:
  	发送人的邮箱用户名。
  smtp_auth_password:
  	发送人的邮箱密码。
  smtp_require_tls:
  	是否基于tls加密。
  smtp_hello:
  	邮箱服务器,例如: 'qq.com'。
route:
  group_by: ['alertname']
  group_wait: 5s
  group_interval: 5s
  repeat_interval:
  	重复报警的间隔时间,如果没有解即报警问题,则会间隔指定时间一直触发报警,比如:5m。
  receiver: 
  	采用什么方式接收报警,例如'email'。
receivers:
- name: 
	定义接收者的名称,注意这里的name要和上面的route对应,例如: 'email'
  email_configs:
  - to: 
  	邮箱发给谁。
    send_resolved: true
inhibit_rules:
  - source_match:
      severity: 
      	匹配报警级别,例如: 'critical'。
    target_match:
      severity: 'warning'
    equal: ['alertname', 'dev', 'instance']

3、启动 Alertmanager

docker restart alertmanager

访问 WebUI:
👉 http://192.168.121.140:9093/#/alerts
在这里插入图片描述


三、Prometheus 对接 Alertmanager

1、修改 prometheus.yml

alerting:
  alertmanagers:
    - static_configs:
        - targets:
            - 192.168.121.140:9093   # Alertmanager 节点

rule_files:
  - "/etc/prometheus/rules/hadoop102.yml"

2、新建告警规则

/etc/prometheus/rules/hadoop102.yml 创建到prometheus容器里

groups:
- name: donglin-hadoop102-container-runtime
  rules:
  - alert: donglin-container-103节点挂掉啦
    expr: up{instance="192.168.121.141:9100"} == 0
    for: 15s
    labels:
      school: donglin
      class: hadoop102
    annotations:
      summary: "{{ $labels.instance }} 已停止运行超过 15s!"

在这里插入图片描述


四、自定义告警模板

1、创建模板目录

mkdir tmpl

在这里插入图片描述

2、编写模板 email.tmpl

{{ define "donglin.html" }}
<h1 style='color: red;'>欢迎您: https://www.baidu.com/</h1>
<table border="1">
  <tr>
    <th>报警项</th><th>实例</th><th>报警阀值</th><th>开始时间</th>
  </tr>
  {{ range $i, $alert := .Alerts }}
  <tr>
    <td>{{ index $alert.Labels "alertname" }}</td>
    <td>{{ index $alert.Labels "instance" }}</td>
    <td>{{ index $alert.Annotations "value" }}</td>
    <td>{{ $alert.StartsAt }}</td>
  </tr>
  {{ end }}
</table>
<img src="https://www.baidu.com">
{{ end }}

3、修改 alertmanager.yml 引用模板

templates:
  - './tmpl/*.tmpl'

receivers:
- name: 'donglin_email'
  email_configs:
  - to: "1909529369@qq.com"
    send_resolved: true
    headers: { Subject: "[WARN] 报警邮件" }
    html: '{{ template "donglin.html" . }}'

五、规则中添加阈值变量

修改 hadoop102.yml,添加 value 字段:

annotations:
  summary: "{{ $labels.instance }} 已停止运行超过 15s!"
  value: "{{ $value }}"

重新加载配置后,邮件中即可显示阈值。


六、效果验证

  1. 在 Prometheus WebUI 查看告警触发情况
    👉 http://192.168.121.140:9090/alerts
    在这里插入图片描述

  2. 在 Alertmanager WebUI 查看告警状态
    👉 http://192.168.121.140:9093/#/alerts
    在这里插入图片描述

  3. 检查邮箱是否收到带 HTML 模板的告警邮件
    在这里插入图片描述


七、总结

  • Alertmanager 是 Prometheus 告警体系的核心;
  • 通过 配置邮箱 + 自定义模板 可以让告警信息更直观;
  • 实际生产中,可以扩展到企业微信、钉钉、飞书等渠道;
  • 模板可结合公司 logo、业务关键信息,实现 品牌化告警通知

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐