Alertmanager 安装与配置指南
Alertmanager 支持二进制包、容器及源码三种安装方式,官方推荐使用 Docker 容器运行。本文将基于 Docker 方式部署 Alertmanager,并完成与 Prometheus 的集成。
一、部署 Alertmanager(Docker 方式)
1. 创建配置目录
mkdir -p /etc/prometheus/alertmanager
2. 编写 Alertmanager 配置文件
vim /etc/prometheus/alertmanager/config.yml
配置内容如下:
global:
# resolve_timeout: 5m
route:group_by: ['project','environment','alertname','ip','severity']receiver: alertmonitor #对应下面receivers中的namecontinue: falsegroup_wait: 30sgroup_interval: 3mrepeat_interval: 24hroutes: - receiver: 'alertmonitor'match:severity: 'critical'repeat_interval: 15m- receiver: 'alertmonitor'match:severity: 'warning'repeat_interval: 30m- receiver: 'alertmonitor'match:severity: 'info'repeat_interval: 6h # 每天最多通知一次
receivers:
- name: abcdockerwebhook_configs:- send_resolved: true#告警推送通知的api接口,如钉钉、飞书等url: 'http://172.xx.177.xx:18080/prometheusalert?type=fs&tpl=prometheus-fs&fsurl=https://open.feishu.cn/open-apis/bot/v2/hook/becxxxxxxxxx'
inhibit_rules:- source_match:severity: 'critical'target_match:severity: 'warning'equal: ['alertname', 'env', 'instance']# 新增:确保严重级别告警抑制天级别告警- source_match:severity: 'critical'target_match:severity: 'info'equal: ['alertname', 'env', 'instance']- source_match:severity: 'warning'target_match:severity: 'info'equal: ['alertname', 'env', 'instance']
templates:- /etc/prometheus/alertmanager/template/*.tmpl #告警模板路径
参数说明:
- resolve_timeout:若在该时间内未收到新的告警,则标记为已恢复(resolved)。
- follow_redirects:是否遵循 HTTP 3xx 重定向。
- group_wait:首次触发告警后,等待此时间以合并同组内的新告警。
- group_interval:相同告警组再次发送通知的最小间隔。
- repeat_interval:重复发送同一告警的最小间隔。
- continue: false:匹配到第一个子路由后即停止后续匹配。
- templates:指定自定义告警模板路径。
二、编写告警通知模板(可选)
为提升告警信息的可读性,可自定义通知模板。
mkdir -p /etc/prometheus/alertmanager/template
vim /etc/prometheus/alertmanager/template/WeChat.tmpl
模板内容如下(适用于飞书/Webhook 等通用文本通知):
{{ define "wechat.default.message" }}
{{- if gt (len .Alerts.Firing) 0 -}}
{{- range $index, $alert := .Alerts -}}
{{- if eq $index 0 -}}
**********【告警通知】**********
告警类型: {{ $alert.Labels.alertname }}
告警级别: {{ $alert.Labels.severity }}
{{- end }}
=====================
告警主题: {{ $alert.Annotations.summary }}
告警详情: {{ $alert.Annotations.description }}
故障时间: {{ $alert.StartsAt.Local }}
{{ if gt (len $alert.Labels.instance) 0 -}}故障实例: {{ $alert.Labels.instance }}{{- end -}}
{{- end }}
{{- end }}{{- if gt (len .Alerts.Resolved) 0 -}}
{{- range $index, $alert := .Alerts -}}
{{- if eq $index 0 -}}
**********【恢复通知】**********
告警类型: {{ $alert.Labels.alertname }}
告警级别: {{ $alert.Labels.severity }}
{{- end }}
=====================
告警主题: {{ $alert.Annotations.summary }}
告警详情: {{ $alert.Annotations.description }}
故障时间: {{ $alert.StartsAt.Local }}
恢复时间: {{ $alert.EndsAt.Local }}
{{ if gt (len $alert.Labels.instance) 0 -}}故障实例: {{ $alert.Labels.instance }}{{- end -}}
{{- end }}
{{- end }}
{{- end }}
⚠️ 注意:虽然本例命名为 WeChat.tmpl,但实际通过 Webhook 发送至飞书机器人,模板内容为纯文本格式,适用于大多数通知通道。
三、启动 Alertmanager 容器
docker run -d \-p 9103:9093 \--name alertmanager \-v /etc/prometheus/alertmanager:/etc/alertmanager \-v /usr/share/zoneinfo/Asia/Shanghai:/etc/localtime \docker.io/prom/alertmanager:latest \--config.file=/etc/alertmanager/config.yml
启动成功后,可通过 http://<服务器IP>:9103 访问 Alertmanager Web UI

四、配置 Prometheus 告警规则
1. 创建规则目录
建议将告警规则与 Prometheus 配置放在同一目录下:
mkdir -p /etc/prometheus/rules
2. 添加 Node Exporter 告警规则
vim /etc/prometheus/rules/node_exporter.yaml
示例规则如下:
groups:
- name: 主机状态-监控告警rules:- alert: 主机宕机expr: up == 0for: 1mlabels:severity: criticalannotations:summary: "{{ $labels.instance }}: 服务器宕机"description: "{{ $labels.instance }}: 目标不可达超过1分钟"- alert: CPU使用率过高expr: 100 - (avg by(instance) (irate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 60for: 1mlabels:severity: warningannotations:summary: "{{ $labels.instance }} CPU使用率过高"description: "{{ $labels.instance }} CPU使用率超过60%(当前值:{{ $value | printf "%.2f" }}%)"- alert: 内存使用率过高expr: (1 - (node_memory_MemFree_bytes + node_memory_Buffers_bytes + node_memory_Cached_bytes) / node_memory_MemTotal_bytes) * 100 > 80for: 1mlabels:severity: warningannotations:summary: "{{ $labels.instance }} 内存使用率过高"description: "{{ $labels.instance }} 内存使用率超过80%(当前值:{{ $value | printf "%.2f" }}%)"- alert: 磁盘IO负载过高expr: avg by(instance) (irate(node_disk_io_time_seconds_total[1m])) * 100 < 60for: 1mlabels:severity: warningannotations:summary: "{{ $labels.instance }} 磁盘IO响应延迟"description: "{{ $labels.instance }} 磁盘IO利用率异常(当前值:{{ $value | printf "%.2f" }}%)"- alert: 网络流入带宽过高expr: sum by(instance) (rate(node_network_receive_bytes_total{device!~'tap.*|veth.*|br.*|docker.*|virbr.*|lo.*'}[5m])) / 1024 / 1024 > 100for: 1mlabels:severity: warningannotations:summary: "{{ $labels.instance }} 网络流入带宽过高"description: "{{ $labels.instance }} 入向带宽持续高于100MB/s(当前值:{{ $value | printf "%.2f" }} MB/s)"- alert: 网络流出带宽过高expr: sum by(instance) (rate(node_network_transmit_bytes_total{device!~'tap.*|veth.*|br.*|docker.*|virbr.*|lo.*'}[5m])) / 1024 / 1024 > 100for: 1mlabels:severity: warningannotations:summary: "{{ $labels.instance }} 网络流出带宽过高"description: "{{ $labels.instance }} 出向带宽持续高于100MB/s(当前值:{{ $value | printf "%.2f" }} MB/s)"- alert: TCP连接数过高expr: node_netstat_Tcp_CurrEstab > 1000for: 1mlabels:severity: warningannotations:summary: "{{ $labels.instance }} TCP连接数过高"description: "{{ $labels.instance }} 当前ESTABLISHED连接数超过1000(当前值:{{ $value }})"- alert: 磁盘空间不足expr: 100 - (node_filesystem_free_bytes{fstype=~"ext4|xfs"} / node_filesystem_size_bytes{fstype=~"ext4|xfs"} * 100) > 80for: 1mlabels:severity: criticalannotations:summary: "{{ $labels.instance }} {{ $labels.mountpoint }} 磁盘空间不足"description: "{{ $labels.instance }} {{ $labels.mountpoint }} 使用率超过80%(当前值:{{ $value | printf "%.2f" }}%)"
✅ 提示:后续新增告警规则,只需在 /etc/prometheus/rules/ 目录下添加新的 .yaml 文件即可,Prometheus 会自动加载。
五、集成 Alertmanager 到 Prometheus
1. 重新启动 Prometheus 容器(挂载配置目录)
docker run -d \-p 9090:9090 \--restart=always \--name prometheus \-v /data/prometheus:/data/prometheus \-v /etc/prometheus:/etc/prometheus \registry.cn-beijing.aliyuncs.com/xx/prometheus:v2.18.1 \--config.file=/etc/prometheus/prometheus.yml \--storage.tsdb.path=/data/prometheus \--web.enable-admin-api \--web.enable-lifecycle \--storage.tsdb.retention.time=30d
2. 修改 Prometheus 配置文件
编辑 /etc/prometheus/prometheus.yml,添加以下内容:
# 加载告警规则
rule_files:- '/etc/prometheus/rules/*.yaml'# 配置 Alertmanager 地址
alerting:alertmanagers:- static_configs:- targets: ['10.0.24.13:9103'] # 替换为实际 Alertmanager 地址
保存后,可通过 Prometheus 的 /-/reload 接口热加载配置(需启用 --web.enable-lifecycle):
curl -X POST http://localhost:9090/-/reload
六、验证与调试
- 访问 Prometheus Web UI(
http://<IP>:9090/alerts),确认告警规则已加载。 - 访问 Alertmanager Web UI(
http://<IP>:9103),查看告警是否正确接收与分发。 - 模拟故障(如停用 Node Exporter),观察是否触发告警并收到飞书通知。
结语
通过以上步骤,您已成功部署并集成了 Alertmanager 与 Prometheus,实现了主机资源监控与自动化告警能力。后续可根据业务需求扩展通知渠道(如邮件、钉钉、企业微信)、优化告警规则,构建更完善的可观测性体系。
