Мониторинг Mysql в Zabbix

С появлением стандартных готовых шаблонов для различных приложений жизнь с заббиксом стала значительно проще. Сегодня я покажу это на примере мониторинга Mysql сервера в Zabbix 5 с использованием стандартного шаблона. Все стало не просто, а очень просто. Практически ничего делать не надо, разработчики все сделали за нас.

Углубленный онлайн-курс по MikroTik

Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном онлайн-курcе по администрированию MikroTik. Автор курcа – сертифицированный тренер MikroTik Дмитрий Скоромнов. Более 40 лабораторных работ по которым дается обратная связь. В три раза больше информации, чем в MTCNA.

Введение

Напоминаю одну важную деталь. Если вы ставите Zabbix Server не с нуля, а обновляете старую версию, у вас не обновляются стандартные шаблоны. А они последнее время сильно изменились, плюс появились новые. Посмотреть их можно на github - https://github.com/zabbix/zabbix/tree/master/templates.

В данном случае я буду использовать шаблон из директории /db/mysql_agent/. Он написан для старого агента. Напомню, что начиная с версии 4.4 доступна новая версия агента, написанная на Go - zabbix_agent2. Для него появился новый функционал и новые шаблоны. Я пока буду использовать старого агента, так как с новым еще не разбирался.

Если у вас еще нет своего сервера для мониторинга, то рекомендую материалы на эту тему. Для тех, кто предпочитает систему CentOS:

  1. Установка CentOS 8.
  2. Настройка CentOS 8.
  3. Установка и настройка zabbix сервера.

То же самое на Debian 10, если предпочитаете его:

  1. Установка Debian 10.
  2. Базовая настройка Debian.
  3. Установка и настройка zabbix на debian.

Ставьте себе сервер и погнали настраивать.

Подготовка mysql к мониторингу

Для примера настроим мониторинг Mysql на самом сервере мониторинга Zabbix. Так как это часто узкое место производительности системы, мониторинг базы zabbix лишним не будет. Первым делом добавим новые параметры в агенте. Для этого создаем конфигурационный файл /etc/zabbix/zabbix_agentd.d/template_db_mysql.conf следующего содержания.

UserParameter=mysql.ping[*], mysqladmin -h"$1" -P"$2" ping
UserParameter=mysql.get_status_variables[*], mysql -h"$1" -P"$2" -sNX -e "show global status"
UserParameter=mysql.version[*], mysqladmin -s -h"$1" -P"$2" version
UserParameter=mysql.db.discovery[*], mysql -h"$1" -P"$2" -sN -e "show databases"
UserParameter=mysql.dbsize[*], 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[*], mysql -h"$1" -P"$2" -sNX -e "show slave status"
UserParameter=mysql.slave_status[*], mysql -h"$1" -P"$2" -sNX -e "show slave status"

После этого сразу перезапустим zabbix-agent.

# systemctl restart zabbix-agent

Дальше идем в консоль mysql и создаем пользователя, от которого будет работать мониторинг. Ему достаточно ограниченных прав на чтение.

# mysql -uroot -p
> CREATE USER 'zbx_monitor'@'%' IDENTIFIED BY 'TTRy1bRRgLIB';
> GRANT USAGE,REPLICATION CLIENT,PROCESS,SHOW DATABASES,SHOW VIEW ON *.* TO 'zbx_monitor'@'%';
> quit

Теперь смотрим, где у нас домашняя директория пользователя zabbix.

# cat /etc/passwd | grep zabbix
zabbix:x:990:986:Zabbix Monitoring System:/var/lib/zabbix:/sbin/nologin

У меня ее не было, так что создаем.

# mkdir /var/lib/zabbix

Кладем в эту директорию конфиг .my.cnf с реквизитами доступа к серверу mysql.

[client]
user='zbx_monitor'
password='TTRy1bRRgLIB'

Назначаем пользователя zabbix владельцем своей домашней директории и файла в ней. Файлу ограничиваем доступ.

