zabbix 使用自带模板监控mysql

时间:2021-07-25 05:45:52

1、这里可以采用zabbix自带的mysql模版,但是也需要在mysql服务器上准备获取mysql status的脚本chk_mysql.sh,zabbix通过调用这个脚本来获取mysql的运行信息。

在配置文件agent 上的 zabbix_agentd.d下面里面添加mysql监控信息:

cat /etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf

UserParameter=mysql.size[*],bash -c 'echo "select sum($(case "$3" in both|"") echo "data_length+index_length";; data|index) echo "$3_length";; free) echo "data_free";; esac)) from information_schema.tables$([[ "$1" = "all" || ! "$1" ]] || echo " where table_schema=\"$1\"")$([[ "$2" = "all" || ! "$2" ]] || echo "and table_name=\"$2\"");" | HOME=/var/lib/zabbix mysql -N'

UserParameter=mysql.ping,HOME=/etc/zabbix/ mysqladmin ping | grep -c alive
UserParameter=mysql.version,mysql -V
UserParameter=mysql.status[*],/data/service/script/zabbix/check_mysql.sh $1

2、添加监控mysql用户密码

grant usage on *.* to 'read'@'10.5.58.231' identified by '123456';

3、创建check 脚本如下:

cat /data/service/script/zabbix/check_mysql.sh
#!/bin/bash

#Filename:chk_mysql.sh
#Author:zhangjunchao

MYSQL_SOCK="/var/lib/mysql/mysql.sock"
MYSQL_USER='read'
MYSQL_PASSWORD='123456'
MYSQL_HOST='10.5.58.248'
MYSQL_PORT='3306'
MYSQL_Connect="/usr/bin/mysqladmin -u$MYSQL_USER -p$MYSQL_PASSWORD -h$MYSQL_HOST -P$MYSQL_PORT -S$MYSQL_SOCK"

if [ $# -ne 1 ];then
echo "please input one arguement"
fi

case $1 in

Uptime) #查询当前MySQL本次启动后的运行统计时间
result=`${MYSQL_Connect} status 2>/dev/null | cut -d ":" -f 2 | cut -d " " -f 2`
echo $result
;;

Slow_queries) #查看当前慢查询语句的个数
result=`${MYSQL_Connect} extended-status 2>/dev/null | grep -w "Slow_queries" | cut -d "|" -f 3`
echo $result
;;

Com_rollback) #执行回滚的个数
result=`${MYSQL_Connect} extended-status 2>/dev/null | grep -w "Com_rollback" | cut -d "|" -f 3`
echo $result
;;

Questions)
result=`${MYSQL_Connect} extended-status 2>/dev/null | grep -w "Questions" | cut -d "|" -f 3`
echo $result
;;

Com_commit)
result=`${MYSQL_Connect} extended-status 2>/dev/null | grep -w "Com_commit" | cut -d "|" -f 3`
echo $result
;;

Bytes_sent) #发送的字节数
result=`${MYSQL_Connect} extended-status 2>/dev/null | grep -w "Bytes_sent" | cut -d "|" -f 3`
echo $result
;;

Bytes_received) #接受的字节数
result=`${MYSQL_Connect} extended-status 2>/dev/null | grep -w "Bytes_received" | cut -d "|" -f 3`
echo $result
;;

Com_begin)
result=`${MYSQL_Connect} extended-status 2>/dev/null | grep -w "Com_begin" | cut -d "|" -f 3`
echo $result
;;

Open_tables) #查看当前打开的表数量
result=`${MYSQL_Connect} status 2>/dev/null | cut -d ":" -f 5 | cut -d " " -f 2`
echo $result
;;

Threads_connected) #查看当前打开的连接数量
result=`${MYSQL_Connect} extended-status 2>/dev/null | grep -w "Threads_connected" | cut -d "|" -f 3`
echo $result
;;

Threads_cached) #查看线程缓存内的线程数量
result=`${MYSQL_Connect} extended-status 2>/dev/null | grep -w "Threads_cached" | cut -d "|" -f 3`
echo $result
;;

Threads_created) #查看创建用来处理连接的线程数。如果Threads_created较大,可能要增加thread_cache_size值。
result=`${MYSQL_Connect} extended-status 2>/dev/null | grep -w "Threads_created" | cut -d "|" -f 3`
echo $result
;;

Threads_running) #查看激活的(非睡眠状态)线程数
result=`${MYSQL_Connect} extended-status 2>/dev/null | grep -w "Threads_running" | cut -d "|" -f 3`
echo $result
;;

