3 Скрипты
Обзор
В разделе Оповещения > Скрипты можно настраивать и обслуживать глобальные скрипты, определяемые пользователями.
Это меню доступно только пользователям типа SuperAdmin.
Глобальные скрипты, в зависимости от настроенной области действия и разрешений пользователя, доступны для выполнения:
- Из меню узла сети в различных разделах веб-интерфейса (Панель мониторинга, Проблемы, Последние данные, Карты и т. д.).
- Из меню события.
- В качестве операции действия.
Скрипты выполняются агентом Zabbix, прокси Zabbix или только сервером Zabbix. См. также раздел Выполнение команд.
Удаленные команды по умолчанию отключены как на агенте Zabbix, так и на прокси Zabbix. Их можно включить следующим образом:
- Для удаленных команд, выполняемых агентом Zabbix, добавьте параметр
AllowKey=system.run[<command>,*]для каждой разрешенной команды в конфигурации агента, где*соответствует любому режиму выполнения (waitилиnowait). - Для удаленных команд, выполняемых прокси Zabbix, установите параметр
EnableRemoteCommandsв значение1в конфигурации прокси. Обратите внимание, что включать удаленные команды на прокси Zabbix не требуется, если они выполняются агентом Zabbix на узле сети, который отслеживается прокси.
Не используйте AllowKey=system.run[*] без необходимости, поскольку это разрешает выполнение любой команды на узле сети.
В целях безопасности рекомендуется разрешать только точные команды, тогда как system.run[*] по умолчанию запрещен (DenyKey=system.run[*]).
Выполнение глобальных скриптов на сервере Zabbix можно отключить, установив EnableGlobalScripts=0 в конфигурации сервера.
В новых установках, начиная с Zabbix 7.0, выполнение глобальных скриптов на сервере Zabbix по умолчанию отключено.
Отображается список существующих скриптов с подробной информацией о них.

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

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

Для повышения безопасности в глобальных скриптах рекомендуется использовать функции макросов, а не обычные макросы, поскольку макросы не экранируются автоматически.
Атрибуты скрипта:
| Параметр | Описание | |
|---|---|---|
| Имя | Уникальное имя скрипта. Например, Очистить файловую систему /tmp |
|
| Область применения | Область применения скрипта: операция действия, ручное действие для узла сети или ручное действие для события. Этот параметр определяет, где можно использовать скрипт: в удаленных командах операций действия, из меню узла сети или из меню события соответственно. Если для области применения установлено значение «Операция действия», скрипт становится доступен всем пользователям с доступом к разделу Оповещения > Действия. Если скрипт фактически используется в действии, его область применения нельзя изменить с «Операция действия». Поддержка макросов Область применения влияет на набор доступных макросов. Например, связанные с пользователем макросы ( {USER.*}) поддерживаются в скриптах, чтобы передавать информацию о пользователе, запустившем скрипт. Однако они не поддерживаются, если область применения скрипта — операция действия, поскольку операции действий выполняются автоматически.Макрос {MANUALINPUT} позволяет указать ввод вручную во время выполнения скрипта. Он поддерживается в скриптах ручного действия для узла сети и ручного действия для события. Чтобы узнать, какие другие макросы поддерживаются, выполните поиск по запросам «Уведомления и команды на основе триггеров/Команды на основе триггеров», «Скрипты ручных действий для узлов сети» и «Скрипты ручных действий для событий» в таблице поддерживаемых макросов. Обратите внимание: если макрос может преобразоваться в значение, содержащее пробелы (например, имя узла сети), не забудьте при необходимости заключить его в кавычки. |
|
| Путь меню | Желаемый путь меню к скрипту. Например, По умолчанию или По умолчанию/ — скрипт будет отображаться в соответствующем каталоге. Меню можно вкладывать друг в друга, например: Главное меню/Подменю1/Подменю2. При доступе к скриптам через меню узла сети или события в разделах мониторинга они будут организованы в соответствии с указанными каталогами.Это поле отображается только если в качестве Области применения выбрано «Ручное действие для узла сети» или «Ручное действие для события». |
|
| Тип | Нажмите соответствующую кнопку, чтобы выбрать тип скрипта: 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. Поддержка макросов зависит от области применения скрипта (см. Область применения выше). Поддерживаются пользовательские макросы пользователя. |
|
| Описание | Введите описание скрипта. | |
| Группа узлов сети | Выберите группу узлов сети, для которой будет доступен скрипт (или Все для всех групп узлов сети). | |
| Группа пользователей | Выберите группу пользователей, которой будет доступен скрипт (или Все для всех групп пользователей). Это поле отображается только если в качестве Области применения выбрано «Ручное действие для узла сети» или «Ручное действие для события». |
|
| Необходимые права для узла сети | Выберите уровень прав для группы узлов сети: Чтение или Запись. Только пользователи с необходимым уровнем прав смогут выполнять скрипт. Это поле отображается только если в качестве Области применения выбрано «Ручное действие для узла сети» или «Ручное действие для события». |
|
| Расширенная настройка | Нажмите заголовок Расширенная настройка, чтобы отобразить параметры расширенной настройки. Это поле отображается только если в качестве Области применения выбрано «Ручное действие для узла сети» или «Ручное действие для события». |
|
Расширенная настройка
Параметры расширенной настройки доступны в сворачиваемом разделе Расширенная настройка:

