二、搭建告警通知 | Promethues+Grafana监控方案

23

【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_userlogin_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