#!/bin/bash
#Written by carl zhang
#This Nagios plugin can be check your mysql connections status
USAGE_Method="$(basename $0) [-w|--warning] [-c|--critical] " ### basename $0 显示$0基本名称 $0指脚本名称
USAGE_Value="WARNING value must be small than CRITICAL value: `basename $0` $*" ### $* 显示向脚本传来的所有参数
MYSQLUSER=nagios #### mysql 连接用户名
MYSQLPS=nagiosadmin #### mysql 连接密码
MYSQLBIN=/usr/local/mysql/bin/mysql ####mysql 安装路径
STATE_OK=0
STATE_WARNING=1
STATE_CRITICAL=2
STATE_UNKNOWN=3
if [ $# -lt 4 ];then
echo
echo "Usage: $USAGE_Method"
echo
exit 0
fi
while [ $# -gt 0 ];do
case "$1" in
-w|--warning)
shift ##### linux shell 中shift 表示执行一次 传递的参数提前一位 即减少执行shift 前的变量 提交下一个变量
WARNING=$1
;;
-c|--critical)
shift
CRITICAL=$1
;;
esac
shift
done
if [[ $WARNING -eq $CRITICAL || $WARNING -gt $CRITICAL ]]
then
echo
echo "$USAGE_Value"
echo
echo "Usage: $USAGE_Method"
echo
exit 0
fi
used_connections=$($MYSQLBIN -u$MYSQLUSER -p$MYSQLPS -e "show status like 'Threads_connected'\G" | grep "Value" | awk '{print $2}')
max_connections=$($MYSQLBIN -u$MYSQLUSER -p$MYSQLPS -e "show variables like 'max_connections'\G" | grep "Value" | awk '{print $2}')
PERCENT=$(bc <<< "scale=2;$used_connections/$max_connections" | tr '^.' ' ') #### bc 看作linux中计算器,scale 定义小数位后的数量(目前发现只对除法适用,并不会四舍五入) tr string2 替换 string1 ,因为scale 已经定义小数位后的数量,所以tr 替换后将被删除。
if [[ "$PERCENT" -gt "$CRITICAL" ]]
then
echo "CRITICAL - used_connections is : $used_connections"
exit 2
fi
if [[ "$PERCENT" -gt "$WARNING" && "$PERCENT" -lt "$CRITICAL" ]]
then
echo "WARNING - used_connections is : $used_connections"
exit 1
fi
if [[ "$PERCENT" -lt "$WARNING" ]]
then
echo "OK - used_connections is : $used_connections"
exit 0
fi
因为这里涉及到mysql数据库的权限,因此需要在mysql中添加naigos帐号,这一步操作命令如下:
GRANT PROCESS, FILE, SUPER, REPLICATION CLIENT ON *.* TO 'nagios'@'localhost' IDENTIFIED BY 'nagiosadmin';
FLUSH PRIVILEGES;
第二步:配置nrpe.cnf配置文件,定义获取数据的命令,以供nagios服务器端调用,配置如下:
vim /usr/local/nagios/etc/nrpe.cfg
command[check_mysql_connections]=/usr/local/nagios/libexec/check_mysql_connections -w 75 -c 85
###### -w -c 后的数值为 百分比数值 可参考脚本 $PERCENT的值
保存后,重新启动nrpe客户端,执行如下命令:
killall nrpe
/usr/local/nagios/bin/nrpe -c /usr/local/nagios/etc/nrpe.cfg -d
第三步:在nagios服务器端配置服务器调用该命令进行监控,配置如下:
define service {
use generic-service
host_name zhongshan_server_xx_xxx
service_description check_mysql_connections
check_period 24x7
notifications_enabled 1
max_check_attempts 3
normal_check_interval 3
retry_check_interval 2
contact_groups dbadmins
notification_interval 10
notification_period 24x7
notification_options w,u,c,r
check_command check_nrpe!check_mysql_connections
}
最后检查配置问题以后,重新加载nagios的配置,具体操作命令如下:
/etc/rc.d/init.d/nagios checkconfig
/etc/rc.d/init.d/nagios reload