1 Расширение возможностей агентов Zabbix
В этом разделе приведены пошаговые инструкции по расширению функциональности агента Zabbix с помощью пользовательского параметра.
В приведенном ниже примере извлекается количество операторов, выполненных сервером MySQL. Эти шаги применимы как к агенту Zabbix, так и к агенту Zabbix 2.
В этом примере показано, как работают пользовательские параметры. Для мониторинга MySQL в рабочей среде рекомендуется использовать предопределенные шаблоны MySQL, которым не требуются пользовательские параметры.
Шаг 1. Подготовка доступа к MySQL
Агент работает от имени пользователя операционной системы zabbix.
Не используйте учетную запись MySQL root, поскольку для нее может применяться аутентификация на основе сокета, что может помешать агенту подключиться.
Вместо этого создайте отдельного пользователя MySQL:
CREATE USER 'zbx_monitor'@'localhost' IDENTIFIED BY '<password>';
Сохраните учетные данные в файле, доступном для чтения только пользователю zabbix, например /etc/zabbix/mysql_monitor.cnf (путь зависит от операционной системы и способа установки Zabbix):
[client]
user=zbx_monitor
password=<strong password>
Установите владельца и права доступа к файлу:
sudo chown zabbix:zabbix /etc/zabbix/mysql_monitor.cnf
sudo chmod 600 /etc/zabbix/mysql_monitor.cnf
Явно укажите этот файл с помощью --defaults-extra-file (этот параметр должен быть первым параметром, переданным клиенту MySQL), вместо использования ~/.my.cnf, поскольку переменная окружения HOME демона может быть не задана или иметь значение, отличное от ожидаемого.
Если MySQL использует нестандартный путь к сокету, добавьте в тот же файл строку socket=.
Шаг 2. Напишите команду
Напишите пользовательский скрипт или команду для получения требуемого параметра и убедитесь, что они работают в тех же условиях, что и демон агента.
Следующая команда возвращает количество операторов, выполненных сервером MySQL:
/usr/bin/mysql --defaults-extra-file=/etc/zabbix/mysql_monitor.cnf -N -B -e "SHOW GLOBAL STATUS LIKE 'Questions'" | /usr/bin/awk '{print $2}'
Вы можете протестировать команду от имени пользователя zabbix; она должна вывести одно число:
sudo -u zabbix sh -c "/usr/bin/mysql --defaults-extra-file=/etc/zabbix/mysql_monitor.cnf -N -B -e \"SHOW GLOBAL STATUS LIKE 'Questions'\" | /usr/bin/awk '{print \$2}'"
Шаг 3: Добавьте команду в конфигурацию агента Zabbix
Вместо редактирования основного файла конфигурации агента (zabbix_agentd.conf или zabbix_agent2.conf) создайте отдельный файл в каталоге, подключаемом параметром Include.
Отдельными файлами проще управлять, и вероятность их изменения при обновлении пакетов ниже.
Например, создайте файл /etc/zabbix/zabbix_agentd.d/mysql.conf (/etc/zabbix/zabbix_agent2.d/mysql.conf для агента Zabbix 2) со следующим содержимым:
UserParameter=mysql.questions,/usr/bin/mysql --defaults-extra-file=/etc/zabbix/mysql_monitor.cnf -N -B -e "SHOW GLOBAL STATUS LIKE 'Questions'" | /usr/bin/awk '{print $2}'
mysql.questions — уникальный ключ элемента данных.
Он должен быть уникальным в конфигурации агента.
Проверить параметр можно, запустив агент Zabbix с флагом -t.
Выполните проверку от имени пользователя zabbix и укажите файл конфигурации, если он находится не в расположении по умолчанию:
Для агента Zabbix:
sudo -u zabbix zabbix_agentd -c /etc/zabbix/zabbix_agentd.conf -t mysql.questions
Для агента Zabbix 2:
sudo -u zabbix zabbix_agent2 -c /etc/zabbix/zabbix_agent2.conf -t mysql.questions
Ожидаемый результат содержит число, например:
mysql.questions [t|4567]
Шаг 4. Перезагрузка и проверка пользовательского параметра
Перезагрузите пользовательские параметры из файла конфигурации, выполнив следующую команду:
Для агента Zabbix:
sudo zabbix_agentd -c /etc/zabbix/zabbix_agentd.conf -R userparameter_reload
Для агента Zabbix 2:
sudo zabbix_agent2 -c /etc/zabbix/zabbix_agent2.conf -R userparameter_reload
Выполните команду от имени root или пользователя операционной системы, от имени которого запущен агент.
Также можно перезапустить агент, чтобы применить изменения конфигурации.
Проверить параметр в работающем агенте можно с помощью утилиты zabbix_get, например с сервера Zabbix:
zabbix_get -s <IP address> -k mysql.questions
Здесь <IP address> — IP-адрес узла сети, на котором запущен агент, к которому подключается zabbix_get.
IP-адрес узла сети, на котором запущен zabbix_get, должен быть указан в параметре Server агента.
Чтобы эта проверка работала, агент должен принимать пассивные проверки (для агента Zabbix параметр StartAgents не должен иметь значение 0).
Если агент настроен только на активные проверки, пропустите эту проверку и проверьте элемент данных в разделе Мониторинг > Последние данные после выполнения последнего шага.
Шаг 5: Создание элемента данных
Создайте новый элемент данных на отслеживаемом узле сети с ключом элемента данных mysql.questions.
Выберите тип элемента данных: Zabbix Agent или Zabbix Agent (active).
Для пассивного Zabbix агента адрес сервера или прокси Zabbix должен быть указан в параметре Server агента.
Для активного Zabbix агента параметр ServerActive должен указывать на сервер или прокси Zabbix, а параметр Hostname агента должен в точности совпадать с именем узла сети, настроенным в веб-интерфейсе.
Выберите Тип информации элемента данных. Агент всегда возвращает значение в виде текста; параметр Тип информации определяет, как Zabbix интерпретирует и сохраняет это значение после выполнения всех шагов предварительной обработки.
Для исходного накопительного счетчика выберите Числовой (без знака). Чтобы измерять количество операторов в секунду, выберите Числовой (с плавающей точкой) и добавьте шаг предварительной обработки Изменение в секунду.