歡迎大家前往雲+社群,獲取更多騰訊海量技術實踐乾貨哦~
這篇文章由巴拉克·梅里莫維奇撰寫。
總結我自己有關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帳戶
首先,你需要在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
這是有趣的一點:
請注意如何利用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設定為 github.com/barakm/mist… (如果你想新增一些東西,你可以隨時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提供,還有一些不錯的歷史資料。