歡迎你們前往雲+社區,獲取更多騰訊海量技術實踐乾貨哦~html
這篇文章由巴拉克·梅里莫維奇撰寫。python
總結我本身有關Openstack的各類騷操做先告一段落。這一次我想談談有關監控雲服務的使用狀況。git
我我的使用IaaS雲比較多。有不少laas資源在手中。有了這麼多資源,這麼多項目,偶爾會有一些失誤。開發人員或者一些自動化運維工具可能會忘記或遺漏掉本該關閉的虛擬主機。並且在雲端,若是你忘記了一些東西,你就付出代價(金錢上的)。一般,虛擬主機無論你是否真的在作一些有用的事情,只要在運行就一直在計費。並且在你不知情的狀況下,帳單就會蜂擁而至,帳戶管理中心的人員就出如今你的面前。github
因此我須要一些方法來監控個人跨平臺和帳戶的雲服務。我花了一段時間在網上尋找一個好的雲監控解決方案,可讓我快速瞭解當前的雲使用狀況。順便說一下,我喜歡看儀表板。可以在一個地方監控到全部相關的東西給我省了一大半力氣。shell
看了一堆雲監控相關的項目,我終於發現了mist.io,它具備我所須要的功能,剩下的就是將其插入到我現有的儀表板系統中。後端
因此咱們先看看這些項目。bash
Mist.io是一個很酷的開源項目,能夠監視多個雲中的虛擬主機的使用狀況。目前支持的雲服務提供商很是多(請參閱此處的最新列表,目前包括:公有云服務器、裸機服務器, Docker容器和KVM管理程序。服務器
還有另一個mist.io網站,提供了一些額外的優質插件。我給個人雲服務使用了這個項目,但你始終能夠在本地安裝開源版本。Mist.io還提供了一個Python SDK,使其成爲一個很是容易編寫腳本的系統 - 過一會我將使用客戶端SDK。運維
Mist.io包含一個用於當前雲服務使用狀況的控制檯,它自己很是有用:ide
可是對於個人項目,我還須要維護個人使用歷史和統計數據。
咱們用於Cloudify 的持續集成系統(CI)是利用Quickbuild編譯出來的。咱們已經使用了它很長一段時間,它已是一個十分穩定的系統。Quickbuild也有一個靈活的儀表板系統,我能夠插入我本身的自定義數據源。
這篇文章講了不少有關Quickbuild的細節,但對於任何CI /自動化系統來講,這些應該是相同的。
整體思路是在Quickbuild中定義一個配置,它將輪詢mist.io的API來運行虛擬機,收集歷史數據並在Quickbuild儀表板上顯示最新的結果。
首先,你須要在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
這是有趣的一點:
請注意如何利用python生成一個包含計算實例詳細信息的XML文件。由於Quickbuild更傾向於XML文件做爲輸入。
首先咱們須要設置Quickbuild來接受腳本生成的XML文件格式。這是一次性操做,但你須要成爲Quickbuild服務器的管理員才能執行此操做。
它應該看起來像這樣:
經過自定義Quickbuild類別,咱們能夠建立輪詢mist.io API的任務。這能夠並且應該由普通的Quickbuild用戶來完成,而不是管理員。
我已經把配置做爲一個要點。您能夠從如下地址導入:https://gist.github.com/barakm/3927cc0e8930b259c69e
或者您可使用如下說明手動建立它:
你的新的Quickbuild配置應該是這樣的:
從Quickbuild控制檯運行任務幾回,以確保它按預期工做。查看「最新版本」選項卡查看結果。
Quickbuild有一個很是簡單的內置儀表板系統。
選擇要使用的儀表板(或建立一個新的儀表板)
選擇Add Gadget -> Others -> Custom Statistics
選擇一個相關的標題,並將配置設置爲您建立的任務
將生成字段設置爲:Latest Successful Build
設置類別名稱字段添加到您建立的自定義類別(「Running Cloud Instances」)中
選擇「All_Machines」報告集,而後單擊保存。
您應該在儀表板上看到來自雲監視器的最新結果。
點擊「查看報告」,而後選擇「統計」選項卡,您能夠看到您的雲使用統計:
如今,您已經有了一個Quickbuild儀表板,能夠顯示在您全部雲上運行的計算實例的數量,由mist.io提供,還有一些不錯的歷史數據。