2 Удаленные команды
Обзор
При помощи удаленных команд вы можете указать какие из предустановленных команд будут автоматически выполнены на наблюдаемом узле сети при соблюдении некоторых условий.
Таким образом, удаленные команды являются мощным механизмом для умного про-активного мониторинга.
Из наиболее очевидных применений функции вы можете попробовать:
- Автоматический перезапуск какого-либо приложения (веб-сервер, промежуточное ПО, CRM), если оно не отвечает
- Использовать команду IPMI 'reboot' для перезагрузки некоторого удаленного сервера, если он не отвечает на запросы
- Автоматическую очистку диска (удаление старых файлов, очистка /tmp), если закончилось место на диске
- Миграцию VM с одного физического сервера на другой, в зависимости от загрузки CPU
- Добавление новых узлов в облачную среду при недостаточных ресурсах CPU (диска, памяти, чего-угодно)
Настройка действий для удаленных команд аналогична настройке действий для отправки сообщений, с той лишь разницей, что вместо отправки сообщения Zabbix будет выполнять команду.
Удаленные команды могут выполняться на стороне Zabbix сервера, прокси или агента. Удаленные команды на Zabbix агенте могут выполняться напрямую Zabbix сервером или через Zabbix прокси. По умолчанию удаленные команды отключены как у Zabbix агента, так и у Zabbix прокси. Их можно включить:
- добавив параметр
AllowKey=system.run[*]в конфигурацию агента; - изменив параметр EnableRemoteCommands на значение '1' в конфигурации прокси.
Удаленные команды выполняемые Zabbix сервером запускаются как описано в разделе Выполнение команд, включая проверку кода выхода.
Удаленные команды будут выполнены даже если целевой узел сети в обслуживании.
Ограничение удалённой команды
Ограничение удалённой команды после разрешения всех макросов зависит от типа базы данных и набора символов (для хранения не-ASCII-символов требуется более одного байта):
| База данных | Ограничение в символах | Ограничение в байтах |
|---|---|---|
| MySQL | 65535 | 65535 |
| PostgreSQL | 65535 | не ограничено |
| SQLite (только Zabbix прокси) | 65535 | не ограничено |
Вывод выполнения удалённой команды (возвращаемое значение) ограничен 16 МБ (включая конечные пробельные символы, которые усекаются). Ограничение удалённой команды IPMI зависит от установленной библиотеки IPMI. Обратите внимание, что ограничения базы данных применяются ко всем удалённым командам.
Конфигурация
Те удалённые команды, которые выполняются на Zabbix агенте (пользовательские скрипты), необходимо сначала включить в конфигурации агента.
Убедитесь, что параметр AllowKey=system.run[<command>,*] добавлен для каждой разрешённой команды в конфигурации агента, чтобы разрешить выполнение конкретной команды в режиме nowait. Если вы изменили этот параметр, перезапустите процесс агента.
Затем при настройке нового действия в Оповещения → Действия → Действия триггеров:
- Задайте соответствующие условия, например, укажите, что действие активируется при любых проблемах уровня disaster для одного из приложений 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 сервере и 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 нужно использовать следующий синтаксис:
<команда> [<значение>]
где
- <команда> - одна из IPMI команд без пробелов
- <значение> - 'on', 'off' или любое положительное целое число. <значение> - опциональный параметр.
Примеры
Примеры глобальных скриптов, которые могут использоваться как удаленные команды в операциях действий.
Пример 1
Перезапуск Windows при определённом условии.
Чтобы автоматически перезапускать Windows при обнаружении проблемы Zabbix, определите следующий скрипт:
| Параметр скрипта | Значение |
|---|---|
| Область | 'Операция действия' |
| Тип | 'Скрипт' |
| Команда | c:\windows\system32\shutdown.exe -r -f |
Пример 2
Перезапустите узел сети, используя управление IPMI.
| Параметр скрипта | Значение |
|---|---|
| Область | 'Операция действия' |
| Тип | 'IPMI' |
| Команда | reset |
Пример 3
Выключение узла сети с использованием управления IPMI.
| Параметр скрипта | Значение |
|---|---|
| Область | 'Операция действия' |
| Тип | 'IPMI' |
| Команда | power off |