prometheus监控mysql主从状态
- mysql主从节点设置
- prometheus端设置
- 配置grafana
- 设置alertmanager报警
- 为什么我没收到告警信息?
mysql主从节点设置
客户机 | 所属服务 |
192.168.107.167 | mysql主节点(master) |
192.168.107.168 | mysql从节点(slave) |
对两台客户端分别安装mysql并设置主从关系
192.168.107.167(master节点)设置主从复制的用户
mysql主从节点分别在配置文件中设置server-id,master需要开启binlog日志 不指定路径就是默认存放data,然后重启mysqld服务
在从库上设置主从的信息
然后启动slave,查看slave的状态
然后我们这两台主从上安装mysqld_exporter,用作prometheus的监控 官网下载文档
下载好以后分别解压并移动到/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
然后进入两台数据库创立一个供mysqld_exporter监控端的用户
我这里使用的mysql5.7创建用户和设置权限同步进行的
在/usr/local/mysqld_exporter下创建一个my.cnf作为mysql_exporter服务的配置文件
我这里设置一个将其添加到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
刷新一下systemctl服务,然后启动看一下
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"]
然后重启prometheus服务,进入web界面看一下是否增加
配置grafana
安装好grafana以后启动服务,进入web界面-首先添加源
然后再仪表盘中新建导入:
选择prometheus然后导入
设置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所识别到的
修改一下prometheus的配置文件,然后重启prometheus服务,这里我们顺便把alertmanager的配置也写上
查看prometheus的web页面的rules规则里面是否存在
下载alertmanager,并解压到/usr/local下
tar -zxvf alertmanager-0.26.0.linux-amd64.tar.gz && mv alertmanager-0.26.0.linux-amd64 /usr/local/alertmanager
我这里使用的是钉钉报警,下载插件并解压,修改配置文件,详情见prometheus的部署安装钉钉报警
配制好webhook的配置文件
写入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
查看端口是否起来
随后进行测试,停掉从节点上面的mysqld服务
查看prometheus的web页面已经发生告警
之前有一个误区就是为什么监控的9100端口
然后停掉mysqld他会告警,这里我们需要明白的是,我们监控的是9100端口mysqld_exporter服务,但是我们设置的监控规则告警信息是mysql_up,这个是属于mysqld_exporter服务其中的一种哦
为什么我没收到告警信息?
检查你的alertmanager配置,里面指定的是否正确
如果是钉钉检查钉钉插件里面的config.yml文件是否正确
最重要的一点,如果你确信上面两个没错,那就请检查一下prometheus的配置文件里面.alter报警是否指向了正确的