5. Пользовательские параметры

Обзор

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

Вы можете написать команду, которая получает необходимые данные, и добавить ее в пользовательский параметр в файле конфигурации агента (параметр конфигурации 'UserParameter').

Пользовательский параметр имеет следующий синтаксис:

UserParameter=<key>,<command>

Как видите, пользовательский параметр также содержит ключ. Ключ потребуется при настройке элемента данных. Укажите любой удобный для ссылки ключ (он должен быть уникальным в пределах узла сети).

Перезапустите агент или воспользуйтесь параметром управления во время выполнения агента, чтобы применить новый параметр, например:

zabbix_agentd -R userparameter_reload

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

Пользовательские параметры представляют собой команды, выполняемые агентом Zabbix. Обратите внимание, что до выполнения шагов предобработки значения элемента данных может быть возвращено до 16 МБ данных.

В UNIX-системах агент выполняет команды пользовательских параметров с помощью /bin/sh от имени учетной записи операционной системы, под которой запущен агент (обычно zabbix). Эта учетная запись должна иметь достаточные права для выполнения команды и доступа к используемым ею файлам, сокетам или учетным данным.

На пользовательские параметры распространяется ограничение времени ожидания проверки агента; при достижении этого ограничения разветвленный процесс пользовательского параметра завершается.

См. также:

Примеры простых пользовательских параметров

Пример 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, доступном этой учетной записи.

Гибкие пользовательские параметры

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

Гибкие пользовательские параметры имеют следующий синтаксис:

UserParameter=key[*],command
Параметр Описание
Ключ Уникальный ключ элемента данных. [*] указывает, что этот ключ принимает параметры в скобках.
Параметры указываются при настройке элемента данных.
Команда Команда, которая будет выполнена для получения значения ключа.
Только для гибких пользовательских параметров:
В команде можно использовать позиционные ссылки $1…$9 для обращения к соответствующему параметру в ключе элемента данных.
Zabbix анализирует параметры, заключенные в [ ] ключа элемента данных, и соответствующим образом подставляет $1,...,$9 в команду.
Вместо $0 будет подставлена исходная команда (до раскрытия $0,...,$9), которая будет выполнена.
Позиционные ссылки интерпретируются независимо от того, заключены ли они в двойные (") или одинарные (') кавычки.
Чтобы использовать позиционные ссылки без изменений, укажите два знака доллара подряд - например, awk '{print $$2}'. В этом случае $$2 фактически превратится в $2 при выполнении команды.

Позиционные ссылки со знаком $ ищутся и заменяются агентом Zabbix только для гибких пользовательских параметров. Для простых пользовательских параметров такая обработка ссылок пропускается, поэтому экранирование знака $ не требуется.

По умолчанию в пользовательских параметрах запрещены определенные символы. Полный список символов приведен в разделе UnsafeUserParameters.

Примеры гибких пользовательских параметров

Приведенные ниже примеры предназначены только для демонстрации и не должны использоваться в рабочей среде без соответствующих мер защиты. Гибкие пользовательские параметры, определенные с использованием [*], принимают аргументы, которые могут создавать риски внедрения команд при небезопасной обработке.

Пример 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.

Результат команды

Результирующим значением команды является стандартный вывод вместе со стандартным выводом ошибок.

​Текстовый элемент данных (с типами информации символ,​ журнал или текст) не станет неподдерживаемым в случае вывода в стандартный вывод ошибок.

Возвращаемое значение ограничено 16 МБ (включая конечные пробелы, которые усекаются); также применяются ограничения баз данных.

Пользовательские параметры, которые возвращают текст (для типов информации символ, журнал, текстовый ) могут возвращать пробел. В случае ошибочного результата элемент данных станет неподдерживаемым.