Сheck_mysql_health. Мониторинг MySQL баз в Icinga2
Общая
В данной статье будет рассмотрена возможность мониторинга баз данных 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 | Проверяет, запущены ли все узлы кластера. |
- Просмотров: 10061