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

Обзор

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

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

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

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

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

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

Ограничение длины удаленных команд после раскрытия всех макросов зависит от типа базы данных и заданной кодировки (для хранения не-ASCII символов требуется более одного байта):

База данных //Ограничение в символах // //Ограничение в байтах //
MySQL 65535 65535
Oracle Database 2048 4000
PostgreSQL 65535 не ограничено
IBM DB2 2048 2048
SQLite (только Zabbix прокси) 65535 не ограничено

Смотрите также страницу выполнения команд.

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

Следующее руководство содержит пошаговые инструкции о том, как настроить удаленные команды.

Настройка

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

Убедитесь, что параметр EnableRemoteCommands равен 1 и раскомментирован. Перезапустите демона агента, если изменили этот параметр.

Удаленные команды не работают с активными Zabbix агентами.

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

  • На вкладке Операции, выберите тип операции Удаленная команда
  • Выберите тип удаленной команды (IPMI, Пользовательский скрипт, SSH, Telnet, Глобальный скрипт)
  • Введите удаленную команду

Например:

sudo /etc/init.d/apache restart 

В этом случае, Zabbix попытается перезапустить процесс Apache. Используя эту команду, убедитесь, что она будет выполнена Zabbix агентом (нажмите на Zabbix агент напротив Выполнять на).

Обратите внимание на использование sudo - пользователь Zabbix не имеет прав на перезапуск системных сервисов по умолчанию. Смотрите подсказки ниже о том, как настроить sudo.

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

Zabbix не проверяет была ли выполнена команда успешно.

Удаленные команды на Zabbix агенте выполняются без использования какого-либо времени ожидания с помощью ключа system.run[,nowait]. На Zabbix сервере удаленные команды выполняются со временем ожидания указанном в TrapperTimeout параметре в zabbix_server.conf файле.

  • На вкладке Условия определите соответствующие условия. Для этого примера, укажите, чтобы действие активировалось только в случае любых чрезвычайных проблем с одним из приложений Apache.

Права доступа

Убедитесь, что пользователь '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), удаленные команды будут выполнены на интерфейсе по умолчанию.

До Zabbix 3.0.4 для удаленных команд через SSH и Telnet мог использоваться только интерфейс агента. Начиная с Zabbix 3.0.4, имеется возможность выполнять удаленные команды через 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