2015-07-17 3 views
0

Мы контролируем производственные среды, используя Zabbix 2.4. Новые экземпляры снабжаются Ansible, который устанавливает агент Zabbix. Нам нужно, чтобы хосты были удалены с сервера, если они были завершены, так что мы получаем только сообщения о запуске экземпляров, которые становятся недоступными.Выполнить скрипт, расположенный на сервере Zabbix при запуске

Для этого я написал скрипт Python, который может принимать имя хоста zabbix в качестве аргумента, проверьте, находится ли этот узел в списке запущенных экземпляров, вызывая awscli и удаляя хост, если он не находится на «не завершенном» список.

Я поместил скрипт в /usr/bin/delete_host.py и настроил действие, чтобы вызвать его, когда активирован триггер «Агент недоступен». Вот как вкладка Операции выглядит link

А вот действие журнал link

Я попробовал несколько способов, чтобы написать команду, а также разместил скрипт в каталоге ExternalScripts. Включили журналы отладки для сервера, но в нем ничего не упоминалось об ошибке или что-то еще. Фактически это только показывало сообщения, что команда выполняется, и все в порядке, но хост все еще там. Когда я копирую команду из журнала действий и выполняю ее вручную, все работает нормально.

На данный момент у меня действительно нет вариантов, как устранить эту проблему дальше. Я отключил selinux и добавил пользователя zabbix в файл sudoers с nopasswd. Я не могу найти ничего в журналах. Возможно ли выполнение сценариев без обмена сообщениями с zabbix?

ответ

0

Попробуйте написать сценарий таким образом, чтобы напечатать «ОК» или «0», если он работает правильно, а также сообщение об ошибке или код ошибки, если он не работает. Запустите скрипт с помощью активного агента агента zabbix на хосте сервера Zabbix (используйте функцию system.run). Таким образом, вы сможете создать триггер, который вызовет ошибку, если скрипт не будет запущен.

Вы также можете просто запланировать его с помощью другого инструмента, такого как Rundeck.

0

Не нашли решение этой проблемы, решили поместить скрипт delete_host.py на сам контролируемый сервер и настроить его на выполнение при завершении работы.

0

Сценарий не обязательно должен находиться в каталоге ExternalScripts, который требуется только для элементов типа «внешняя проверка». В приведенном скриншоте операции используется относительный путь delete_host.py, и это почти гарантированно не сработает. В скриншоте вашего журнала действий показаны несколько записей с/usr/bin/prefixed, что лучше.

По крайней мере, для тестирования обязательно укажите полный путь ко всему, включая двоичный код python, например /full/path/to/python /full/path/to/delete_host.py.

У вас также было несколько записей, которые перенаправили весь вывод в файл в /tmp/, но вы не указали, что там зарегистрировалось. Используйте этот подход и проверьте также возможные сообщения об ошибках.

Смежные вопросы