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

Обзор

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

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

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

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

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

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

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

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

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

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

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

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

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

Настройка

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

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

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

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

  • Задайте соответствующие условия. В этом примере указывается, что команда активируется в случае любых чрезвычайных проблем в одном из приложений Apache:

  • На вкладке Операции нажмите на Добавить в блоке Операции / Операции восстановления / Операции обновления
  • Из выпадающего списка Операций выберите один из заранее настроенных скриптов

  • Выберите список целей для этого скрипта

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

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

Например:

sudo /etc/init.d/apache restart 

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

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

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

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

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

Убедитесь, что пользователь '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