ZABBIX监控Mysql数据库实战

2020-03-12  本文已影响0人  summer_zhou

一、Zabbix自定义Key监控Mysql

Mysql的基础监控
Zabbix Agent的安装
进程存活
检测端口

Mysql的高级监控说明
Mysql提供show global status可以实现对Mysql的高级监控
高级监控包含监控Mysql连接数,增删改查数,流量等


Mysql全局变量.png

开通最小权限用户,保证安全
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


示例1

服务端测试能否获取到值
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 12 2>/dev/null
重启Agent

脚本示例1
脚本示例2

创建监控模板,新建一个监控模板
监控模板名称: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主从状态
最重要的是发现端口

上一篇下一篇

猜你喜欢

热点阅读