使用 docker 搭建 grafana+prometheus+AlertManager 邮件报警(肆)

docker下配置 AlertManager报警信息

  • 一、Docker下安装启动 AlertManager
    • 下载 alertmanager
    • 启动 alertmanager 服务
    • 验证是否启动成功
  • 二、AlertManager配置
  • 三、Prometheus 配置 AlertManager 告警规则
    • 优化报警模版

一、Docker下安装启动 AlertManager

下载 alertmanager

docker pull prom/alertmanager:latest

启动 alertmanager 服务

以下步骤设置 修改宿主机alertmanager目录下文件重启后直接同步到docker下/etc/alertmanager/目录

# 1.启动容器
docker run -itd --name alertmanager prom/alertmanager

# 2.复制容器内部的配置文件到宿主机,不用事先创建$PWD/alertmanager目录
docker cp -a alertmanager:/etc/alertmanager/ $PWD/alertmanager

# 3.删除容器
docker rm -f alertmanager

# 4.启动服务 设置端口9093
docker run -itd --name alertmanager -p 9093:9093 -v $PWD/alertmanager:/etc/alertmanager prom/alertmanager

验证是否启动成功

浏览器输入http://:9093/#/alerts
使用 docker 搭建 grafana+prometheus+AlertManager 邮件报警(肆)_第1张图片

二、AlertManager配置

配置 vi alertmanager/alertmanager.yml 宿主机文件

# 源文件内容
route:
  group_by: ['alertname']
  group_wait: 30s
  group_interval: 5m
  repeat_interval: 1h
  receiver: 'web.hook'
receivers:
- name: 'web.hook'
  webhook_configs:
  - url: 'http://127.0.0.1:5001/'
inhibit_rules:
  - source_match:
      severity: 'critical'
    target_match:
      severity: 'warning'
    equal: ['alertname', 'dev', 'instance']
# 配置好的文件内容 可直接复制
alertmanager.yml
global: # 全局配置
  resolve_timeout: 5m  # 处理超时时间,默认为5min
  smtp_from: ''  # 邮件发送地址
  smtp_smarthost: 'smtp.qq.com:465'  # 邮箱SMTP 服务地址
  smtp_auth_username: ''  # 邮件发送地址用户名
  smtp_auth_password: '英文'  # 邮件发送地址授权码
  smtp_require_tls: false
  smtp_hello: 'qq.com'
route:  # 设置报警的分发策略
  group_by: ['alertname']
  group_wait: 20s  #  最初即第一次等待多久时间发送一组警报的通知
  group_interval: 5m  # 在发送新警报前的等待时间
  repeat_interval: 5m  # 发送重复警报的周期 对于email配置中,此项不可以设置过低,否则将会由于邮件发送太多频繁,被smtp服务器拒绝
  receiver: 'email'
receivers:  # 配置告警消息接受者信息
- name: 'email'
  email_configs:
  - to: ''  # #邮件接收地址
    send_resolved: true
inhibit_rules:  # 抑制规则配置
  - source_match:
      severity: 'critical'
    target_match:
      severity: 'warning'
    equal: ['alertname', 'dev', 'instance']

重启alertmanager 容器
docker restart alertmanager

重启后查看docker下的alertmanager容器中文件是否配置
(1)进入容器当中
docker exec -it alertmanager /bin/sh
(2)查看配置文件信息
cat /etc/alertmanager/alertmanager.yml
还需要配置告警规则…

三、Prometheus 配置 AlertManager 告警规则

  1. 新建Prometheus目录下 服务器 告警规则文件
    vi prometheus/node-exporter-record-rule.yml
groups:
- name: server-alarm
  rules:
  - alert: "内存告警"
    expr: (1 - (node_memory_MemAvailable_bytes / (node_memory_MemTotal_bytes))) * 100 > 80
    for: 1m
    labels:
      severity: warning
    annotations:
      summary: "{{$labels.instance}}: 检测到 高内存 使用率!"
      description: "{{$labels.instance}}: 内存使用率在 80% 以上 (当前使用值为:{{ $value }})"


  - alert: "CPU告警"
    expr: (1 - avg(irate(node_cpu_seconds_total{mode="idle"}[2m])) by(instance)) * 100 > 80
    for: 1m
    labels:
      severity: warning
    annotations:
      summary: "{{$labels.instance}}: 检测到 高CPU 使用率!"
      description: "{{$labels.instance}}: CPU使用率在 80% 以上 (当前使用值为:{{ $value }})"


  - alert: "磁盘告警"
    expr: 100 - (node_filesystem_free_bytes{fstype=~"tmpfs|ext4"} / node_filesystem_size_bytes{fstype=~"tmpfs|ext4"} * 100) > 5
    for: 1m
    labels:
      severity: warning
    annotations:
      summary: "{{$labels.instance}}: 检测到 高磁盘 使用率!"
      description: "{{$labels.instance}}: 磁盘使用率在 80% 以上 (当前使用值为:{{ $value }})"
  1. 新建Prometheus目录下 MySql 告警规则文件
    cat mysql-exporter-record-rule.yml
