Скрипты

Обзор

В разделе Оповещения > Скрипты можно настраивать и обслуживать пользовательские глобальные скрипты.

Это меню доступно только пользователям типа SuperAdmin.

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

Скрипты выполняются на агенте Zabbix, сервере Zabbix (прокси) или только на сервере Zabbix. См. также раздел Выполнение команд.

Удаленное выполнение скриптов на агенте Zabbix и прокси Zabbix по умолчанию отключено. Его можно включить следующим образом:

  • Для удаленных команд, выполняемых на агенте Zabbix:
    • добавьте параметр AllowKey=system.run[<command>,*] для каждой разрешенной команды в конфигурации агента; * обозначает режимы wait и nowait;
  • Для удаленных команд, выполняемых на прокси Zabbix:
    • Предупреждение: включать удаленные команды на прокси Zabbix не требуется, если удаленные команды выполняются на агенте Zabbix, который отслеживается прокси Zabbix. Однако если необходимо выполнять удаленные команды на прокси Zabbix, установите для параметра EnableRemoteCommands значение '1' в конфигурации прокси.

Выполнение глобальных скриптов на сервере Zabbix можно отключить, установив EnableGlobalScripts=0 в конфигурации сервера. В новых установках, начиная с Zabbix 7.0, выполнение глобальных скриптов на сервере Zabbix по умолчанию отключено.

Отображается список существующих скриптов с подробной информацией о них.

Отображаемые данные:

Столбец Описание
Имя Имя скрипта. При нажатии на имя скрипта открывается форма настройки скрипта.
Область действия Область действия скрипта: операция действия, ручное действие для узла сети или ручное действие для события. Этот параметр определяет, где доступен скрипт: в удаленных командах операций действия, из меню узла сети или из меню события соответственно.
Используется в действиях Отображаются все действия, в которых используется скрипт, перед которыми указано общее количество таких действий.
При нажатии на имя действия открывается форма настройки действия. Если у пользователя нет разрешений на действие, имя не является ссылкой.
Тип Отображается тип скрипта: команда URL, вебхук, скрипт, SSH, Telnet или IPMI.
Выполнять на Отображается, будет ли скрипт выполняться на агенте Zabbix, прокси Zabbix или сервере, либо только на сервере Zabbix.
Команды Отображаются все команды, которые будут выполняться в рамках скрипта.
Для вебхуков это поле остается пустым.
Группа пользователей Отображается группа пользователей, которой доступен скрипт (или Все для всех групп пользователей).
Группа узлов сети Отображается группа узлов сети, для которой доступен скрипт (или Все для всех групп узлов сети).
Доступ к узлам сети Отображается уровень разрешений для группы узлов сети: Чтение или Запись. Доступ к выполнению скрипта будет только у пользователей с необходимым уровнем разрешений.

Чтобы настроить новый скрипт, нажмите кнопку Создать скрипт в правом верхнем углу.

Параметры массового редактирования

Кнопка под списком предлагает один вариант массового редактирования:

  • Удалить - удалить скрипты

Чтобы использовать этот вариант, отметьте флажки перед соответствующими скриптами и нажмите Удалить.

Использование фильтра

Вы можете использовать фильтр, чтобы отображать только те скрипты, которые вас интересуют. Для повышения производительности поиска данные ищутся с неразрешенными макросами.

Ссылка Filter доступна над списком скриптов. Если вы нажмете ее, станет доступен фильтр, с помощью которого можно фильтровать скрипты по имени и области применения.

Настройка глобального скрипта

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

Атрибуты скрипта:

