Мониторинг MySQL с помощью Zabbix
Сервер базы данных как правило создает основную нагрузку на сервер. Мониторинг сервера может помочь вовремя заметить аномалии при в работе сервера БД и вовремя устранить возможные проблемы с запросами и индексами.
В прошлой статье мы рассмотрели мониторинг Eltex ESR-200 с помощью Zabbix Agent.
Сегодня мы рассмотрим мониторинг сервера MariaDB (Mysql) с помощью агента Zabbix.
Создание пользователя базы данных MariaDB для опроса состояния сервера
Для начала создадим пользователя на сервере MariaDB с которого мы будем снимать статистику.
Для этого выполним на сервере с установленным сервером баз данных следующие команды:
cd ~
echo "CREATE USER 'zbx_monitor'@'192.168.0.4' IDENTIFIED BY 'Passsw0rd';" | tee --append zabbix_mysql.sql
echo "GRANT REPLICATION CLIENT,PROCESS,SHOW DATABASES,SHOW VIEW ON *.* TO 'zbx_monitor'@'192.168.0.4';" | tee --append zabbix_mysql.sql
echo "CREATE USER 'zbx_monitor'@'zabbix-srv' IDENTIFIED BY 'Passsw0rd';" | tee --append zabbix_mysql.sql
echo "GRANT REPLICATION CLIENT,PROCESS,SHOW DATABASES,SHOW VIEW ON *.* TO 'zbx_monitor'@'zabbix-srv';" | tee --append zabbix_mysql.sql
Выполним команду:
mysql -u root -p < zabbix_mysql.sql
Где 192.168.0.4 адрес сервера Zabbix
Где zabbix-srv имя хоста сервера Zabbix, эта ученая запись нам потребуется для ручной проверки агента, возможно вам хватит и одной учетной записи, но на разных серверах у меня по разному срабатывала проверка.
Если вы настраиваете мониторинг MariaDB на сервере где установлен сам Zabbix, то вместо 192.168.0.4 укажите localhost или 127.0.0.1
Так же откроем файл конфигурации MariaDB:
sudo mcedit /etc/mysql/mariadb.conf.d/50-server.cnf
Обратите внимание, на Alt Linux этот файл находится в другой папке:
sudo mcedit /etc/my.cnf.d/server.cnf
И закомментируем одну строчку, приведя её к виду:
#bind-address = 127.0.0.1
Перезапустим сервер БД:
sudo systemctl restart mysql
На сервере MariaDB установим Zabbix Agent:
sudo apt-get install zabbix-agent
Откроем файл с настройками агента:
mcedit /etc/zabbix/zabbix_agentd.conf
И добавим в самый конец строку:
Server = 127.0.0.1,192.168.0.4
Где 192.168.0.4 – адрес сервера Zabbix.
Если не добавить эту строку, то в логах агента будут появляться подобные сообщения:
failed to accept an incoming connection: connection from "192.168.0.4" rejected, allowed hosts: "127.0.0.1"
Добавляем правила для пользовательских параметров шаблонов в Zabbix Agent
Создадим файл:
mcedit /etc/zabbix/zabbix_agentd.d/template_db_mysql.conf
На Alt Linux:
mcedit /etc/zabbix/zabbix_agentd.conf.d/template_db_mysql.conf
С содержимым:
UserParameter=mysql.ping[*], HOME=/var/lib/zabbix mysqladmin -h"$1" -P"$2" ping
UserParameter=mysql.get_status_variables[*],HOME=/var/lib/zabbix mysql -h"$1" -P"$2" -sNX -e "show global status"
UserParameter=mysql.version[*],HOME=/var/lib/zabbix mysqladmin -s -h"$1" -P"$2" version
UserParameter=mysql.db.discovery[*],HOME=/var/lib/zabbix mysql -h"$1" -P"$2" -sN -e "show databases"
UserParameter=mysql.dbsize[*],HOME=/var/lib/zabbix mysql -h"$1" -P"$2" -sN -e "SELECT COALESCE(SUM(DATA_LENGTH + INDEX_LENGTH),0) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='$3'"
UserParameter=mysql.replication.discovery[*],HOME=/var/lib/zabbix mysql -h"$1" -P"$2" -sNX -e "show slave status"
UserParameter=mysql.slave_status[*],HOME=/var/lib/zabbix mysql -h"$1" -P"$2" -sNX -e "show slave status"
Обратите внимание, мы добавили перед каждой командой:
HOME=/var/lib/zabbix
Дело в том, что при установке сервера Zabbix создается учетная запись пользователя zabbix, а агент использует домашнюю папку этой учетной записи в качестве домашнего каталога! При установке на Debian 11 только агента просто создается пользователь, без создания соответствующей папки и указания у пользователя домашней папки.
Запустим команду на сервере zabbix:
cat /etc/passwd | grep zabbix
zabbix:x:106:112::/var/lib/zabbix/:/usr/sbin/nologin
А теперь на сервере MariaDB:
cat /etc/passwd | grep zabbix
zabbix:x:113:120::/nonexistent:/usr/sbin/nologin
Пользователь создан, но домашняя папка не указана, возможно это особенность сборки пакетов для дебиана, но в любом случае лучше сразу указывать домашнюю папку при использовании подобных скриптов!
Создание файла конфигурации для Zabbix Agent
Создадим папку
mkdir /var/lib/zabbix
Создадим файл:
mcedit /var/lib/zabbix/.my.cnf
С содержимым:
[client]
user='zbx_monitor'
password='Passsw0rd'
Таким образом мы указываем логин и пароль, которые будут использованы для доступа к серверу MariaDB.
Перезапустим Zabbix Agent, чтобы все изменения вступили в силу:
sudo systemctl restart zabbix-agent
На Alt Linux имя сервиса отличается:
zabbix_agentd
На Alt Linux дополнительно запустите:
systemctl enable --now zabbix_agentd.service
На Alt Linux для перезапуска:
sudo systemctl restart zabbix_agentd
Проверка доступа к MariaDB с сервера Zabbix
Перейдем на сервер Zabbix
Проверим подключение к БД:
mysql -h192.168.0.5 -u zbx_monitor --password=Passsw0rd <<< ' SHOW DATABASES;'
Результатом выполнения команды будет список всех баз данных на сервере MariaDB:
Database information_schema mysql performance_schema
Доступ к БД у нас есть.
Как это работает?
Давайте рассмотрим, как всё это работает.
Мы создали файл template_db_mysql.conf с правилами обработки пользовательских параметров.
Каждая строка этого файла должна содержать по одному правилу.
Рассмотрим правило для параметра mysql.get_status_variables:
UserParameter=mysql.get_status_variables[*], mysql -h"$1" -P"$2" -sNX -e "show global status"
Здесь все просто - сначала мы указываем имя нашего будущего ключа Zabbix:
mysql.get_status_variables[*]
Вторым параметром идет команда, которая будет выполняться каждый раз, когда Zabbix опрашивает соответствующий элемента хоста.
В данном случае выполняется команда:
mysql -h"$1" -P"$2" -sNX -e "show global status
Которая перед запуском преобразуется в строку вида:
mysql -h192.168.0.5 -P3306 -sNX -e "show global status" -u zbx_monitor --password=Passsw0rd
А результат выполнения команды передается в Zabbix для последующего разбора и анализа.
При этом ключ элемента в Zabbix будет выглядеть так:
mysql.version["{$MYSQL.HOST}","{$MYSQL.PORT}"]
В данном случае {$MYSQL.HOST} и {$MYSQL.PORT} заменяются плагином Zabbix для MySQL на ip-адрес хоста сервера базы данных и стандартный номер порта 3306.
Перед запуском команды "$1" заменяется на ip-адрес, а "$2" на номер порта и добавляются имя пользователя и пароль из настроек Zabbix Agent.
Таким образом можно запустить команду любой сложности с любым количеством параметров.
Проверка соединения с установленным агентом
С сервера Zabbix запустим:
sudo zabbix_get -s 192.168.0.5 -p 10050 -k "mysql.get_status_variables["192.168.0.5","3306"]"
Где 192.168.0.5 - адрес сервера MariaDB.
Если вы получили ошибку вида:
ERROR 1130 (HY000): Host 'sql-srv-1' is not allowed to connect to this MariaDB server
Просто вернитесь к шагу создания пользователя в БД и добавьте этот хост в последние две строки и пересоздайте пользователя!
В результате получим текст в формате XML:
<?xml version="1.0"?>
<resultset statement="show global status
" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<row>
<------><field name="Variable_name">Aborted_clients</field>
<------><field name="Value">8</field>
</row>
<row>
<------><field name="Variable_name">Aborted_connects</field>
<------><field name="Value">8071</field>
</row>
<row>
<------><field name="Variable_name">Aborted_connects_preauth</field>
<------><field name="Value">1</field>
</row>
...
</resultset>
Я обрезал большую часть текста.
Мы успешно подключились к агенту!
Добавление шаблона к хосту
Теперь всё что нам нужно это добавить новый хост в Zabbix и связать его с шаблоном MySQL by Zabbix agent здесь я не буду описывать эти элементарные операции.
К хосту будет добавлено более 50 новых элементов!
Добавление макроса к хосту
Так же нам обязательно нужно к хосту добавить макрос с ip-адресом нашего сервера MariaDB.
Откроем свойства хоста и перейдем на вкладку Macros.
Заполним поля:
Macro - {$MYSQL.HOST}
Value - 192.168.0.5
Где 192.168.0.5 - ip-адрес сервера БД.
Нажмем Update.
Проверка загруженных данных
Подождите несколько минут, пока не будут загружены все данные.
Шаблон для MySQL уже содержит дашбоард MySQL performance с необходимыми графиками, просто найдите хост в Monitoring->Hosts и кликните по ссылке Dashboards:
Обратите внимание для некоторых графиков может потребоваться до 5 минут для набора необходимой статистики!
Вот и всё, теперь вы можете анализировать загрузку сервера MariaDB.
Так же в шаблон уже включены триггеры, так что в случае аномальных ситуаций в разделе
Monitoring -> Problems появятся соответствующие записи!
Заключение
Сегодня мы рассмотрели настройку мониторинга сервера MariaDB с помощью Zabbix Agent:
Создали пользователей для опроса БД и проверки соединения;
Произвели настройку MariaDB разрешив доступ к серверу по сети;
Установили и настроили Zabbix Agent на сервере с MariaDB;
Проверили соединение к БД и Zabbix Agent с сервера Zabbix;
Добавили макрос хоста для нашего сервера БД.
Рассмотрели, как работает опрос с помощью команд из агента Zabbix;
Добавили шаблон для мониторинга к хосту с установленным агентом Zabbix и проверили дашбоард MySQL performance.
Добавить комментарий