背景:

由于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