一、Zabbix自定义Key监控Mysql
Mysql的基础监控
Zabbix Agent的安装
进程存活
检测端口
Mysql的高级监控说明
Mysql提供show global status可以实现对Mysql的高级监控
高级监控包含监控Mysql连接数,增删改查数,流量等
开通最小权限用户,保证安全
grant usage on . to 'monitor'@'127.0.0.1' identified by 'shijiangepwd';
flush privileges;
监控命令详解mysql -umonitor -h 127.0.0.1 -pshijiangepwd -e 'show global status'
Threads_connected:连接数
Com_select:查询总量
Com_insert:插入总量
Com_update:更新总量
Com_delete:删除总量
Bytes_received: 流入总流量
Bytes_sent:流出总流量
Slow_queries:慢查询总量
监控Shell脚本check_mysql.sh
port=$1
key=$2
mysql -umonitor -pshijiangepwd -h 127.0.0.1 -P${port} -e "show global status" |grep "${key}\s" |awk '{print $2}'
\s :匹配任意的空白符,防止有多个检索项
测试监控Shell脚本
sh /usr/local/zabbix/check_mysql.sh 3306 Threads_connected
Zabbix自定义Key配置
UserParameter=mysql.status[*],sh /usr/local/zabbix/check_mysql.sh $1 $2 2>/dev/null
重定向:不安全操作重定向
重启agent
服务端测试能否获取到值
zabbix_get -s xxx -k mysql.status[3306,Threads_connected]
zabbix_get -s xxx -k mysql.status[3306,Com_insert]
使用模板去监控Mysql,要先添加模板,才能创建自定义的监控KEY
利用自带的模板改一改
mysql.status[3306,Threads_connected]
mysql.status[3306,Com_select]
mysql.status[3306,Bytes_received]
mysql.status[3306,Bytes_sent]
写一个测试的程序我们来测一下
while true;do
mysql -h 127.0.0.1 -e "select * from test.test;insert into test.test values (2);delete from test.test;"
sleep 1
done
二、Zabbix自动发现监控Mysql
为什么要自动发现?
Mysql可能监听在不同端口,3306、3307、3308
可能一台服务器有多个Mysql实例多个监听端口
自动发现就是把监控项目里的传入的参数给变量化 mysql.status[{#ONE},Threads_connected]
Mysql自动发现脚本discovery_mysql.py,脚本在放在被监控服务器上
# -*- coding: utf-8 -*-
import json
import commands
(status,output) = commands.getstatusoutput("""sudo netstat -tlnp| grep mysqld |awk '{print $4}'|awk -F':' '{print $(NF)}'|sort | uniq""")
outputs = output.split('\n')
#print((status,outputs))
result = []
for one in outputs:
result.append( {'{#ONE}': one} )
#print(result)
print( json.dumps({'data':result},sort_keys=True,indent=4) )
Zabbix添加Sudo权限(visudo)
zabbix ALL= NOPASSWD: /bin/netstat
Defaults:zabbix !requiretty
Zabbix自定义Key配置
UserParameter=mysql.discovery,python /usr/local/zabbix/discovery_mysql.py
重启Agent
测试能否获取到值
zabbix_get -s xxx -k mysql.discovery
使用自动发现监控Mysql
mysql.status[3306,Threads_connected]
mysql.status[3306,Com_insert]
三、Zabbix监控Mysql主从同步
Mysql主从监控的必要性
如果发生主从同步异常,业务会出问题
如果从库是用来备份的,会导致数据丢失
Mysql主从同步监控说明
从库运行show slave status\G可以来查看主从同步信息
Slave IO Running可以观察从库的IO进程是否正常,IO进程用于同步二进制日志
Slave SQL Running可以观察从库的SQL进程是否正常,SQL进程用于执行二进制日志
Seconds Behind Master代表主从同步的延时时间
主从监控权限用户的创建(在被监控端用root账号创建用户)
grant usage,replication client on *.* to 'monitor'@'127.0.0.1' identified by 'shijiangepwd';
flush privileges;
监控Mysql主从的Shell脚本check_mysql_slave.sh
port=$1
key=$2
mysql -umonitor -pshijiangepwd -h 127.0.0.1 -P${port} -e "show slave status\G"|grep "${key}\:"|awk '{print $2}'
Shell脚本测试
sh check_mysql_slave.sh 3306 Slave_SQL_Running
Zabbix自定义Key监控Mysql主从
UserParameter=mysql.slave.status[*],sh /etc/zabbix/check_mysql_slave.sh 2 2>/dev/null
重启Agent
创建监控模板,新建一个监控模板
监控模板名称:Template Mysql Slave Status
mysql.slave.status[3306,Slave_IO_Running]
mysql.slave.status[3306,Slave_SQL_Running]
mysql.slave.status[3306,Seconds_Behind_Master]
也能使用自动发现监控
定义解决器来判断主从同步是否异常
两个状态都要为Yes: {Template Mysql Slave Status:mysql.slave.status[3306,Slave_IO_Running].str(Yes)}=0 or {Template Mysql Slave Status:mysql.slave.status[3306,Slave_SQL_Running].str(Yes)}=0
延时不能超过100:{Template Mysql Slave Status:mysql.slave.status[3306,Seconds_Behind_Master].last()}<100
自动发现
尝试使用自动发现去监控Mysql主从状态
最重要的是发现端口