Prometheus 告警组件 Alertmanager 的使用并接入 Grafana
前言
在现代监控体系中,告警是不可或缺的重要组成部分。Prometheus 虽然能够收集和存储监控数据,但告警功能主要由其姊妹项目 Alertmanager 负责。Alertmanager 处理由 Prometheus 服务器发送的警报,负责去重、分组、抑制和路由到正确的接收器,如电子邮件、Slack、PagerDuty 等。
本文将详细介绍如何在 CentOS 系统上部署和配置 Alertmanager,将其与 Prometheus 集成,并最终接入 Grafana 实现统一的告警管理和可视化。
Alertmanager 安装与配置
1. 下载并安装 Alertmanager
首先,我们需要从官方仓库下载 Alertmanager:
# 下载 Alertmanager
wget https://github.com/prometheus/alertmanager/releases/download/v0.28.1/alertmanager-0.28.1.linux-amd64.tar.gz# 解压下载的包
tar -zxvf alertmanager-0.28.1.linux-amd64.tar.gz# 移动到安装目录
sudo mv alertmanager-0.28.1.linux-amd64 /usr/local/alertmanager
2. 创建专用用户
为了安全考虑,我们创建一个专用用户来运行 Alertmanager 服务:
# 创建 Alertmanager 用户组
sudo groupadd alertmanager# 创建 Alertmanager 用户
sudo useradd -g alertmanager -m -d /var/lib/alertmanager -s /sbin/nologin alertmanager# 设置目录权限
sudo chown -R alertmanager:alertmanager /usr/local/alertmanager
sudo chown -R alertmanager:alertmanager /var/lib/alertmanager
3. 配置 Alertmanager
创建 Alertmanager 的主配置文件:
sudo vim /usr/local/alertmanager/alertmanager.yml
添加以下配置内容(根据实际情况修改邮箱配置):
global:smtp_smarthost: 'smtp.qq.com:587' # QQ邮箱SMTP服务器smtp_from: 'your_email@qq.com' # 发件人邮箱smtp_auth_username: 'your_email@qq.com' # 邮箱账号smtp_auth_password: 'your_auth_code' # 邮箱授权码(不是密码)smtp_require_tls: true # 要求TLSroute:group_by: ['alertname'] # 按告警名称分组group_wait: 30s # 分组等待时间group_interval: 5m # 分组间隔时间repeat_interval: 1h # 重复告警间隔receiver: 'email-alert' # 默认接收器receivers:- name: 'email-alert' # 邮件接收器email_configs:- to: 'target_email@example.com' # 收件人邮箱send_resolved: true # 发送恢复通知- name: 'web.hook' # Webhook接收器webhook_configs:- url: 'http://127.0.0.1:5001/' # Webhook地址inhibit_rules:- source_match:severity: 'critical' # 源匹配:严重级别为criticaltarget_match:severity: 'warning' # 目标匹配:严重级别为warningequal: ['alertname', 'instance'] # 在这些标签相等时抑制
配置说明:
global
: 全局配置,包括SMTP服务器设置route
: 告警路由配置,定义如何分组和路由告警receivers
: 接收器配置,定义告警通知方式inhibit_rules
: 抑制规则,防止重复或相关告警
注意: 使用QQ邮箱需要获取授权码而非密码,可以在QQ邮箱设置中生成。
4. 创建 Systemd 服务
创建 Alertmanager 的 Systemd 服务文件:
sudo vim /etc/systemd/system/alertmanager.service
添加以下内容:
[Unit]
Description=Alertmanager
Wants=network-online.target
After=network-online.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/
Restart=always[Install]
WantedBy=multi-user.target
5. 启动 Alertmanager 服务
# 重新加载 systemd 配置
sudo systemctl daemon-reload# 启动服务
sudo systemctl start alertmanager# 设置开机自启
sudo systemctl enable alertmanager# 检查服务状态
sudo systemctl status alertmanager
6. 防火墙配置
如果系统启用了防火墙,需要开放 Alertmanager 的默认端口(9093):
# 开放9093端口
sudo firewall-cmd --permanent --add-port=9093/tcp# 重新加载防火墙配置
sudo firewall-cmd --reload
配置 Prometheus 与 Alertmanager 集成
现在我们需要配置 Prometheus,使其能够将告警发送到 Alertmanager。
修改 Prometheus 配置文件
编辑 Prometheus 的配置文件:
sudo vim /usr/local/prometheus/prometheus.yml
在配置文件中添加 Alertmanager 配置:
# Alertmanager 配置
alerting:alertmanagers:- static_configs:- targets: ['localhost:9093'] # Alertmanager地址# 告警规则文件
rule_files:- "alert_rules.yml" # 告警规则文件路径
创建告警规则文件
创建告警规则文件:
sudo vim /usr/local/prometheus/alert_rules.yml
添加示例告警规则:
groups:
- name: node-alertsrules:- alert: InstanceDownexpr: up == 0for: 1mlabels:severity: criticalannotations:summary: "Instance {{ $labels.instance }} down"description: "{{ $labels.instance }} of job {{ $labels.job }} has been down for more than 1 minute."- alert: HighCPUUsageexpr: |(sum by(instance) (rate(node_cpu_seconds_total{mode=~"user|system"}[1m])) / on(instance) sum by(instance) (rate(node_cpu_seconds_total[1m]))) * 100 > 80for: 1mlabels:severity: warningannotations:summary: "Active CPU usage above 80% on {{ $labels.instance }}"description: "User+System CPU usage is {{ $value }}% for 1 minute"- alert: HighMemoryUsageexpr: (node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes) / node_memory_MemTotal_bytes * 100 > 85for: 5mlabels:severity: warningannotations:summary: "High memory usage on {{ $labels.instance }}"description: "Memory usage is above 85% for 5 minutes. Current value is {{ $value }}%"
重启 Prometheus 服务
# 检查配置文件语法
sudo -u prometheus /usr/local/prometheus/promtool check config /usr/local/prometheus/prometheus.yml# 重启 Prometheus
sudo systemctl restart prometheus# 检查服务状态
sudo systemctl status prometheus
接入 Grafana
1. 添加 Alertmanager 数据源
在 Grafana 中添加 Alertmanager 作为数据源:
-
登录 Grafana(http://IP:3000)
-
点击左侧菜单的 “Configuration”(齿轮图标)
-
选择 “Data Sources”
-
点击 “Add data source”
-
选择 “Alertmanager”
-
配置以下参数:
- Name: Alertmanager(可自定义)
- Type: Alertmanager
- URL: http://localhost:9093(Alertmanager地址)
- Alertmanager type: Prometheus
-
点击 “Save & Test” 测试连接
2. 查看告警规则
在 Grafana 中查看和管理告警规则:
- 点击左侧菜单的 “Alerting”(警铃图标)
- 选择 “Alert rules”
- 这里将显示从 Prometheus 同步的告警规则
3. 查看告警实例
- 在 “Alerting” 菜单中,选择 “Alert instances”
- 这里将显示当前活跃的告警实例
4. 配置通知策略
在 Grafana 8.0+ 版本中,可以配置统一的通知策略:
- 在 “Alerting” 菜单中,选择 “Notification policies”
- 创建新的通知策略,指定匹配条件和通知渠道
测试告警功能
1. 手动触发告警
为了测试告警功能,可以手动创建一个高负载场景:
# 创建一个高CPU负载(谨慎使用)
stress --cpu 2 --timeout 300s
等待几分钟后,检查是否触发 HighCpuUsage 告警。
2. 查看告警状态
可以通过以下方式查看告警状态:
- Prometheus Web界面: http://IP:9090/alerts
- Alertmanager Web界面: http://IP:9093
- Grafana Alerting页面: http://IP:3000/alerting
3. 验证邮件通知
如果配置正确,当告警触发时,应该会收到邮件通知。邮件内容将包含告警的详细信息和恢复链接。
高级配置
1. 多接收器配置
可以配置多个接收器,根据告警严重级别路由到不同的接收器:
route:group_by: ['alertname']group_wait: 30sgroup_interval: 5mrepeat_interval: 1hreceiver: 'default-receiver'routes:- match:severity: criticalreceiver: 'critical-alerts'- match:severity: warningreceiver: 'warning-alerts'receivers:- name: 'default-receiver'email_configs:- to: 'team@example.com'- name: 'critical-alerts'email_configs:- to: 'oncall@example.com'pagerduty_configs:- service_key: 'your-pagerduty-key'- name: 'warning-alerts'email_configs:- to: 'devs@example.com'
2. 静默配置
可以通过 Alertmanager 的 Web 界面配置静默规则,暂时屏蔽特定告警:
- 访问 http://IP:9093
- 点击 “Silences” 标签页
- 点击 “New Silence” 创建新的静默规则
- 设置匹配条件和持续时间
3. Webhook 集成
Alertmanager 支持 Webhook 集成,可以将告警发送到自定义系统:
receivers:
- name: 'webhook-receiver'webhook_configs:- url: 'http://your-webhook-url/alert'send_resolved: true
故障排除
常见问题
-
告警未触发
- 检查 Prometheus 规则配置是否正确
- 验证 PromQL 表达式是否返回数据
-
邮件未发送
- 检查 SMTP 配置是否正确
- 验证邮箱授权码是否正确
-
Grafana 无法连接 Alertmanager
- 检查 Alertmanager 服务是否运行
- 验证网络连通性
查看日志
如果遇到问题,可以查看相关服务日志:
# 查看 Alertmanager 日志
journalctl -u alertmanager -f# 查看 Prometheus 日志
journalctl -u prometheus -f# 查看 Grafana 日志
journalctl -u grafana -f
总结
通过本文,我们学习了:
- Alertmanager 的安装与配置:下载、解压、设置专用用户和权限
- 告警路由配置:定义如何分组和路由告警
- 通知接收器配置:配置邮件和其他通知方式
- Prometheus 集成:配置 Prometheus 将告警发送到 Alertmanager
- 告警规则定义:创建基于 PromQL 的告警规则
- Grafana 集成:将 Alertmanager 添加为数据源,统一管理告警
Alertmanager 是 Prometheus 监控体系中的重要组件,它提供了强大的告警管理功能。通过与 Grafana 集成,我们可以实现告警的统一管理和可视化,构建完整的监控告警体系。
下一步建议:
- 探索更多告警通知方式(Slack、PagerDuty等)
- 配置告警模板,自定义告警内容格式
- 实现告警分级和升级策略
- 集成自动化处理流程
相关资源:
- Alertmanager 官方文档
- Prometheus 告警规则指南
- Grafana Alerting 文档
希望本文对您配置和使用 Alertmanager 有所帮助!如有任何问题,欢迎在评论区留言讨论。