2. Удалённые команды

Обзор

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

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

Из наиболее очевидных применений этой возможности, которые вы можете попробовать:

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

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

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

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

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

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

Скрипты, доступные для операций действий (вебхук, скрипт, SSH, Telnet, IPMI), определяются в глобальных скриптах.

Например:

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=(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