1.Установка Percona Nagios Monitoring Plugins на Nagios-сервере
(будет использоваться удаленное подключение к MySQL для снятия статистики)
(в случае использования NRPE эти плагины необходимо установить на каждом клиенте, который будет мониториться)
1 |
# yum install http://www.percona.com/downloads/percona-release/redhat/0.1-3/percona-release-0.1-3.noarch.rpm |
1 |
# yum install percona-nagios-plugins |
1 |
Plugins are installed to /usr/lib64/nagios/plugins |
2.Создание файла с учетными данными пользователя для удаленного доступа
1 |
# mkdir /etc/nagios/ |
1 |
# nano /etc/nagios/mysql.cnf |
1 2 3 |
[client] user = nagiosuser password = nagiospassword |
1 |
# chown root:nagios /etc/nagios/mysql.cnf |
1 |
# chmod 640 /etc/nagios/mysql.cnf |
3.Создание пользователя с необходимыми привилегиями
1 |
mysql>grant PROCESS, SUPER, REPLICATION CLIENT on *.* to nagiosuser@'<IP-address-Nagios-server>' identified by 'nagiospassword'; |
1 |
mysql> flush privileges; |
4.Тестирование плагинов с командной строки
1 |
# cd /usr/local/nagios/etc/ |
Мониторинг удаления файлов, которые в данный момент использует MySQL-сервер
плагин pmp-check-mysql-file-privs
1 |
# su -l nagios -c '/usr/lib64/nagios/plugins/pmp-check-mysql-deleted-files -H IP-address-client-server --defaults-file /etc/nagios/mysql.cnf' |
1 |
UNK You must execute lsof with root privileges |
Предоставляем пользователя nagios, от которого выполняется команда, право использовать sudo без пароля для выполнения всех команд(с точки зрения безопасности лучше ограничить список выполняемых команд только теми, которые действительно нужны для успешной работы плагинов)
1 |
# visudo |
1 |
nagios ALL=(ALL) NOPASSWD: ALL |
1 |
# su -l nagios -c 'sudo /usr/lib64/nagios/plugins/pmp-check-mysql-deleted-files -H IP-address-client-server --defaults-file /etc/nagios/mysql.cnf' |
1 |
sudo: sorry, you must have a tty to run sudo |
Отключаем требования использования терминала для пользователя nagios
1 |
# visudo |
1 |
Defaults:nagios !requiretty |
1 |
# su -l nagios -c 'sudo /usr/lib64/nagios/plugins/pmp-check-mysql-deleted-files -H IP-address-client-server --defaults-file /etc/nagios/mysql.cnf' |
1 |
OK no deleted files |
Проверка корректных владельца и группы на каталог и файлы MySQL(например,пользователь и группа должны быть mysql) – плагин pmp-check-mysql-file-privs
1 |
# su -l nagios -c 'sudo /usr/lib64/nagios/plugins/pmp-check-mysql-file-privs -H IP-address-client-server -P 3306 --defaults-file /etc/nagios/mysql.cnf -u mysql -g mysql' |
1 |
OK all files/directories have correct ownership |
Мониторинг времени выполнения транзакции, которая является блокирующей для других запросов и находится в состоянии idle
(по умолчанию дольше 60 секунд-Warning, дольше 600 секунд-Critical) (плагин check-mysql-innodb)
1 |
# su -l nagios -c 'sudo /usr/lib64/nagios/plugins/pmp-check-mysql-innodb -H IP-address-client-server -P 3306 --defaults-file /etc/nagios/mysql.cnf -C idle_blocker_duration -w 60 -c 600' |
1 |
OK longest blocking idle transaction sleeps for 0 seconds |
Мониторинг кол-ва транзакций,находящихся в статусе LOCK WAIT
(по умолчанию больше 10-Warning, больше 25-Critical)(плагин check-mysql-innodb)
1 |
# su -l nagios -c 'sudo /usr/lib64/nagios/plugins/pmp-check-mysql-innodb -H IP-address-client-server -P 3306 --defaults-file /etc/nagios/mysql.cnf -C waiter_count -w 10 -c 25' |
1 |
OK 0 transactions in LOCK WAIT status |
Мониторинг времени выполнения транзакции(по умолчанию дольше 60 секунд-Warning, дольше 600 секунд-Critical) (плагин check-mysql-innodb)
1 |
# su -l nagios -c 'sudo /usr/lib64/nagios/plugins/pmp-check-mysql-innodb -H IP-address-client-server -P 3306 --defaults-file /etc/nagios/mysql.cnf -C max_duration -w 60 -c 600' |
1 |
OK longest transaction active for 0 seconds |
Мониторинг наличия PID-файла процесса MySQL(плагин pmp-check-mysql-pidfile )
1 |
# su -l nagios -c 'sudo /usr/lib64/nagios/plugins/pmp-check-mysql-pidfile -H IP-address-client-server -P 3306 --defaults-file /etc/nagios/mysql.cnf' |
1 |
OK all PID files exist. |
Мониторинг кол-ва процессов в различных состояниях
(по умолчанию 16-Warning, 32-Critical)(плагин pmp-check-mysql-processlist)
1 |
# su -l nagios -c 'sudo /usr/lib64/nagios/plugins/pmp-check-mysql-processlist -H IP-address-client-server -P 3306 --defaults-file /etc/nagios/mysql.cnf -C states_count -w 16 -c 32' |
1 |
OK 0 unauthenticated, 0 locked, 0 copy to table, 0 statistics | processes=0;16;32;0; |
Мониторинг кол-ва пользовательских подключений (по умолчанию 90%-Warning, 95%-Critical)
(плагин pmp-check-mysql-processlist)
1 |
# su -l nagios -c 'sudo /usr/lib64/nagios/plugins/pmp-check-mysql-processlist -H IP-address-client-server -P 3306 --defaults-file /etc/nagios/mysql.cnf -C max_user_conn -w 90 -c 95' |
1 |
OK User with max connections: nagios (1) = 1% | max_user_conn=1;90;95;0;100 |
Мониторинг любых параметров из статуса SHOW GLOBAL STATUS и SHOW GLOBAL VARIABLES
(плагин pmp-check-mysql-status)
Синтаксис
1 |
VAR1 [ OPERATOR VAR2 [ TRANSFORM ] ] |
Например,мониторинг параметра Threads_running
1 |
# /usr/lib64/nagios/plugins/pmp-check-mysql-status -H IP-address-client-server -P 3306 --defaults-file /etc/nagios/mysql.cnf -x Threads_running -w 20 -c 40 |
1 |
OK Threads_running = 1 | Threads_running=1;20;40;0; |
Оператор сравнения по умолчанию используется больше или равно
1 |
>= |
Для изменения оператора используем опцию
1 |
-С |
Допустимые значения оператора сравнения
1 |
==, !=, >, >=, <, <= |
Например, вывод Warning,если значение параметра Threads_running меньше 5, Critical-меньше3
1 |
# /usr/lib64/nagios/plugins/pmp-check-mysql-status -H IP-address-client-server -P 3306 --defaults-file /etc/nagios/mysql.cnf -x Threads_running -C '<' -w 5 -c 3 |
1 |
CRIT Threads_running = 1 | Threads_running=1;5;3;0; |
5.Определение команд для проверки
1 |
# nano commands.d/check-mysql.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 |
define command{ command_name pmp-check-mysql-deleted-files command_line /usr/bin/sudo $USER1$/pmp-check-mysql-deleted-files -H $HOSTADDRESS$ -P $ARG1$ --defaults-file /etc/nagios/mysql.cnf } define command{ command_name pmp-check-mysql-file-privs command_line /usr/bin/sudo $USER1$/pmp-check-mysql-file-privs -H $HOSTADDRESS$ -P $ARG1$ --defaults-file /etc/nagios/mysql.cnf -u mysql -g mysql } define command{ command_name pmp-check-mysql-innodb command_line /usr/bin/sudo $USER1$/pmp-check-mysql-innodb -H $HOSTADDRESS$ -P $ARG1$ --defaults-file /etc/nagios/mysql.cnf -C $ARG2$ -w $ARG3$ -c $ARG4$ } define command{ command_name pmp-check-mysql-pidfile command_line /usr/bin/sudo $USER1$/pmp-check-mysql-pidfile -H $HOSTADDRESS$ -P $ARG1$ --defaults-file /etc/nagios/mysql.cnf } define command{ command_name pmp-check-mysql-processlist command_line /usr/bin/sudo $USER1$/pmp-check-mysql-processlist -H $HOSTADDRESS$ -P $ARG1$ --defaults-file /etc/nagios/mysql.cnf -C $ARG2$ -w $ARG3$ -c $ARG4$ } define command{ command_name pmp-check-mysql-status command_line /usr/bin/sudo $USER1$/pmp-check-mysql-status -H $HOSTADDRESS$ -P $ARG1$ --defaults-file /etc/nagios/mysql.cnf -C $ARG2$ -x $ARG3$ -w $ARG4$ -c $ARG5$ } |
6.Добавление хостов/групп на мониторинг для указанных проверок
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 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
define service{ hostgroup_name hostgroup-myproject-all-servers service_description MySQL Percona Deleted Files check_command pmp-check-mysql-deleted-files!3306 use service-template-all-generic } define service{ hostgroup_name hostgroup-myproject-all-servers service_description MySQL Percona File Privileges check_command pmp-check-mysql-file-privs!3306 use service-template-all-generic } define service{ hostgroup_name hostgroup-myproject-all-servers service_description MySQL Percona Idle Blocker Duration check_command pmp-check-mysql-innodb!3306!idle_blocker_duration!60!600 use service-template-all-generic } define service{ hostgroup_name hostgroup-myproject-all-servers service_description MySQL Percona Waiter Count Transaction check_command pmp-check-mysql-innodb!3306!waiter_count!10!25 use service-template-all-generic } define service{ hostgroup_name hostgroup-myproject-all-servers service_description MySQL Percona Time Executing Transaction check_command pmp-check-mysql-innodb!3306!max_duration!60!600 use service-template-all-generic } define service{ hostgroup_name hostgroup-myproject-all-servers service_description MySQL Percona PID file check_command pmp-check-mysql-pidfile!3306 use service-template-all-generic } define service{ hostgroup_name hostgroup-myproject-all-servers service_description MySQL Percona Processess count check_command pmp-check-mysql-processlist!3306!states_count!16!32 use service-template-all-generic } define service{ hostgroup_name hostgroup-myproject-all-servers service_description MySQL Percona User Connections Count check_command pmp-check-mysql-processlist!3306!max_user_conn!90!95 use service-template-all-generic } define service{ hostgroup_name hostgroup-myproject-all-servers service_description MySQL Percona Threads Running check_command pmp-check-mysql-status!3306!'>='!Threads_running!20!40 use service-template-all-generic } |
Это лишь часть плагинов от Percona для Nagios
При наличии репликации также полезно ее мониторить плагинами
1 2 |
pmp-check-mysql-replication-delay pmp-check-mysql-replication-running |
Я использовал удаленное подключение к MySQL с Nagios-сервера на хост,который нужно мониторить(при этом на клиентском хосте ограничил подключение к MySQL средствами как firewall(iptables), так и непосредственно средствами MySQL)
Если удаленный доступ к MySQL нежелателен/невозможен (даже с учетом ограничения доступа только с Nagios-сервера), то необходимо использовать NRPE-для выполнения этих команд локально на клиентском хосте.
7.Мониторинг репликации с локальным выполнением команд на клиентах через NRPE-плагин
Настройка Nagios-клиента
Добавляем описание команд
1 |
# nano nrpe.cfg |
1 2 |
command[pmp-check-mysql-replication-running]=/usr/bin/sudo /usr/lib/nagios/plugins/pmp-check-mysql-replication-running --defaults-file /etc/nagios/mysql.cnf command[pmp-check-mysql-replication-delay]=/usr/bin/sudo /usr/lib/nagios/plugins/pmp-check-mysql-replication-delay --defaults-file /etc/nagios/mysql.cnf -w $ARG1$ -c $ARG2$ |
Создаем файл с логином/паролем для подключения к MySQL
1 |
# nano /etc/nagios/mysql.cnf |
1 2 3 |
[client] user = nagiosuser password = nagiospassword |
1 |
# chown root:nagios /etc/nagios/mysql.cnf |
1 |
# chmod 640 /etc/nagios/mysql.cnf |
Создем пользователя с логином/паролем указанном в файле с правом подключения с localhost
1 |
mysql> grant PROCESS, SUPER, REPLICATION CLIENT on *.* to nagiosuser@'localhost' identified by ' nagiospassword '; |
1 |
mysql> flush privileges; |
Предоставляем пользователя nagios, от которого выполняется команда, право использовать sudo без пароля для выполнения всех команд(с точки зрения безопасности лучше ограничить список выполняемых команд только теми, которые действительно нужны для успешной работы плагинов)
1 |
# visudo |
1 |
nagios ALL=(ALL) NOPASSWD: ALL |
Настройка Nagios-сервера
Определение команд для проверки
1 |
# nano commands.d/check-mysql.cfg |
1 2 3 4 5 6 7 8 9 |
define command{ command_name pmp-check-mysql-replication-running command_line $USER1$/check_nrpe -t 30 -H $HOSTADDRESS$ -c pmp-check-mysql-replication-running } define command{ command_name pmp-check-mysql-replication-delay command_line $USER1$/check_nrpe -t 30 -H $HOSTADDRESS$ -c pmp-check-mysql-replication-delay -a $ARG1$ $ARG2$ } |
Добавление хостов/групп на мониторинг для указанных проверок
1 |
# nano /usr/local/nagios/etc/services.d/services-myproject.cfg |
1 2 3 4 5 6 7 8 9 10 11 12 13 |
define service { hostgroup_name hostgroup-myproject-all-servers service_description MySQL Replication Running check_command pmp-check-mysql-replication-running use service-template-all-generic } define service { hostgroup_name hostgroup-myproject-all-servers service_description MySQL Replication Delay check_command pmp-check-mysql-replication-delay!60!300 use service-template-all-generic } |
Источник:
https://www.percona.com/doc/percona-monitoring-plugins/1.1/nagios/index.html
http://www.cyberciti.biz/faq/linux-unix-bsd-sudo-sorry-you-must-haveattytorun/