prometheus监控mysql主从状态

  • mysql主从节点设置
  • prometheus端设置
  • 配置grafana
  • 设置alertmanager报警
  • 为什么我没收到告警信息?


mysql主从节点设置

客户机

所属服务

192.168.107.167

mysql主节点(master)

192.168.107.168

mysql从节点(slave)

对两台客户端分别安装mysql并设置主从关系

PrometheusAlert 微信告警样式 添加告警路由 prometheus短信告警_sql


192.168.107.167(master节点)设置主从复制的用户

PrometheusAlert 微信告警样式 添加告警路由 prometheus短信告警_mysql_02


mysql主从节点分别在配置文件中设置server-id,master需要开启binlog日志 不指定路径就是默认存放data,然后重启mysqld服务

PrometheusAlert 微信告警样式 添加告警路由 prometheus短信告警_prometheus_03


在从库上设置主从的信息

PrometheusAlert 微信告警样式 添加告警路由 prometheus短信告警_grafana_04

然后启动slave,查看slave的状态

PrometheusAlert 微信告警样式 添加告警路由 prometheus短信告警_mysql_05


PrometheusAlert 微信告警样式 添加告警路由 prometheus短信告警_配置文件_06


然后我们这两台主从上安装mysqld_exporter,用作prometheus的监控 官网下载文档

PrometheusAlert 微信告警样式 添加告警路由 prometheus短信告警_sql_07


下载好以后分别解压并移动到/usr/local下

tar -zxvf mysqld_exporter-0.15.0.linux-amd64.tar.gz && mv mysqld_exporter-0.15.0.linux-amd64 /usr/local/mysqld_exporter

PrometheusAlert 微信告警样式 添加告警路由 prometheus短信告警_grafana_08


然后进入两台数据库创立一个供mysqld_exporter监控端的用户

我这里使用的mysql5.7创建用户和设置权限同步进行的

PrometheusAlert 微信告警样式 添加告警路由 prometheus短信告警_mysql_09


在/usr/local/mysqld_exporter下创建一个my.cnf作为mysql_exporter服务的配置文件

PrometheusAlert 微信告警样式 添加告警路由 prometheus短信告警_mysql_10


我这里设置一个将其添加到systemctl管理中并且让他在mysqld启动后自启

[Unit]
Description=MySQL Exporter
After=mysqld.service

[Service]
ExecStart=/usr/local/mysqld_exporter/mysqld_exporter --config.my-cnf=/usr/local/mysqld_exporter/my.cnf
Restart=always

[Install]
WantedBy=multi-user.target

PrometheusAlert 微信告警样式 添加告警路由 prometheus短信告警_prometheus_11

刷新一下systemctl服务,然后启动看一下

PrometheusAlert 微信告警样式 添加告警路由 prometheus短信告警_prometheus_12


PrometheusAlert 微信告警样式 添加告警路由 prometheus短信告警_prometheus_13

prometheus端设置

客户端

部署服务

192.168.107.166

部署prometheus服务

安装prometheus可见文章prometheus的安装部署

打开prometheus的配置文件增加这两台主机

- job_name: 'mysql_node1'
    static_configs:
      - targets: ["192.168.107.167:9104"]
  - job_name: 'mysql_node2'
    static_configs:
      - targets: ["192.168.107.168:9104"]

PrometheusAlert 微信告警样式 添加告警路由 prometheus短信告警_配置文件_14


然后重启prometheus服务,进入web界面看一下是否增加

PrometheusAlert 微信告警样式 添加告警路由 prometheus短信告警_配置文件_15

配置grafana

安装好grafana以后启动服务,进入web界面-首先添加源

PrometheusAlert 微信告警样式 添加告警路由 prometheus短信告警_mysql_16


然后再仪表盘中新建导入:

PrometheusAlert 微信告警样式 添加告警路由 prometheus短信告警_prometheus_17


PrometheusAlert 微信告警样式 添加告警路由 prometheus短信告警_grafana_18


PrometheusAlert 微信告警样式 添加告警路由 prometheus短信告警_mysql_19


选择prometheus然后导入

PrometheusAlert 微信告警样式 添加告警路由 prometheus短信告警_prometheus_20


PrometheusAlert 微信告警样式 添加告警路由 prometheus短信告警_配置文件_21

设置alertmanager报警

首先我们给监控项设置一个触发器即规则

mkdir /usr/local/prometheus/rules/
vim /usr/local/prometheus/rules/mysql.yml
groups:
- name: Mysql-rules
  rules:
  - alert: Mysql status
    expr: mysql_up == 0
    for: 5s
    labels:
      severity: error
    annotations:
      summary: "您的 {{ $labels.instance }} 的Mysql已停止运行!"
      description: "Mysql数据库宕机,请检查"

  - alert: Mysql slave io thread status
    expr: mysql_slave_status_slave_io_running == 0
    for: 5s
    labels:
      severity: error
    annotations:
      summary: "您的 {{ $labels.instance }} Mysql slave io thread已停止"
      description: "Mysql主从IO线程故障,请检测"

  - alert: Mysql slave sql thread status
    expr: mysql_slave_status_slave_sql_running == 0
    for: 5s
    labels:
      severity: error
    annotations:
      summary: "您的 {{ $labels.instance }} Mysql slave sql thread已停止"
      description: "Mysql主从sql线程故障,请检测"

Mysql-rules组下有三个,分别检测

检测项

含义

mysql_up

mysql服务状态

mysql_slave_status_slave_io_running

mysql主从复制的io线程状态

mysql_slave_status_slave_sql_running

mysql主从复制的sql线程状态

mysql的状态,io线程状态以及sql线程状态,这三个指令都是可以在prometheus所识别到的

PrometheusAlert 微信告警样式 添加告警路由 prometheus短信告警_sql_22


PrometheusAlert 微信告警样式 添加告警路由 prometheus短信告警_prometheus_23


PrometheusAlert 微信告警样式 添加告警路由 prometheus短信告警_prometheus_24


修改一下prometheus的配置文件,然后重启prometheus服务,这里我们顺便把alertmanager的配置也写上

PrometheusAlert 微信告警样式 添加告警路由 prometheus短信告警_grafana_25

查看prometheus的web页面的rules规则里面是否存在

PrometheusAlert 微信告警样式 添加告警路由 prometheus短信告警_grafana_26


下载alertmanager,并解压到/usr/local下

官网下载地址

PrometheusAlert 微信告警样式 添加告警路由 prometheus短信告警_prometheus_27

tar -zxvf alertmanager-0.26.0.linux-amd64.tar.gz && mv alertmanager-0.26.0.linux-amd64 /usr/local/alertmanager

我这里使用的是钉钉报警,下载插件并解压,修改配置文件,详情见prometheus的部署安装钉钉报警

配制好webhook的配置文件

PrometheusAlert 微信告警样式 添加告警路由 prometheus短信告警_sql_28


写入systemctl管理服务

//vim /usr/lib/systemd/system/prometheus-webhook.service
[Unit]
Description=Prometheus Webhook
After=alertmanager.service

[Service]
WorkingDirectory=/usr/local/prometheus-webhook
ExecStart=/usr/local/prometheus-webhook/prometheus-webhook-dingtalk --config.file=/usr/local/prometheus-webhook/config.yml
Restart=on-failure

[Install]
WantedBy=multi-user.target

刷新服务

systemctl daemon-reload

随后我们设置一下alertmanager的配置文件里面钉钉报警

global:
  resolve_timeout: 5m
route:
  group_by: ['alertname']
  group_wait: 20s
  group_interval: 5m
  repeat_interval: 5m
  receiver: 'dingding'
receivers:
- name: 'dingding'
  webhook_configs:
  - url: http://localhost:8060/dingtalk/webhook1/send
    send_resolved: true
inhibit_rules:
  - source_match:
      severity: 'critical'
    target_match:
      severity: 'warning'
    equal: ['alertname', 'dev', 'instance']

随后我们启动两个服务:

systemctl start alertmanager.service prometheus-webhook.service

查看端口是否起来

PrometheusAlert 微信告警样式 添加告警路由 prometheus短信告警_mysql_29


随后进行测试,停掉从节点上面的mysqld服务

PrometheusAlert 微信告警样式 添加告警路由 prometheus短信告警_mysql_30


查看prometheus的web页面已经发生告警

PrometheusAlert 微信告警样式 添加告警路由 prometheus短信告警_mysql_31


之前有一个误区就是为什么监控的9100端口

PrometheusAlert 微信告警样式 添加告警路由 prometheus短信告警_grafana_32


然后停掉mysqld他会告警,这里我们需要明白的是,我们监控的是9100端口mysqld_exporter服务,但是我们设置的监控规则告警信息是mysql_up,这个是属于mysqld_exporter服务其中的一种哦

PrometheusAlert 微信告警样式 添加告警路由 prometheus短信告警_prometheus_33

为什么我没收到告警信息?

检查你的alertmanager配置,里面指定的是否正确

如果是钉钉检查钉钉插件里面的config.yml文件是否正确

最重要的一点,如果你确信上面两个没错,那就请检查一下prometheus的配置文件里面.alter报警是否指向了正确的

PrometheusAlert 微信告警样式 添加告警路由 prometheus短信告警_sql_34