事前准备
Zabbix-agent:3.0.8
,安装路径是/etc/zabbix/
Mysql:5.7.10
,安装路径是/opt/mysql/
配置/etc/sudoers
让zabbix用户可以使用sudo,如下:
1 | ## Allow root to run any commands anywhere |
配置.my.cnf
众所周知,Zabbix官方提供了自带监控Mysql的模板,但是这个模板并不能直接使用。所以我们需要有如下的改动:
首先,先在mysql目录下的etc文件夹里先创建一个.my.cnf
文件,全路径是/opt/mysql/etc/.my.cnf
,这个文件是zabbix要求的用于存放连接mysql数据库的账户信息的隐藏文件,这样可以避免在命令行里输入密码。整个.my.cnf
文件内容如下:
1 | [mysql] #mysql程序要使用的账户信息 |
这里建议在mysql里插入一个叫zabbix的用户,密码自己设定,然后在 akb48.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
。
修改userparameter_mysql.conf
然后在zabbix-agent
配置文件的文件夹/etc/zabbix/zabbix_agentd.d/
里,会发现一个叫userparameter_mysql.conf
的文件,把里面的内容改成如下样子:
1 | # For all the following commands HOME should be set to the directory that has .my.cnf file with password information. |
这个文件第一行注释的内容就是说明HOME路径就是.my.cnf
文件所在的路径,后面的mysql
和mysqladmin
都要用绝对路径,同时加上sudo
,这样zabbix才能正确的调用它。
来到 akb48zabbix-server
端使用zabbix-get
去试试结果:
然后就是在zabbix网页端将目标机器添加 akb48Template DB MySQL
,至此,使用zabbix自带的mysql监控模板监控mysql数据库就结束了,效果如下:
监控连接数
上面那个模板是不带有监控连接数的,要是单纯的去使用netstat获取当前链接值可能会反应较慢,那么就是用mysql自带的查连接数的命令: akb48show 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 | UserParameter=mysql.connections,echo "show status like '%Threads_connected%';" | sudo HOME=/opt/mysql/etc /opt/mysql/bin/mysql -N | awk '{print $2}' |
重启
zabbix-agent
,配置对应的items和trigger即可。
额外补充一下,查看mysql数据库对应每个IP的详细链接情况的语句是:
1 | select substring_index(host,':',1) as ip , count(*) from information_schema.processlist group by ip; |
效果如下: akb48
参考资料
https://github.com/erasin/notes/blob/master/linux/mysql/monitor.md (其他mysql状态监控语句)
http://www.cnblogs.com/kerrycode/p/9206787.html