欢迎大家前往云+社区,获取更多腾讯海量技术实践干货哦~

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

总结我自己有关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提供,还有一些不错的历史数据。

翻译人:higuoxing,该成员来自云+社区翻译社

原文链接:https://dzone.com/articles/cloud-management-usage

原文作者:Cloudify Community

相关阅读


此文已由作者授权腾讯云+技术社区发布,转载请注明文章出处
 

通过与Quickbuild和Mist.io的持续集成实现云管理和使用监控的更多相关文章

  1. Docker&K8S&持续集成与容器管理--系列教程

    前言 网络虚拟化 一 Docker简介 Docker介绍  → B站视频链接 Docker架构  → B站视频链接 二 Docker安装 Ubuntu Docker 安装 CentOS Docker ...

  2. Docker&持续集成与容器管理--系列教程

    一 Docker简介 Docker介绍 Docker架构 二 Docker安装 Ubuntu Docker 安装 CentOS Docker 安装 Windows Docker 安装 MacOS Do ...

  3. jenkins持续集成源码管理选项为None,构建失败找不到git.exe解决办法

    我的jenkins版本为Jenkins ver. 2.19.1 1.源码管理选项只有None的解决办法: 在插件管理中心,搜索对应的源码管理插件这里以git为例,搜索git plugin点击右下角的安 ...

  4. docker 可持续集成及日志管理及监控报警

  5. 持续集成之戏说Check-in Dance

    尽管Thoughtworks的首席科学家Martion folwer 为“持续集成 ” 下了定义,但由于自身背景与经历的不同,每个人对其都有不同的理解.从狭义上讲,持续集成可以认为是一种基于某种或者某 ...

  6. Jenkins 快速搭建持续集成环境

    持续集成概述 什么是持续集成 随着软件开发复杂度的不断提高,团队开发成员间如何更好地协同工作以确保软件开发的质量已经慢慢成为开发过程中不可回避的问题.尤其是近些年来,敏捷(Agile) 在软件工程领域 ...

  7. CI Weekly #20 | 从持续集成的角度看 “云” 的价值

    很多移动开发工程师对 fastlane 耳熟能详,最近 flow.ci 的 iOS 工作流「编译」这步已采用 fastlane gym 工具(iOS 应用打包签名自动化),进一步优化了构建打包速度.快 ...

  8. jenkins持续集成的步骤

    项目的持续集成分享 源代码管理 项目仓库 配置仓库 发布仓库 ci/cd相关 gitlab,管理版本,测试流水线 jenkins,对项目进行持续集成 各模块的关系 graph TD a(jenkins ...

  9. 持续集成之戏说Check-in Dance(转)

    add by zhj: 先说一下持续集成的定义,这是ThoughtWorks首席科学家Martin Fowler在<持续集成>第二版中给出的,“持续集成是一种软件开发实践.在持续集成中,团 ...

随机推荐

  1. Gulp自动化构建工具的简单使用

    相关网站 gulp官方网址:http://gulpjs.com gulp中文网站:http://www.gulpjs.com.cn/ gulp插件地址:http://gulpjs.com/plugin ...

  2. Task log(未)

    Keyword: fatal, crash, dead, out of memory, oom, anr in, non-protected File: main ,sys ,crash

  3. XCode8中的sizeClass设置

    xcode8出来很久了,xcode9都要出来了,项目中由于一直没遇到用到适配屏幕的情况,所以一直也就忽略了这个知识点.今天忽然想起来,就抱着试一试的态度打开了xcode,我去~就我现在了解而言,屏幕大 ...

  4. Windows资源

    Windows资源是一种二进制数据,由链接器链接进程序成为程序的一部分,通过资源的方式可以很方便的对应用程序进行扩展.在Windows中资源可以是系统自定义的,也可以是用户自定义的.在VC++中资源是 ...

  5. HTML知识点之表示强调的主要元素

    <h1>~<h6> 在HTML中,标题(Heading)元素共有6个级别的标签:<h1>~<h6>.它们都是块级元素.标题数字越小,字体就会越大,标题的 ...

  6. slave延迟很大优化方法

    一般而言,slave相对master延迟较大,其根本原因就是slave上的复制线程没办法真正做到并发.简单说,在master上是并发模式(以InnoDB引擎为主)完成事务提交的,而在slave上,复制 ...

  7. 实现数组元素互换位置(乘机理解java参数传递)

    Java中函数参数是按值传递的,在实现数组元素互换位置之前,我想先说一下Java函数参数传递过程.一般情况下我们会把参数分为基本数据类型和引用数据类型,然后分别来讲参数传递,因为他们的外在表现似乎是不 ...

  8. Sampling

    本文主要涉及接受拒绝采样,重要性采样,蒙特卡洛方法,吉布斯采样等内容.部分内容整理与互联网.仅供交流学习使用!

  9. Erlang epmd官方文档中文翻译

    本文含epmd简介及官方文档之翻译,文档地址 http://erlang.org/doc/man/epmd.html翻译时的版本 R19.1 中英文水平都不咋地,不通顺处海涵,就酱. 简介 Erlan ...

  10. Android 线程_笔记

    多线程 一.为什么要使用多线程 1.提高用户体验或避免ANR 在事件处理代码中需要使用多线程,响应时间超过5s,即会出现ANR(Application is not responding),并因为响应 ...