1.Установка необходимых пакетов
1 |
# yum install perl-Nagios-Plugin perl-Switch |
2.Скачивание и загрузка скрипта/плагина mysql_health_check.pl в папку с плагинами(например, в /usr/lib64/nagios/plugins/)
Последняя версия доступна на GitHub
1 |
https://github.com/palominodb/PalominoDB-Public-Code-Repository/tree/d94b6cef297cc9eb6a98e57390f612a0232d7c0c |
Или с моего сайта(скорее всего уже устаревшая) здесь
1 |
# chmod 755 /usr/lib64/nagios/plugins/mysql_health_check.pl |
Просмотр синтаксиса/опций
1 |
# /usr/lib64/nagios/plugins/mysql_health_check.pl --help | less |
3.Создание файла с описанием команд
Первая команда — check-mysql использует стандартный/штатный скрипт, который идет в комплекте с Nagios-плагинами и отображает статистику MySQL.
Вторая команда — check-mysql-long-query мониторит длительность выполнения mysql-запросов
Третья команда — check-mysql-locked-query мониторит наличие запросов в состоянии lock
Четвертая команда — check-mysql-max-connections мониторит максимальное кол-во MySQL-подключений
1 |
# nano /usr/local/nagios/etc/commands.d/check-mysql.cfg |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
define command { command_name check-mysql command_line $USER1$/check_mysql -u nagiosuser -p nagiospassword -H $HOSTADDRESS$ -P $ARG1$ } define command { command_name check-mysql-long-query command_line /usr/bin/perl $USER1$/mysql_health_check.pl --hostname $HOSTADDRESS$ --port 3306 --user nagiosuser --password nagiospassword --mode=long-query --no_cache --warning=$ARG1$ --critical=$ARG2$ } define command { command_name check-mysql-locked-query command_line /usr/bin/perl $USER1$/mysql_health_check.pl --hostname $HOSTADDRESS$ --port 3306 --user nagiosuser --password nagiospassword --mode=locked-query --no_cache } define command { command_name check-mysql-max-connections command_line /usr/bin/perl $USER1$/mysql_health_check.pl --hostname $HOSTADDRESS$ --port 3306 --user nagiosuser --password nagiospassword --mode=varcomp --no_cache --expression="Max_used_connections/max_connections * 100" --comparison=">95" --shortname=max_connections } |
4.Добавляем мониторинга MySQL для локального(Nagios-хост) и удаленного(клиентского) хоста
1 |
# nano /usr/local/nagios/etc/services.d/services-myproject.cfg |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
define service{ hostgroup_name hostgroup-myproject-all-servers service_description MySQL Status check_command check-mysql!3306 use service-template-all-generic } define service{ hostgroup_name hostgroup-myproject-all-servers service_description MySQL Long Query check_command check-mysql-long-query!10!30 use service-template-all-generic } define service{ hostgroup_name hostgroup-myproject-all-servers service_description MySQL Locked Query check_command check-mysql-locked-query use service-template-all-generic } define service{ hostgroup_name hostgroup-myproject-all-servers service_description MySQL Max Connection check_command check-mysql-max-connections use service-template-all-generic } |
5.Создание пользователя с необходимыми привилегиями
1 |
mysql>grant PROCESS, SUPER, REPLICATION CLIENT on *.* to nagiosuser@'IP-address-Nagios-server' identified by 'nagiospassword'; |
1 |
mysql> flush privileges; |
6.Проверка работоспособности удаленного хоста с командной строки
1 |
# /usr/lib64/nagios/plugins/check_mysql -u nagiosuser -p nagiospassword -H IP-address-client-server -P 3306 |
1 |
Uptime: 643909 Threads: 1 Questions: 58799811 Slow queries: 24 Opens: 302350 Flush tables: 1 Open tables: 4 Queries per second avg: 91.316|Connections=36760c;;; Open_files=1;;; Open_tables=4;;; Qcache_free_memory=552576;;; Qcache_hits=58408632c;;; Qcache_inserts=167152c;;; Qcache_lowmem_prunes=18720c;;; Qcache_not_cached=35898c;;; Qcache_queries_in_cache=2557;;; Queries=58799812c;;; Questions=58775996c;;; Table_locks_waited=756c;;; Threads_connected=1;;; Threads_running=1;;; Uptime=643909c;;; |
1 |
# /usr/lib64/nagios/plugins/mysql_health_check.pl --hostname IP-address-client-server --port 3306 --user nagiosuser --password nagiospassword --no_cache --mode=long-query --warning=10 --critical=20 |
1 |
mysql_long-query OK |
1 |
# /usr/lib64/nagios/plugins/mysql_health_check.pl --hostname IP-address-client-server --port 3306 --user nagiosuser --password nagiospassword --no_cache --mode=locked-query |
1 |
mysql_locked-query OK |
1 |
# /usr/lib64/nagios/plugins/mysql_health_check.pl --hostname IP-address-client-server --port 3306 --user nagiosuser --password nagiospassword --no_cache --mode=varcomp --expression="Max_used_connections/max_connections * 100" --comparison=">95" --shortname=max_connections |
1 |
max_connections OK - Comparison check passed: (Max_used_connections/max_connections * 100) >95 = 75 |
7.Проверка синтаксиса и перезапуск Nagios-сервера
1 |
# /etc/init.d/nagios checkconfig |
1 |
# /etc/init.d/nagios reload |
Логи смотрим в
1 |
# tail -f /usr/local/nagios/var/nagios.log |
Источник:
https://github.com/palominodb/PalominoDB-Public-Code-Repository/tree/master/nagios/mysql_health_check
http://www.pythian.com/blog/palominodb-nagios-plugin-for-mysql/
http://dev.palominodb.com/docs/nagios_plugins_2011_04.pdf
http://dev.palominodb.com/docs/nagios_mysql_2011_05.pdf
Еще один скрипт/плагин для мониторинга различных метрик MySQL
Последнюю версию можно загрузить на сайте
1 |
https://labs.consol.de/nagios/check_mysql_health/ |
1.Загрузка, распаковка и установка скрипта
1 |
# cd /tmp |
1 |
# wget https://labs.consol.de/assets/downloads/nagios/check_mysql_health-2.2.1.tar.gz |
Или с моего сайта(скорее всего уже устаревшая) здесь
1 |
# tar xvfz check_mysql_health-2.2.1.tar.gz |
1 |
# cd check_mysql_health-2.2.1/ |
1 |
# ./configure --prefix=/usr/local/nagios --with-nagios-user=nagios --with-nagios-group=nagios --with-perl=/usr/bin/perl |
1 2 3 4 5 6 7 |
config.status: creating t/Makefile --with-perl: /usr/bin/perl --with-statefiles-dir: /var/tmp/check_mysql_health --with-nagios-user: nagios --with-nagios-group: nagios --with-mymodules-dir: /usr/local/nagios/libexec --with-mymodules-dyn-dir: /usr/local/nagios/libexec |
1 |
# make |
1 |
# make install |
1 |
# ls -al /usr/local/nagios/libexec/ | grep check_mysql_health |
1 |
-rwxr-xr-x 1 root root 125802 Jan 11 17:58 check_mysql_health |
Пользователь и необходимые привилегии для него уже были создан в первой части статьи
2.Создание файла с описанием команд
1 |
# cd /usr/local/nagios/etc/ |
1 |
# nano /usr/local/nagios/etc/commands.d/check-mysql.cfg |
1 2 3 4 |
define command{ command_name check-mysql-health command_line $USER1$/check_mysql_health --hostname $HOSTADDRESS$ --username nagiosuser --password nagiospassword --port $ARG1$ --mode $ARG2$ --warning $ARG3$ --critical $ARG4$ } |
3.Проверка работоспособности с командной строки
Мониторинг времени подключения к MySQL-серверу
(дольше 1 секунды-Warning, дольше 5 секунд-Critical)
1 |
# /usr/lib64/nagios/plugins/check_mysql_health -H IP-address-client-server --username nagiosuser --password nagiospassword --port 3306 --mode connection-time --warning 1 --critical 5 |
1 |
OK - 0.32 seconds to connect as nagiosuser | connection_time=0.3172s;1;5 |
Мониторинг времени с последнего запуска MySQL(определение перезапуска/crash-mysql-сервера)( до 10 минут-Warning, до 5 минут-Critical,)
1 |
# /usr/lib64/nagios/plugins/check_mysql_health -H IP-address-client-server --username nagiosuser --password nagiospassword --port 3306 --mode uptime --warning 10: --critical 5: |
1 |
OK - database is up since 11768 minutes | uptime=706088s |
Мониторинг кол-ва открытых подключений(больше 10-Warning, больше20-Critical)
1 |
# /usr/lib64/nagios/plugins/check_mysql_health -H IP-address-client-server --username nagiosuser --password nagiospassword --port 3306 --mode threads-connected --warning 10 --critical 20 |
1 |
OK - 1 client connection threads | threads_connected=1;10;20 |
Мониторинг кол-ва открытых файлов сервером MySQL(более 80%-Warning, более 90%-Critical)
1 |
# /usr/lib64/nagios/plugins/check_mysql_health -H IP-address-client-server --username nagiosuser --password nagiospassword --port 3306 --mode open-files --warning 80 --critical 90 |
1 |
OK - 0.10% of the open files limit reached (1 of max. 1024) | pct_open_files=0.098%;80.000;90.000 open_files=1;819;921 |
Мониторинг процента кол-ва временных таблиц созданных на диске вместо создания их в оперативной памяти(более 30%-Warning, более 50%-Critical)
1 |
# /usr/lib64/nagios/plugins/check_mysql_health -H IP-address-client-server --username nagiosuser --password nagiospassword --port 3306 --mode tmp-disk-tables --warning 30 --critical 50 |
1 |
OK - 22.55% of 14 tables were created on disk | pct_tmp_table_on_disk=22.55%;30;50 pct_tmp_table_on_disk_now=0.00% |
1 |
# chown -R nagios /var/tmp/check_mysql_health/ |
Мониторинг кол-ва медленных запросов(slow log) в единицу времени(секунду)(больше 1-го медленного запроса за 2 секунды-Warning, больше 1-го медленного запроса за 1 секунду-Critical)
1 |
# /usr/lib64/nagios/plugins/check_mysql_health -H IP-address-client-server --username nagiosuser --password nagiospassword --port 3306 --mode slow-queries --warning 0.5 --critical 1 |
1 |
OK - 26 slow queries in 1452532798 seconds (0.00/sec) | slow_queries_rate=0.00%;0.5;1 |
4.Добавление мониторинга указанных метрик
1 |
# nano services.d/services-myproject.cfg |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
define service{ hostgroup_name hostgroup-myproject-all-servers service_description MySQL Connection Time check_command check-mysql-health!3306!connection-time!1!5 use service-template-all-generic } define service{ hostgroup_name hostgroup-myproject-all-servers service_description MySQL Uptime check_command check-mysql-health!3306!uptime!10:!5: use service-template-all-generic } define service{ hostgroup_name hostgroup-myproject-all-servers service_description MySQL Open Connections check_command check-mysql-health!3306!threads-connected!10!20 use service-template-all-generic } define service{ hostgroup_name hostgroup-myproject-all-servers service_description MySQL Open Files check_command check-mysql-health!3306!open-files!80!90 use service-template-all-generic } define service{ hostgroup_name hostgroup-myproject-all-servers service_description MySQL TMP Tables check_command check-mysql-health!3306!tmp-disk-tables!30!50 use service-template-all-generic } define service{ hostgroup_name hostgroup-myproject-all-servers service_description MySQL Slow Log check_command check-mysql-health!3306!slow-queries!0.5!1 use service-template-all-generic } |
1 |
# /etc/init.d/nagios checkconfig |
1 |
# /etc/init.d/nagios reload |
Здесь приведен мониторинг лишь части метрик MysQL
С полным списком метрик можно ознакомиться по справке
1 |
# /usr/lib64/nagios/plugins/check_mysql_health --help | less |
А также на сайте
1 |
https://labs.consol.de/nagios/check_mysql_health/ |
Например, есть мониторинг репликации
slave-lag – оставание Slave от Master
slave-io-running — проверка, запущен ли ввод/вывод(IO)-событие на Slave-сервере
slave-sql-running-проверка, запущен SQL-событие на Slave-сервере
Источник:
https://labs.consol.de/nagios/check_mysql_health/
http://kedar.nitty-witty.com/blog/10-steps-mysql-monitoring-nagios-installation-configuration