Параметр Описание
Имя Уникальное имя скрипта.
Например, Очистить файловую систему /tmp
Область действия Область действия скрипта - операция действия, ручное действие над узлом сети или ручное действие над событием. Этот параметр определяет, где можно использовать скрипт: в удаленных командах операций действия, из меню узла сети или из меню события соответственно.
Если для области действия установлено значение «Операция действия», скрипт доступен всем пользователям с доступом к разделу Оповещения > Действия.
Если скрипт фактически используется в действии, его область действия нельзя изменить с «операции действия» на другую.
Поддержка макросов
Область действия влияет на набор доступных макросов. Например, связанные с пользователем макросы ({USER.*}) поддерживаются в скриптах, чтобы можно было передавать информацию о пользователе, запустившем скрипт. Однако они не поддерживаются, если область действия скрипта - операция действия, поскольку операции действий выполняются автоматически.
Макрос {MANUALINPUT} позволяет указать ввод вручную во время выполнения скрипта. Он поддерживается в скриптах ручного действия над узлом сети и ручного действия над событием.
Чтобы узнать, какие еще макросы поддерживаются, выполните поиск по запросам «Уведомления и команды на основе триггеров/Команды на основе триггеров», «Скрипты ручных действий над узлами сети» и «Скрипты ручных действий над событиями» в таблице поддерживаемых макросов. Обратите внимание: если макрос может преобразоваться в значение, содержащее пробелы (например, имя узла сети), не забудьте при необходимости заключить его в кавычки.
Путь меню Укажите требуемый путь меню к скрипту. Например, Default или Default/ отобразит скрипт в соответствующем каталоге. Меню можно вкладывать друг в друга, например: Main menu/Sub menu1/Sub menu2. При доступе к скриптам через меню узла сети или события в разделах мониторинга они будут организованы в соответствии с указанными каталогами.
Это поле отображается только если в качестве Области действия выбрано «Ручное действие над узлом сети» или «Ручное действие над событием».
Тип Нажмите соответствующую кнопку, чтобы выбрать тип скрипта:
команда URL, вебхук, скрипт, SSH, Telnet или IPMI.
Тип URL доступен только если в качестве Области действия выбрано «Ручное действие над узлом сети» или «Ручное действие над событием».
Тип скрипта: URL
URL Укажите URL для быстрого доступа из меню узла сети или меню события.
Поддерживаются макросы и пользовательские макросы пользователя. Поддержка макросов зависит от области действия скрипта (см. Область действия выше).
Используйте макрос {MANUALINPUT} в этом поле, чтобы можно было указать ввод вручную во время выполнения скрипта, например:
http://{MANUALINPUT}/zabbix/zabbix.php?action=dashboard.view
Значения макросов не должны быть закодированы в формате URL.
Открывать в новом окне Определяет, следует ли открывать URL в новой или текущей вкладке браузера.
Тип скрипта: вебхук
Параметры Укажите переменные вебхука в виде пар «атрибут-значение».
См. также: настройка медиа-типа вебхук.
В значениях параметров поддерживаются макросы и пользовательские макросы пользователя. Поддержка макросов зависит от области действия скрипта (см. Область действия выше).
Скрипт Введите код JavaScript в модальном редакторе, который открывается при нажатии в поле параметра или на значок карандаша рядом с ним.
Поддержка макросов зависит от области действия скрипта (см. Область действия выше).
См. также: настройка медиа-типа вебхук, Дополнительные объекты Javascript.
Тайм-аут Тайм-аут выполнения JavaScript (1-60 с, по умолчанию 30 с).
Поддерживаются суффиксы времени (например, 30s, 1m).
Тип скрипта: скрипт
Выполнять на Нажмите соответствующую кнопку, чтобы выполнить скрипт оболочки на:
агенте Zabbix - скрипт будет выполнен агентом Zabbix (если элемент данных system.run разрешен) на узле сети;
прокси или сервере Zabbix - скрипт будет выполнен прокси или сервером Zabbix в зависимости от того, прокси или сервер осуществляет мониторинг узла сети.
Он будет выполнен на прокси, если это разрешено параметром EnableRemoteCommands.
Он будет выполнен на сервере, если глобальные скрипты включены параметром сервера EnableGlobalScripts.
сервере Zabbix - скрипт будет выполнен только сервером Zabbix.
Этот параметр будет недоступен, если глобальные скрипты отключены параметром сервера EnableGlobalScripts.
Команды Введите полный путь к командам, которые должны выполняться в скрипте.
Поддержка макросов зависит от области действия скрипта (см. Область действия выше). Поддерживаются пользовательские макросы пользователя.
Тип скрипта: SSH
Метод аутентификации Выберите метод аутентификации - пароль или открытый ключ.
Имя пользователя Введите имя пользователя.
Пароль Введите пароль.
Это поле доступно, если в качестве метода аутентификации выбран «Пароль».
Файл открытого ключа Введите путь к файлу открытого ключа.
Это поле доступно, если в качестве метода аутентификации выбран «Открытый ключ».
Файл закрытого ключа Введите путь к файлу закрытого ключа.
Это поле доступно, если в качестве метода аутентификации выбран «Открытый ключ».
Парольная фраза Введите парольную фразу.
Это поле доступно, если в качестве метода аутентификации выбран «Открытый ключ».
Порт Введите порт удаленной службы SSH на целевом узле сети, к которому будет подключаться Zabbix.
Команды Введите команды.
Поддержка макросов зависит от области действия скрипта (см. Область действия выше). Поддерживаются пользовательские макросы пользователя.
Тип скрипта: Telnet
Имя пользователя Введите имя пользователя.
Пароль Введите пароль.
Порт Введите порт удаленной службы Telnet на целевом узле сети, к которому будет подключаться Zabbix.
Команды Введите команды.
Поддержка макросов зависит от области действия скрипта (см. Область действия выше). Поддерживаются пользовательские макросы пользователя.
Тип скрипта: IPMI
Команда Введите команду IPMI.
Поддержка макросов зависит от области действия скрипта (см. Область действия выше). Поддерживаются пользовательские макросы пользователя.
Описание Введите описание скрипта.
Группа узлов сети Выберите группу узлов сети, для которой будет доступен скрипт (или Все для всех групп узлов сети).
Группа пользователей Выберите группу пользователей, которой будет доступен скрипт (или Все для всех групп пользователей).
Это поле отображается только если в качестве Области действия выбрано «Ручное действие над узлом сети» или «Ручное действие над событием».
Необходимые права на узел сети Выберите уровень прав для группы узлов сети - Чтение или Запись. Только пользователи с необходимым уровнем прав смогут выполнять скрипт.
Это поле отображается только если в качестве Области действия выбрано «Ручное действие над узлом сети» или «Ручное действие над событием».
Расширенная настройка Нажмите заголовок Расширенная настройка, чтобы отобразить параметры расширенной настройки.
Это поле отображается только если в качестве Области действия выбрано «Ручное действие над узлом сети» или «Ручное действие над событием».

