背景:
由于zabbix3.4里面的mysql监控模板没有监控mysql的key,所以需要自己重新定义需要监控的key。
Zabbix Server与Agent之间监控数据的采集主要是通过Zabbix Server主动向Agent询问某个Key的值, Agent会根据Key去调用相应的函数去获取这个值并返回给Server端。
监控需求:
1、监控MySQL的状态,当状态发生异常,发出报警;
2、监控MySQL的操作,并用图表展现;
3、使用自定义脚本监控扩展Agent。
Agent工作原理:
Agent 安装在被监控主机上,定期主动的监控本机的资源和应用,然后将数据进行处理发送给ZabbixServer. Agent工作方式又分为Passive Check 和 Active Check。
Passive Check: Zabbix Server 发起数据索取请求,Agent响应对应的数据.
Active Check: Agent首先从Zabbix Server 检索监控项列表,然后定期将对应的数据主动的发送到.Zabbix ServerZabbix Agent 本身预定义了一些监控类型,而对于没有预定义的需要管理员自行定义.因此,Zabbix提供了”UserParameter”参数,以方便用户根据自己的需求自定义想要获取的数据.
“UserParameter” 语法:
UserParameter=<key>,<command>
用户自定义一个key; 为命令,该命令用来获取用户想要监控的数据,也就是key的值;
定好UserParameter参数后,在为主机或者模板配置监控项的时候,在”key”中输入上面自定义的key的
名字就可以了.
假如我要获取Mysql Server的版本,我可以这样定义”UserParameter”:
打开 Zabbix Agent安装路径下的 ../etc/zabbix_agentd.conf 配置文件,翻页到最后页面,键入如下
行:
UserParameter=mysql.version,mysql -V
这里我们自定义的key名就是"mysql.version",命令"mysql -V"用来获取Mysql 版本号,其实就是key对
应的值.
UserParameter参数实现的原理通俗来讲,就是我们先要熟悉Mysql命令,通过Mysql的命令获取想要的
数据,然后赋值给自定义的key,最后通过Zabbix Server获取这个值通过图像等方式展示出来。
.
下面利用Agent来实现对mysql性能的监控。
环境:
zabbix服务器端: ip:10.0.0.20
agent客户端:ip:10.0.0.9
下面配置都在agent客户端配置:
1)复制mysql模板配置文件到agent的扩展目录下面:
cp /server/tools/zabbix-3.4.13/conf/zabbix_agentd/userparameter_mysql.conf /application/zabbix/etc/zabbix_agentd.conf.d/
2)此文件已有内容,删除掉,添加下面的内容:
vim userparameter_mysql.conf
UserParameter=mysql.version,mysql -V
UserParameter=mysql.status[*],/application/zabbix/scripts/chk_mysql.sh $1
有关‘UserParameter’上面已经解释,这里重复了。
3)在agentd的配置文件中加上下面的内容:Include=/application/zabbix/etc/zabbix_agentd.conf.d ##开启扩展模块。
4)建立mysql检查脚本:
mkdir /application/zabbix/scripts
touch chk_mysql.sh
chmod 755 chk_mysql.sh
chk_mysql.sh的脚本内容如下:
#Filename:chk_mysql.sh
#Author:syk
MYSQL_SOCK="/var/lib/mysql/mysql.sock"
MYSQL_USER='root'
MYSQL_PASSWORD='123456'
MYSQL_HOST='10.0.0.9'
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 | cut -d ":" -f 2 | cut -d " " -f 2`
echo $result
;;
Slow_queries) #查看当前慢查询语句的个数
result=`${MYSQL_Connect} extended-status | grep -w "Slow_queries" | cut -d "|" -f 3`
echo $result
;;
Com_rollback) #执行回滚的个数
result=`${MYSQL_Connect} extended-status | grep -w "Com_rollback" | cut -d "|" -f 3`
echo $result
;;
Questions)
result=`${MYSQL_Connect} extended-status | grep -w "Questions" | cut -d "|" -f 3`
echo $result
;;
Com_commit)
result=`${MYSQL_Connect} extended-status | grep -w "Com_commit" | cut -d "|" -f 3`
echo $result
;;
Bytes_sent) #发送的字节数
result=`${MYSQL_Connect} extended-status | grep -w "Bytes_sent" | cut -d "|" -f 3`
echo $result
;;
Bytes_received) #接受的字节数
result=`${MYSQL_Connect} extended-status | grep -w "Bytes_received" | cut -d "|" -f 3`
echo $result
;;
Com_begin)
result=`${MYSQL_Connect} extended-status | grep -w "Com_begin" | cut -d "|" -f 3`
echo $result
;;
Open_tables) #查看当前打开的表数量
result=`${MYSQL_Connect} status | cut -d ":" -f 5 | cut -d " " -f 2`
echo $result
;;
Threads_connected) #查看当前打开的连接数量
result=`${MYSQL_Connect} extended-status | grep -w "Threads_connected" | cut -d "|" -f 3`
echo $result
;;
Threads_cached) #查看线程缓存内的线程数量
result=`${MYSQL_Connect} extended-status | grep -w "Threads_cached" | cut -d "|" -f 3`
echo $result
;;
Threads_created) #查看创建用来处理连接的线程数。如果Threads_created较大,可能要增加thread_cache_size值。
result=`${MYSQL_Connect} extended-status | grep -w "Threads_created" | cut -d "|" -f 3`
echo $result
;;
Threads_running) #查看激活的(非睡眠状态)线程数
result=`${MYSQL_Connect} extended-status | grep -w "Threads_running" | cut -d "|" -f 3`
echo $result
;;
Slow_launch_threads) #查看创建时间超过slow_launch_time秒的线程数
result=`${MYSQL_Connect} extended-status | grep -w "Slow_launch_threads" | cut -d "|" -f 3`
echo $result
;;
Com_select) #查看select语句的执行数
result=`${MYSQL_Connect} extended-status | grep -w "Com_select" |cut -d "|" -f 3`
echo $result
;;
Com_insert) #查看insert语句的执行数
result=`${MYSQL_Connect} extended-status | grep -w "Com_insert" |cut -d "|" -f 3`
echo $result
;;
Com_update) #查看update语句的执行数
result=`${MYSQL_Connect} extended-status | grep -w "Com_update" | cut -d "|" -f 3`
echo $result
;;
Com_delete) #查看delete语句的执行数
result=`${MYSQL_Connect} extended-status | grep -w "Com_delete" | cut -d "|" -f 3`
echo $result
;;
Connections) #查看试图连接到MySQL(不管是否连接成功)的连接数
result=`${MYSQL_Connect} extended-status | grep -w "Connections" | cut -d "|" -f 3`
echo $result
;;
Table_locks_immediate) #查看立即获得的表的锁的次数
result=`${MYSQL_Connect} extended-status | grep -w "Table_locks_immediate" | cut -d "|" -f 3`
echo $result
;;
Table_locks_waited) #查看不能立即获得的表的锁的次数。如果该值较高,并且有性能问题,你应首先优化查询,然后拆分表或使用复制
result=`${MYSQL_Connect} extended-status | 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
5)
测试:服务器测试
[root@ZabbixServer zabbix]# /application/zabbix/bin/zabbix_get -s 10.0.0.9 -k "mysql.version"
mysql Ver 14.14 Distrib 5.1.73, for redhat-linux-gnu (x86_64) using readline 5.1
后面只需要在web界面添加mysql监控模板即可。
模板选择:Template DB MySQL