2. Удалённые команды
Обзор
С помощью удалённых команд можно настроить автоматическое выполнение определённой предварительно заданной команды на контролируемом узле сети при наступлении некоторого условия.
Таким образом, удалённые команды являются мощным механизмом интеллектуального проактивного мониторинга.
Наиболее очевидные варианты использования этой функции:
- автоматический перезапуск приложения (веб-сервера, промежуточного ПО, CRM), если оно не отвечает;
- использование команды IPMI
rebootдля перезапуска удалённого сервера, если он не отвечает на запросы; - автоматическое освобождение дискового пространства (удаление старых файлов, очистка
/tmp) при его нехватке; - перенос виртуальной машины с одного физического узла на другой в зависимости от загрузки ЦП;
- добавление новых узлов в облачную среду при недостатке ресурсов ЦП, диска, памяти или других ресурсов.
Настройка действия для удалённых команд аналогична настройке действия для отправки сообщения. Единственное отличие заключается в том, что Zabbix выполнит команду вместо отправки сообщения.
Удалённые команды могут выполняться сервером Zabbix, прокси Zabbix или агентом Zabbix. Обратите внимание на следующее:
- Удалённые команды на агенте Zabbix могут выполняться непосредственно сервером 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[*]).
См. также раздел Ограничение проверок агента.
Ограничение удаленной команды
Ограничение длины удаленной команды после подстановки всех макросов зависит от типа базы данных и кодировки (для хранения символов, отличных от ASCII, требуется более одного байта):
| База данных | Ограничение в символах | Ограничение в байтах |
|---|---|---|
| MySQL | 65535 | 65535 |
| Oracle Database | 2048 | 4000 |
| PostgreSQL | 65535 | не ограничено |
| SQLite (только прокси Zabbix) | 65535 | не ограничено |
Вывод выполнения удаленной команды (возвращаемое значение) ограничен 16 МБ (включая конечные пробелы, которые усекаются). Ограничение удаленной команды IPMI зависит от установленной библиотеки IPMI. Обратите внимание, что ограничения базы данных применяются ко всем удаленным командам.
Настройка
Удалённые команды, выполняемые на агенте Zabbix (пользовательские скрипты), необходимо предварительно включить в конфигурации агента.
Убедитесь, что параметр AllowKey=system.run[<command>,*] добавлен в конфигурацию агента для каждой разрешённой команды, чтобы разрешить выполнение определённой команды в режиме nowait. Перезапустите службу агента, если изменяете этот параметр.
Затем при настройке нового действия в разделе Оповещения > Действия > Действия при срабатывании триггера:
- Определите подходящие условия, например укажите, что действие активируется при возникновении любых проблем уровня «Катастрофа» с одним из приложений Apache.

- На вкладке Операции нажмите Добавить в блоке Операции, Операции восстановления или Операции обновления.

- Выберите один из предопределённых скриптов в раскрывающемся списке Операция и укажите Список целей для скрипта.

Предопределенные сценарии
Сценарии, доступные для операций действий (вебхук, сценарий, SSH, Telnet, IPMI), определяются в глобальных сценариях, если для них выбрана область действия Операция действия.
Например:
sudo /etc/init.d/apache restart
В этом случае Zabbix попытается перезапустить процесс Apache. При использовании этой команды убедитесь, что команда выполняется на агенте Zabbix (нажмите кнопку Агент Zabbix напротив параметра Выполнить на).
Обратите внимание на использование sudo: по умолчанию пользователь Zabbix не имеет разрешений на перезапуск системных служб. Ниже приведены рекомендации по настройке sudo.
Начиная с агента Zabbix 7.0, удаленные команды также можно выполнять на агенте, работающем в активном режиме. Агент Zabbix, независимо от того, работает ли он в активном или пассивном режиме, должен быть запущен на удаленном узле сети и выполняет команды в фоновом режиме.
Удаленные команды на агенте Zabbix выполняются без тайм-аута с помощью ключа system.run[,nowait], а результаты их выполнения не проверяются.
На сервере Zabbix и прокси удаленные команды выполняются с тайм-аутом, заданным параметром TrapperTimeout в файле zabbix_server.conf или zabbix_proxy.conf, а результаты их выполнения проверяются.
Дополнительную информацию см. в разделе Тайм-аут сценария.
Права доступа
Убедитесь, что пользователь 'zabbix' имеет права на выполнение настроенных команд.
Для предоставления доступа к привилегированным командам можно использовать sudo.
Чтобы настроить доступ, выполните от имени пользователя root:
visudo
Примеры строк, которые можно добавить в файл sudoers:
# разрешает пользователю 'zabbix' выполнять все команды без пароля.
zabbix ALL=NOPASSWD: ALL
# разрешает пользователю 'zabbix' перезапускать apache без пароля.
zabbix ALL=NOPASSWD: /etc/init.d/apache restart
В некоторых системах файл sudoers запрещает нелокальным пользователям выполнять команды.
Чтобы изменить это поведение, закомментируйте параметр requiretty в файле /etc/sudoers.
Удаленные команды с несколькими интерфейсами
Если целевая система имеет несколько интерфейсов выбранного типа (агент Zabbix или IPMI), удаленные команды будут выполняться через интерфейс по умолчанию.
Удаленные команды можно выполнять через SSH и Telnet, используя интерфейс, отличный от интерфейса агента Zabbix. Доступный интерфейс выбирается в следующем порядке:
- Интерфейс агента Zabbix по умолчанию
- Интерфейс SNMP по умолчанию
- Интерфейс JMX по умолчанию
- Интерфейс IPMI по умолчанию
Удаленные команды IPMI
Для удаленных команд IPMI следует использовать следующий синтаксис:
<command> [<value>]
где
- <command> - одна из команд IPMI без пробелов
- <value> - «on», «off» или любое беззнаковое целое число. <value> является необязательным параметром.
Примеры
Примеры глобальных сценариев, которые можно использовать в качестве удалённых команд в операциях действий.
Пример 1
Перезапуск Windows при определенном условии.
Чтобы автоматически перезапускать Windows при обнаружении проблемы Zabbix, определите следующий скрипт:
| Параметр скрипта | Значение |
|---|---|
| Область действия | 'Операция действия' |
| Тип | 'Скрипт' |
| Команда | c:\windows\system32\shutdown.exe -r -f |
Пример 2
Перезагрузка узла сети с использованием управления по IPMI.
| Параметр скрипта | Значение |
|---|---|
| Область | «Операция действия» |
| Тип | «IPMI» |
| Команда | reset |
Пример 3
Выключение узла сети с использованием управления по IPMI.
| Параметр скрипта | Значение |
|---|---|
| Область | «Операция действия» |
| Тип | «IPMI» |
| Команда | power off |