Slow_launch_threads) #查看创建时间超过slow_launch_time秒的线程数
result=`${MYSQL_Connect} extended-status 2>/dev/null | grep -w "Slow_launch_threads" | cut -d "|" -f 3`
echo $result
;;

Com_select) #查看select语句的执行数
result=`${MYSQL_Connect} extended-status 2>/dev/null | grep -w "Com_select" |cut -d "|" -f 3`
echo $result
;;

Com_insert) #查看insert语句的执行数
result=`${MYSQL_Connect} extended-status 2>/dev/null | grep -w "Com_insert" |cut -d "|" -f 3`
echo $result
;;

Com_update) #查看update语句的执行数
result=`${MYSQL_Connect} extended-status 2>/dev/null | grep -w "Com_update" | cut -d "|" -f 3`
echo $result
;;

Com_delete) #查看delete语句的执行数
result=`${MYSQL_Connect} extended-status 2>/dev/null | grep -w "Com_delete" | cut -d "|" -f 3`
echo $result
;;

Connections) #查看试图连接到MySQL(不管是否连接成功)的连接数
result=`${MYSQL_Connect} extended-status 2>/dev/null | grep -w "Connections" | cut -d "|" -f 3`
echo $result
;;

Table_locks_immediate) #查看立即获得的表的锁的次数
result=`${MYSQL_Connect} extended-status 2>/dev/null | grep -w "Table_locks_immediate" | cut -d "|" -f 3`
echo $result
;;

Table_locks_waited) #查看不能立即获得的表的锁的次数。如果该值较高,并且有性能问题,你应首先优化查询,然后拆分表或使用复制
result=`${MYSQL_Connect} extended-status 2>/dev/null | grep -w "Table_locks_waited" | cut -d "|" -f 3`
echo $result
;;

*)
echo "Usage:$0(Uptime|Com_update|Slow_queries|Com_select|Com_rollback|Questions|Com_insert|Com_delete|Com_commit|Bytes_sent|Bytes_received|Com_begin)"
;;
esac

4、添加权限

chmod 755 /data/service/script/zabbix/check_mysql.sh

5、agent端:

mysqladmin -uread -p'123456' -h10.5.58.227 ping
mysqld is alive

如果MySQL状态正常,会显示mysqld is alive,否则会提示连接不上。

对于服务器端,mysqld is alive这样的句子不好理解,服务器端最好只接收1和0,1表示服务可用,0表示服务不可用。那么再改进一下这个命令,如下

mysqladmin -uread -p'123456' -h10.5.58.227 ping|grep -c alive

用户名和密码放在命令中对于以后的维护不好,所以我们在/etc/zabbix/下创建一个包含MySQL用户名和密码的配置文件“.my.cnf”,如下:(我这里没有这么做)

[client]
user=read
host=10.5.58.227
password=123456
有了这个文件后的命令变更为
 #  HOME=/etc/zabbix/ mysqladmin ping | grep -c alive

6、修改

在/etc/zabbix/zabbix_agentd.d/目录下创建userparameter_mysql.conf文件。在文件中添加如下命令:

# cat userparameter_mysql.conf
UserParameter=mysql.ping,HOME=/etc/zabbix/ mysqladmin ping | grep -c alive

这个命令中”UserParameter”表示这是一个用户自定义的脚本;“=”号后是脚本的内容;“mysql.ping”是Key,“,”号后的命令会在Zabbix Server向Agent发起获取“mysql.ping”这个key的请求时被调用,并将返回值返回给Server。
保存并退出后可以使用下面的命令测试是否正常工作。

客户端:

zabbix_agentd -t mysql.ping -c /etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf

mysql.ping [t|1]

zabbix_agentd -t mysql.status[Uptime] -c /etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf
mysql.status[Uptime] [t|773069]

服务端:

zabbix_agentd -t mysql.ping -c /etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf
mysql.ping [t|1]

zabbix_get -s10.5.58.227 -p 10050 -k mysql.ping
1

如果报错,提示无法通过localhost 连接,则执行如下语句。

ln -s /data/service/mysql/3306/tmpdir/mysql.sock /var/lib/mysql/mysql.sock

7、测试check_mysql

zabbix_get -s10.5.58.227 -p 10050 -k "mysql.status[Com_update]"
14480

表示成功。

8、添加监控视图

监控脚本运行正常后,就会在zabbix-server的host下面的graph里面看到mysql的监控性能视图.可以看到性能监控视图,zabbix自带模版默认有2个性能图,这些图要等运行一段时间后才能画出来:

zabbix 使用自带模板监控mysql

9、添加Myql_Status

zabbix 使用自带模板监控mysql

zabbix 使用自带模板监控mysql