Prometheus监控系统的搭建方式详见:https://blog.csdn.net/w342164796/article/details/104989355。此处只记录关于alertmanager配置邮件报警。
安装alertmanager
alertmanager是Prometheus中的一个独立的告警模块,接受Prometheus发来警报,然后通过分组、删除重复等处理,并将他们通过路由发送给正确的接收器。
alertmanager的安装方式也推荐docker容器部署:
- 拉取镜像
docker pull prom/alertmanager
- 创建配置文件alertmanager.yml ; 此文件是alertmanager的配置文件,一会启动容器的时候要把这个文件挂在到容器内
vim alertmanager.yml
global:
smtp_smarthost: 'smtp.mxhichina.com:465' # smtp地址
smtp_from: '******@163.com' # 谁发邮件
smtp_auth_username: '******@163.com' # 邮箱用户
smtp_auth_password: 'password' # 邮箱密码
smtp_require_tls: false
route:
group_by: ["alertname"] # 分组名
group_wait: 10s # 当收到告警的时候,等待三十秒看是否还有告警,如果有就一起发出去
group_interval: 10s # 发送警告间隔时间
repeat_interval: 1h # 重复报警的间隔时间
receiver: mail # 全局报警组,这个参数是必选的,和下面报警组名要相同
receivers:
1. name: 'mail' # 报警组名
email_configs:
2. to: '******@qq.com' # 发送给谁
- 启动容器
docker run -d -p 9093:9093 -v /root/alertmanager/alertmanager.yml:/etc/alertmanager/alertmanager.yml --name alertmanager prom/alertmanager
4.浏览器访问http:IP::9093 alertmanager后台页面,如果可以正常打开,就代表安装成功了。
Prometheus 配置alertmanager
- prometheus.yml新增关于alertmanager的配置
global:
# 全局默认抓取间隔
scrape_interval: 15s
rule_files:
- "*rule.yml"
########alertmanager新增#######
alerting:
alertmanagers:
- static_configs:
- targets: ['alertmanagerIP:9093']
scrape_configs:
- job_name: 'prometheus'
# 本任务的抓取间隔,覆盖全局配置
scrape_interval: 5s
static_configs:
# 抓取地址同 Prometheus 服务地址,路径为默认的 /metrics
- targets: ['localhost:9090']
# 任务名
- job_name: 'node-exporter'
# 本任务的抓取间隔,覆盖全局配置
scrape_interval: 5s
static_configs:
# 抓取地址同 Prometheus 服务地址,路径为默认的 /metrics
- targets: ['机器1IP:9100','机器2IP:9100','机器3IP:9100']
重启prometheus
docker restart prometheus
配置报警规则
在prometheus.yml同级目录下创建两个报警规则配置文件node-exporter-record-rule.yml,node-exporter-alert-rule.yml。第一个文件用于记录规则,第二个是报警规则。
由于之前我们在prometheus.yml中已经引用了所有已rule结尾的文件,所以我们不用在修改prometheus.yml配置文件。
#关于报警规则的配置
rule_files:
- "*rule.yml"
创建node-exporter-record-rule.yml
node-exporter-record-rule.yml
输入以下配置
groups:
- name: node-exporter-record
rules:
- expr: up{job=~"node-exporter"}
record: node_exporter:up
labels:
desc: "节点是否在线, 在线1,不在线0"
unit: " "
job: "node-exporter"
- expr: time() - node_boot_time_seconds{}
record: node_exporter:node_uptime
labels:
desc: "节点的运行时间"
unit: "s"
job: "node-exporter"
##############################################################################################
# cpu #
- expr: (1 - avg by (environment,instance) (irate(node_cpu_seconds_total{job="node-exporter",mode="idle"}[5m]))) * 100
record: node_exporter:cpu:total:percent
labels:
desc: "节点的cpu总消耗百分比"
unit: "%"
job: "node-exporter"
- expr: (avg by (environment,instance) (irate(node_cpu_seconds_total{job="node-exporter",mode="idle"}[5m]))) * 100
record: node_exporter:cpu:idle:percent
labels:
desc: "节点的cpu idle百分比"
unit: "%"
job: "node-exporter"
- expr: (avg by (environment,instance) (irate(node_cpu_seconds_total{job="node-exporter",mode="iowait"}[5m]))) * 100
record: node_exporter:cpu:iowait:percent
labels:
desc: "节点的cpu iowait百分比"
unit: "%"
job: "node-exporter"
- expr: (avg by (environment,instance) (irate(node_cpu_seconds_total{job="node-exporter",mode="system"