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

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

总结我自己有关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. jQuery 事件方法(二)

    方法 描述 bind() 向匹配元素附加一个或更多事件处理器 blur() 触发.或将函数绑定到指定元素的 blur 事件 change() 触发.或将函数绑定到指定元素的 change 事件 cli ...

  2. 左边label随着右边textarea高度自适应

    左边label随着右边自适应 近期项目中,有表单需求 默认展示两列,当内容多的时候,可以展示一列 左边列 <div> <label>备注</label> <s ...

  3. 自动刷新 CSS文件

    自动刷新 CSS文件 使用任何代码工具码 CSS,都是需要保存后再切换到浏览器按 F5 刷新查看效果,一次又一次,不管这个改动仅是一个小小的颜色.使用 CSSrefresh 后,改动 CSS 文件保存 ...

  4. 纯CSS二级纵向菜单

    纯CSS二级纵向菜单 <body> <div class="divda"> <div class="nav"> <ul ...

  5. 第五章:Python基础の生成器、迭代器、序列化和虚拟环境的应用

    本课主题 生成器介紹和操作实战 迭代器介紹和操作实战 序例化和反序例化 Json 和 Pickle 操作实战 字符串格式化的应用 创建虚拟环境实战 本周作业 生成器介紹和操作实战 什么是生成器,生成器 ...

  6. Mongo查询关键字

  7. 【埃氏筛】洛谷P3383埃氏筛模板

    思路: 如果我们要筛出 [1, n] 内的所有素数,使用 [1, √n] 内的素数去筛就可以了 设bool型数组 a,a[i] 表示 i 是否被某个素数筛过 从 2 开始枚举每个数 i: 若 a[i] ...

  8. 海康、大华IPC的rtsp格式

    海康: rtsp://[username]:[password]@[ip]:[port]/[codec]/[channel]/[subtype]/av_stream说明:username: 用户名.例 ...

  9. better-scroll不能滚动之 滚动监听-左右联动

    滚动监听 better-scroll 无法滚动的分析,直接翻到最后,看问题汇总,希望能帮助你解决. 借用一下人家这个好看的项目图片,做一个解释.左边的内容会跟右边的内容一起关联,点击左边的菜单,右边会 ...

  10. HTML/CSS/JavaScript学习笔记【持续更新】

    HTML <font> 标签 定义和用法 <font> 规定文本的字体.字体尺寸.字体颜色. 实例 规定文本字体.大小和颜色: <font size="3&qu ...