
Zabbix-agent:3.0.8,安装模式是/etc/zabbix/
Mysql:5.7.10,安装路径是/opt/mysql/
配置/etc/sudoers让zabbix用户可以使用sudo,如下:
1
2
3
4
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
zabbix ALL=(ALL) NOPASSWD:ALL
Defaults:zabbix !requiretty
众所周知,Zabbix官方提供了自带监控Mysql的模板zabbix监控mysql,但是这个模板并不能直接使用。所以我们必须有如下的改动:

首先,先在mysql目录下的etc文件夹里先创建一个.my.cnf文件,全模式是/opt/mysql/etc/.my.cnf,这个文件是zabbix要求的用于储存连接mysql的账号信息的隐藏文件,这样可以规避在命令行里输入密码。整个.my.cnf文件内容如下:
1
2
3
4
5
6
7
8
9
10
11
[mysql] #mysql程序要使用的账户信息
host=localhost
user=用户名
password="密码" #此处的密码强烈建议加上引号
socket=/tmp/mysql.sock #确认mysql的sock文件路径
[mysqladmin] #mysqladmin程序要使用的账户信息
host=localhost
user=用户名
password="密码"
socket=/tmp/mysql.sock
这里建议在mysql里插入一个叫zabbix的用户,密码自己设置,然后在.my.cnf里就是用这个用户就能。此时,在命令行直接键入HOME=/opt/mysql/etc/ mysql和HOME=/opt/mysql/etc/ mysqladmin ping都必须是直接出结果,而不是用输入账号和密码,如图:

注意!这个.my.cnf的权限是644,用户和用户组是root,如果权限过大,那么启动mysql时才会报错:Warning: World-writable config file '/opt/mysql/etc/.my.cnf' is ignored。

然后在zabbix-agent配置文件的文件夹/etc/zabbix/zabbix_agentd.d/里,会看到一个叫userparameter_mysql.conf的文件zabbix监控mysql,把上面的内容改成如下样子:
1
2
3
4
5
6
7
# For all the following commands HOME should be set to the directory that has .my.cnf file with password information.
# Flexible parameter to grab global variables. On the frontend side, use keys like mysql.status[Com_insert].
# Key syntax is mysql.status[variable].
UserParameter=mysql.status[*],echo "show global status where Variable_name='$1';" | sudo HOME=/opt/mysql/etc /opt/mysql/bin/mysql -N | awk '{print $$2}'
UserParameter=mysql.ping,sudo HOME=/opt/mysql/etc/ /opt/mysql/bin/mysqladmin ping | grep -c alive
UserParameter=mysql.version,/opt/mysql/bin/mysql -V
这个文件第一行注释的内容就是说明HOME路径就是.my.cnf文件所在的模式,后面的mysql和mysqladmin都应用绝对路径,同时加上sudo,这样zabbix才能恰当的调用它。
来到zabbix-server端使用zabbix-get去试试结果:


然后就是在zabbix网页端将目标机器添加Template DB MySQL,至此,使用zabbix自带的mysql监控模板监控mysql就结束了,效果如下:

上面那些模板是不具有监控连接数的,要是单纯的去使用netstat获取当前链接值可能会反应较慢,那么就是用mysql自带的查连接数的命令:show status like '%connect%';,执行效果如下:

简单说下这几个值的意思:
Connections:试图连接至(不管是否顺利)MYSQL服务器的连接总数Locked_connects:锁住的链接数Max_used_connections:服务器启动后终于同时使用过的连接最大数量(并发)Max_used_connections_time:出现Max_used_connections时的时间Aborted_connects:尝试连接至MySQL服务器失败的数量Threads_connected:当前的连接数

那么清楚了意义,我们就可以对症下药了,这里我们监控两个数值Locked_connects和Threads_connected,那么就把以下的句子添加到userparameter_mysql.conf里:
1
2
3
UserParameter=mysql.connections,echo "show status like '%Threads_connected%';" | sudo HOME=/opt/mysql/etc /opt/mysql/bin/mysql -N | awk '{print $2}'
UserParameter=mysql.lockconnections,echo "show status like '%Locked_connects%';" | sudo HOME=/opt/mysql/etc /opt/mysql/bin/mysql -N | awk '{print $2}'
UserParameter=mysql.rowofalarm,echo "select count(*) from alarm.adm_log_alarm;" | sudo HOME=/opt/mysql/etc /opt/mysql/bin/mysql -N | awk '{print $1}' #这个是检测alarm.adm_log_alarm的数据行数
重启zabbix-agent,配置对应的items和trigger即可。
额外补充一下,查看mysql对应每个IP的具体链接情况的语句是:
1
select substring_index(host,':',1) as ip , count(*) from information_schema.processlist group by ip;
效果如下:

(其他mysql状态监控语句)
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/ruanjian/article-139157-1.html
去
rap更是垃圾