Статьи

Управление облаком и мониторинг использования благодаря непрерывной интеграции с Quickbuild и Mist.io

[Эта статья написана Бараком Меримовичем .]

Я отдыхаю от блогов о своих различных махинациях с Openstack. На этот раз я хочу поговорить о мониторинге использования облака.

Я работаю с облаками IaaS — их много. В список входят несколько разных учетных записей AWS и несколько облачных учетных записей HP. Он также включает случайные гостевые учетные записи в Softlayer, а также частные учетные записи Openstack и Cloudstack . При таком большом количестве ресурсов и большом количестве проектов время от времени отбрасываются вещи. Виртуальные машины остаются запущенными, забыты разработчиком, который их использовал, или пропустили из-за автоматизации, которая должна была их отключить. А в облаке, если вы что-то забыли, вы платите за это. Буквально. Виртуальные машины оплачиваются за то время, пока они активны, независимо от того, действительно ли вы делали с ними что-то полезное. И прежде чем вы это знаете, счета начинают накапливаться, и люди из бухгалтерии появляются у меня на столе.

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


Посмотрев на кучу вариантов облачного мониторинга, я наконец нашел mist.io. В нем были только нужные функции, которые мне были нужны, и все, что осталось, это подключить его к моей существующей системе панели.

Итак, начнем с обзора частей.

Mist.io

