С появлением стандартных готовых шаблонов для различных приложений жизнь с заббиксом стала значительно проще. Сегодня я покажу это на примере мониторинга Mysql сервера в Zabbix 5 с использованием стандартного шаблона. Все стало не просто, а очень просто. Практически ничего делать не надо, разработчики все сделали за нас.
Научиться настраивать 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:
То же самое на Debian 10, если предпочитаете его:
Ставьте себе сервер и погнали настраивать.
Подготовка 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.
После этого прикрепляем добавленный шаблон к хосту, где мы только что настроили zabbix-agent и добавили пользователя mysql. Для того, чтобы сразу увидеть все метрики, принудительно выполним сбор данных. Для начала вручную запустим правила автообнаружения, так как у них интервал проверок 1 час. Не хочется столько времени ждать данных. Идем в хост, далее во вкладку Правила обнаружения. Выбираем 2 правила от шаблона mysql и запускаем их.
Ждем несколько секунд и переходим на вкладку Элементы данных. Фильтруем элементы по названию группы MySQL и Zabbix raw items.
Теперь переходим к списку элементов данных. Выделяем все элементы, которые относятся к Mysql и имеют тип Zabbix Agent и запускаем их принудительную проверку. Основной элемент тут - MySQL: Get status variables. Почти все итемы получаются в результате предобработки данных с него.
После этого идем в раздел Мониторинг -> Последние данные и наблюдаем собираемые метрики.
На этом по базовой настройке мониторинга сервера mysql все. Дальше раскрою некоторые нюансы.
Мониторинг репликации MySQL
Вообще, шаблон достаточно навороченный. Там и автообнаружение, и зависимые элементы с предобработкой xml, и предобработка с помощью JavaScript. Рассмотрю отдельно некоторые моменты представленного шаблона zabbix по мониторингу mysql. Во-первых, некоторые параметры задаются с помощью макросов. Вот их список.
Из настраиваемых параметров ясно, что мониторить можно не только локальный mysql сервер, но и удаленный, задав параметры подключения к нему.
Так же в шаблоне реализован мониторинг репликации базы данных. Для этого есть отдельное правила автообнаружения с триггерами. Теперь моя старая статья по мониторингу репликации mysql стала не актуальна. Этот же функционал реализован в базовом шаблоне. Если у вас не настроена репликация, то автообнаружение просто не найдет ничего. Можно это правило выключить.
Для мониторинга репликации автоматически создаются 4 триггера.
- Replication lag is too high (over {$MYSQL.REPL_LAG.MAX.WARN} for 5m) - отставание реплики больше заданного в макросе времени. По умолчанию 30 минут.
- The slave I/O thread is not connected to a replication master - Демон по сбору бинарного лога запущен, но не подключен к мастеру. Его параметр slave_io_running имеет значение не Yes.
- The slave I/O thread is not running - демон по сбору бинарного лога не запущен. Его параметр slave_io_running равен No.
- The SQL thread is not running - демон выполнения команд локального relay лога не запущен. Его парметр slave_sql_running равен No.
В целом, этих четырех метрик достаточно для мониторинга репликации. Я так же настраивал мониторинг именно их.
Триггеры шаблона
Для полноты картины, поясню остальные триггеры шаблона, чтобы у вас было понимание, за чем они следят и как правильно реагировать на них. Ниже список триггеров шаблона для мониторинга mysql сервера.
- Buffer pool utilization is too low (less {$MYSQL.BUFF_UTIL.MIN.WARN}% for 5m) - под innodb пул выделено слишком много памяти и она не используется вся. Триггер чисто информационный, делать ничего не надо, если у вас нет дефицита памяти на сервере. Если нехватка оперативной памяти есть, то имеет смысл забрать немного памяти у mysql и передать другому приложению. Настраивается потребление памяти пулом параметром innodb_buffer_pool_size.
- Failed to get items (no data for 30m) - от mysql сервера не поступают новые данные мониторинга в течении 30 минут. Имеет смысл уменьшить этот интервал до 5-10 минут.
- Refused connections (max_connections limit reached) - срабатывает ограничение на максимальное количество подключений к mysql. Увеличить его можно параметром mysql сервера - max_connections. Его необходимо увеличить, если позволяют возможности сервера. Напомню, что увеличенное количество подключений требует увеличения потребления оперативной памяти. Если у вас ее уже не хватает, нет смысла увеличивать число подключений. Нужно решать вопрос с потреблением памяти.
- Server has aborted connections (over {$MYSQL.ABORTED_CONN.MAX.WARN} for 5m) - сервер отклонил подключений выше заданного порога в макросе. Надо идти в лог mysql сервера и разбираться в причинах этого события. Скорее всего там будут подсказки.
- Server has slow queries (over {$MYSQL.SLOW_QUERIES.MAX.WARN} for 5m) - количество медленных запросов выше установленного макросом предела. Надо идти и разбираться с медленными запросами. Тема не самая простая. Надо заниматься профилированием запросов и решать проблемы по факту - добавлением индексов, редактированием запросов, увеличения ресурсов mysql сервера и т.д.
- Service has been restarted (uptime < 10m) - информационный триггер, срабатывающий на перезапуск mysql сервера (не ребут самого сервера).
- Service is down - служба mysql не запущена.
- Version has changed (new version value received: {ITEM.VALUE}) - версия mysql сервера изменилась. Тоже информационный триггер, сработает, к примеру, после обновления mysql сервера.
На этом по мониторингу MySQL сервера с помощью стандартного шаблона Zabbix все. Надеюсь, я доступно и понятно раскрыл данную тему. Если у вас есть замечания, жду вас в комментариях.
Заключение
Здорово, что разработчики сами занялись написанием готовых шаблонов для мониторинга сетевых устройств, операционных систем и приложений. Поняли, что это будет способствовать развитию продукта. Многие шаблоны, которые разрабатывали сами пользователи, становятся неактуальными, так как разработчики их делают лучше. Собственно, это и логично. Кто лучше всех знает продукт, как не они. За последнее время появилось много обновления по этой теме. Надеюсь, будет еще больше.
Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном онлайн-курcе по администрированию MikroTik. Автор курcа – сертифицированный тренер MikroTik Дмитрий Скоромнов. Более 40 лабораторных работ по которым дается обратная связь. В три раза больше информации, чем в MTCNA.
Хорошая статья!
Надо бы статью еще запилить чтоб работало и на винде )
На винде очень редко ставят MySQL сервер. Нет особого смысла. Проще в виртулаку засунуть под Linux.
Добрый день
подскажите пожалуйста где можно взять файл 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
Все шаблоны есть в официальном репозитории Zabbix - https://github.com/zabbix/zabbix/tree/master/templates
Там шаблоны yaml и они почему-то не грузятся
Детали Ошибка при импортировании
Ошибочный тег "/zabbix_export": неожиданный тег "template_groups".
zabbix-server 6
ВЫ можете взять шаблон под свою версию Zabbix. Посмотрите, в git можно выбрать ветку, и скачать шаблон именно под свою версию.
Собирается статистика в таблицы MySql
Возможно ли подключить эти таблицы для дальнейшего анализа этих данных посредством Zabbix
Только если через внешние скрипты, которые будут отдавать готовые метрики в Zabbix.
Возможно вы знаете ссылки на примеры подобных скриптов?
Я не видел подобных реализаций.
У кого ошибка вида 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
Привет, есть статья где реализован показ какие именно запросы тормозят и лежат в mysql slow log?
Отслеживать изменение файла конечно хорошо, но полностью бесполезно, нужно видеть какой именно тормозит запрос
Не понял, в каком виде все это хочется получить в zabbix? Если просто список медленных запросов, то можно банально парсить slow log и слать его в zabbix.
не могу разобраться как это же сделать на Win. Кто-нибудь разбирался?
В Centos 7 в пункте про создание файла .my.cnf необходимо создавать именно точка my.cnf точка, в случае если без точки то будет ошибка как раз про пользователя zabbix/
Не понял, точка еще в конце файла нужна? Впервые слышу о таком.
смешно, но факт
Добрый день.
При запуске агента появляется ошибка
cannot initialize user parameters: cannot register user parameter "mysql.ping[*], mysqladmin -h"$1" -P"$2" ping": key already used
Если её закомментировать, то будет показывать ошибку для следующего параметра и т.д.
В основном конфиге эти параметры не прописаны. Проверял на агентах: zabbix-agent и zabbix-agent2
У вас четко говорится, что данный параметр уже задан. Обычно это так и есть. Смотрите внимательнее конфиг. Ни разу с какой-то ошибкой по этой теме не сталкивался.
Точтно такая же проблема как у человека выше,step.alexander
А где этот параметр указан?кроме template_db_mysql.conf.
Спасибо! Очень доступно объяснили. Как можно изменить шаблон, чтобы он считал к-во записей в каждой таблице БД? Интересует для фильтра аномалий в записях таких, как ошибки вызывающие резкий рост БД
Изменением шаблона это не решить, в нем просто нет такого функционала. Считать количество записей в таблице придется каким-то отдельным скриптом и передавать данные в Zabbix.
Zerox, а шаблон для Agent2 не смотрели? https://git.zabbix.com/projects/ZBX/repos/zabbix/browse/templates/db/mysql_agent2
Неа, меня обычный пока удовлетворил. Но надо, конечно, посмотреть. Думаю, новый агент получит свое развитие, а от старого будут отказываться потихоньку.
Добрый день, item "Get status variables" выдает следующее значение: "ERROR 1045 (28000): Access denied for user 'zbx_monitor'@'localhost' (using password: YES)".
Соответственно, не получается достать все другие значения.
С чем может быть связана эта проблема?
Так у вас же прямым текстом написана проблема:
"Access denied for user 'zbx_monitor'@'localhost'"
Да, я понимаю, что отказано в доступе по паролю. В связи с этим интересуюсь почему не пускает. Пароль указал верно и делал по инструкции.
Где-то все же ошибка, раз не пускает. Тут не может быть неоднозначностей. Пользователя zbx_monitor не пускает к базе Zabbix.
Понятно, спасибо!
В MySQL уже есть пользователь ''@'localhost', поэтому не удается подключиться 'zbx_monitor'@'localhost' т.к. он создан как 'zbx_monitor'@'%', нужно его удалить.
Подробно:
https://dev.mysql.com/doc/refman/8.0/en/connection-access.html
Как Вы думаете, для мониторинга MS SQL достаточно просто выбрать подходящий шаблон с вышеуказанными настройками?
Какими настройками? В статье речь идет только про Mysql. Мониторинг MS SQL настраивается по-другому.
Мне надо настроит Мониторинг MS SQL, не знаю с чего начать. Можете посоветовать?
Вот, все есть - https://www.zabbix.com/ru/integrations/microsoft_sql
все норм,работает)
Добрый день,все сделано по статье но как и у первого комментатора ошибка :
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
Здравствуйте!
на 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
Хотел бы поделиться так сказать опытом :-)
Есть 8 MySQL серверов, Zabbix 5.0 (обновлял с 4.4.9). Ранее я разными способами настраивал мониторинг MySQL, увидел вашу статью, решил сделать везде одинаково, через шаблон от Zabbix.
Сделал вырезку команд в блокнот, и начал настраивать. На 2-х серверах настроил, на 3-м не заработало.
Думаю "ну ладно, возможно ошибся где-то", и сделала еще раз (создал пользователя MySQL, каталоги, шаблон отключил и подключил назад и тд). Не работает. И сделал это еще 2-3 раза по кругу.
В какой-то момент словил себя на мысли что я делаю еще не в первый раз то же самое и не работает, и нужно что-то менять :-)
Открыл статью еще раз, и начал с начала. И на первой команде все стало ясно :-)
На 2-х серверах домашний каталог zabbix пользователя был корректный, а на 3-м сервере "/nonexistent", поменял домашний каталог заработало :-)
Но времени конечно делая то же самое 4-5 раз потратил знатно :-)
Вывод - если что-то не работает с первого раза, можно попробовать второй раз (вдруг ошибся), но дальше уже нужно делать уже траблшутинг, и второй вывод - внимательно читать и делать по мануалу :-)
Добрый день,
Хотел бы добавить что в секции с созданием пользователя в MySQL / MariaDB нужно сделать "FLUSH PRIVILEGES;".
Спасибо за статью!
Это не обязательно. И без сброса привилегий новый пользователь заработает.
Огромнейшее спасибо!
Сам смотрел в направлении данного мониторинга, но по документации Zabbix'a самостоятельно разобраться не смог.
По Вашему руководству все получилось без проблем.
Zabbix хоть и старается делать документацию, но по факту не очень получается. Я по их же докам делаю статьи и получается гораздо понятнее.
Именно об этом я и написал.
Технические писатели у них работают для профессионалов.
А нам, чайникам, приходится искать обходные пути.
Благодарю за интересную статью, а в случае мониторинга MS SQL Server, что посоветуете использовать?
Сам не настраивал никогда, но есть очень много различных шаблонов - https://share.zabbix.com/databases/microsoft-sql-server
В 5.0.2 появился шаблон https://git.zabbix.com/projects/ZBX/repos/zabbix/browse/templates/db/mssql_odbc/README.md
В скором времени будет еще один https://support.zabbix.com/browse/ZBXNEXT-5984