【IT168 技術】作為目前主流Web服務交互方案,RESTful相比於SOAP(Simple Object Access protocol,簡單對象訪問協議)以及XML-RPC更加簡單明了,更加簡單輕量的方法設計和實現,使它逐漸成為軟體設計的一個最流行的方案。在雲計算環境中,運維人員可以通過調用這些Rest API,獲取Open Stack環境的服務拓撲、主機、虛擬機的基本信息。這個過程,一般需要一個完整的開發環境以及代碼的書寫,本文主要介紹利用ETL工具Kettle來實現Rest API的調用和存儲過程,取得Open Stack環境拓撲信息,以達到與開發代碼同等的效果。
一、Kettle簡介與安裝配置
Kettle中文名稱叫水壺,是一款國外開源的ETL工具,純Java編寫,一個發布包可以同時在Window、Linux、Unix上運行,它提供了強大的對數據抽取、清洗轉換和加載(ETL)的能力。
Kettle的安裝比較簡單,這裡以Windows環境下安裝為例描述如下:
1)環境準備:
安裝JRE或者JDK Oracle 1.7以上
設置系統環境變量:
PENTAHO_JAVA_HOME =C:\Program Files\Java\jre7
2)解壓縮下載的Kettle安裝包到系統硬碟,目前最新的穩定的社區版本是5.3.0.0-213,下載地址如下:
http://sourceforge.net/projects/pentaho/files/Data%20Integration/5.3/pdi-ce-5.3.0.0-213.zip/download
3)安裝JDBC驅動。從API取得的數據信息,可以方便的寫入到相應的資料庫中,用以後續報告呈現使用。這裡以mySQL為例進行介紹,所以需要將它的JDBC驅動mysql-connector-java-5.1.18-bin.jar複製到Kettle安裝路徑下的lib目錄下面。
4)在Kettle安裝路徑下,找到Spoon.bat,雙擊執行,就會進入Kettle的運行主界面如下圖1中所示:
▲圖1 Kettle運行主界面
二、通過Rest API獲取Open Stack環境拓撲信息
2.1創建資料庫表以存儲拓撲信息
Open Stack環境中主機的拓撲主要用Zone和Service來區分,一臺主機屬於一個特定的zone,提供特定的服務。在MySQL資料庫中創建如圖2所示的數據表。第一個欄位日期時間,存放系統獲取信息的時間,用於後續對拓撲結構變化歷史的跟蹤。
▲圖2 存儲Open Stack環境拓撲信息的資料庫表結構
2.2 獲取並解析Open Stack環境訪問令牌
進入Kettle的主界面,選擇「文件」—>「新建」—>「轉換」創建一個新的轉換。添加「輸入」—>「生成記錄」,「查詢」—>「Rest Client」,「輸入」—>「Json輸入」並連接各轉換,如圖3所示。
▲圖3 獲取並解析Open Stack令牌的轉換
2.2.1 生成環境調用所需參數信息
雙擊打開「生成記錄」編輯界面,填寫Rest API調用的基本參數信息如圖4中所示。
在此編輯界面中,需要限制只生成一條記錄提供後續的Rest Client調用使用。同時定義了令牌獲取的URL地址,HTTP調用方法,傳送的內容及其類型,可以參考Open Stack的API文檔。
Body(String):{ "auth": { "tenantName": "<租戶名稱>", "passwordCredentials": { "username":"admin", "password": "管理員密碼"}}}
Token_url(String):http://<IP位址>:5000/v2.0/tokens
Content-Type(String):application/json
http_method(String):POST
▲圖4 生成Rest API調用所需基本參數
2.2.2 配置Rest Client獲取令牌
雙擊打開「獲取令牌」進入編輯界面,編輯Rest Client通用配置,如圖5中所示。
API調用的URL從上一步驟中的參數token_rul獲得。
API調用的方法從上一步中的參數http_method獲得。
API傳送的內容從上一步中的參數body中獲得。
Application Type設置為JSON.
API調用的返回值寫入result中作為後續Json解析轉換的輸入信息。
▲圖5 Rest Client參數通用設置
編輯Rest Client的Header配置,如圖6中所示。
▲圖6 Rest Client調用Headers設置
2.2.3 配置Json輸入解析獲得令牌
雙擊打開「解析令牌」編輯界面,編輯Json輸入的「文件」配置界面。勾選「源定義在一個欄位裡?」,在「從欄位獲取源」選項裡選擇上一步傳來的result內容。如圖7中所示。
▲圖7 Json輸入設置:「文件」
切換到Json輸入的「欄位」配置界面。定義所需要的欄位,來存放解析的Rest API返回值。可以參考如圖8中所示。
▲圖8 Json輸入設置中定義「欄位」
2.3 獲取拓撲信息並寫入資料庫表
在前面獲取令牌的步驟基礎上,利用獲得的令牌和其他的基本信息,重新調用Rest API並進行解析,最後寫入到資料庫表中。在上面的轉換過程中添加如圖9中所示的轉換過程,並進行相應的配置。
▲圖9 調用Rest API獲得拓撲信息並寫入資料庫
2.3.1 再次調用Rest Client轉換獲得拓撲信息
雙擊打開「獲取拓撲」進入編輯界面,編輯Rest Client通用配置,如圖10中所示。
▲圖10 Rest Client參數通用設置
在Headers界面將上一步中取得的令牌設置為名稱為X-Auth-Token的值,如圖11中所示。
▲圖11 Rest Client調用的Headers設置
2.3.2 配置Json輸入解析獲得拓撲信息
如圖12中所示。
zone:hosts..zone
主機名稱:hosts..host_name
服務類型:hosts..service
▲圖12 Json輸入中設置解析
2.3.3 選擇需要的欄位
如圖13中所示,僅僅選取需要的欄位:zone, Host_name, service。
▲圖13 選取需要的欄位
2.3.4 獲取系統時間信息
如圖14中所示,取得系統的時間信息,用於寫入資料庫表。
▲圖14 獲取系統時間
2.3.5 連接時間信息和拓撲信息
如圖15中所示,將系統的時間信息和Open Stack環境拓撲信息連接生成數據表。
▲圖15 連接系統時間和拓撲信息
2.3.6 將包含時間的拓撲信息寫入資料庫表
如圖16中所示,建立資料庫的連接,並將時間和拓撲信息寫入資料庫。
▲圖16 將信息寫入資料庫表
所導出的Open Stack環境拓撲信息如圖17中所示。
▲圖17 資料庫中的拓撲信息記錄
三、Kettle參數設置以及如何利用獲取到的信息
3.1 將參數設置到properties文件
在一個比較複雜的轉換工程中,需要設計多個轉換以實現所需的功能,為了能夠方便的適應環境的變化,一般會將所用的到參數寫入配置文件中,然後在配置轉換時調用。這裡介紹兩種方式:
調用參數時,利用${<變量名稱>}或者%%<變量名稱>%%的形式調用,如圖18中所示:
▲圖18 調用環境變量設置轉換
3.2 以報告形式呈現主機拓撲
對於已經存入資料庫的Open Stack環境信息,我們可以用圖形工具或者編程的方式方便進行展示。圖19所示是在web頁面呈現拓撲信息,圖中不同的顏色是基於主機資源使用情況呈現的,紅色代表資源利用率很低,黃色代表資源利用率較低。
▲圖19 在Web頁面呈現所獲得的數據
四、總結
通過Kettle可以獲得所有能夠通過Open Stack提供的API的信息,下表列出了一個典型的環境所提供的所有服務類型。前面的示例只是調用了Compute服務的OS-hosts信息,還可以通過調用Ceilmeter來獲得計算資源的性能信息。
參考資料
Kettle隨機文檔
<Kettle安裝目錄>\docs\English
Pentaho社區
http://community.pentaho.com/
Open Stack API文檔
http://developer.openstack.org/api-ref-compute-v2.html
作者簡介
史會卿(高級信息工程師)
任職於IBM中國開發中心,從事x86伺服器的虛擬化和IT性能監控和優化。熟悉主流的虛擬化技術、IBM System x系列伺服器、IBM DS4000/5000系列存儲器和IBM Tivoli相關軟體產品,參與部署了多個基於Tivoli產品的IT環境性能監控和IT優化項目。