| Parameter | Description |
|---|---|
| Enable user input | Установите флажок, чтобы включить ручной ввод пользователем перед выполнением скрипта. Ручной ввод пользователя заменит значение макроса {MANUALINPUT} в скрипте. См. также: Ручной ввод пользователя. |
| Input prompt | Введите собственный текст приглашения для пользовательского ввода. Этот текст будет отображаться над полем ввода во всплывающем окне Manual input. Чтобы увидеть предварительный просмотр всплывающего окна Manual input, нажмите Test user input. Предварительный просмотр также позволяет проверить, соответствует ли строка ввода правилу проверки ввода (см. параметры ниже). Поддержка макросов и пользовательских макросов зависит от области действия скрипта (см. Scope в общих параметрах настройки скрипта). |
| Input type | Выберите тип ручного ввода: String - одна строка; Dropdown - значение выбирается из нескольких вариантов в раскрывающемся списке. |
| Dropdown options | Введите уникальные значения для раскрывающегося списка пользовательского ввода в виде списка, разделенного запятыми. Чтобы включить пустой вариант в раскрывающийся список, добавьте дополнительную запятую в начале, середине или конце списка. Это поле отображается только если в качестве Input type выбран вариант 'Dropdown'. |
| Default input string | Введите строку по умолчанию для пользовательского ввода (или не указывайте ничего). Это поле будет проверяться по регулярному выражению, указанному в поле Input validation rule. Значение, введенное здесь, будет отображаться по умолчанию во всплывающем окне Manual input. Это поле отображается только если в качестве Input type выбран вариант 'String'. |
| Input validation rule | Введите регулярное выражение для проверки строки пользовательского ввода. Поддерживаются глобальные регулярные выражения. Это поле отображается только если в качестве Input type выбран вариант 'String'. |
| Enable confirmation | Установите флажок, чтобы отображать сообщение с подтверждением перед выполнением скрипта. Эта функция может быть особенно полезна для потенциально опасных операций (например, скрипта перезагрузки) или операций, которые могут занять много времени. |
| Confirmation text | Введите собственный текст подтверждения для всплывающего окна подтверждения, включаемого флажком выше (например, Remote system will be rebooted. Are you sure?). Чтобы увидеть, как будет выглядеть текст, нажмите Test confirmation рядом с полем. Поддерживаются макросы и пользовательские user macros. Примечание: макросы не будут раскрыты при проверке сообщения подтверждения. |
Если настроены и ручной ввод пользователя, и сообщение с подтверждением, они будут отображаться в последовательных всплывающих окнах.
Ручной ввод пользователем
Ручной ввод пользователем позволяет задавать пользовательский параметр при каждом выполнении скрипта. Это избавляет от необходимости создавать несколько похожих пользовательских скриптов, отличающихся только одним параметром.
Например, во время выполнения скрипта вы можете задать другое целое число или другой URL-адрес.
Чтобы включить ручной ввод пользователем:
- используйте макрос {MANUALINPUT} в скрипте (команды, скрипт, параметр скрипта), где это требуется; либо в поле URL для URL-скриптов;
- в расширенной конфигурации скрипта включите ручной ввод пользователем и настройте параметры ввода.
Если ввод пользователем включен, перед выполнением скрипта пользователю будет показано всплывающее окно Ручной ввод, в котором будет предложено указать пользовательское значение. Указанное значение заменит {MANUALINPUT} в скрипте.
В зависимости от конфигурации пользователю будет предложено ввести строковое значение:

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

Ручной ввод пользователем доступен только для скриптов, для которых область действия — 'Manual host action' или 'Manual event action'.
Выполнение скрипта и результат
Скрипты, запускаемые сервером 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 7.0). После запуска выполнения скрипта операцией действия или вручную скрипт включается в конфигурацию активных проверок и выполняется после его получения активным агентом.
Скрипты, запущенные вручную, отправляются активному агенту вместе со значением тайм-аута сервера/прокси для выполнения скрипта. Увеличьте значение тайм-аута по умолчанию для выполнения скрипта на сервере/прокси. Тайм-аут должен быть больше частоты обновления активных проверок. В противном случае тайм-аут истечет до того, как активный агент получит скрипт и сможет вернуть результат.
Тайм-аут скрипта на сервере/прокси Zabbix
Ниже приведен пример выполнения скрипта на сервере Zabbix и окно с результатом:
sleep 11
df -h

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