Пользовательские параметры
Обзор
Пользовательский параметр позволяет определить пользовательский ключ элемента данных и команду, используемую для получения его значения, если ни один встроенный элемент данных агента Zabbix не предоставляет необходимые данные. Пользовательский параметр представляет собой определяемую пользователем команду, на которую ссылается определяемый пользователем ключ элемента данных. Агент Zabbix выполняет эту команду при проверке соответствующего элемента данных.
В UNIX-системах агент выполняет команды пользовательских параметров с помощью /bin/sh от имени учетной записи операционной системы, под которой запущен агент (обычно zabbix).
Эта учетная запись должна иметь достаточные права для выполнения команды и доступа к используемым ею файлам, сокетам или учетным данным.
Существует два типа пользовательских параметров:
- Простые пользовательские параметры не принимают аргументы; они определяют фиксированный ключ элемента данных и выполняемую команду.
- Гибкие пользовательские параметры принимают аргументы (указанные в качестве параметров ключа элемента данных) и передают их команде, позволяя использовать одно определение для нескольких элементов данных.
Настройка пользовательских параметров
Пользовательский параметр определяется с помощью параметра конфигурации UserParameter.
Пользовательский параметр имеет следующий синтаксис:
UserParameter=<key>,<shell command>
где:
<key>— уникальный ключ элемента данных, идентифицирующий пользовательский параметр.
При настройке элемента данных укажите этот ключ, чтобы обратиться к команде, определенной пользовательским параметром.
Для простого пользовательского параметра ключ является фиксированным и не принимает аргументы. Для гибкого пользовательского параметра добавьте к ключу[*](например,mysql.status[*]), чтобы указать, что он принимает аргументы. Укажите эти аргументы в качестве параметров ключа элемента данных при настройке элемента данных. Команда может обращаться к параметрам с помощью позиционных ссылок$1–$9.<shell command>— команда оболочки или путь к пользовательскому скрипту, который агент выполняет для получения значения элемента данных.
Для гибкого пользовательского параметра команда может использовать позиционные ссылки$1–$9для обращения к соответствующим параметрам в ключе элемента данных (например,UserParameter=mysql.status[*],mysqladmin status --user=$1 --password=$2). Zabbix анализирует параметры, заключенные в[]в ключе элемента данных (то естьmysql.status[zabbix,{$MYSQL.PASSWORD}]), и соответствующим образом подставляет позиционные ссылки в команду.
$0заменяется исходной командой до раскрытия позиционных ссылок. Позиционные ссылки интерпретируются независимо от того, заключены ли они в двойные (") или одинарные (') кавычки. Чтобы использовать позиционные ссылки без подстановки, укажите два знака доллара. Например,awk '{print $$2}'передает$2команде без изменений.
Обратите внимание, что позиционные ссылки с префиксом$ищутся и заменяются агентом Zabbix только в гибких пользовательских параметрах. Для простых пользовательских параметров позиционные ссылки не обрабатываются, поэтому экранировать$не требуется.
По умолчанию некоторые символы нельзя передавать в качестве аргументов. Полный список символов см. в разделе UnsafeUserParameters.
UserParameter необходимо настроить на каждом агенте Zabbix, который его использует:
- непосредственно в файле конфигурации агента Zabbix (
zabbix_agentd.confилиzabbix_agent2.conf); - в отдельном файле
*.confпри условии, что этот файл подключен конфигурацией агента.
Для одного агента можно определить несколько UserParameter, поскольку можно подключить несколько файлов с разными наборами параметров.
Каждый пользовательский параметр должен иметь уникальный ключ элемента данных в пределах отслеживаемого узла сети.
Параметр конфигурации UserParameterDir позволяет указать рабочий каталог для выполнения команд UserParameter.
Если параметр настроен, агент изменяет свой рабочий каталог на указанный каталог перед выполнением команды.
Команды можно указывать с использованием относительного пути с префиксом ./, например UserParameter=mykey,./myscript.sh.
Чтобы настроить пользовательский параметр:
- Напишите пользовательский скрипт или команду для получения необходимых данных.
- Добавьте команду и ее уникальный ключ элемента данных в параметр конфигурации
UserParameterв файле конфигурации агента Zabbix (zabbix_agentd.conf). -
Перезагрузите пользовательские параметры из файла конфигурации, выполнив команду управления во время выполнения:
zabbix_agentd -R userparameter_reload
Также можно перезапустить агент, чтобы применить изменения конфигурации.
- Создайте новый элемент данных на отслеживаемом узле сети с ключом элемента данных, определенным в
UserParameter.
Установите для типа элемента данных значение Zabbix Agent или Zabbix Agent (active).
Убедитесь, что параметр Type of information элемента данных настроен правильно; в противном случае Zabbix отклонит возвращенное значение.
Пример настройки и использования пользовательских параметров см. в разделе Расширение агентов Zabbix.
На пользовательские параметры распространяется ограничение времени ожидания проверки агента Zabbix. Если это время истекло, процесс, выполняющий пользовательский параметр, завершается. Дополнительную информацию см. в разделе Выполнение команд.
Обратите внимание, что длительно выполняющиеся скрипты могут потреблять системные ресурсы и задерживать выполнение других проверок.
Результат выполнения команды
Возвращаемое значение команды состоит из стандартного вывода и стандартного вывода ошибок, сформированных командой.
Пользовательские параметры, возвращающие текст (тип информации Character, Log или Text), также могут возвращать пробелы. Если команда формирует недопустимый результат, элемент данных становится неподдерживаемым. Однако элемент данных с одним из этих типов информации не станет неподдерживаемым только из-за того, что команда формирует вывод в стандартный поток ошибок.
Возвращаемое значение команды ограничено 16 МБ, включая конечные пробелы, которые усекаются. Это ограничение применяется до выполнения шагов предобработки значения элемента данных. Также применяются ограничения базы данных.
Примеры пользовательских параметров
В этом разделе приведены примеры простых и гибких пользовательских параметров.
Приведенные ниже примеры предназначены только для демонстрации и не должны использоваться в рабочей среде без соответствующих мер защиты.
Гибкие пользовательские параметры, определенные с использованием [*], принимают аргументы, которые могут создать риски внедрения команд, если их обработка не защищена.
Примеры простых пользовательских параметров
Пример 1: Постоянное значение
UserParameter=ping,echo 1
Элемент данных с ключом ping всегда возвращает значение 1.
Пример 2: Доступность сервера MySQL
UserParameter=mysql.ping,mysqladmin ping 2>/dev/null | grep -c alive
Возвращает 1, если сервер MySQL отвечает, и 0 в противном случае.
Перенаправление 2>/dev/null отбрасывает вывод стандартной ошибки команды mysqladmin.
Без него сообщение об ошибке может быть возвращено вместе со значением 0, из-за чего элемент данных с типом информации Numeric станет неподдерживаемым (см. раздел Результат выполнения команды).
В этом примере предполагается, что учетные данные для подключения к MySQL настроены для учетной записи операционной системы, от имени которой работает агент Zabbix, например в файле параметров MySQL, доступном этой учетной записи.
Примеры гибких пользовательских параметров
Пример 1. Возврат параметра
UserParameter=ping[*],echo $1
С помощью этого пользовательского параметра можно определить несколько элементов данных с ключами в формате ping[parameter]:
ping[0]— возвращает0.ping[hello]— возвращаетhello.
Пример 2: доступность MySQL на указанном узле сети
Этот параметр можно использовать для мониторинга доступности сервера MySQL на указанном узле сети.
UserParameter=mysql.ping[*],mysqladmin -h "$1" ping 2>/dev/null | grep -c alive
Элемент данных с ключом mysql.ping[db1.example.com] возвращает 1, если сервер MySQL на этом узле сети отвечает, и 0 в противном случае.
В этом примере предполагается, что учетные данные для подключения к MySQL настроены для учетной записи операционной системы, от имени которой выполняется агент Zabbix, например в файле параметров MySQL, доступном этой учетной записи.
Пример 3: Подсчет строк, соответствующих шаблону
Этот параметр можно использовать для подсчета количества строк в файле.
UserParameter=grep.count[*],grep -c "$2" "$1"
Возвращает количество строк в файле, указанном в первом аргументе, которые соответствуют регулярному выражению, указанному во втором аргументе.
Например, grep.count[/etc/passwd,root] возвращает количество строк в /etc/passwd, соответствующих регулярному выражению root.