# chown -R zabbix. /var/lib/zabbix
# chmod 400 /var/lib/zabbix/.my.cnf

Подготовка к мониторингу mysql сервера завершена. Идем теперь в web интерфейс системы мониторинга Zabbix.

Настройка мониторинга Mysql сервера

В веб интерфейсе идем в раздел Настройка -> Шаблоны и импортируем шаблон template_db_mysql_agent.xml.

Импорт шаблона для мониторинга Mysql

После этого прикрепляем добавленный шаблон к хосту, где мы только что настроили zabbix-agent и добавили пользователя mysql. Для того, чтобы сразу увидеть все метрики, принудительно выполним сбор данных. Для начала вручную запустим правила автообнаружения, так как у них интервал проверок 1 час. Не хочется столько времени ждать данных. Идем в хост, далее во вкладку Правила обнаружения. Выбираем 2 правила от шаблона mysql и запускаем их.

Мониторинг Mysql сервера

Ждем несколько секунд и переходим на вкладку Элементы данных. Фильтруем элементы по названию группы MySQL и Zabbix raw items.

Метрики мониторинга

Теперь переходим к списку элементов данных. Выделяем все элементы, которые относятся к Mysql и имеют тип Zabbix Agent и запускаем их принудительную проверку. Основной элемент тут - MySQL: Get status variables. Почти все итемы получаются в результате предобработки данных с него.

После этого идем в раздел Мониторинг -> Последние данные и наблюдаем собираемые метрики.

Поступление данных в мониторинг mysql сервера

На этом по базовой настройке мониторинга сервера mysql все. Дальше раскрою некоторые нюансы.

Мониторинг репликации MySQL

Вообще, шаблон достаточно навороченный. Там и автообнаружение, и зависимые элементы с предобработкой xml, и предобработка с помощью JavaScript. Рассмотрю отдельно некоторые моменты представленного шаблона zabbix по мониторингу mysql. Во-первых, некоторые параметры задаются с помощью макросов. Вот их список.

Макросы шаблона template_db_mysql_agent

Из настраиваемых параметров ясно, что мониторить можно не только локальный mysql сервер, но и удаленный, задав параметры подключения к нему.

Так же в шаблоне реализован мониторинг репликации базы данных. Для этого есть отдельное правила автообнаружения с триггерами. Теперь моя старая статья по мониторингу репликации mysql стала не актуальна. Этот же функционал реализован в базовом шаблоне. Если у вас не настроена репликация, то автообнаружение просто не найдет ничего. Можно это правило выключить.

Мониторинг репликации mysql

Для мониторинга репликации автоматически создаются 4 триггера.

Триггеры репликации

  1. Replication lag is too high (over {$MYSQL.REPL_LAG.MAX.WARN} for 5m) - отставание реплики больше заданного в макросе времени. По умолчанию 30 минут.
  2. The slave I/O thread is not connected to a replication master - Демон по сбору бинарного лога запущен, но не подключен к мастеру. Его параметр slave_io_running имеет значение не Yes.
  3. The slave I/O thread is not running - демон по сбору бинарного лога не запущен. Его параметр slave_io_running равен No.
  4. The SQL thread is not running - демон выполнения команд локального relay лога не запущен. Его парметр slave_sql_running равен No.

В целом, этих четырех метрик достаточно для мониторинга репликации. Я так же настраивал мониторинг именно их.

Триггеры шаблона

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

