二、搭建告警通知 | Promethues+Grafana监控方案
【Promethues+Grafana监控方案】文章
一、搭建Prometheus
二、搭建告警通知
三、监控数据可视化
1. 写在前面
上一篇我们已经使用 Docker 成功搭建好了 Promethues,并且将服务器进行监控,本篇,将对服务器的部分指标进行评估告警,主要实现目标:
1. 服务器内存不足 50% 进行邮件和钉钉告警
2. CPU 使用率大于 50% 进行邮件和钉钉告警
2. 安装PrometheusAlert
2-1. 1. 创建数据文件目录
mkdir -p ~/docker/prometheus-alert/db
chmod 777 ~/docker/prometheus-alert/db
mkdir -p ~/docker/prometheus-alert/conf
2-2. 2. 配置参数
编辑配置文件,根据自己的情况配置邮件的SMTP和钉钉机器人地址等参数:
vim ~/docker/prometheus-alert/conf/app.conf
#---------------------↓全局配置-----------------------
appname = alert
#登录用户名
login_user=admin
#登录密码
login_password=admin
#监听地址
httpaddr = "0.0.0.0"
#监听端口
httpport = 8080
runmode = dev
#开启JSON请求
copyrequestbody = true
#告警消息标题
title = 监控中心
#链接到告警平台地址
GraylogAlerturl=1
#转换Prometheus,graylog告警消息的时区为CST时区(如默认已经是CST时区,请勿开启)
prometheus_cst_time=0
#数据库驱动,支持sqlite3,mysql,postgres如使用mysql或postgres,请开启db_host,db_port,db_user,db_password,db_name的注释
db_driver=sqlite3
#是否开启告警记录 0为关闭,1为开启
AlertRecord=0
#---------------------↓webhook-----------------------
#是否开启钉钉告警通道,可同时开始多个通道0为关闭,1为开启
open-dingding=1
#默认钉钉机器人地址
ddurl=https://oapi.dingtalk.com/robot/send?access_token=xxx
#是否开启 @所有人(0为关闭,1为开启)
dd_isatall=1
#---------------------↓邮件配置-----------------------
#是否开启邮件
open-email=0
#邮件发件服务器地址
Email_host=smtp.qq.com
#邮件发件服务器端口
Email_port=465
#邮件帐号
Email_user=xxxxxxx@qq.com
#邮件密码
Email_password=xxxxxx
#邮件标题
Email_title=运维告警
#默认发送邮箱
Default_emails=xxxxx@qq.com,xxxxx@qq.com
备注:完整的配置文件参数,见 app-example.conf
2-3. 3. 安装
执行安装命令:
sudo docker run -d \
--name prometheus-alert \
-p 9091:8080 \
-v ~/docker/prometheus-alert/conf:/app/conf \
-v ~/docker/prometheus-alert/db:/app/db \
feiyu563/prometheus-alert
2-4. 4. 访问
http://服务器IP:9091/login
,登录密码见配置文件中的 login_user
和 login_password
3. 安装AlertManager
3-1. 1. 创建配置文件
vim ~/docker/alertmanager/alertmanager.yml
global:
resolve_timeout: 5m
# 分发策略
route:
group_by: ['instance'] # 报警分组
group_wait: 10s # 在组内等待所配置的时间,如果同组内,10秒内出现相同报警,在一个组内出现。
group_interval: 10s # 如果组内内容不变化,合并为一条警报信息,指定时间后发送。
repeat_interval: 12h # 发送报警间隔,如果指定时间内没有修复,则重新发送报警。
receiver: 'web.hook.ding'
# 接收器
receivers:
- name: 'web.hook.ding'
# 这里使用 webhook 方式将告警消息转发给 PrometheusAlert
webhook_configs:
- url: 'http://服务器IP:9091/prometheusalert?type=email&tpl=prometheus-email'
send_resolved: true # 当问题解决了是否需要通知
- url: 'http://服务器IP:9091/prometheusalert?type=dd&tpl=prometheus-dd'
send_resolved: true
3-2. 2. 安装
执行安装命令:
docker run -d \
--name alertmanager \
-p 9093:9093 \
-v ~/docker/alertmanager/:/etc/alertmanager/ \
prom/alertmanager
4. 添加告警规则
告警程序搭建完成后,就可以在 Prometheus 中添加告警触发的规则,规则条件达成,则会自动将告警信息发送到告警程序中。
创建告警规则:
vim ~/docker/prometheus/rules/host_rule.yml
# 主机报警规则配置
groups:
- name: host
rules:
- alert: '内存容量小于 50%'
expr: ((node_memory_MemTotal_bytes - node_memory_MemFree_bytes - node_memory_Buffers_bytes - node_memory_Cached_bytes) / (node_memory_MemTotal_bytes )) * 100 > 50
for: 30s
labels:
level: 3
annotations:
description: '服务器内存资源已不足 50%,当前值: {{ $value }}'
- alert: 'CPU 使用率大于 50%'
expr: 100 - ((avg by (instance,job,env)(irate(node_cpu_seconds_total{mode="idle"}[30s]))) *100) > 50
for: 30s
labels:
level: 3
annotations:
description: '服务器CPU 使用率已超过 50%, 当前值: {{ $value }}'
告警规则添加后,需要将 Prometheus 连接到 Alertmanager 程序:
编辑 Prometheus 配置文件 vim ~/docker/prometheus/prometheus.yml
# Alertmanager 告警程序配置
alerting:
alertmanagers:
- static_configs:
- targets:
- Alertmanager服务器IP:9093
随后重启 Prometheus:docker restart prometheus