groups:
- name: mysql-alarm
  rules:
  - alert: "MySql is down"
    expr: mysql_up == 0
    for: 1m
    labels:
      severity: warning
    annotations:
      summary: "{{$labels.instance}}: 检测到 MySql服务 已停止运行!请重点关注!!!"
      description: "{{$labels.instance}}: 当前 MySql服务已停止! (当前状态mysql_up状态为:{{ $value }})"


  - alert: "MySql_High_QPS"
    expr: rate(mysql_global_status_questions[5m]) > 1500
    for: 1m
    labels:
      severity: warning
    annotations:
      summary: "{{$labels.instance}}: 检测到 MySql_High_QPS 过高!"
      description: "{{$labels.instance}}: 当前 MySql操作超过 1500/秒 (当前值为:{{ $value }})"

  - alert: "Mysql_Too_Many_Connections"
    expr: rate(mysql_global_status_threads_connected[5m]) > 300
    for: 1m
    labels:
      severity: warning
    annotations:
      summary: "{{$labels.instance}}: 检测到 MySql 连接过多!"
      description: "{{$labels.instance}}: 当前 MySql连接超过 300个/秒 (当前值为:{{ $value }})"


  - alert: "mysql_global_status_slow_queries"
    expr: rate(mysql_global_status_slow_queries[5m]) > 5
    for: 1m
    labels:
      severity: warning
    annotations:
      summary: "{{$labels.instance}}: 检测到 MySql 慢查询过多!"
      description: "{{$labels.instance}}: 当前 MySql慢查询 超过 5个/秒 (当前值为:{{ $value }})"


  - alert: "SQL thread stopped"
    expr: mysql_slave_status_slave_sql_running != 1
    for: 1m
    labels:    
      severity: warning
    annotations:
      summary: "{{$labels.instance}}: 检测到 SQL 线程停止!请重点关注!!!"
      description: "{{$labels.instance}}: 当前 SQL线程 已停止! (当前值为:{{ $value }})"

  - alert: "IO thread stopped"
    expr: mysql_slave_status_slave_io_running != 1
    for: 1m
    labels:
      severity: warning
    annotations:
      summary: "{{$labels.instance}}: 检测到 IO 线程停止!请重点关注!!!"
      description: "{{$labels.instance}}: 当前 IO线程 已停止! (当前值为:{{ $value }})"
  1. 修改Prometheus.yml文件
    增加AlertManager 9093 端口( - targets: [‘47.96.124.112:9093’]
    获取 rule_files 下通知文件信息( - “*rule.yml”
# Alertmanager configuration
alerting:
  alertmanagers:
    - static_configs:
        - targets: ['47.96.124.112:9093']  # 告警配置地址
          # - alertmanager:9093

# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
  # - "first_rules.yml"
  # - "second_rules.yml"
  - "*rule.yml"	# 告警通知文件信息

  1. 重启Prometheus 服务
    docker restart docker_prometheus

  2. 浏览器输入http://:9093/#/status检查是否配置成功
    使用 docker 搭建 grafana+prometheus+AlertManager 邮件报警(肆)_第2张图片

  3. 查看服务器内存占用来测试告警推送(我这边占用55%左右,所以我设置55%)
    使用 docker 搭建 grafana+prometheus+AlertManager 邮件报警(肆)_第3张图片
    静止10分钟等待推送消息
    正常状态
    使用 docker 搭建 grafana+prometheus+AlertManager 邮件报警(肆)_第4张图片

异常告警状态
使用 docker 搭建 grafana+prometheus+AlertManager 邮件报警(肆)_第5张图片
使用 docker 搭建 grafana+prometheus+AlertManager 邮件报警(肆)_第6张图片

告警详情
使用 docker 搭建 grafana+prometheus+AlertManager 邮件报警(肆)_第7张图片

使用 docker 搭建 grafana+prometheus+AlertManager 邮件报警(肆)_第8张图片

优化报警模版

服务器信息模版查询

内存:(1 - (node_memory_MemAvailable_bytes / (node_memory_MemTotal_bytes))) * 100 > 30
CPU: (1 - avg(irate(node_cpu_seconds_total{mode="idle"}[2m])) by(instance)) *100 > 20
磁盘:100 - (node_filesystem_free_bytes{fstype=~"tmpfs|ext4"} / node_filesystem_size_bytes{fstype=~"tmpfs|ext4"} * 100) > 5

MySql信息模版查询

MySQL下线:mysql_up == 0
QPS 过高:rate(mysql_global_status_questions[5m]) > 1500
连接次数过多:rate(mysql_global_status_threads_connected[5m]) > 300
慢查询过多:rate(mysql_global_status_slow_queries[5m]) > 0
线程停止:mysql_slave_status_slave_sql_running != 0
IO停止:mysql_slave_status_slave_io_running != 0

注意: 语句后面的值需要根据自己的需求配置 触发
如果配置完告警信息,报警没有触发需要检查语句
之前磁盘数据不上报是因为 数据匹配不上导致,需要在数据收集页面查看修改,重新匹配

使用 docker 搭建 grafana+prometheus+AlertManager 邮件报警(肆)_第9张图片

服务器告警参考配置:https://www.kancloud.cn/pshizhsysu/prometheus/1803806
告警规则说明:https://help.aliyun.com/document_detail/196117.html

你可能感兴趣的:(#,docker,运维)