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

Обзор

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

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

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

  • Автоматически перезапускать некоторое приложение (веб-сервер, middleware, CRM), если оно не отвечает
  • Использовать команду IPMI reboot для перезагрузки удаленного сервера, если он не отвечает на запросы
  • Автоматически освобождать место на диске (удаляя старые файлы, очищая /tmp), если заканчивается свободное место
  • Перемещать ВМ с одного физического сервера на другой в зависимости от загрузки CPU
  • Добавлять новые узлы в облачную среду при недостатке ресурсов CPU (диска, памяти и т. д.)

Настройка действия для удаленных команд аналогична настройке отправки сообщения, единственное отличие состоит в том, что Zabbix будет выполнять команду вместо отправки сообщения.

Удаленные команды могут выполняться сервером Zabbix, прокси или агентом. Удаленные команды на агенте Zabbix могут выполняться напрямую сервером Zabbix или через прокси Zabbix. И на агенте Zabbix, и на прокси Zabbix удаленные команды по умолчанию отключены. Их можно включить, выполнив одно из следующих действий:

  • добавив параметр AllowKey=system.run[*] в конфигурацию агента;
  • установив параметр EnableRemoteCommands в значение 1 в конфигурации прокси.

Удаленные команды, выполняемые сервером Zabbix, запускаются так, как описано в Выполнение команд, включая проверку кода завершения.

Удаленные команды выполняются даже если целевой узел сети находится в обслуживании.

Ограничение удаленной команды

Ограничение удаленной команды после разрешения всех макросов зависит от типа базы данных и набора символов (для хранения не-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=system.run[<command>,*] добавлен для каждой разрешенной команды в конфигурации агента, чтобы разрешить выполнение конкретной команды в режиме nowait. Перезапустите демон агента, если изменяете этот параметр.

Затем при настройке нового действия в Alerts > Actions > Trigger actions:

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

  1. На вкладке Operations нажмите Add в блоке Operations, Recovery operations или Update operations.

  1. Выберите один из предопределенных скриптов из выпадающего списка Operation и задайте Target list для скрипта.

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

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