- 2keep.net
- IT-Blog
- Zabbix. Удалённое выполнение команды (SSH)
- Логика работы
- Создаём действие
- Настраиваем «Операции восстановления»
- Добавляем операции
- Отладка «Действий»
- Zabbix выполнение удаленных команд
- IT-Blog
- Настраиваем «Операции восстановления»
- Добавляем операции
- User Tools
- Site Tools
- Table of Contents
- 2 Удаленные команды
- Обзор
- Настройка
- Права доступа
- Удаленные команды при наличии нескольких интерфейсов
- Удаленные команды через IPMI
- Примеры
- Добавления команды на стороне Zabbix-a
- Запуск приложения на хосте по триггеру.
2keep.net
IT-Blog
Zabbix. Удалённое выполнение команды (SSH)
Допустим, у вас есть два сервера (Сервер-А и Сервер-Б) связанных между собой по VPN и в случае, если Сервер-Б стал недоступен (упал VPN), то после поднятия VPN, на Сервере-А нужно перезапустить определенный сервис.
Для выполнения команды на перезапуск сервиса используется SSH.
Логика работы
В Zabbix настроен мониторинг Сервера-Б (icmppingloss) и когда 100% потери пакетов до Сервера-Б, то срабатывает Триггер (Trigger), который инициирует Действие (Action) — «Отправить сообщение» (Send message) о проблеме на e-mail. В нашем случае будет и второе Действие (Action) — «Удалённая команда» (Remote command), т.е. перезапуск сервиса.
Создаём действие
Меню: Настройка > Действия > Создать действие (источник события: Триггеры)
Menu: Configuration > Actions > Create action (Event source: Triggers)
В Условия (Conditions) добавляем Триггер (Trigger), на который будет реакция.
Zabbix: Создание действия
Настраиваем «Операции восстановления»
Нам нужно перезапустить сервис только когда VPN канал восстановится, т.е. когда два сервер будут уже видеть друг друга. Поэтому, идём в закладку «Операции восстановления» (Recovery operations).
Zabbix: Создание действия > Операции восстановления
Указываем название темы. С данной темой будет приходить письмо с оповещением о выполнении удалённой команды.
Добавляем операции
В поле «Операции» (Operations) нажимаем кнопка «Новый» (New).
Добавляем операцию «Отправить сообщение« (Send message).
Zabbix: Создание действия > Операции восстановления > Отправка сообщения
Добавляем операцию «Удаленная команда» (Remote command).
Zabbix: Создание действия > Операции восстановления > Удалённая команда
В поле «Список целей» (Target list) указываем Сервер-А (именно на нём нам нужно перезапустить сервис).
В поле «Команды» (Commands), указываем команду, которую нужно выполнить удалённо на Сервере-А для перезапуска нужного сервиса.
Остальные поля понятны.
В результате будет выглядеть следующим образом:
Zabbix: Создание действия > Операции восстановления
Нажимаем кнопку «Добавить»!
Теперь, когда сработает Триггер и произойдёт восстановление (VPN канал поднялся), нам придёт сообщение на e-mail и произойдёт подключение по SSH к Серверу-А и выполнение команды на перезапуск сервиса.
Отладка «Действий»
Если возникают проблемы с выполнением удалённых команд, то идём в «Отчёты > Журнал действий» (Reports > Actions log) и смотрим, какие там ошибки относящиеся к нашему Действию.
Zabbix: Журнал действий
Команда не выполнилась, неверно указал пароль для подключения по SSH.
Если у вас удалённые команды корректно выполняются, но в «Отчёты > Журнал действий» (Reports > Actions log) появляется следующая ошибка: «Cannot read data from SSH server»,
Zabbix выполнение удаленных команд
IT-Blog
Допустим, у вас есть два сервера (Сервер-А и Сервер-Б) связанных между собой по VPN и в случае, если Сервер-Б стал недоступен (упал VPN), то после поднятия VPN, на Сервере-А нужно перезапустить определенный сервис.
Для выполнения команды на перезапуск сервиса используется SSH.
В Zabbix настроен мониторинг Сервера-Б (icmppingloss) и когда 100% потери пакетов до Сервера-Б, то срабатывает Триггер (Trigger), который инициирует Действие (Action) — «Отправить сообщение» (Send message) о проблеме на e-mail. В нашем случае будет и второе Действие (Action) — «Удалённая команда» (Remote command), т.е. перезапуск сервиса.
Меню: Настройка > Действия > Создать действие (источник события: Триггеры)
Menu: Configuration > Actions > Create action (Event source: Triggers)
В Условия (Conditions) добавляем Триггер (Trigger), на который будет реакция.
Zabbix: Создание действия
Настраиваем «Операции восстановления»
Нам нужно перезапустить сервис только когда VPN канал восстановится, т.е. когда два сервер будут уже видеть друг друга. Поэтому, идём в закладку «Операции восстановления» (Recovery operations).
Zabbix: Создание действия > Операции восстановления
Указываем название темы. С данной темой будет приходить письмо с оповещением о выполнении удалённой команды.
Добавляем операции
В поле «Операции» (Operations) нажимаем кнопка «Новый» (New).
Добавляем операцию «Отправить сообщение« (Send message).
Zabbix: Создание действия > Операции восстановления > Отправка сообщения
Добавляем операцию «Удаленная команда» (Remote command).
Zabbix: Создание действия > Операции восстановления > Удалённая команда
В поле «Список целей» (Target list) указываем Сервер-А (именно на нём нам нужно перезапустить сервис).
В поле «Команды» (Commands), указываем команду, которую нужно выполнить удалённо на Сервере-А для перезапуска нужного сервиса.
Остальные поля понятны.
В результате будет выглядеть следующим образом:
Zabbix: Создание действия > Операции восстановления
Нажимаем кнопку «Добавить»!
Теперь, когда сработает Триггер и произойдёт восстановление (VPN канал поднялся), нам придёт сообщение на e-mail и произойдёт подключение по SSH к Серверу-А и выполнение команды на перезапуск сервиса.
Если возникают проблемы с выполнением удалённых команд, то идём в «Отчёты > Журнал действий» (Reports > Actions log) и смотрим, какие там ошибки относящиеся к нашему Действию.
Zabbix: Журнал действий
Команда не выполнилась, неверно указал пароль для подключения по SSH.
Если у вас удалённые команды корректно выполняются, но в «Отчёты > Журнал действий» (Reports > Actions log) появляется следующая ошибка: «Cannot read data from SSH server»,
User Tools
Site Tools
Table of Contents
2 Удаленные команды
Обзор
С помощью удаленных команд вы можете указать какие из предустановленных команд будут выполнены на наблюдаемом узле сети при выполнении некоторых условий.
Таким образом, удаленные команды являются мощным механизмом для умного про-активного мониторинга.
Из наиболее очевидных применений функции вы можете попробовать:
Настройка действий для удаленных команд аналогична настройке действий для отправки сообщений, с той лишь разницей, что вместо отправки сообщения 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 попытается перезапустить процесс Apache. Используя эту команду, убедитесь, что она будет выполнена Zabbix агентом (нажмите на Zabbix агент напротив Выполнять на).
Удаленные команды на Zabbix агенте выполняются без использования какого-либо времени ожидания с помощью ключа system.run[,nowait]. На Zabbix сервере удаленные команды выполняются со временем ожидания указанном в TrapperTimeout параметре в zabbix_server.conf файле.
Права доступа
Убедитесь, что пользователь ‘zabbix’ имеет права на выполнение добавленных команд. Один наиболее интересный вариант – использование sudo для предоставления доступа к привилегированным командам. Для настройки доступа, выполните из под root:
Примеры строк, которые можно использовать в файле sudoers:
Удаленные команды при наличии нескольких интерфейсов
Если целевая система имеет несколько интерфейсов выбранного типа (Zabbix агент или IPMI), удаленные команды будут выполнены на интерфейсе по умолчанию.
До Zabbix 3.0.4 для удаленных команд через SSH и Telnet мог использоваться только интерфейс агента. Начиная с Zabbix 3.0.4, имеется возможность выполнять удаленные команды через SSH и Telnet, используя интерфейс отличный от Zabbix агент интерфейса. Доступный интерфейс, который будет использоваться, выбирается в следующем порядке:
Удаленные команды через IPMI
В случае удаленных команд через IPMI необходимо использовать следующий синтаксис:
Примеры
Пример 1
Перезагрузка Windows при определенном условии.
Для того, чтобы автоматически перезагрузить Windows, когда Zabbix обнаруживает проблемы, определим следующие действия:
ПАРАМЕТР | Описание |
---|---|
Тип операции | ‘Удаленная команда’ |
Тип | ‘Пользовательский скрипт’ |
Команда | c:windowssystem32shutdown.exe -r -f |
Пример 2
Перезагрузка узла сети с использованием управления по IPMI.
ПАРАМЕТР | Описание |
---|---|
Тип операции | ‘Удаленная команда’ |
Тип | ‘IPMI’ |
Команда | reset |
Пример 3
Выключение узла сети с использованием управления по IPMI.
Задача: отследить выполнение команды на Zabbix агенте, которые не входят в стандартную комплектацию.
Для примера, давайте выведем самую простую команду echo 1. Все остальные ничем не отличаются, только подставляем другую команду 🙂 Подсоединяемся к нашему серверу, на котором кстественно уже должен стоять и работать Zabbix Agent и выполняем следующие команды:
Добавления команды на стороне Zabbix-a
Заходим в админку, Настройка, Узлы сети, Элементы данных. Переходим и нажимаем «Создать элемент данных». Вводим параметры в соответствии с задачами. У нас это будет так
После этого, Zabbix успешно будет видеть всю данную команду.
Запуск приложения на хосте по триггеру.
Коллеги, всем привет!
Прошу разжевать очень подробно, как реализовать удаленный запуск приложения по сработке триггера в Zabbix на рабочей станции под управлением Windows.
Если вам не лень, прошу расписать подробно: настройки агента, настройки элемента данных, настройки триггера, и настройки скриптов.
Сомневаюсь, что кто-то захочет подробно все описывать. Пример запуска скрипта на хосте по срабатыванию триггера есть в моей статье — https://serveradmin.ru/zvonok-opoveshhenie-zabbix-cherez-asterisk-na-mobilnyiy-telefon/
1. На хосте настраиваете bat файл на запуск блокнота.
2. На zabbix server настраиваете шаблон для мониторинга работы приложения notepad с триггером.
3. Создаете действие, которое срабатывает по триггеру. В действии указываете запуск bat файла на хосте.
В принципе, ничего сложного. Думаю, если вам реально надо, разберетесь.
Ответ ради ответа?:)
Спасибо, статью давно прочитал, делал по аналогии, но не заработало. Поэтому спросил здесь в надежде на подробный ответ:)
Настройка конфига агента:
Действие (удаленная команда):
На bat максимальные права, учётка — админ.
Вот, что пишет лог агента:
То есть, лог говорит «выполнение команды. «. Но по факту, ничего не происходит.
Куда копать?
Zabbix-agent от какого пользователя запущен? Попробуй его запустить от пользователя, под которым ты ожидаешь запуск блокнота. А вообще опиши задачу полностью. Ты же хочешь не блокнот по факту запускать, а что-то другое.
Есть группа хостов, на которых запущена группа приложений.
Если хотя бы одно из приложений не работает на хосте, то хост не выполняет свою задачу на 100%.
В данный момент Zabbix мониторит сам факт работы приложений. Аллерты настроены, как надо.
При этом одно из приложений периодически выключается. И для того, чтобы приложение работало, нужно подключаться на каждый проблемный хост и запускать приложение вручную.
Хочу, чтобы Zabbix сам запускал проблемное приложение.
P.S.: Агент запущен от пользователя «СИСТЕМА» 😳
Чтобы это нормально работало, надо приложения запускать как службы, если они это умеют. И управлять уже службами. Если это не возможно, то надо тестировать и пробовать различные варианты запуска, чтобы приложения нормально стартовали.
@jojomsk не получится сделать так как ты написал.
Вот в чем проблема заббикс выполняет скрипт определенное время (смотри что у тебя в конфе прописано). Если скрипт не закрылся за это время то происходит его прерывание.
В твоем варианте скрипта идет вызов блокнота и он будет работать пока работает процесс консоли (скрипта) таймер проходит и происходит завершение приложения.
Это были причины почему так не работает. Теперь обсудим что сделать что бы работало.
Для начала создадим задачу в планировщике заданий. В нее вносим наш bat файл. Расписание не устанавливаем. Прописывает от имени кого пользователя ее запускать. Все сохраняем переходим к следующему шагу. Идем в заббикс создаем скрипт в поле команда пишем: «SCHTASKS /Run /TN test»
Где test название задачи из планировщика. Советую использовать en раскладку при именовании задачи что бы не издеваться над собой. Т.к заббикс на стороне сервера все вызывает из cmd.
Переходим на карту сети проверяем на узле работу скрипта, радуемся, переделываем действия в заббикс на такую команду и живем хорошо)
Поскольку это планировщик задач выполняет задачу от имени пользователя, а не заббикс то и ограничений по времени нет. Вообще можно на прямую приложение вызывать через планировщик, но это уже у кого какое ТЗ.
И да этот метод работает в проде уже более двух лет.