Плагин для мониторинга sleep соединений в mysql для Nagios

Плагин для мониторинга 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» завершена.

2 thoughts on “Плагин для мониторинга sleep соединений в mysql для Nagios

  1. Ужас какой. Нет, идея терпимая, хоть и бесполезная (спящие процессы нужно по таймауту сбрасывать). Но я Вас умоляю: не пишите на шелле — это не Ваше.

    • Идея заключалась в том, чтобы мониторить sleep-ы, которые плодились из-за плохо написанного кода на PHP. Вот и все.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *