Сheck_mysql_health. Мониторинг MySQL баз в Icinga2

Main

Оценка: 91% - 19 Голосов

Общая

В данной статье будет рассмотрена возможность мониторинга баз данных MySQL через плагин check_mysql_health в Icinga2.

Плагин достаточно функционален и доступен для загрузки тут.

 

Подготовка СУБД MySQL к доступу.

Для мониторинга необходим доступ и разрешение на подключение к базе данных. Для этого вы можете использовать учётную запись root или создать новую.

Если вы собираетесь мониторить несколько независимых баз данных то для удобства в каждой СУБД необходимо создать одинакового пользователя с одинаковым паролем.

Для создания пользователя необходимо подключиться к консоли MySQL и выполнить следующие команды:


mysql -u root -p
CREATE USER 'ИМЯ-ПОЛЬЗОВАТЕЛЯ'@'ИМЯ-СЕРВЕРА-ICINGA' IDENTIFIED BY 'ПАРОЛЬ';
GRANT ALL PRIVILEGES ON * . * TO 'ИМЯ-ПОЛЬЗОВАТЕЛЯ'@'ИМЯ-СЕРВЕРА-ICINGA';
FLUSH PRIVILEGES;
quit

По умолчанию СУБД "слушает" только locallhost. Поэтому надо разрешить подключение к ней извне.

Для этого необходимо отредактировать файл /etc/mysql/my.cnf


bind-address = 0.0.0.0

После перезапустить MySQL


service mysql restart

 

Установка плагина

На момент написания статьи самая свежая версия плагина была 2.2.2

Для установки плагина выполним следующие шаги

Загрузим плагин


wget https://labs.consol.de/assets/downloads/nagios/check_mysql_health-2.2.2.tar.gz

Распакуем


tar -zxf check_mysql_health-2.2.2.tar.gz

Установим


cd check_mysql_health-2.2.2
./configure --prefix=/usr/lib/nagios/plugins
make
make install
/usr/lib/nagios/plugins/libexec/check_mysql_health /usr/lib/nagios/plugins/

 

Описание плагина в конфигурационных файлах Icinga2

Файл commands.conf


object CheckCommand "check_mysql_health" {
import "plugin-check-command"
command = [ PluginDir + "/check_mysql_health" ]
arguments = {
"--hostname" = "$host.address$"
"--username" = "$username$"
"--password" = "$password$"
"--database" = "$database$"
"--warning" = "$service_warn$"
"--critical" = "$service_crit$"
"--mode" = "$check_mode$"
}
vars.username = "ИМЯ-ПОЛЬЗОВАТЕЛЯ СУБД"
vars.password = "ПАРОЛЬ"
vars.database = "information_schema"
}

Файл templates.conf


template Service "mysql-service" {
import "generic-service"
check_command = "check_mysql_health"
check_interval = 1m
retry_interval = 1m
}

Файл groups.conf


object ServiceGroup "mysql_check" {
display_name = "Проверка MySQL"
assign where service.vars.service_type == "mysql_check"
}

Файл services.conf

Здесь приводится пример описания вариантов проверки - полный список смотрите ниже


apply Service "mysql_connect_time" {
display_name = "MySQL время соединения"
import "mysql-service"
vars.check_mode = "connection-time"
vars.service_warn = "1"
vars.service_crit = "3"
assign where host.vars.mysql == "True"
vars.service_type = "mysql_check"
}
#
Apply Service "mysql_uptime" {
display_name = "MySQL время работы"
import "mysql-service"
vars.check_mode = "uptime"
vars.service_warn = "1:"
vars.service_crit = "3:"
assign where host.vars.mysql == "True"
vars.service_type = "mysql_check"
}
#
Apply Service "mysql_threads_connected" {
display_name = "MySQL количество открытых соединений"
import "mysql-service"
vars.check_mode = "threads-connected"
vars.service_warn = "15"
vars.service_crit = "20"
assign where host.vars.mysql == "True"
vars.service_type = "mysql_check"
}
#
Apply Service "mysql_slow_queries" {
display_name = "MySQL запросы помеченные, как меделнные"
import "mysql-service"
vars.check_mode = "slow-queries"
vars.service_warn = "5"
vars.service_crit = "10"
assign where host.vars.mysql == "True"
vars.service_type = "mysql_check"
}

 

Далее добавляем к хосту с СУБД параметр (если хост не мониторится - его надо добавить)


vars.mysql = "True"

 

Проверяем конфигурацию


service icinga2 checkconfig

И если все OK перезапускаем Icinga2


service icinga2 restart

 

Описание дополнительных возможностей плагина (перечень может меняться в зависимости от версии плагина)

Команда проверки Описание Единицы измерения
connection-time Определяет, как долго устанавливается соединение и вход В секундах
uptime Время с момента запуска сервера базы данных (распознает DB-Crash + Restart) 0..n в секундах(10:, 5: в минутах)
threads-connected Количество открытых соединений 1..n (10, 20)
threadcache-hitrate Попадания в потоковом кэшк 0%..100% (90:, 80:)
q[uery]cache-hitrate Попадание в кэше запросов 0%..100% (90:, 80:)
q[uery]cache-lowmem-prunes Смещение кэша запросов из-за нехватки памяти n/sec (1, 10)
[myisam-]keycache-hitrate Попадание Myisam Key Cache 0%..100% (99:, 95:)
[innodb-]bufferpool-hitrate Попадание InnoDB буфера 0%..100% (99:, 95:)
[innodb-]bufferpool-wait-free Время ожидания InnoDB буфера 0..n/sec (1, 10)
[innodb-]log-waits Время ожидания InnoDB логов 0..n/sec (1, 10)
tablecache-hitrate Попадание Table-Cache 0%..100% (99:, 95:)
table-lock-contention Количество неудачных блокировок 0%..100% (1, 2)
index-usage Сумма использования индекса (в отличие от полного сканирования таблицы) 0%..100% (90:, 80:)
tmp-disk-tables Процент временных таблиц, созданных на диске вместо памяти 0%..100% (25, 50)
slow-queries Скорость запросов, которые были обнаружены как "медленные" 0..n/sec (0.1, 1)
long-running-procs Сумма процессов, которые работают дольше 1 минуты 0..n (10, 20)
slave-lag Задержка между Master и Slave 0..n Seconds
slave-io-running Проверяет, работает ли IO-поток Slave-DB  
slave-sql-running Проверяет, работает ли SQL-поток Slave-DB  
sql Результат любого SQL-Statement, который возвращает число. Сам оператор передается с именем параметра. Метка для вывода данных производительности может быть передана с параметром -name2. Параметр -units может добавлять единицы к выходу (%, c, s, MB, GB, ..). Если SQL-Statement включает специальные символы или пробелы, он может быть сначала закодирован с помощью режима кодирования. Для использования данного параметра в описание команды необходимо доавьить дополнительные параметры "--name ", "--name2", "--units " 0..n
open-files Количество открытых файлов (верхнего предела) 0%..100% (80, 95)
encode Считывает стандартный ввод (STDIN) и выводит закодированную строку.  
cluster-ndb-running Проверяет, запущены ли все узлы кластера.  

 

 

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


Logo