Расширенная настройка

Дополнительные параметры настройки доступны в сворачиваемом разделе Расширенная настройка:

Параметр Описание
Включить ввод пользователем Установите флажок, чтобы включить ручной ввод пользователем перед выполнением скрипта.
Ручной ввод пользователя заменит значение макроса {MANUALINPUT} в скрипте.
См. также: Ручной ввод пользователя.
Подсказка для ввода Введите пользовательский текст с запросом на ввод данных. Этот текст будет отображаться над полем ввода во всплывающем окне Ручной ввод.
Чтобы просмотреть всплывающее окно Ручной ввод, нажмите Проверить ввод пользователя. Предварительный просмотр также позволяет проверить, соответствует ли введенная строка правилу проверки ввода (см. параметры ниже).
Поддержка макросов и пользовательских макросов зависит от области действия скрипта (см. Область действия в общих параметрах настройки скрипта).
Тип ввода Выберите тип ручного ввода:
Строка - одна строка;
Раскрывающийся список - значение выбирается из нескольких вариантов раскрывающегося списка.
Варианты раскрывающегося списка Введите уникальные значения для раскрывающегося списка пользовательского ввода через запятую.
Чтобы добавить пустой вариант в раскрывающийся список, добавьте дополнительную запятую в начале, середине или конце списка.
Это поле отображается только если для параметра Тип ввода выбрано значение «Раскрывающийся список».
Строка ввода по умолчанию Введите строку пользовательского ввода по умолчанию (или оставьте поле пустым).
Это поле будет проверено на соответствие регулярному выражению, указанному в поле Правило проверки ввода.
Введенное здесь значение будет отображаться по умолчанию во всплывающем окне Ручной ввод.
Это поле отображается только если для параметра Тип ввода выбрано значение «Строка».
Правило проверки ввода Введите регулярное выражение для проверки строки пользовательского ввода.
Поддерживаются глобальные регулярные выражения.
Это поле отображается только если для параметра Тип ввода выбрано значение «Строка».
Включить подтверждение Установите флажок, чтобы отображать сообщение с подтверждением перед выполнением скрипта. Эта функция может быть особенно полезна для потенциально опасных операций (например, скрипта перезагрузки) или операций, выполнение которых может занять много времени.
Текст подтверждения Введите пользовательский текст подтверждения для всплывающего окна, включаемого с помощью расположенного выше флажка (например, Удаленная система будет перезагружена. Вы уверены?). Чтобы просмотреть, как будет выглядеть текст, нажмите Проверить подтверждение рядом с полем.
Поддерживаются макросы и пользовательские макросы.
Примечание: при проверке сообщения с подтверждением макросы не будут раскрыты.

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

