Я использую Amazon EC2 для своего мобильного приложения. В зависимости от загрузки приложения в данный момент времени я мог бы создавать новые экземпляры, а затем отключать их, когда нагрузка снижается, чтобы сократить расходы.
Как можно не отставать от конфигураций Nagios для такой динамической среды? Когда речь идет об управляемом оборудовании, файлы конфигурации предсказуемы. В этом случае необходимо будет добавить Nagios, Capistrano и множество других файлов конфигурации. Capistrano необходимо знать, где развернуть новую сборку для сервера приложений. Nagios необходимо знать, чтобы удалить существующий экземпляр или добавить новый для мониторинга. Nagios также должен знать, был ли узел отключен намеренно или узел не работает из-за ошибки.
Как это сделать с чудесным миром VPS / динамических инстансов?
Мы используем инструмент управления конфигурацией (в нашем случае Chef), который записывает конфигурацию Nagios из информации об узле.
Написал свой собственный небольшой набор скриптов php, которые записывают конфигурации nagios в файл. Nagios прост, потому что это просто текстовый файл, поэтому все, что вам нужно сделать, это создать шаблон для каждого типа сервера. Затем, когда сервер запустится, добавьте файл, используя шаблон. Единственные данные, которые изменяются в файле, - это IP-адрес и имя хоста.
Для более статических серверов я создал сценарий, который запускает ec2-describe-instances
и создает файл для каждого возвращенного экземпляра. Каждый экземпляр помечен тегом: Purpose = XXXX, поэтому я знаю, какой шаблон применить.
Для наших групп с автоматическим масштабированием мы настраиваем уведомление с помощью as-put-notification-configuration
команда, которая отправляет сообщение в очередь SQS. Скрипт php выполняется crontab. Когда сценарий выполняется, он проверяет очередь на наличие новых серверов. Когда он находит новый сервер, он создает новый файл. То же самое происходит, когда сервер удаляется. Вероятно, проще использовать Chef или что-то в этом роде, если вы уже используете его, но если вы этого не сделаете, вы можете написать простой php-сервис, подобный моему, за несколько дней.
Пару способов.
Использование предварительно настроенных шаблонов Amazon EC2.
Использование марионеточного манифеста с изменяемыми шаблонами.
Настройте VPN между вашей сетью nagios и вашей виртуальной машиной amazon. Тогда все ваши виртуальные машины amazon будут иметь статический IP-адрес, вы даже можете настроить на них DNS. У нас есть nagios, работающий и отслеживающий все наши экземпляры Amazon. Нам даже не нужен эластичный ip. Мы используем openvpn для нашего VPN.
Создайте Nagios, который слушает внешние команды, и соответствующим образом обновите его конфигурацию. В конечном итоге машины могут регистрироваться, отменять регистрацию, приостанавливать и возобновлять работу на Nagios.
Мы используем Opsview, который является еще одной оболочкой nagios + database + rest-api. Я не знаю, является ли это лучшим решением для всех (или даже для нас), но оно позволяет нам динамически настраивать сервер Nagios через простой REST API из узла (или другого административного узла), когда он появляется, и удалять его из конфигурацию, когда это будет сделано. Я использую определения шаблонов хостов как часть манифеста Puppet сервера Opsview (/ Nagios), а отслеживаемые хосты просто регистрируются на нем и присоединяются к правильному шаблону хоста как часть своего манифеста Puppet.
Более «общий» подход, который должен работать практически со всем, даже с исходным Nagios и его статическими файлами, - это Сохраненная конфигурация марионетки - это позволяет вам создать сценарий для настройки любого инструмента, который вам нравится, на основе информации, которую марионетка собирает из своего манифеста.
Я бы посоветовал вам в криминалистических целях не удалять конфигурацию узла полностью, когда он отключен, а попытаться заархивировать его и собранную информацию мониторинга, пока он работал.
У меня нет серебряной пули для решения этой проблемы с nagios. Но для капистрано есть capify-ec2, расширение для capistrano, которое решает списки ролей сервера, используя возможности тегов Amazon.