3 Скрипты
Обзор
В разделе Alerts > Scripts можно настраивать и поддерживать пользовательские глобальные скрипты.
Это меню доступно только пользователям типа SuperAdmin.
Глобальные скрипты, в зависимости от настроенной области применения, а также прав пользователя, доступны для выполнения:
- Из меню узла сети в различных разделах веб-интерфейса (Dashboard, Problems, Latest data, Maps и т. д.).
- Из меню события.
- Могут запускаться как операция действия.
Скрипты выполняются на агенте Zabbix, сервере Zabbix (прокси) или только на сервере Zabbix См. также Command execution.
И на агенте 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 в правом верхнем углу.
Параметры массового редактирования
Кнопка под списком предлагает один вариант массового редактирования:
- Delete - удалить скрипты
Чтобы использовать этот вариант, отметьте флажки перед соответствующими скриптами и нажмите Delete.
Использование фильтра
Вы можете использовать фильтр, чтобы отображать только те скрипты, которые вас интересуют. Для повышения производительности поиска данные ищутся с неразрешенными макросами.
Ссылка Filter доступна над списком скриптов. Если вы нажмете ее, станет доступен фильтр, с помощью которого можно фильтровать скрипты по имени и области применения.

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

Рекомендуется использовать функции макросов вместо обычных макросов в глобальных скриптах для повышения безопасности, так как макросы не экранируются автоматически.
Атрибуты скрипта:
| Параметр | Описание | |
|---|---|---|
| Имя | Уникальное имя скрипта. Например, Clear /tmp filesystem |
|
| Область применения | Область применения скрипта - операция действия, ручное действие для узла сети или ручное действие для события. Этот параметр определяет, где можно использовать скрипт - в удаленных командах операций, из меню узла сети или из меню события соответственно. Если установить область применения в значение 'Action operation', скрипт будет доступен всем пользователям с доступом к Оповещения > Действия. Если скрипт фактически используется в действии, изменить его область применения с 'action operation' нельзя. Поддержка макросов Область применения влияет на набор доступных макросов. Например, макросы, связанные с пользователем ( {USER.*}), поддерживаются в скриптах, чтобы можно было передавать сведения о пользователе, запустившем скрипт. Однако они не поддерживаются, если область применения скрипта - action operation, так как операции действия выполняются автоматически.Макрос {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. При доступе к скриптам через меню узла сети/события в разделах мониторинга они будут организованы в соответствии с указанными каталогами.Это поле отображается только если в качестве Область применения выбрано 'Manual host action' или 'Manual event action'. |
|
| Тип | Нажмите соответствующую кнопку, чтобы выбрать тип скрипта: URL, Webhook, Script, SSH, Telnet или команду IPMI. Тип URL доступен только если в качестве Область применения выбрано 'Manual host action' или 'Manual event action'. |
|
| Тип скрипта: URL | ||
| URL | Укажите URL для быстрого доступа из меню узла сети или меню события. Поддерживаются макросы и пользовательские макросы пользователя. Поддержка макросов зависит от области применения скрипта (см. Область применения выше). Используйте макрос {MANUALINPUT} в этом поле, чтобы можно было указать ввод вручную во время выполнения скрипта, например: http://{MANUALINPUT}/zabbix/zabbix.php?action=dashboard.viewЗначения макросов не должны быть URL-кодированы. |
|
| Открывать в новом окне | Определяет, следует ли открывать URL в новой вкладке браузера или в той же. | |
| Тип скрипта: Webhook | ||
| Параметры | Укажите переменные вебхука в виде пар атрибут-значение. См. также: конфигурация медиа Webhook. Поддерживаются макросы и пользовательские макросы пользователя в значениях параметров. Поддержка макросов зависит от области применения скрипта (см. Область применения выше). |
|
| Скрипт | Введите код JavaScript в модальном редакторе, который открывается при щелчке в поле параметра или по значку карандаша рядом с ним. Поддержка макросов зависит от области применения скрипта (см. Область применения выше). См. также: конфигурация медиа Webhook, Дополнительные объекты Javascript. |
|
| Тайм-аут | Тайм-аут выполнения JavaScript (1-60 с, по умолчанию 30 с). Поддерживаются суффиксы времени, например 30s, 1m. |
|
| Тип скрипта: Script | ||
| Выполнять на | Нажмите соответствующую кнопку, чтобы выполнить shell-скрипт на: агенте Zabbix - скрипт будет выполнен агентом Zabbix (если элемент данных system.run разрешен) на узле сети прокси Zabbix или сервере - скрипт будет выполнен прокси Zabbix или сервером - в зависимости от того, контролируется ли узел сети через прокси или сервер. Он будет выполнен на прокси, если это разрешено параметром EnableRemoteCommands. Он будет выполнен на сервере, если глобальные скрипты включены параметром сервера EnableGlobalScripts. сервере Zabbix - скрипт будет выполнен только сервером Zabbix. Этот параметр будет недоступен, если глобальные скрипты отключены параметром сервера EnableGlobalScripts. |
|
| Команды | Введите полный путь к командам, которые будут выполняться в скрипте. Поддержка макросов зависит от области применения скрипта (см. Область применения выше). Поддерживаются пользовательские макросы пользователя. |
|
| Тип скрипта: SSH | ||
| Метод аутентификации | Выберите метод аутентификации - пароль или открытый ключ. | |
| Имя пользователя | Введите имя пользователя. | |
| Пароль | Введите пароль. Это поле доступно, если в качестве метода аутентификации выбран 'Password'. |
|
| Файл открытого ключа | Введите путь к файлу открытого ключа. Это поле доступно, если в качестве метода аутентификации выбран 'Public key'. |
|
| Файл закрытого ключа | Введите путь к файлу закрытого ключа. Это поле доступно, если в качестве метода аутентификации выбран 'Public key'. |
|
| Парольная фраза | Введите парольную фразу. Это поле доступно, если в качестве метода аутентификации выбран 'Public key'. |
|
| Порт | Введите порт удаленной службы SSH на целевом узле сети, к которому Zabbix будет подключаться. | |
| Команды | Введите команды. Поддержка макросов зависит от области применения скрипта (см. Область применения выше). Поддерживаются пользовательские макросы пользователя. |
|
| Тип скрипта: Telnet | ||
| Имя пользователя | Введите имя пользователя. | |
| Пароль | Введите пароль. | |
| Порт | Введите порт удаленной службы Telnet на целевом узле сети, к которому Zabbix будет подключаться. | |
| Команды | Введите команды. Поддержка макросов зависит от области применения скрипта (см. Область применения выше). Поддерживаются пользовательские макросы пользователя. |
|
| Тип скрипта: IPMI | ||
| Команда | Введите команду IPMI. Поддержка макросов зависит от области применения скрипта (см. Область применения выше). Поддерживаются пользовательские макросы пользователя. |
|
| Описание | Введите описание скрипта. | |
| Группа узлов сети | Выберите группу узлов сети, для которой будет доступен скрипт (или All для всех групп узлов сети). | |
| Группа пользователей | Выберите группу пользователей, которой будет доступен скрипт (или All для всех групп пользователей). Это поле отображается только если в качестве Область применения выбрано 'Manual host action' или 'Manual event action'. |
|
| Требуемые права на узел сети | Выберите уровень прав для группы узлов сети - Read или Write. Доступ к выполнению скрипта будут иметь только пользователи с требуемым уровнем прав. Это поле отображается только если в качестве Область применения выбрано 'Manual host action' или 'Manual event action'. |
|
| Дополнительная настройка | Нажмите заголовок Дополнительная настройка, чтобы отобразить параметры дополнительной настройки. Это поле отображается только если в качестве Область применения выбрано 'Manual host action' или 'Manual event action'. |
|
Расширенная настройка
Параметры расширенной настройки доступны в сворачиваемом разделе Расширенная настройка:

| 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
Ниже приведен пример выполнения скрипта на сервере Zabbix и окно с результатом:
sleep 11
df -h

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