Ручной ввод пользователем

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

Например, при выполнении скрипта может потребоваться указать другое целое число или другой URL-адрес.

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

  • используйте макрос {MANUALINPUT} в скрипте (командах, скрипте, параметре скрипта), где это необходимо; или в поле URL для скриптов URL;
  • в разделе расширенной настройки скрипта включите ручной ввод пользователем и настройте параметры ввода.

Если ручной ввод включен, перед выполнением скрипта пользователю будет показано всплывающее окно Ручной ввод с предложением указать пользовательское значение. Указанное значение заменит {MANUALINPUT} в скрипте.

В зависимости от конфигурации пользователю будет предложено ввести строковое значение:

Или выбрать значение из раскрывающегося списка с заранее определенными вариантами:

Ручной ввод пользователем доступен только для скриптов, область действия которых имеет значение «Ручное действие над узлом сети» или «Ручное действие над событием».

Выполнение скрипта и результат

Скрипты, запускаемые сервером Zabbix, выполняются в порядке, описанном на странице выполнения команд.

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

  • Если скрипт завершается успешно (код выхода 0), возвращаемое значение ограничено 16 МБ (включая завершающие пробелы, которые обрезаются).
  • Если скрипт завершается с ошибкой (ненулевой код выхода), возвращаемое значение стандартной ошибки ограничено 2 КБ.

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

Обратите внимание, что для скриптов, выполняемых либо на сервере Zabbix, либо на прокси Zabbix, также применяются ограничения базы данных.

Ниже приведен пример скрипта и окна результата:

uname -v
/tmp/non_existing_script.sh
echo "This script was started by {USER.USERNAME}"

В результате выполнения скрипта сам скрипт не отображается.

Тайм-аут выполнения скрипта на агенте Zabbix

Вы можете столкнуться с ситуацией, когда во время выполнения скрипта возникает тайм-аут.

Ниже приведен пример скрипта, выполняемого на агенте Zabbix, и окна с результатом его выполнения:

sleep 5
df -h

В этом случае отображается следующее сообщение об ошибке:

Timeout while executing a shell script.

Чтобы избежать подобных ситуаций, рекомендуется оптимизировать сам скрипт (в приведенном выше примере — значение «5»), а не изменять параметр Timeout в конфигурации агента Zabbix и конфигурации сервера Zabbix.

Если параметр Timeout был изменен в конфигурации агента Zabbix, появится следующее сообщение об ошибке:

Get value from agent failed: ZBX_TCP_READ() timed out.

Это означает, что изменение было внесено в конфигурацию агента Zabbix, однако необходимо также изменить параметр Timeout в конфигурации сервера Zabbix.

Тайм-аут скрипта на активных агентах

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

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

Тайм-аут скрипта на сервере/прокси Zabbix

Ниже приведен пример выполнения скрипта на сервере Zabbix и окно с результатом:

sleep 11
df -h

Также рекомендуется оптимизировать сам скрипт вместо настройки параметра TrapperTimeout на соответствующее значение (в нашем случае — > 11) путем изменения конфигурации сервера Zabbix.