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

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

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

Если у вас есть желание научиться работать с роутерами микротик и стать специалистом в этой области, рекомендую по программе, основанной на информации из официального курса MikroTik Certified Network Associate. Курс стоящий, все подробности читайте по ссылке. Есть бесплатные курсы.

Введение

Напоминаю одну важную деталь. Если вы ставите 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 все. Надеюсь, я доступно и понятно раскрыл данную тему. Если у вас есть замечания, жду вас в комментариях.

Заключение

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

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

Онлайн курс Основы сетевых технологий

Теоретический курс с самыми базовыми знаниями по сетям. Курс подходит и начинающим, и людям с опытом. Практикующим системным администраторам курс поможет упорядочить знания и восполнить пробелы. А те, кто только входит в профессию, получат на курсе базовые знания и навыки, без воды и избыточной теории. После обучения вы сможете ответить на вопросы:
  • На каком уровне модели OSI могут работать коммутаторы;
  • Как лучше организовать работу сети организации с множеством отделов;
  • Для чего и как использовать технологию VLAN;
  • Для чего сервера стоит выносить в DMZ;
  • Как организовать объединение филиалов и удаленный доступ сотрудников по vpn;
  • и многое другое.
Уже знаете ответы на вопросы выше? Или сомневаетесь? Попробуйте пройти тест по основам сетевых технологий. Всего 53 вопроса, в один цикл теста входит 10 вопросов в случайном порядке. Поэтому тест можно проходить несколько раз без потери интереса. Бесплатно и без регистрации. Все подробности на странице .

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

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

Автор Zerox

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

28 комментариев

  1. Аватар
    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

  2. Аватар
    Александр Ар

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

    • Zerox

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

    • Zerox

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

  3. Аватар

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

  4. Аватар

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

  5. Аватар
    Вячеслав

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

  6. Аватар
    Вячеслав

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

    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

  7. Аватар

    Здравствуйте!
    на 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

    • Zerox

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

  8. Аватар

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

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

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

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

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

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

  9. Аватар
    Александр

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

    • Zerox

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

  10. Аватар

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

    • Zerox

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

      • Аватар

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

  11. Аватар

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

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

Ваш адрес email не будет опубликован.

Нажимая кнопку "Отправить комментарий" Я даю согласие на обработку персональных данных.