通过与Quickbuild和Mist.io的持续集成实现云管理和使用监控

[这篇文章由巴拉克·梅里莫维奇撰写。]

总结我自己有关Openstack的各种骚操作先告一段落。这一次我想谈谈有关监控云服务的使用情况。

我个人使用IaaS云比较多。有很多laas资源在手中。有了这么多资源,这么多项目,偶尔会有一些失误。开发人员或者一些自动化运维工具可能会忘记或遗漏掉本该关闭的虚拟主机。而且在云端,如果你忘记了一些东西,你就付出代价(金钱上的)。通常,虚拟主机不管你是否真的在做一些有用的事情,只要在运行就一直在计费。而且在你不知情的情况下,账单就会蜂拥而至,账户管理中心的人员就出现在你的面前。

所以我需要一些方法来监控我的跨平台和账户的云服务。我花了一段时间在网上寻找一个好的云监控解决方案,可以让我快速了解当前的云使用情况。顺便说一下,我喜欢看仪表板。能够在一个地方监控到所有相关的东西给我省了一大半力气。

看了一堆云监控相关的项目,我终于发现了mist.io,它具有我所需要的功能,剩下的就是将其插入到我现有的仪表板系统中。

所以我们先看看这些项目。

Mist.io

Mist.io是一个很酷的开源项目,可以监视多个云中的虚拟主机的使用情况。目前支持的云服务提供商非常多(请参阅此处的最新列表,目前包括:公有云服务器、裸机服务器, Docker容器和KVM管理程序。

还有另外一个mist.io网站,提供了一些额外的优质插件。我给我的云服务使用了这个项目,但你始终可以在本地安装开源版本。Mist.io还提供了一个Python SDK,使其成为一个非常容易编写脚本的系统 - 过一会我将使用客户端SDK。

Mist.io包含一个用于当前云服务使用情况的控制台,它本身非常有用:

但是对于我的项目,我还需要维护我的使用历史和统计数据。

Quickbuild

我们用于Cloudify 的持续集成系统(CI)是利用Quickbuild编译出来的。我们已经使用了它很长一段时间,它已经是一个十分稳定的系统。Quickbuild也有一个灵活的仪表板系统,我可以插入我自己的自定义数据源。

这篇文章讲了很多有关Quickbuild的细节,但对于任何CI /自动化系统来说,这些应该是相同的。

胶水(让Quickbuild和mist.io一同协作的方法)

总体思路是在Quickbuild中定义一个配置,它将轮询mist.io的API来运行虚拟机,收集历史数据并在Quickbuild仪表板上显示最新的结果。

所以让我们开始吧!

Mist.io帐户

首先,你需要在http://mist.io上设置你的帐户。完全免费。

云证书

对于要监视的每个云帐户,请创建一个专用用户,并为其提供查看当前正在运行的实例所需的最低权限。

配置mist.io后端

在mist.io中,后端是可以托管计算实例的可监视目标。所以我用mist.io客户端SDK编写了几个脚本来加快速度。

设置云后端:

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

hp_username="YOU_CLOUD_USERNAME"
hp_password="YOU_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()

设置后端:

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

ec2_demo_access_key ="YOU_ACCESS_KEY"
ec2_demo_secret_key = "YOU_SECRET_KEY"
ec2_account_name = "YOU_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'])。
    • all - 这告诉我们实例的总数,所以它包括关闭或删除的机器。不那么有趣,但可以是有用的。将XPath表达式设置为 - count(// machine)

它应该看起来像这样:

设置循环任务

通过自定义Quickbuild类别,我们可以创建轮询mist.io API的任务。这可以而且应该由普通的Quickbuild用户来完成,而不是管理员。

我已经把配置作为一个要点。您可以从以下地址导入:https://gist.github.com/barakm/3927cc0e8930b259c69e

或者您可以使用以下说明手动创建它:

  • 在构建项目的地方创建一个新的Quickbuild配置。我自己的命名为“CloudNodeMonitor”
  • 在配置定义页面中,选择Settings -> Repositories
  • 点击“+”图标添加一个新的存储库,并选择一个git仓库
  • 将git仓库URL设置为
    https://github.com/barakm/mist-monitor.git
    (如果你想添加一些东西,你可以随时fork这个仓库)。确保给你的Quickbuild仓库设置一个你不会忘记的名字。
  • 在Quickbuild配置中,点击settings -> steps
  • 添加一个新的项目(点击'+'图标),并选择repository -> checkout。
  • 在步骤编辑页面中,确保选择之前创建的仓库
  • 添加一个新的步骤,并选择build -> shell / batch命令
  • 设置命令字段为:
    ./mist_monitor_runner.sh $ {vars.getValue(“mistUsername”)} $ {vars.getValue(“mistPassword”)}
    注意我们是如何将mist.io的认证变为Quickbuild的一个变量 - 我们一会将配置一下。
  • 将工作目录字段设置为:mist_monitor
  • 添加新步骤,然后选择Publish -> Custom Statistics Report
  • 将“统计信息类别”设置为之前创建的自定义统计信息类别的名称(如“正在运行的云服务实例”)
  • 将“要处理的文件”字段设置为:
    mist_monitor / output.xml
  • 将报告集名称设置为:All_Machines
  • 在配置编辑屏幕中,选择Settings->Variables
  • 添加一个新的变量。将其命名为mistUsername,并将其值设置为您的mist.io用户名。
  • 添加一个新的变量。将它命名为mistPassword(您可能希望将值设置为秘密值,而不是明文),并将其值设置为您的mist.io帐户的密码。
  • 设置任务执行时间表。选择Settings->General Settings->Edit并安排定期执行任务。我花了一个小时。

你的新的Quickbuild配置应该是这样的:

从Quickbuild控制台运行任务几次,以确保它按预期工作。查看“最新版本”选项卡查看结果。

设置仪表板小部件
Quickbuild有一个非常简单的内置仪表板系统。
选择要使用的仪表板(或创建一个新的仪表板)
选择Add Gadget -> Others -> Custom Statistics
选择一个相关的标题,并将配置设置为您创建的任务
将生成字段设置为:Latest Successful Build
设置类别名称字段添加到您创建的自定义类别(“Running Cloud Instances”)中
选择“All_Machines”报告集,然后单击保存。
您应该在仪表板上看到来自云监视器的最新结果。

点击“查看报告”,然后选择“统计”选项卡,您可以看到您的云使用统计:

现在,您已经有了一个Quickbuild仪表板,可以显示在您所有云上运行的计算实例的数量,由mist.io提供,还有一些不错的历史数据。

本站文章资源均来源自网络,除非特别声明,否则均不代表站方观点,并仅供查阅,不作为任何参考依据!
如有侵权请及时跟我们联系,本站将及时删除!
如遇版权问题,请查看 本站版权声明
THE END
分享
二维码
海报
通过与Quickbuild和Mist.io的持续集成实现云管理和使用监控
总结我自己有关 Openstack 的各种骚操作先告一段落。这一次我想谈谈有关监控云服务的使用情况。
<<上一篇
下一篇>>