基于 Prometheus+Grafana + wmi_exporter(Windows)/ node_exporter(Linux) 的 监控系统详见之前的文章,相关的原理和概念不再赘述。
Windows 下搭建 wmi_exporter+Prometheus+Grafana 服务器性能监控平台
Linux(CentOS7) 下搭建 node_exporter+Prometheus+Grafana 服务器性能监控平台
本文在之前的基础上,加入报警邮件通知功能。
原理: prometheus 本来是负责收集和存储数据的,搭配上 alertmanager 之后,
- 在 prometheus 一侧配置报警规则(指标达到多少 将报警事件
发送到 alertmanager
) 在 alertmanager 一侧配置通知规则(通知发到哪里,通知频率,通知内容格式等)
当 prometheus 监测到相关数据满足报警规则后,把报警事件发送到 alertmanager
alertmanager 收到 prometheus 的报警事件,根据通知规则发送通知
本文各软件版本:prometheus-2.10.0 ; alertmanager-0.18.0
参考文章:
Prometheus 和 Alertmanager实战配置 【有具体配置项的说明】
Prometheus + AlertManager 邮件报警
阿里云服务器实现smtp自动发送邮件
https://help.aliyun.com/document_detail/29449.html?spm=5176.11065259.1996646101.searchclickresult.751948f1stf7KH
主要的操作:1、注册一个支持 SMTP 协议收发邮件的邮箱(我用的是163邮箱),并申请授权码
2、(针对阿里云服务器)安全组规则 开通出方向的 465 端口
3、修改 prometheus 配置文件 prometheus.yml ,打开报警功能,配置报警规则文件路径
4、新建报警规则文件 alert_rules.yml,设置报警规则
5、修改 alertmanager 配置文件 alertmanager.yml,配置通知规则
遇到的比较大的坑:【由于参考文章没有说清楚,这两个坑搞了我一天的时间】
基于安全考虑,已禁用 25 端口,只能用 465 端口,需要
1、alertmanager 配置通知规则 的时候,需要的不是邮箱密码,而是授权码
2、阿里云服务器 开通出方向的 465 端口
===============铺垫结束,解开裤腰带就是干==================
目录
4、新建报警规则文件 alert_rules.yml,设置报警规则
5、修改配置文件 alertmanager.yml,配置通知规则
1、注册邮箱并申请授权码
注册两个邮箱,一个用于发件,一个用于收件。注册步骤略过。
这里说明一下 用于发件的邮箱 申请授权码的步骤。
1、点击“设置”菜单下的 “POP3/SMTP/IMAP”
2、点击左侧菜单“客户端授权密码”,右侧选择“开启”。
3、开启成功后,记住自己设置的授权码。点击左侧菜单“POP3/SMTP/IMAP”,可看到如下界面
2、阿里云服务器开通端口
安全组规则 开通出方向的 465 端口。
3、配置
prometheus
修改 配置文件 prometheus.yml 如下【红色框部分】:
4、新建报警规则文件 alert_rules.yml,设置报警规则
在 prometheus.yml 文件同级目录新建 alert_rules.yml。
这里以一个报警规则为例:内存使用率大于70%【测试时为了方便,可以设置得低一点】
Windows:
groups:
- name: 主机状态-监控告警
rules:
- alert: 内存使用
expr: ((wmi_cs_physical_memory_bytes - (wmi_os_physical_memory_free_bytes)) /wmi_cs_physical_memory_bytes) * 100 > 70
for: 1m
labels:
status: 严重告警
annotations:
summary: "{{$labels.mountpoint}} 内存使用率过高!"
description: "{{$labels.mountpoint }} 内存使用大于70%(目前使用:{{$value}}%)"
CENTOS:
groups:
- name: 主机状态-监控告警
rules:
- alert: 内存使用
expr: ((node_memory_MemTotal_bytes -(node_memory_MemFree_bytes+node_memory_Buffers_bytes+node_memory_Cached_bytes) )/node_memory_MemTotal_bytes)*100 > 70
for: 1m
labels:
status: 严重告警
annotations:
summary: "{{$labels.mountpoint}} 内存使用率过高!"
description: "{{$labels.mountpoint }} 内存使用大于70%(目前使用:{{$value}}%)"
5、修改配置文件 alertmanager.yml,配置通知规则
Windows 和 CENTOS 相同:
global:
resolve_timeout: 5m
smtp_smarthost: 'smtp.163.com:25' # 邮箱smtp服务器代理。这里的端口可以用25和465,对于阿里云服务器只能用 465
smtp_from: 'XXXX@163.com' # 发送邮箱名称
smtp_auth_username: 'XXXX@163.com' # 发送邮箱名称[同上]
smtp_auth_password: 'XXXX' # 邮箱授权码 ----注意是授权码,而不是密码
smtp_require_tls: false
route:
group_by: ['alertname'] # 报警分组依据
group_wait: 10s # 最初即第一次等待多久时间发送一组警报的通知
group_interval: 10s # 在发送新警报前的等待时间
repeat_interval: 1h # 发送重复警报的周期 对于email配置中,此项不可以设置过低,否则将会由于邮件发送太多频繁,被smtp服务器拒绝
receiver: 'mail' # 发送警报的接收者的名称,以下receivers name的名称
receivers:
- name: 'mail' # 警报接收者,与上面的配置相对应
email_configs: # 邮箱配置
- to: 'XXXX@qq.com' # 接收警报的email
headers: { Subject: "[WARN] 报警邮件"} # 接收邮件的标题
6、运行并查看
依次运行
- wmi_exporter(Windows)/ node_exporter(Linux)
prometheus
alertmanager
设法将内存使用率提高到 70% 以上,等待2分钟左右,将收到报警邮件。