Триггеры шаблона для мониторинга mysql

  1. Buffer pool utilization is too low (less {$MYSQL.BUFF_UTIL.MIN.WARN}% for 5m) - под innodb пул выделено слишком много памяти и она не используется вся. Триггер чисто информационный, делать ничего не надо, если у вас нет дефицита памяти на сервере. Если нехватка оперативной памяти есть, то имеет смысл забрать немного памяти у mysql и передать другому приложению. Настраивается потребление памяти пулом параметром innodb_buffer_pool_size.
  2. Failed to get items (no data for 30m) - от mysql сервера не поступают новые данные мониторинга в течении 30 минут. Имеет смысл уменьшить этот интервал до 5-10 минут.
  3. Refused connections (max_connections limit reached) - срабатывает ограничение на максимальное количество подключений к mysql. Увеличить его можно параметром mysql сервера - max_connections. Его необходимо увеличить, если позволяют возможности сервера. Напомню, что увеличенное количество подключений требует увеличения потребления оперативной памяти. Если у вас ее уже не хватает, нет смысла увеличивать число подключений. Нужно решать вопрос с потреблением памяти.
  4. Server has aborted connections (over {$MYSQL.ABORTED_CONN.MAX.WARN} for 5m) - сервер отклонил подключений выше заданного порога в макросе. Надо идти в лог mysql сервера и разбираться в причинах этого события. Скорее всего там будут подсказки.
  5. Server has slow queries (over {$MYSQL.SLOW_QUERIES.MAX.WARN} for 5m) - количество медленных запросов выше установленного макросом предела. Надо идти и разбираться с медленными запросами. Тема не самая простая. Надо заниматься профилированием запросов и решать проблемы по факту - добавлением индексов, редактированием запросов, увеличения ресурсов mysql сервера и т.д.
  6. Service has been restarted (uptime < 10m) - информационный триггер, срабатывающий на перезапуск mysql сервера (не ребут самого сервера).
  7. Service is down - служба mysql не запущена.
  8. Version has changed (new version value received: {ITEM.VALUE}) - версия mysql сервера изменилась. Тоже информационный триггер, сработает, к примеру, после обновления mysql сервера.

На этом по мониторингу MySQL сервера с помощью стандартного шаблона Zabbix все. Надеюсь, я доступно и понятно раскрыл данную тему. Если у вас есть замечания, жду вас в комментариях.

Заключение

Не понравилась статья и хочешь научить меня администрировать? Пожалуйста, я люблю учиться. Комментарии в твоем распоряжении. Расскажи, как сделать правильно!

Здорово, что разработчики сами занялись написанием готовых шаблонов для мониторинга сетевых устройств, операционных систем и приложений. Поняли, что это будет способствовать развитию продукта. Многие шаблоны, которые разрабатывали сами пользователи, становятся неактуальными, так как разработчики их делают лучше. Собственно, это и логично. Кто лучше всех знает продукт, как не они. За последнее время появилось много обновления по этой теме. Надеюсь, будет еще больше.

Онлайн-курс по устройству компьютерных сетей.

На углубленном курсе "Архитектура современных компьютерных сетей" вы с нуля научитесь работать с Wireshark и «под микроскопом» изучите работу сетевых протоколов. На протяжении курса надо будет выполнить более пятидесяти лабораторных работ в Wireshark.

Помогла статья? Подписывайся на telegram канал автора

Анонсы всех статей, плюс много другой полезной и интересной информации, которая не попадает на сайт.

Автор Zerox

Владимир, системный администратор, автор сайта. Люблю настраивать сервера, изучать что-то новое, делиться знаниями, писать интересные и полезные статьи. Открыт к диалогу и сотрудничеству. Если вам интересно узнать обо мне побольше, то можете послушать интервью. Запись на моем канале - https://t.me/srv_admin/425 или на сайте в контактах.

