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
PostgreSQL 65535 не ограничено
SQLite (только прокси Zabbix) 65535 не ограничено

Размер вывода удалённой команды (возвращаемое значение) ограничен 16 МБ (включая конечные пробелы, которые усекаются).
Ограничение для удалённых команд IPMI зависит от установленной библиотеки IPMI.
Обратите внимание, что ограничения базы данных применяются ко всем удалённым командам.

Настройка

Удаленные команды, выполняемые на агенте Zabbix (пользовательские скрипты), необходимо предварительно включить в конфигурации агента.

Убедитесь, что параметр AllowKey=system.run[<command>,*] добавлен в конфигурацию агента для каждой разрешенной команды, чтобы разрешить выполнение определенной команды в режиме nowait. Перезапустите службу агента, если изменяете этот параметр.

Затем при настройке нового действия в разделе Оповещения > Действия > Действия при срабатывании триггера:

  1. Задайте необходимые условия, например укажите, что действие активируется при возникновении любых проблем с уровнем серьезности «Катастрофа» в одном из приложений Apache.

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

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

Предопределенные сценарии

Сценарии, доступные для операций действий (вебхук, сценарий, 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