Alertmanager #
一、Alertmanager概述 #
1.1 什么是Alertmanager #
text
Alertmanager定义:
┌─────────────────────────────────────────────┐
│ Alertmanager │
├─────────────────────────────────────────────┤
│ • 处理Prometheus发送的告警 │
│ • 去重、分组、路由 │
│ • 静默和抑制 │
│ • 发送到各种通知渠道 │
└─────────────────────────────────────────────┘
核心功能:
┌─────────────────────────────────────────────┐
│ 1. 去重(Deduplication) │
├─────────────────────────────────────────────┤
│ • 相同告警只发送一次 │
│ • 避免告警风暴 │
└─────────────────────────────────────────────┘
┌─────────────────────────────────────────────┐
│ 2. 分组(Grouping) │
├─────────────────────────────────────────────┤
│ • 相似告警合并 │
│ • 减少通知数量 │
└─────────────────────────────────────────────┘
┌─────────────────────────────────────────────┐
│ 3. 路由(Routing) │
├─────────────────────────────────────────────┤
│ • 根据标签分发 │
│ • 发送到不同接收者 │
└─────────────────────────────────────────────┘
┌─────────────────────────────────────────────┐
│ 4. 静默(Silencing) │
├─────────────────────────────────────────────┤
│ • 临时屏蔽告警 │
│ • 维护期间使用 │
└─────────────────────────────────────────────┘
┌─────────────────────────────────────────────┐
│ 5. 抑制(Inhibition) │
├─────────────────────────────────────────────┤
│ • 高优先级抑制低优先级 │
│ • 避免重复告警 │
└─────────────────────────────────────────────┘
二、安装部署 #
2.1 二进制安装 #
bash
# 下载
cd /tmp
wget https://github.com/prometheus/alertmanager/releases/download/v0.26.0/alertmanager-0.26.0.linux-amd64.tar.gz
# 解压
tar xvfz alertmanager-0.26.0.linux-amd64.tar.gz
# 移动
sudo mv alertmanager-0.26.0.linux-amd64 /usr/local/alertmanager
# 创建数据目录
sudo mkdir -p /var/lib/alertmanager
# 创建用户
sudo useradd -rs /bin/false alertmanager
sudo chown -R alertmanager:alertmanager /usr/local/alertmanager
sudo chown -R alertmanager:alertmanager /var/lib/alertmanager
# 创建服务
sudo tee /etc/systemd/system/alertmanager.service <<EOF
[Unit]
Description=Alertmanager
After=network.target
[Service]
User=alertmanager
Group=alertmanager
Type=simple
ExecStart=/usr/local/alertmanager/alertmanager \
--config.file=/usr/local/alertmanager/alertmanager.yml \
--storage.path=/var/lib/alertmanager
[Install]
WantedBy=multi-user.target
EOF
# 启动服务
sudo systemctl daemon-reload
sudo systemctl start alertmanager
sudo systemctl enable alertmanager
2.2 Docker安装 #
bash
# 基本运行
docker run -d \
--name alertmanager \
-p 9093:9093 \
-v $(pwd)/alertmanager.yml:/etc/alertmanager/alertmanager.yml \
prom/alertmanager
# 带数据持久化
docker run -d \
--name alertmanager \
-p 9093:9093 \
-v $(pwd)/alertmanager.yml:/etc/alertmanager/alertmanager.yml \
-v alertmanager_data:/alertmanager \
prom/alertmanager
三、配置文件 #
3.1 基本配置 #
yaml
# alertmanager.yml
global:
resolve_timeout: 5m
route:
group_by: ['alertname', 'severity']
group_wait: 30s
group_interval: 5m
repeat_interval: 1h
receiver: 'default-receiver'
receivers:
- name: 'default-receiver'
email_configs:
- to: 'admin@example.com'
from: 'alertmanager@example.com'
smarthost: 'smtp.example.com:587'
auth_username: 'alertmanager@example.com'
auth_password: 'password'
inhibit_rules:
- source_match:
severity: 'critical'
target_match:
severity: 'warning'
equal: ['alertname', 'instance']
3.2 全局配置 #
yaml
global:
# 解析超时
resolve_timeout: 5m
# SMTP配置
smtp_smarthost: 'smtp.example.com:587'
smtp_from: 'alertmanager@example.com'
smtp_auth_username: 'alertmanager@example.com'
smtp_auth_password: 'password'
smtp_require_tls: true
# Slack配置
slack_api_url: 'https://hooks.slack.com/services/xxx'
# PagerDuty配置
pagerduty_url: 'https://events.pagerduty.com/v2/enqueue'
# OpsGenie配置
opsgenie_api_url: 'https://api.opsgenie.com/'
# WeChat配置
wechat_api_url: 'https://qyapi.weixin.qq.com/cgi-bin/'
wechat_api_secret: 'xxx'
wechat_api_corp_id: 'xxx'
3.3 路由配置 #
yaml
route:
# 分组标签
group_by: ['alertname', 'severity']
# 等待时间(同组告警等待合并)
group_wait: 30s
# 发送间隔(同组新告警发送间隔)
group_interval: 5m
# 重复间隔(重复告警发送间隔)
repeat_interval: 1h
# 默认接收者
receiver: 'default-receiver'
# 子路由
routes:
# 严重告警
- match:
severity: critical
receiver: 'critical-receiver'
group_wait: 10s
repeat_interval: 5m
# 警告告警
- match:
severity: warning
receiver: 'warning-receiver'
group_wait: 1m
repeat_interval: 30m
# 特定服务
- match_re:
service: ^(api|web)$
receiver: 'service-team-receiver'
# 正则匹配
- match_re:
alertname: ^(HighCPU|HighMemory).*$
receiver: 'infrastructure-team'
3.4 接收者配置 #
yaml
receivers:
# Email接收者
- name: 'email-receiver'
email_configs:
- to: 'admin@example.com'
send_resolved: true
# Slack接收者
- name: 'slack-receiver'
slack_configs:
- channel: '#alerts'
send_resolved: true
title: '{{ .Status | toUpper }}: {{ .CommonAnnotations.summary }}'
text: '{{ .CommonAnnotations.description }}'
# PagerDuty接收者
- name: 'pagerduty-receiver'
pagerduty_configs:
- service_key: 'xxx'
severity: critical
description: '{{ .CommonAnnotations.summary }}'
# Webhook接收者
- name: 'webhook-receiver'
webhook_configs:
- url: 'http://webhook.example.com/alerts'
send_resolved: true
# 企业微信接收者
- name: 'wechat-receiver'
wechat_configs:
- corp_id: 'xxx'
to_party: '1'
agent_id: 'xxx'
api_secret: 'xxx'
message: '{{ .Status }}: {{ .CommonAnnotations.summary }}'
# 多接收者
- name: 'multi-receiver'
email_configs:
- to: 'admin@example.com'
slack_configs:
- channel: '#alerts'
webhook_configs:
- url: 'http://webhook.example.com/alerts'
3.5 抑制规则 #
yaml
inhibit_rules:
# 严重告警抑制警告告警
- source_match:
severity: 'critical'
target_match:
severity: 'warning'
equal: ['alertname', 'instance']
# 节点宕机抑制该节点的所有告警
- source_match:
alertname: 'InstanceDown'
target_match_re:
alertname: '.*'
equal: ['instance']
# 服务不可用抑制该服务的所有告警
- source_match:
alertname: 'ServiceDown'
target_match_re:
alertname: '.*'
equal: ['service']
四、告警生命周期 #
text
告警生命周期:
┌─────────────────────────────────────────────┐
│ 1. Prometheus评估告警规则 │
├─────────────────────────────────────────────┤
│ • 定期评估告警表达式 │
│ • 条件满足时触发告警 │
└─────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────┐
│ 2. 发送到Alertmanager │
├─────────────────────────────────────────────┤
│ • Prometheus发送告警到Alertmanager │
│ • 包含告警信息和标签 │
└─────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────┐
│ 3. Alertmanager处理告警 │
├─────────────────────────────────────────────┤
│ • 去重:相同告警合并 │
│ • 分组:相似告警合并 │
│ • 抑制:检查抑制规则 │
│ • 静默:检查静默规则 │
└─────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────┐
│ 4. 路由和发送 │
├─────────────────────────────────────────────┤
│ • 根据路由规则分发 │
│ • 发送到对应的接收者 │
└─────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────┐
│ 5. 告警恢复 │
├─────────────────────────────────────────────┤
│ • 条件不满足时发送恢复通知 │
│ • 标记告警为已恢复 │
└─────────────────────────────────────────────┘
五、静默管理 #
5.1 创建静默 #
bash
# 通过Web UI创建
# 访问 http://localhost:9093/silences
# 通过API创建
curl -X POST http://localhost:9093/api/v1/silences -d '{
"matchers": [
{
"name": "instance",
"value": "localhost:9090",
"isRegex": false
}
],
"startsAt": "2024-01-01T00:00:00Z",
"endsAt": "2024-01-01T01:00:00Z",
"createdBy": "admin",
"comment": "Maintenance window"
}'
5.2 查看静默 #
bash
# 列出所有静默
curl http://localhost:9093/api/v1/silences
# 查看特定静默
curl http://localhost:9093/api/v1/silence/<silence_id>
5.3 删除静默 #
bash
# 删除静默
curl -X DELETE http://localhost:9093/api/v1/silence/<silence_id>
六、高可用配置 #
6.1 集群模式 #
yaml
# alertmanager.yml (集群模式)
global:
resolve_timeout: 5m
route:
group_by: ['alertname']
group_wait: 30s
group_interval: 5m
repeat_interval: 1h
receiver: 'default-receiver'
receivers:
- name: 'default-receiver'
email_configs:
- to: 'admin@example.com'
bash
# 启动集群节点1
alertmanager \
--config.file=alertmanager.yml \
--storage.path=/var/lib/alertmanager \
--cluster.listen-address=0.0.0.0:9094 \
--cluster.peer=alertmanager2:9094 \
--cluster.peer=alertmanager3:9094
# 启动集群节点2
alertmanager \
--config.file=alertmanager.yml \
--storage.path=/var/lib/alertmanager \
--cluster.listen-address=0.0.0.0:9094 \
--cluster.peer=alertmanager1:9094 \
--cluster.peer=alertmanager3:9094
6.2 Prometheus配置 #
yaml
# prometheus.yml
alerting:
alertmanagers:
- static_configs:
- targets:
- 'alertmanager1:9093'
- 'alertmanager2:9093'
- 'alertmanager3:9093'
七、Web UI #
7.1 访问Web UI #
text
访问地址:http://localhost:9093
功能:
├── Alerts:查看当前告警
├── Silences:管理静默
├── Status:查看状态
└── Help:帮助信息
7.2 API接口 #
bash
# 查看告警
curl http://localhost:9093/api/v1/alerts
# 查看状态
curl http://localhost:9093/api/v1/status
# 查看接收者
curl http://localhost:9093/api/v1/receivers
# 重载配置
curl -X POST http://localhost:9093/-/reload
八、总结 #
Alertmanager核心功能:
| 功能 | 说明 |
|---|---|
| 去重 | 相同告警只发送一次 |
| 分组 | 相似告警合并 |
| 路由 | 根据标签分发 |
| 静默 | 临时屏蔽告警 |
| 抑制 | 高优先级抑制低优先级 |
配置要点:
| 配置项 | 说明 |
|---|---|
| route | 路由规则 |
| receivers | 接收者配置 |
| inhibit_rules | 抑制规则 |
下一步,让我们学习告警最佳实践!
最后更新:2026-03-27