2 Удаленные команды
Обзор
С помощью удаленных команд вы можете указать какие из предустановленных команд будут выполнены на наблюдаемом узле сети при выполнении некоторых условий.
Таким образом, удаленные команды являются мощным механизмом для умного про-активного мониторинга.
Из наиболее очевидных применений функции вы можете попробовать:
- Автоматический перезапуск какого-либо приложения (веб-сервер, промежуточное ПО, CRM), если оно не отвечает
- Использовать команду IPMI 'reboot' для перезагрузки некоторого удаленного сервера, если он не отвечает на запросы
- Автоматическую очистку диска (удаление старых файлов, очистка /tmp), если закончилось место на диске
- Миграцию VM с одного физического сервера на другой, в зависимости от загрузки CPU
- Добавление новых узлов в облачную среду при недостаточных ресурсах CPU (диска, памяти, чего-угодно)
Настройка действий для удаленных команд аналогична настройке действий для отправки сообщений, с той лишь разницей, что вместо отправки сообщения Zabbix будет выполнять команду.
Выполнение удаленных команд не поддерживается через Zabbix прокси, поэтому команды с Zabbix сервера на агенте требуют прямого подключения.
Ограничение удаленной команды после раскрытия всех макросов зависит от типа базы данных и выбранной кодировки (при сохранении не-ASCII символы требуют более чем один байт):
| База данных | //Ограничение в символах // | //Ограничение в байтах // |
| MySQL | 65535 | 65535 |
| Oracle база данных | 2048 | 4000 |
| PostgreSQL | 65535 | не ограничено |
| IBM DB2 | 2048 | 2048 |
| SQLite (только Zabbix прокси) | 65535 | не ограничено |
Смотрите также страницу о выполнении команд.
Удаленные команды будут выполнены даже если намеченный узел сети в обслуживании.
Следующее руководство содержит пошаговые инструкции о том, как настроить удаленные команды.
Настройка
Удаленные команды, которые выполняются на стороне Zabbix агента (пользовательские скрипты) сначала должны быть включены в соответствующем zabbix_agentd.conf.
Убедитесь, что параметр EnableRemoteCommands равен 1 и раскомментирован. Перезапустите демона агента, если изменили этот параметр.
Удаленные команды не работают с активными Zabbix агентами.
Затем, при настройке нового действия в Настройка→Действия:
- На вкладке Операции, выберите тип операции Удаленная команда
- Выберите тип удаленной команды (IPMI, Пользовательский скрипт, SSH, Telnet, Глобальный скрипт)
- Введите удаленную команду
Например:
sudo /etc/init.d/apache restart
В этом случае, Zabbix попытается перезапустить процесс Apache. Используя эту команду, убедитесь, что она будет выполнена Zabbix агентом (отметьте соответствующий пункт в Выполнять на).
Обратите внимание на использование sudo - пользователь Zabbix не имеет прав на перезапуск системных сервисов по умолчанию. Смотрите подсказки ниже о том, как настроить sudo.
Zabbix агент должен работать на удаленном узле сети и должен принимать входящие подключения. Zabbix агент выполняет команды в фоновом режиме.
Zabbix не проверяет была ли выполнена команда успешно.
Удаленные команды на Zabbix агенте выполняются без использования какого-либо времени ожидания с помощью ключа system.run[,nowait]. На Zabbix сервере удаленные команды выполняются со временем ожидания указанном в TrapperTimeout параметре в zabbix_server.conf файле.
- На вкладке Условия определите соответствующие условия. Для этого примера, укажите, чтобы действие активировалось только в случае любых чрезвычайных проблем с одним из приложений Apache.

Права доступа
Убедитесь, что пользователь 'zabbix' имеет права на выполнение добавленных команд. Один наиболее интересный вариант - использование sudo для предоставления доступа к привилегированным командам. Для настройки доступа, выполните из под root:
# visudo
Примеры строк, которые можно использовать в файле sudoers:
# разрешает пользователю 'zabbix' выполнение любых команд без пароля.
zabbix ALL=NOPASSWD: ALL
# разрешает пользователю 'zabbix' перезапуск apache без пароля.
zabbix ALL=(ALL) NOPASSWD: /etc/init.d/apache restart
В некоторых системах настройки в файле sudoers будут препятствовать не-локальным пользователям выполнять команды. Для изменения этого, раскомментируйте опцию requiretty в /etc/sudoers.
Удаленные команды в случае нескольких интерфейсов
Если целевая система имеет несколько интерфейсов выбранного типа (Zabbix агент или IPMI), удаленные команды будут выполнены на интерфейсе по умолчанию.
Удаленные команды через IPMI
В случае удаленных команд через IPMI необходимо использовать следующий синтаксис:
<команда> [<значение>]
где
- <команда> - одна из IPMI команд без пробелов
- <значение> - 'on', 'off' или любое положительное целое число. <значение> является опциональным параметром.
Примеры
Пример 1
Перезагрузка Windows при определенном условии.
Для того, чтобы автоматически перезагрузить Windows, когда Zabbix обнаруживает проблемы, определим следующие действия:
| ПАРАМЕТР | Описание |
|---|---|
| Тип операции | 'Удаленная команда' |
| Тип | 'Пользовательский скрипт' |
| Команда | c:\windows\system32\shutdown.exe -r -f |
Пример 2
Перезагрузка узла сети с использованием управления по IPMI.
| ПАРАМЕТР | Описание |
|---|---|
| Тип операции | 'Удаленная команда' |
| Тип | 'IPMI' |
| Команда | reset |
Пример 3
Выключение узла сети с использованием управления по IPMI.
| ПАРАМЕТР | Описание |
|---|---|
| Тип операции | 'Удаленная команда' |
| Тип | 'IPMI' |
| Команда | power off |