Удаленные команды

Обзор

С помощью удалённых команд можно настроить автоматическое выполнение определённой заранее заданной команды на контролируемом узле сети при наступлении некоторого условия.

Таким образом, удалённые команды являются мощным механизмом интеллектуального проактивного мониторинга.

Наиболее очевидные варианты использования этой функции:

  • автоматический перезапуск приложения (веб-сервера, промежуточного ПО, 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. После изменения параметра перезапустите службу агента.

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

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

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

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

Предопределенные скрипты

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