监控MySQL脚本

来自运维百科

建立mysql检查脚本:

mkdir /application/zabbix/scripts
touch chk_mysql.sh
chmod 755 chk_mysql.sh
vim chk_mysql.sh
# 用户名
#MYSQL_USER='zabbix'
# 密码
#MYSQL_PWD='zabbix'   #在脚本中输入密码mysql会提示安全告警信息#Warning: Using a password on the command line interface can be #insecure,需要将帐号密码 等配置添加到mysql配置文件my.cnf中即可,脚本中#不用输入账号密码
# 主机地址/IP
MYSQL_HOST='127.0.0.1'
# 端口
MYSQL_PORT='3306'
# 数据连接
MYSQL_CONN="/usr/bin/mysqladmin -u${MYSQL_USER} -p${MYSQL_PWD} -h${MYSQL_HOST} -P${MYSQL_PORT}"
# 参数是否正确
if [ $# -ne "1" ];then 
   echo "arg error!" 
fi 
# 获取数据
case $1 in 
   Uptime) 
       result=`${MYSQL_CONN} status|cut -f2 -d":"|cut -f1 -d"T"` 
       echo $result 
       ;; 
   Com_update) 
       result=`${MYSQL_CONN} extended-status |grep -w "Com_update"|cut -d"|" -f3` 
       echo $result 
       ;; 
   Slow_queries) 
       result=`${MYSQL_CONN} status |cut -f5 -d":"|cut -f1 -d"O"` 
       echo $result 
       ;; 
   Com_select) 
       result=`${MYSQL_CONN} extended-status |grep -w "Com_select"|cut -d"|" -f3` 
       echo $result 
               ;; 
   Com_rollback) 
       result=`${MYSQL_CONN} extended-status |grep -w "Com_rollback"|cut -d"|" -f3` 
               echo $result 
               ;; 
   Questions) 
       result=`${MYSQL_CONN} status|cut -f4 -d":"|cut -f1 -d"S"` 
               echo $result 
               ;; 
   Com_insert) 
       result=`${MYSQL_CONN} extended-status |grep -w "Com_insert"|cut -d"|" -f3` 
               echo $result 
               ;; 
   Com_delete) 
       result=`${MYSQL_CONN} extended-status |grep -w "Com_delete"|cut -d"|" -f3` 
               echo $result 
               ;; 
   Com_commit) 
       result=`${MYSQL_CONN} extended-status |grep -w "Com_commit"|cut -d"|" -f3` 
               echo $result 
               ;; 
   Bytes_sent) 
       result=`${MYSQL_CONN} extended-status |grep -w "Bytes_sent" |cut -d"|" -f3` 
               echo $result 
               ;; 
   Bytes_received) 
       result=`${MYSQL_CONN} extended-status |grep -w "Bytes_received" |cut -d"|" -f3` 
               echo $result 
               ;; 
   Com_begin) 
       result=`${MYSQL_CONN} extended-status |grep -w "Com_begin"|cut -d"|" -f3` 
               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

以下几个参数对Myisam 和Innodb 存储引擎都计数:

1. Com_select 执行select 操作的次数,一次查询只累加1;

2. Com_insert 执行insert 操作的次数,对于批量插入的insert 操作,只累加一次;

3. Com_update 执行update 操作的次数;

4. Com_delete 执行delete 操作的次数;

以下几个参数是针对Innodb 存储引擎计数的:

1. Innodb_rows_read select 查询返回的行数;

2. Innodb_rows_inserted 执行Insert 操作插入的行数;

3. Innodb_rows_updated 执行update 操作更新的行数;

4. Innodb_rows_deleted 执行delete 操作删除的行数;

通过以上几个参数,可以很容易的了解当前数据库的应用是以插入更新为主还是以查询操作为主,以及各种类型的SQL 大致的执行比例是多少。对于更新操作的计数,是对执行次数的计数,不论提交还是回滚都会累加。对于事务型的应用,通过Com_commit 和Com_rollback 可以了解事务提交和回滚的情况,对于回滚操作非常频繁的数据库,可能应用编写存在问题。 另外还有几个参数可以了解数据库的基本信息:

Connections 试图连接Mysql 服务器的次数

Uptime 服务器工作时间

Slow_queries 慢查询的次数

增加免密帐号

在脚本中输入密码mysql会提示安全告警信息使zabbix获取不到正确数据,(Warning: Using a password on the command line interface can be insecure),需要将帐号密码等配置添加到mysql配置文件my.cnf中即可,脚本中不用输入账号密码

cat /etc/my.cnf
[client]
user=zabbix
password=zabbix
zabbix_agentd添加用户参数
vim userparameter_mysql.conf 
UserParameter=mysql.version,mysql -V
UserParameter=mysql.status[*],/application/zabbix/scripts/chk_mysql.sh $1

服务器测试

/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


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获取这个值通过图像等方式展示出来。