Mist.io — это классный проект с открытым исходным кодом, который отслеживает использование виртуальных машин
в нескольких облаках. Список поддерживаемых облачных провайдеров довольно обширен (см. Обновленный список здесь , который на данный момент включает в себя:
EC2, Rackspace, Openstack, Linode, Google Compute Engine, SoftLayer, Digital Ocean, Nephoscale, HP Cloud, серверы Bare metal, Контейнеры Docker и гипервизоры KVM.

Существует также веб-сайт mist.io, который в основном предлагает тот же продукт с некоторыми дополнительными дополнительными дополнениями. Я буду использовать этот сервис для своих целей, хотя вы всегда можете установить версию с открытым исходным кодом локально. Mist.io также предлагает Python SDK, что делает систему очень удобной для написания сценариев — вскоре я буду использовать клиентский SDK.

Mist.io включает консоль для вашего текущего использования облака, которая сама по себе довольно полезна:

mist_io_console_redacted

Но для моего проекта мне также нужно вести историю и статистику моего использования.

QuickBuild

Система непрерывной интеграции (CI), которую мы используем для Cloudify, — это Quickbuild . Мы использовали его в течение очень долгого времени, и это оказалось надежной системой. Quickbuild также имеет гибкую систему панелей, где я могу подключить свои собственные источники данных.

Хотя в этом посте много говорится о специфике Quickbuild, принципы должны быть практически одинаковыми для любой системы CI / Automation.

Клей

Общая идея состоит в том, чтобы определить конфигурацию в Quickbuild, которая будет опрашивать API mist.io для запуска виртуальных машин, собирать исторические данные и отображать последние результаты на панели мониторинга Quickbuild.

Итак, приступим к работе!

Аккаунт Mist.io

Для начала вам нужно настроить свою учетную запись на http://mist.io . Это бесплатно.

Облачные учетные данные

Для каждой облачной учетной записи, которую вы хотите отслеживать, создайте отдельного пользователя и предоставьте ему минимальные разрешения, необходимые для просмотра запущенных в данный момент экземпляров. Это хорошая рекомендация для всех интеграций — используйте выделенную учетную запись для каждой интеграции, используя что-то вроде OpenStack Keystone или AWS IAM, и предоставьте ему только те разрешения, которые он ДОЛЖЕН иметь.

Настроить бэкенды mist.io

В mist.io серверная часть — это контролируемая цель, которая может содержать вычислительные экземпляры. Это могут быть, например, клиенты Openstack и регионы AWS. Вам нужно будет настроить бэкэнд для каждого из них. Если, как и я, вы работаете во многих регионах AWS и арендаторах Openstack, эта часть может стать немного утомительной. Поэтому я написал пару скриптов, использующих Mist Client SDK, чтобы немного ускорить процесс.

Настройка HP Cloud Backends:

from mistclient import MistClient
client = MistClient(email="MY_MIST_EMAIL", password="MY_MIST_PASSWORD")

hp_username="HP_CLOUD_USERNAME"
hp_password="HP_CLOUD_PASSWORD"
hp_regions = [
    ["hpcloud:region-a.geo-1", "HP - US West"],
    ["hpcloud:region-b.geo-1", "HP - US East"]
]

# list of HP tenants to monitor
hp_tenants = ["my-first-tenant", "my-other-tenant"]

def create_hp_backends():
    for region, region_name in hp_regions:
        for tenant in hp_tenants:
            print "Creating HP backend for tenant %s in region %s" % (tenant, region)
            try:
                client.add_backend(title= "%s - %s" % (region_name, tenant), provider=region, key=hp_username,secret=hp_password,tenant_name=tenant)
            except Exception as e:
                print "Failed to create backend: %s" % e.message

create_hp_backends()

Настройка бэкэндов AWS:

from mistclient import MistClient
client = MistClient(email="MY_MIST_EMAIL", password="MY_MIST_PASSWORD")

ec2_demo_access_key ="AWS_ACCESS_KEY"
ec2_demo_secret_key = "AWS_SECRET_KEY"
ec2_account_name = "AWS_ACCOUNT_NAME" 

def create_ec2_backends():
    # creates backends for all ec2 regions
    for provider in client.supported_providers:
        if "EC2" in provider["title"]:
            title = "%s - %s" % (provider["title"], ec2_account_name)
            print "Creating backend: %s" % title
            try:
                client.add_backend(title = title, provider = provider["provider"],
                               key=ec2_demo_access_key, secret=ec2_demo_secret_key)
            except Exception as e:
                print "Failed to create backend: %s" % e.message

create_ec2_backends()

Просто возьмите сценарии и настройте учетные данные и арендаторов, чтобы соответствовать тому, что вам нужно.

Кстати, я бы хотел, чтобы mist.io сделал это немного проще. Там действительно должен быть более простой способ, чтобы просто дать им полномочия сказать «Контролировать все»

Создание сценария для сбора сведений о текущем экземпляре вычислений
Я написал еще один быстрый сценарий, используя mist SDK для этого. Все это на github:
https://github.com/barakm/mist-monitor

Это интересный момент:

https://github.com/barakm/mist-monitor/blob/master/mist_monitor/mist_monitor.py

Обратите внимание, как скрипт python генерирует XML-файл с подробной информацией о экземплярах вычислений. Quickbuild любит файлы XML в качестве входных данных.

Настроить Quickbuild

Первое, что нам нужно сделать, это настроить Quickbuild так, чтобы он принимал формат файла XML, который генерирует наш скрипт. Это однократная операция, но для этого вам нужно быть администратором сервера Quickbuild.

  • Как администратор Quickbuild, перейдите в Администрирование -> Управление плагинами -> Пользовательский статистический отчет -> Настроить
  • Нажмите «Добавить новую категорию»
  • Дайте вашей категории имя, например, «Запуск экземпляров облака» и соответствующее описание.
  • Добавьте два «индикатора» (поля в отчете)

    • running — это дает нам общее количество работающих машин и обычно является наиболее интересным значением. Установите для выражения XPath значение — count (// machine [@ state = ‘running’]).
    • все — это дает нам общее количество машин, то есть включает в себя машины, которые выключены или удалены. Не так интересно, но может быть полезно. Установите для выражения XPath значение — count (// machine)

Это должно выглядеть примерно так:

quickbuild_category_config

Настройте повторяющуюся задачу

С установленной пользовательской категорией Quickbuild мы можем создать задачу, которая фактически опрашивает API mist.io. Это можно и нужно делать обычному пользователю Quickbuild, а не администратору.

Я сделал конфигурацию доступной как суть. Вы можете импортировать его из: https://gist.github.com/barakm/3927cc0e8930b259c69e

Или вы можете создать его вручную, используя следующие инструкции:

  • Создайте новую конфигурацию Quickbuild где-нибудь в дереве сборки. Я назвал мой CloudNodeMonitor
  • На экране определений конфигурации перейдите в Настройки-> Хранилища
  • Нажмите значок «+», чтобы добавить новый репозиторий и выбрать git-репо.
  • Установите URL-адрес хранилища git на
    https://github.com/barakm/mist-monitor.git
    (вы всегда можете разветвить этот репозиторий, если хотите что-то добавить). Удостоверьтесь, что дали вашему хранилищу Quickbuild имя, которое вы запомните.
  • На экране конфигурации Quickbuild, перейдите в настройки-> шаги
  • Добавьте новый шаг (это значок «+») и выберите репозиторий-> оформить заказ.
  • На экране редактирования шагов обязательно выберите ранее созданный репозиторий.
  • Добавьте новый шаг и выберите команду build-> shell / batch
  • В поле командной строки на:
    ./mist_monitor_runner.sh $ {vars.getValue ( «mistUsername»)} $ {vars.getValue ( «mistPassword»)}
    Обратите внимание , как мы передаем полномочия mist.io как переменные QuickBuild — мы настроим их позже.
  • Установите в поле «Рабочий каталог» значение: mist_monitor
  • Добавьте новый шаг и выберите «Опубликовать» -> «Пользовательский статистический отчет».
  • Задайте в качестве категории статистики имя категории пользовательской статистики, которую вы создали ранее (например, «Запуск инстансов облака»).
  • Установите для поля «Файлы для обработки» значение:
    mist_monitor / output.xml
  • Установите имя набора отчетов на: All_Machines
  • На экране редактирования конфигурации перейдите в Настройки-> Переменные
  • Добавьте новую переменную. Назовите его mistUsername и установите в качестве значения имя пользователя вашей учетной записи mist.io
  • Добавьте новую переменную. Назовите его mistPassword (вы можете захотеть установить значение, которое будет отображаться как секретное значение, а не в виде открытого текста) и установить его значение в качестве пароля вашей учетной записи mist.io.
  • Установите график выполнения задачи. Перейдите: Настройки-> Общие настройки-> Изменить и запланировать периодическое выполнение задачи. Раз в час у меня все хорошо.

Ваша новая конфигурация Quickbuild должна выглядеть примерно так:

quickbuild_task_steps

Запустите задачу пару раз из консоли Quickbuild, чтобы убедиться, что она работает должным образом. Взгляните на вкладку «Последняя сборка», чтобы увидеть результаты.

Настройка виджета панели мониторинга
Quickbuild имеет встроенную систему панели управления, которая довольно проста.
Выберите панель управления, которую вы хотите использовать (или создайте новую).
Выберите «Добавить гаджет» -> «Другие» -> «Пользовательская статистика».
Выберите соответствующий заголовок и задайте конфигурацию для созданной вами задачи.
Установите для поля «Сборка» значение: «Последняя успешная сборка»
Установите имя категории В поле «Созданная вами пользовательская категория» («Запуск экземпляров облака»)
выберите набор отчетов «All_Machines» и нажмите «Сохранить».
На панели мониторинга должны появиться последние результаты вашего облачного монитора.

Running_Instances_Widget
Нажмите «Просмотреть отчет» и выберите вкладку «Статистика», и вы сможете увидеть статистику использования вашего облака:

Instances_Graph
Теперь у вас есть панель инструментов Quickbuild, показывающая количество вычислительных экземпляров, работающих на всех ваших облаках, любезно предоставлено mist.io, а также некоторые интересные исторические данные.