3 Скрипты

Обзор

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

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

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

Скрипты выполняются на агенте 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 по умолчанию отключено.

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

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

Column Description
Name Имя скрипта. Щелчок по имени скрипта открывает форму настройки скрипта.
Scope Область действия скрипта — операция действия, ручное действие для узла сети или ручное действие для события. Этот параметр определяет, где доступен скрипт.
Used in actions Отображаются все действия, в которых используется скрипт, с указанием общего количества этих действий перед списком.
Щелчок по имени действия открывает форму настройки действия. Если у пользователя нет прав на действие, имя не является ссылкой.
Type Отображается тип скрипта — команда URL, Webhook, Script, SSH, Telnet или IPMI.
Execute on Отображается, будет ли скрипт выполняться на агенте Zabbix, прокси Zabbix или сервере, либо только на сервере Zabbix.
Commands Отображаются все команды, которые будут выполняться в рамках скрипта.
Для вебхуков здесь ничего не отображается.
User group Отображается группа пользователей, для которой доступен скрипт (или All — для всех групп пользователей).
Host group Отображается группа узлов сети, для которой доступен скрипт (или All — для всех групп узлов сети).
Host access Отображается уровень прав для группы узлов сети — Read или Write. Только пользователи с требуемым уровнем прав смогут выполнять скрипт.

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

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

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

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

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

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

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

Ссылка Фильтр доступна над списком скриптов. Если вы нажмёте на неё, станет доступен фильтр, в котором можно отфильтровать скрипты по имени и области действия.

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

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

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

Параметр Описание
Имя Уникальное имя скрипта.
Например, Clear /tmp filesystem
Область применения Область применения скрипта — операция действия, ручное действие с узлом сети или ручное действие с событием. Этот параметр определяет, где можно использовать скрипт: в удаленных командах операций действий, из меню узла сети или из меню события соответственно.
Если установить область применения в значение «Операция действия», скрипт будет доступен всем пользователям, имеющим доступ к Оповещения > Действия.
Если скрипт фактически используется в действии, его область применения нельзя изменить с «операция действия» на другое значение.
Поддержка макросов
Область применения влияет на набор доступных макросов. Например, в скриптах поддерживаются макросы, связанные с пользователем ({USER.*}), чтобы можно было передавать информацию о пользователе, запустившем скрипт. Однако они не поддерживаются, если область применения скрипта — операция действия, так как операции действий выполняются автоматически.
Макрос {MANUALINPUT} позволяет указать ручной ввод во время выполнения скрипта. Он поддерживается для скриптов ручных действий с узлом сети и ручных действий с событием.
Чтобы узнать, какие еще макросы поддерживаются, выполните поиск по строкам «Trigger-based notifications and commands/Trigger-based commands», «Manual host action scripts» и «Manual event action scripts» в таблице поддерживаемых макросов. Обратите внимание: если макрос может разрешаться в значение с пробелами (например, имя узла сети), не забудьте при необходимости заключить его в кавычки.
Путь меню Желаемый путь меню к скрипту. Например, 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 открываться в новой вкладке браузера или в текущей.
Тип скрипта: Вебхук
Параметры Укажите переменные вебхука как пары атрибут-значение.
См. также: настройка способа оповещения Webhook.
В значениях параметров поддерживаются макросы и пользовательские макросы пользователя. Поддержка макросов зависит от области применения скрипта (см. Область применения выше).
Скрипт Введите код JavaScript в модальном редакторе, который открывается при нажатии в поле параметра или на значок карандаша рядом с ним.
Поддержка макросов зависит от области применения скрипта (см. Область применения выше).
См. также: настройка способа оповещения Webhook, Дополнительные объекты Javascript.
Тайм-аут Тайм-аут выполнения JavaScript (1-60s, по умолчанию 30s).
Поддерживаются суффиксы времени, например 30s, 1m.
Тип скрипта: Скрипт
Выполнять на Нажмите соответствующую кнопку, чтобы выполнить shell-скрипт на:
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).