使用 docker 搭建 grafana+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://<ip>:9093/#/alerts
在这里插入图片描述

二、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://<ip>:9093/#/status检查是否配置成功
    在这里插入图片描述

  3. 查看服务器内存占用来测试告警推送(我这边占用55%左右,所以我设置55%)
    在这里插入图片描述
    静止10分钟等待推送消息
    正常状态
    在这里插入图片描述

异常告警状态
在这里插入图片描述
在这里插入图片描述

告警详情
在这里插入图片描述

在这里插入图片描述

优化报警模版

服务器信息模版查询

内存:(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

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

在这里插入图片描述

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

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,以下是一个基于Docker Compose的搭建PrometheusGrafanaAlertmanager、Blackbox Exporter和Node Exporter的示例: ```yaml version: "3" services: prometheus: image: prom/prometheus container_name: prometheus ports: - "9090:9090" volumes: - ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml command: - '--config.file=/etc/prometheus/prometheus.yml' - '--web.enable-admin-api' restart: always grafana: image: grafana/grafana container_name: grafana ports: - "3000:3000" volumes: - ./grafana:/var/lib/grafana restart: always alertmanager: image: prom/alertmanager container_name: alertmanager ports: - "9093:9093" volumes: - ./alertmanager/config.yml:/etc/alertmanager/config.yml command: - '--config.file=/etc/alertmanager/config.yml' restart: always blackbox-exporter: image: prom/blackbox-exporter container_name: blackbox-exporter ports: - "9115:9115" volumes: - ./blackbox-exporter/config.yml:/etc/blackbox-exporter/config.yml command: - '--config.file=/etc/blackbox-exporter/config.yml' restart: always node-exporter: image: prom/node-exporter container_name: node-exporter ports: - "9100:9100" restart: always ``` 需要注意的是,这里的配置文件都需要自己创建并且挂载到对应的容器中。例如,prometheus.yml、config.yml和config.yml分别对应PrometheusAlertmanager和Blackbox Exporter的配置文件。同时,Grafana的数据目录也需要挂载到主机上以便数据持久化。 另外,需要注意的是这只是一个示例,具体的配置文件需要根据实际情况进行修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Song_Lun

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值