
Плагин для мониторинга sleep соединений в mysql для Nagios
Подумав, я решил написать плагин для мониторинга sleep запросов в mysql для nagios. Потратив несколько часов, я это сделал. Это довольно простой скрипт, но для первого раза сойдет. Ели прийдет вдохновение ,я перепишу его и может что-то добавлю нового.
Плагин для мониторинга sleep соединений в mysql для Nagios:
# vim /usr/local/nagios/libexec/check_mysql_sleep_connections.sh
И вставляем:
#!/bin/sh # # Vitaliy Natarov # vnatarov@gorillagroup.com # #. /usr/local/nagios/libexec/utils.sh warn=$1 crit=$2 OUTPUT_FILE="/usr/local/nagios/var/processlist.txt" if [ ! -f "$OUTPUT_FILE" ]; then touch $OUTPUT_FILE chmod 755 $OUTPUT_FILE else cat /dev/null > $OUTPUT_FILE chmod 755 $OUTPUT_FILE fi MYSQL=`which mysql` $MYSQL -uYour_USER -pYOUR_PW -Bse "show full processlist\G" > $OUTPUT_FILE Total_processes=$(cat `echo $OUTPUT_FILE`|grep -E "Command:"| cut -d: -f2|wc -l) Sleep_processes=$(cat `echo $OUTPUT_FILE`|grep -E "Command:"| cut -d: -f2| grep -E "Sleep"|wc -l) status=$(echo "Total=$Total_processes" Sleeps=$Sleep_processes) if (("$warn" <= "$Sleep_processes")); then if (( "$crit" <= "$Sleep_processes" )); then echo "CRITICAL - $status" exit 2 else echo "WARNING - $status" exit 1 fi else echo "OK - $status" exit 0 fi
В данном скрипте нужно изменить:
- Your_USER — на вашего пользователя в mysql;
- YOUR_PW — Пароль для указанного пользователя.
У меня он выглядит вот так (я подправил его немного для отображения графиков):
#!/bin/sh # # Vitaliy Natarov # vnatarov@gorillagroup.com # #. /usr/local/nagios/libexec/utils.sh warn_total=$1 crit_total=$2 warn_sleeps=$3 crit_sleeps=$4 OUTPUT_FILE="/tmp/processlist.txt" if [ ! -f "$OUTPUT_FILE" ]; then touch $OUTPUT_FILE chmod 755 $OUTPUT_FILE else cat /dev/null > $OUTPUT_FILE chmod 755 $OUTPUT_FILE fi MYSQL=`which mysql` $MYSQL -Bse "show full processlist\G" > $OUTPUT_FILE Total_processes=$(cat `echo $OUTPUT_FILE`|grep -E "Command:"| cut -d: -f2|wc -l) Sleep_processes=$(cat `echo $OUTPUT_FILE`|grep -E "Command:"| cut -d: -f2| grep -E "Sleep"|wc -l) status=$(echo "Total=$Total_processes Sleeps=$Sleep_processes | Total=$Total_processes;$1;$2;0; Sleeps=$Sleep_processes;$3;$4;0;") if (("$warn_total" <= "$Sleep_processes")); then if (( "$crit_total" <= "$Sleep_processes" )); then echo "CRITICAL - $status" exit 2 else echo "WARNING - $status" exit 1 fi else echo "OK - $status" exit 0 fi
Я для своего localhost-а создал следующее. Открываем файл:
# vim /usr/local/nagios/etc/objects/commands.cfg
и вставил в самый конец:
define command { command_name check_mysql_sleep_connections.sh command_line /usr/local/nagios/libexec/check_mysql_sleep_connections.sh $ARG1$ $ARG2$ }
Теперь его нужно подключить в клиенте, т.к у меня — это локалхост, то я открываю:
# vim /usr/local/nagios/etc/objects/localhost.cfg
и прописываю:
define service{ use local-service,graphed-service host_name localhost service_description check_mysql_sleep_connections.sh check_command check_mysql_sleep_connections.sh!30!50 }
Где: 30 — это значение при котором будет выводиться «WARNING», а 50 -значение при котором будет выводиться «CRITICAL».
PS: Если нужно настроить данную проверку на удаленном хосте. То нужно сделать следующие действия.
На удаленном хосте открываем:
# vim /usr/local/nagios/etc/nrpe.cfg
И прописываем следующую проверку:
# mysql_sleeps_checker.sh command[mysql_sleeps_checker.sh]=/usr/local/nagios/libexec/mysql_sleeps_checker.sh!30!50
Примите во внимание, если не заработает в таком виде (!30!50), то нужно вставить эти переменные в сам скрипт:
[...] warn=30 crit=50 [...]
и тогда проверка будет иметь вид:
#mysql_sleeps_checker.sh command[mysql_sleeps_checker.sh]=/usr/local/nagios/libexec/mysql_sleeps_checker.sh
У меня:
#Custom check for Mysql Sleep queries command[check_mysql_sleep]=/usr/local/nagios/libexec/mysql_sleeps_checker.sh 50 70 20 35
После того как добавили проверку на удаленном хосте, заходим на нагиос сервер и прописываем в месте где находятся ваши клиенты следующую проверку:
# vim /usr/local/nagios/etc/clients/Some_host.cfg
Содержание:
define service { service_description check sleep connections of MYSQL check_command check_nrpe_custom!$_HOSTNRPE_PORT$!mysql_sleeps_checker.sh host_name Some_host check_period 24x7 notification_period 24x7 max_check_attempts 3 check_interval 5 retry_interval 1 first_notification_delay 0 notification_interval 30 active_checks_enabled 1 use generic-service #contact_groups +admins }
Перезапусаем nagios :
# service nagios restart
Все! Смотрим на проверку в веб-интерфейсе. Статья «Плагин для мониторинга sleep соединений в mysql для Nagios» завершена.
Ужас какой. Нет, идея терпимая, хоть и бесполезная (спящие процессы нужно по таймауту сбрасывать). Но я Вас умоляю: не пишите на шелле — это не Ваше.
Идея заключалась в том, чтобы мониторить sleep-ы, которые плодились из-за плохо написанного кода на PHP. Вот и все.