52 комментария

  1. У кого ошибка Access denied for user 'zabbix'@'localhost' (using password: NO).
    Zabbix не видит конфиг в своей домашней директории, так как не знает о ней.
    Выполняем

    sudo systemctl stop zabbix-agent
    sudo usermod --home /var/lib/zabbix zabbix
    sudo systemctl start zabbix-agent

    И всё заработает

  2. Михаил

    Если у вас ошибка Access denied for user 'zabbix'@'localhost' (using password: NO)
    Значит zabbix не знает о своей домашней директории которую вы создали и не может из неё взять конфиг.
    Нужно выполнить:
    sudo systemctl stop zabbix-agent
    sudo usermod --home /var/lib/zabbix zabbix
    sudo systemctl start zabbix-agent

    И всё заработает.

  3. Sergey Tsybanev

    Хорошая статья!
    Надо бы статью еще запилить чтоб работало и на винде )

    • На винде очень редко ставят MySQL сервер. Нет особого смысла. Проще в виртулаку засунуть под Linux.

  4. Евгений

    Добрый день

    подскажите пожалуйста где можно взять файл template_db_mysql_agent.xml
    Нашет в интернете, но по некоторым данным выдает ошибки типа
    Preprocessing failed for: ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock...
    1. Failed: cannot extract XML value with xpath "/resultset/row[field/text()='Aborted_clients']/field[@name='Value']/text()": cannot parse xml value: Start tag expected, '<' not found

  5. Собирается статистика в таблицы MySql
    Возможно ли подключить эти таблицы для дальнейшего анализа этих данных посредством Zabbix

  6. У кого ошибка вида Preprocessing failed for: ERROR 1045 (28000): Access denied for user 'zabbix'@'localhost' (using password: NO) в админке забикса, но при этом вы уверены, что 100% всё сделали верно, то проверьте версию агента - на старой версии 3.2 столкнулся с тем, что он тупо не видел .my.cnf в своем домашней директории, такая же проблема тут описана: https://www.zabbix.com/forum/zabbix-help/417586-zabbix-4-4-template-db-mysql-account-isn-t-read-from-agent-conf

  7. Сергей

    Привет, есть статья где реализован показ какие именно запросы тормозят и лежат в mysql slow log?
    Отслеживать изменение файла конечно хорошо, но полностью бесполезно, нужно видеть какой именно тормозит запрос

    • Не понял, в каком виде все это хочется получить в zabbix? Если просто список медленных запросов, то можно банально парсить slow log и слать его в zabbix.

  8. не могу разобраться как это же сделать на Win. Кто-нибудь разбирался?

  9. В Centos 7 в пункте про создание файла .my.cnf необходимо создавать именно точка my.cnf точка, в случае если без точки то будет ошибка как раз про пользователя zabbix/

  10. step.alexander

    Добрый день.

    При запуске агента появляется ошибка
    cannot initialize user parameters: cannot register user parameter "mysql.ping[*], mysqladmin -h"$1" -P"$2" ping": key already used
    Если её закомментировать, то будет показывать ошибку для следующего параметра и т.д.
    В основном конфиге эти параметры не прописаны. Проверял на агентах: zabbix-agent и zabbix-agent2

    • У вас четко говорится, что данный параметр уже задан. Обычно это так и есть. Смотрите внимательнее конфиг. Ни разу с какой-то ошибкой по этой теме не сталкивался.

    • Владислав

      Такая ошибка у меня была, когда в zabbix_agentd.conf было раскоментировано два инклюда подряд:

      Include=/usr/local/etc/zabbix_agentd.conf.d/
      Include=/usr/local/etc/zabbix_agentd.conf.d/*.conf

      Нужен раскомментировать только один.

  11. Александр Ар

    Спасибо! Очень доступно объяснили. Как можно изменить шаблон, чтобы он считал к-во записей в каждой таблице БД? Интересует для фильтра аномалий в записях таких, как ошибки вызывающие резкий рост БД

    • Изменением шаблона это не решить, в нем просто нет такого функционала. Считать количество записей в таблице придется каким-то отдельным скриптом и передавать данные в Zabbix.

    • Неа, меня обычный пока удовлетворил. Но надо, конечно, посмотреть. Думаю, новый агент получит свое развитие, а от старого будут отказываться потихоньку.

  12. Добрый день, item "Get status variables" выдает следующее значение: "ERROR 1045 (28000): Access denied for user 'zbx_monitor'@'localhost' (using password: YES)".
    Соответственно, не получается достать все другие значения.
    С чем может быть связана эта проблема?

  13. Как Вы думаете, для мониторинга MS SQL достаточно просто выбрать подходящий шаблон с вышеуказанными настройками?

  14. Вячеслав

    все норм,работает)

  15. Вячеслав

    Добрый день,все сделано по статье но как и у первого комментатора ошибка :

    Preprocessing failed for: ERROR 1045 (28000): Access denied for user 'zabbix'@'localhost' (using password: NO)
    1. Failed: cannot extract XML value with xpath "/resultset/row[field/text()='Aborted_clients']/field[@name='Value']/text()": cannot parse xml value: Start tag expected, '<' not found

  16. Здравствуйте!
    на Ubuntu 16 такая ошибка
    Preprocessing failed for: ERROR 1045 (28000): Access denied for user 'zabbix'@'localhost' (using password: NO)
    1. Failed: cannot extract XML value with xpath "/resultset/row[field/text()='Aborted_clients']/field[@name='Value']/text()": cannot parse xml value: Start tag expected, '<' not found
    домашная папка zabbix-a /var/lib/zabbix
    параметры для подключение к БД лежать /var/lib/zabbix/.my.cnf

    • Вы что-то где-то перепутали. У вас ошибка подключения пользователя Zabbix к базе данных. При этом в статье для мониторинга я создаю другого пользователя mysql.

    • К узлу сети в макросы добавь, и пересоздай пользователя вместо localhost используй 127.0.0.1
      макрос Значение
      {$MYSQL.HOST} 127.0.0.1
      {$MYSQL.PORT} 3306

  17. Хотел бы поделиться так сказать опытом :-)

    Есть 8 MySQL серверов, Zabbix 5.0 (обновлял с 4.4.9). Ранее я разными способами настраивал мониторинг MySQL, увидел вашу статью, решил сделать везде одинаково, через шаблон от Zabbix.

    Сделал вырезку команд в блокнот, и начал настраивать. На 2-х серверах настроил, на 3-м не заработало.
    Думаю "ну ладно, возможно ошибся где-то", и сделала еще раз (создал пользователя MySQL, каталоги, шаблон отключил и подключил назад и тд). Не работает. И сделал это еще 2-3 раза по кругу.
    В какой-то момент словил себя на мысли что я делаю еще не в первый раз то же самое и не работает, и нужно что-то менять :-)

    Открыл статью еще раз, и начал с начала. И на первой команде все стало ясно :-)

    На 2-х серверах домашний каталог zabbix пользователя был корректный, а на 3-м сервере "/nonexistent", поменял домашний каталог заработало :-)
    Но времени конечно делая то же самое 4-5 раз потратил знатно :-)

    Вывод - если что-то не работает с первого раза, можно попробовать второй раз (вдруг ошибся), но дальше уже нужно делать уже траблшутинг, и второй вывод - внимательно читать и делать по мануалу :-)

  18. Александр

    Добрый день,
    Хотел бы добавить что в секции с созданием пользователя в MySQL / MariaDB нужно сделать "FLUSH PRIVILEGES;".
    Спасибо за статью!

    • Это не обязательно. И без сброса привилегий новый пользователь заработает.

  19. Огромнейшее спасибо!
    Сам смотрел в направлении данного мониторинга, но по документации Zabbix'a самостоятельно разобраться не смог.
    По Вашему руководству все получилось без проблем.

    • Zabbix хоть и старается делать документацию, но по факту не очень получается. Я по их же докам делаю статьи и получается гораздо понятнее.

      • Именно об этом я и написал.
        Технические писатели у них работают для профессионалов.
        А нам, чайникам, приходится искать обходные пути.

  20. Благодарю за интересную статью, а в случае мониторинга MS SQL Server, что посоветуете использовать?

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Нажимая кнопку "Отправить комментарий" Я даю согласие на обработку персональных данных.
Используешь Telegram? Подпишись на канал автора →
This is default text for notification bar