====== Xymon-MySQLPerf ======
^ Author | [[ contato@blackballti.com | LXTI ]] |
^ Compatibility | Xymon 4.3.10 |
^ Requirements | MySQL, Linux, etc |
^ Download | None |
^ Last Update | 2013-12-13 |
===== Description =====
This xymon plugin monitors some of the most important perform variables of MySQL for the Xymon environment. Enjoy!
===== Installation =====
=== Client side ===
1. Copy xymon-mysqlperf.sh file to xymon extensions directory, usually “$XYMONCLIENTHOME/ext/”.
2. Configure xymon client to make the test, add this content to clientlaunch.cfg:
[mysqlperf]
ENVFILE $XYMONCLIENTHOME/etc/xymonclient.cfg
CMD $XYMONCLIENTHOME/ext/xymon-mysqlperf.sh
LOGFILE $XYMONCLIENTLOGS/xymon-mysqlperf.log
INTERVAL 5m
Don´t forget to set the right permissions to the files
=== Server side ===
Nothing to do here, yet.
===== Source =====
==== xymon-mysqlperf.sh ====
#!/bin/bash
#
#
#USE IT AS YOU WANT. BY LXTI -- contato@blackballti.com - 23/11/2012.
#
#
#####################
#### EXPLANATION ####
#####################
#
#For explanation about the monitored mysql variables, please see http://www.techrepublic.com/blog/opensource/10-mysql-variables-that-you-should-monitor/56.
#
#ADDING NEW VARIABLE
#
#To add new monitorable value from mysql performance table, you just need to put the name of it on MONITORADOS.
#Create new measurement variables into the "CHECK" function.
#Still in the function "CHECK" add a new case, followed by the next value of the case. See case 8, copy it to be easyer.
#Voalá.
#
#
#Especial thanks to "Melonfire" for the contribution to explain the variables measures. All rights reserved.
#http://www.techrepublic.com/blog/opensource/10-mysql-variables-that-you-should-monitor/56. Accessed 10/03/2012.
#
################################
#### VARIABLES DECLARATION #####
################################
# User used to connect to MYSQL. It is not necessary have any privileges. Use "USAGE" to give the privileges.
MYSQLUSER=xymon
# Password used for the user connection.
MYSQLPASS=123
# Variables pool monitored by the script. If you want to monitor others variables, this is the right place. Put them after all these.
MONITORADOS=(
"Threads_connected"
"Created_tmp_disk_tables"
"Handler_read_first"
"Innodb_buffer_pool_wait_free"
"Key_reads"
"Max_used_connections"
"Open_tables"
"Select_full_join"
"Slow_queries"
"Uptime"
#PUT IT HERE A NEW VARIABLE
)
# Logs files
# Change them as you want, however set the correct permission for Xymon user.
LOG1=/blackball/tmp/xymon-mysqlperf.tmp
LOG2=/blackball/tmp/xymon-mysqlperf2.tmp
STATUS=/blackball/tmp/xymon-mysqlperf-status.tmp
#Initializing new variables.
echo "" > $LOG1
echo "" > $LOG2
echo "" > $STATUS
#########################################################################
###################
#### FUNCTIONS ####
###################
# For Xymon getting the general status
function general_status {
if [ "$1" == "red" ]; then
echo "red" > $STATUS
elif [ "`cat $STATUS`" == "green" ] && [ "$1" == "yellow" ]; then
echo "yellow" > $STATUS
fi
}
# Get the values of the Variables.
function obtem_valores {
#date > $LOG1
for (( i = 0 ; i < ${#MONITORADOS[@]} ; i++ ))
do
mysql -u $MYSQLUSER -p$MYSQLPASS -e "SHOW GLOBAL STATUS WHERE Variable_name LIKE '${MONITORADOS[$i]}';" | cut -f2 | tail -n1 >> $LOG1
check $(mysql -u $MYSQLUSER -p$MYSQLPASS -e "SHOW GLOBAL STATUS WHERE Variable_name LIKE '${MONITORADOS[$i]}';" | cut -f2 | tail -n1) $i
done
}
# Verify all Variables and set the threshold for Xymon.
function check {
### SETTING MEASURES ###
#
## HOW TO USE ##
#
#By default the color yellow or red start when the definitions values get over of the values setted.
#I don't know how to know the best status value for your enviroment, so try them by yourself.
#
####################
## LET'S STARTING ##
####################
#Threads_connected
#
TC_STARTING_YELLOW=100
TC_STARTING_RED=300
#
#Created_tmp_disk_tables
#
CT_STARTING_YELLOW=6000
CT_STARTING_RED=10000
#
#Handler_read_first
#
HF_STARTING_YELLOW=200000
HF_STARTING_RED=500000
#
#Innodb_buffer_pool_wait_free
#
IF_STARTING_YELLOW=10
IF_STARTING_RED=30
#
#Key_reads
#
KR_STARTING_YELLOW=5000
KR_STARTING_RED=10000
#
#Max_used_connections
#
MC_STARTING_YELLOW=100
MC_STARTING_RED=400
#
#Open_tables
#
OT_STARTING_YELLOW=100
OT_STARTING_RED=500
#
#Select_full_join
#
SJ_STARTING_YELLOW=150
SJ_STARTING_RED=500
#
#Slow_queries
#
SQ_STARTING_YELLOW=100
SQ_STARTING_RED=500
#
#Uptime. (PS. IN THIS CASE WE WANT TO KNOW WHEN THE MYSQL WAS RESTARTED AS SOON POSSIBLE, THEN WE NEED TO MONITORING SINCE WHEN IT IS UP. IN HOURS FEWER THAT YOU WHANT TO BE GREEN)
#
UP_STARTING_RED=1
#
case "$2" in
0)
#Threads_connected
if [[ $1 -ge $TC_STARTING_YELLOW ]]; then
if [[ $1 -le $TC_STARTING_RED ]]; then
# Vai pro yellow
echo "&yellow ${MONITORADOS[$2]} ---- $1" >> $LOG2
general_status yellow
else
# Vai pro red
echo "&red ${MONITORADOS[$2]} ---- $1" >> $LOG2
general_status red
fi
else
#Vai pro green
echo "&green ${MONITORADOS[$2]} ---- $1" >> $LOG2
general_status green
fi
;;
1)
#Created_tmp_disk_tables
if [[ $1 -ge $CT_STARTING_YELLOW ]]; then
if [[ $1 -le $CT_STARTING_RED ]]; then
# Vai pro yellow
echo "&yellow ${MONITORADOS[$2]} ---- $1" >> $LOG2
general_status yellow
else
# Vai pro red
echo "&red ${MONITORADOS[$2]} ---- $1" >> $LOG2
general_status red
fi
else
#Vai pro green
echo "&green ${MONITORADOS[$2]} ---- $1" >> $LOG2
general_status green
fi
;;
2)
#Handler_read_first
if [[ $1 -ge $HF_STARTING_YELLOW ]]; then
if [[ $1 -le $HF_STARTING_RED ]]; then
# Vai pro yellow
echo "&yellow ${MONITORADOS[$2]} ---- $1" >> $LOG2
general_status yellow
else
# Vai pro red
echo "&red ${MONITORADOS[$2]} ---- $1" >> $LOG2
general_status red
fi
else
#Vai pro green
echo "&green ${MONITORADOS[$2]} ---- $1" >> $LOG2
general_status green
fi
;;
3)
#Innodb_buffer_pool_wait_free
if [[ $1 -ge $IF_STARTING_YELLOW ]]; then
if [[ $1 -le $IF_STARTING_RED ]]; then
# Vai pro yellow
echo "&yellow ${MONITORADOS[$2]} ---- $1" >> $LOG2
general_status yellow
else
# Vai pro red
echo "&red ${MONITORADOS[$2]} ---- $1" >> $LOG2
general_status red
fi
else
#Vai pro green
echo "&green ${MONITORADOS[$2]} ---- $1" >> $LOG2
general_status green
fi
;;
4)
#Key_reads
if [[ $1 -ge $KR_STARTING_YELLOW ]]; then
if [[ $1 -le $KR_STARTING_RED ]]; then
# Vai pro yellow
echo "&yellow ${MONITORADOS[$2]} ---- $1" >> $LOG2
general_status yellow
else
# Vai pro red
echo "&red ${MONITORADOS[$2]} ---- $1" >> $LOG2
general_status red
fi
else
#Vai pro green
echo "&green ${MONITORADOS[$2]} ---- $1" >> $LOG2
general_status green
fi
;;
5)
#Max_used_connections
if [[ $1 -ge $MC_STARTING_YELLOW ]]; then
if [[ $1 -le $MC_STARTING_RED ]]; then
# Vai pro yellow
echo "&yellow ${MONITORADOS[$2]} ---- $1" >> $LOG2
general_status yellow
else
# Vai pro red
echo "&red ${MONITORADOS[$2]} ---- $1" >> $LOG2
general_status red
fi
else
#Vai pro green
echo "&green ${MONITORADOS[$2]} ---- $1" >> $LOG2
general_status green
fi
;;
6)
#Open_tables
if [[ $1 -ge $OT_STARTING_YELLOW ]]; then
if [[ $1 -le $OT_STARTING_RED ]]; then
# Vai pro yellow
echo "&yellow ${MONITORADOS[$2]} ---- $1" >> $LOG2
general_status yellow
else
# Vai pro red
echo "&red ${MONITORADOS[$2]} ---- $1" >> $LOG2
general_status red
fi
else
#Vai pro green
echo "&green ${MONITORADOS[$2]} ---- $1" >> $LOG2
general_status green
fi
;;
7)
#Select_full_join
if [[ $1 -ge $SJ_STARTING_YELLOW ]]; then
if [[ $1 -le $SJ_STARTING_RED ]]; then
# Vai pro yellow
echo "&yellow ${MONITORADOS[$2]} ---- $1" >> $LOG2
general_status yellow
else
# Vai pro red
echo "&red ${MONITORADOS[$2]} ---- $1" >> $LOG2
general_status red
fi
else
#Vai pro green
echo "&green ${MONITORADOS[$2]} ---- $1" >> $LOG2
general_status green
fi
;;
8)
#Slow_queries
if [[ $1 -ge $SQ_STARTING_YELLOW ]]; then
if [[ $1 -le $SQ_STARTING_RED ]]; then
# Go to yellow
echo "&yellow ${MONITORADOS[$2]} ---- $1" >> $LOG2
general_status yellow
else
# Go to red
echo "&red ${MONITORADOS[$2]} ---- $1" >> $LOG2
general_status red
fi
else
#Go to green
echo "&green ${MONITORADOS[$2]} ---- $1" >> $LOG2
general_status green
fi
;;
9)
#Uptime
if [[ $(($1/3600)) -le $UP_STARTING_RED ]]; then
# Vai pro red
echo "&red ${MONITORADOS[$2]} ---- $(($1/3600))" >> $LOG2
general_status red
else
#Vai pro green
echo "&green ${MONITORADOS[$2]} ---- $(($1/3600))" >> $LOG2
general_status green
fi
;;
esac
}
#######################
#### KICKING UP IT ####
#######################
echo "green" > $STATUS
obtem_valores
################
#### XYMON ####
################
$BB $BBDISP "status $MACHINE.mysqlperf `cat $STATUS` `date`
`cat $LOG2`"
exit 0
===== Known Bugs and Issues =====
===== To Do =====
Graphic all variables.
===== Credits =====
Melonfire - For MySQL explanation.
===== Changelog =====
* **2012-11-23**
* Initial release