Удаленные команды
Обзор
С помощью удалённых команд можно настроить автоматическое выполнение определённой заранее заданной команды на контролируемом узле сети при наступлении некоторого условия.
Таким образом, удалённые команды являются мощным механизмом интеллектуального проактивного мониторинга.
Наиболее очевидные варианты использования этой функции:
- автоматический перезапуск приложения (веб-сервера, промежуточного ПО, CRM), если оно не отвечает;
- использование команды IPMI «reboot» для перезагрузки удалённого сервера, если он не отвечает на запросы;
- автоматическое освобождение дискового пространства (удаление старых файлов, очистка
/tmp) при его нехватке; - перенос виртуальной машины с одного физического узла на другой в зависимости от загрузки ЦП;
- добавление новых узлов в облачную среду при недостатке ресурсов ЦП, диска, памяти или других ресурсов.
Настройка действия для удалённых команд аналогична настройке действия для отправки сообщения; единственное отличие заключается в том, что Zabbix выполняет команду вместо отправки сообщения.
Удалённые команды могут выполняться сервером Zabbix, прокси или агентом Zabbix. Обратите внимание на следующее:
- Удалённые команды на агенте Zabbix могут выполняться непосредственно сервером Zabbix или через прокси.
- Удалённые команды, выполняемые сервером Zabbix, запускаются в соответствии с описанием в разделе Выполнение команд, включая проверку кода возврата.
- Удалённые команды выполняются даже в том случае, если целевой узел сети находится в режиме обслуживания.
По умолчанию удалённые команды отключены как на агенте Zabbix, так и на прокси. Их можно включить следующим образом:
- Для удалённых команд, выполняемых агентом Zabbix, добавьте параметр
AllowKey=system.run[<command>,*]илиAllowKeyRegexp=^system\.run\[<command>,.*\]$для каждой разрешённой команды в конфигурации агента, где*соответствует любому режиму выполнения (waitилиnowait). - Для удалённых команд, выполняемых прокси, установите для параметра
EnableRemoteCommandsзначение1в конфигурации прокси.
Обратите внимание, что включать удалённые команды на прокси не требуется, если они выполняются агентом Zabbix на узле сети, который контролируется прокси.
Не используйте AllowKey=system.run[*] или AllowKeyRegexp=^system\.run\[.*\]$ без необходимости, поскольку это разрешает выполнение любой команды на узле сети.
В целях безопасности рекомендуется разрешать только точные команды, тогда как system.run[*] по умолчанию запрещён (DenyKey=system.run[*]).
См. также раздел Ограничение проверок агента.
Ограничение удаленной команды
Ограничение удаленной команды после разрешения всех макросов зависит от типа базы данных и набора символов (для хранения не-ASCII символов требуется более одного байта):
| Database | Limit in characters | Limit in bytes |
|---|---|---|
| MySQL | 65535 | 65535 |
| PostgreSQL | 65535 | not limited |
| SQLite (only Zabbix proxy) | 65535 | not limited |
Вывод выполнения удаленной команды (возвращаемое значение) ограничен 16 МБ (включая завершающие пробелы, которые усекаются). Ограничение удаленной команды IPMI зависит от установленной библиотеки IPMI. Обратите внимание, что ограничения базы данных применяются ко всем удаленным командам.
Настройка
Удаленные команды, выполняемые агентом Zabbix, сначала необходимо разрешить в конфигурации агента с помощью параметра AllowKey или AllowKeyRegexp.
Убедитесь, что параметр AllowKey=system.run[<command>,*] или AllowKeyRegexp=^system\.run\[<command>,.*\]$ добавлен в конфигурацию агента для каждой разрешенной команды, чтобы разрешить ее выполнение в режиме nowait.
После изменения параметра перезапустите службу агента.
Затем при настройке нового действия в разделе Оповещения > Действия > Действия с триггерами:
- Определите соответствующие условия, например задайте активацию действия при возникновении любых проблем с уровнем серьезности «Катастрофа» в одном из приложений Apache.

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

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

Предопределенные скрипты
Скрипты, доступные для операций действий (вебхук, скрипт, SSH, Telnet, IPMI), определяются в глобальных скриптах при выборе Action operation в качестве их области применения.
Например:
sudo /etc/init.d/apache restart
В этом случае Zabbix попытается перезапустить процесс Apache. При использовании этой команды убедитесь, что команда выполняется на агенте Zabbix (нажмите кнопку Zabbix agent напротив Execute on).
Обратите внимание на использование sudo - у пользователя Zabbix по умолчанию нет
прав на перезапуск системных служб. См. ниже рекомендации по настройке sudo.
Начиная с Zabbix agent 7.0, удаленные команды также могут выполняться на агенте, работающем в активном режиме. Zabbix agent — в активном или пассивном режиме — должен работать на удаленном узле сети и выполняет команды в фоновом режиме.
Удаленные команды на агенте Zabbix выполняются без тайм-аута с помощью ключа system.run[,nowait] и не проверяются на результаты выполнения.
На сервере Zabbix и прокси Zabbix удаленные команды выполняются с тайм-аутом, заданным в параметре TrapperTimeout файла zabbix_server.conf или zabbix_proxy.conf, и проверяются на результаты выполнения.
Дополнительную информацию см. в разделе Script timeout.
Права доступа
Убедитесь, что пользователь 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 нужно использовать следующий синтаксис:
<команда> [<значение>]
где
- <команда> — одна из IPMI команд без пробелов
- <значение> — «on», «off» или любое неотрицательное целое число. <значение> — опциональный параметр.
Примеры
Примеры глобальных скриптов, которые можно использовать как удалённые команды в операциях к действиям.
Пример 1
Перезапуск Windows при определенном условии.
Чтобы автоматически перезапустить Windows при обнаружении проблемы Zabbix, определите следующий скрипт:
| Script parameter | Value |
|---|---|
| Scope | 'Action operation' |
| Type | 'Script' |
| Command | c:\windows\system32\shutdown.exe -r -f |
Пример 2
Перезагрузка узла сети с использованием управления по IPMI.
| Параметр скрипта | Значение |
|---|---|
| Область | «Операция действия» |
| Тип | «IPMI» |
| Команда | reset |
Пример 3
Выключение узла сети с использованием управления по IPMI.
| Параметр скрипта | Значение |
|---|---|
| Область | «Операция действия» |
| Тип | «IPMI» |
| Команда | power off |