Понедельник, 19.12.2022 08:00

Мониторинг MySQL с помощью Zabbix

Мониторинг 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 здесь я не буду описывать эти элементарные операции.

2022-12-16_12-15-05.png

К хосту будет добавлено более 50 новых элементов!

2022-12-16_15-11-07.png

Добавление макроса к хосту

Так же нам обязательно нужно к хосту добавить макрос с ip-адресом нашего сервера MariaDB.

Откроем свойства хоста и перейдем на вкладку Macros.

Заполним поля:

Macro - {$MYSQL.HOST}

Value - 192.168.0.5

Где 192.168.0.5 - ip-адрес сервера БД.

Нажмем Update.

2022-12-19_10-03-02.png

Проверка загруженных данных

Подождите несколько минут, пока не будут загружены все данные.

Шаблон для MySQL уже содержит дашбоард MySQL performance с необходимыми графиками, просто найдите хост в Monitoring->Hosts и кликните по ссылке Dashboards:

2022-12-16_15-18-00.png

Обратите внимание для некоторых графиков может потребоваться до 5 минут для набора необходимой статистики!

Вот и всё, теперь вы можете анализировать загрузку сервера MariaDB.

Так же в шаблон уже включены триггеры, так что в случае аномальных ситуаций в разделе

Monitoring -> Problems появятся соответствующие записи!

Заключение

Сегодня мы рассмотрели настройку мониторинга сервера MariaDB с помощью Zabbix Agent:

Создали пользователей для опроса БД и проверки соединения;

Произвели настройку MariaDB разрешив доступ к серверу по сети;

Установили и настроили Zabbix Agent на сервере с MariaDB;

Проверили соединение к БД и Zabbix Agent с сервера Zabbix;

Добавили макрос хоста для нашего сервера БД.

Рассмотрели, как работает опрос с помощью команд из агента Zabbix;

Добавили шаблон для мониторинга к хосту с установленным агентом Zabbix и проверили дашбоард MySQL performance.

Категория Zabbix
Теги Zabbix Zabbix Agent

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

Простой текст

  • HTML-теги не обрабатываются и показываются как обычный текст
  • Строки и абзацы переносятся автоматически.
  • Адреса веб-страниц и email-адреса преобразовываются в ссылки автоматически.
Просмотров: 368