通過Kettle調用Rest API獲取信息

2020-12-25 IT168

  【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優化項目。

相關焦點

  • Swagger在Spring Rest API中的使用
    編寫了Spring rest apis後,與前端開發人員共享,以便他們可以與之集成。前端開發人員將需要所有其餘的api端點以及每個端點的請求方法,請求參數,請求正文和響應格式。你將如何分享有關您的api的所有信息?手動記錄所有api是非常困難和耗時的。此外,如果您手動記錄api,則每次在api中進行一些更改時都必須更改文檔。好!
  • REST API URI 設計 7 準則
    當你沒有取消引用時,你不應該查看 URI 字符串的內容以獲取其他信息。- Tim Berners-Lee_客戶端必須遵循 Web 的連結範例,將 URI 視為不透明標識符。REST API 設計人員應該創建 URI,將 REST API 的資源模型傳達給潛在的客戶端開發人員。在這篇文章中,我將嘗試為 REST API URsI 引入一套設計規則。
  • Kettle之Carte最佳實踐
    前言kettle支持Carte服務級部署模式,即伺服器後臺會跑一個常駐Carte程序,job/trans都運行在這個服務裡。這篇文章主要講述carte從配置、任務提交到監控的實踐。0x03 調用遠程提交job/trans時,同樣支持資料庫提交任務,carte伺服器上需要提前配置好資料庫。
  • 使用pyhttptest 輕鬆測試 REST API
    pyhttptest 命令行工具,用於通過 RESTful api 進行 HTTP 測試。這個工具通過簡單的三個步驟自動化測試安裝pip install pyhttptest用文件中最簡單且廣泛使用的格式 JSON 描述針對 API 服務的 HTTP 請求測試用例發送 HTTP GET 請求json文件內容如下{ "name": "TEST: Get server status", "verb": "GET", "endpoint": "/
  • Salesforce Rest Api詳解一之Spring Boot集成
    我們將使用Spring Boot進行身份驗證(從Salesforce獲取access_token和instance_url)。儘管可以使用普通的Java應用程式來完成此操作,但是我們將假設現實中的用例需要Web應用程式來調用服務。我們創建的Spring Boot應用程式將具有通過純HTTP GET調用公開的服務。
  • REST API設計優秀實踐之參數與查詢的使用
    在程式語言中,我們可以通過某個函數來請求對應的返回值。如果一個函數不帶任何參數,那麼我們將無法直接去影響它的返回值。API也是如此,尤其是那些無狀態的REST API。畢竟,所有REST的交互都是無狀態的。也就是說,每個請求都會包含那些方便連接器理解該請求的所有信息,而且它們與之前的任何請求都無關。
  • 5款好用的 REST API 工具,推薦給你!
    來源:hackernoon.com/rest-api-tools-smackdown-nov3ulw 哈嘍,各位新來的小夥伴們,大家好!
  • WinSpy涉及的windows api
    WinSpy界面截圖如下: 1:拖拽瞄準鏡圖標獲取窗口的HWND  核心api:ClientToScreen、WindowFromPoint、EnumChildWindows、GetParent、GetWindowLong、SetWindowLong1.1 WindowFromPoint
  • 關於調用接口的詳細說明
    以2.獲取電站信息列表為例,簡單介紹接口的調用;第一步,下載谷歌插件,參考http://jingyan.baidu.com/article/48a42057ea53a1a9242504c1.html此文檔即可成功安裝谷歌插件。
  • Windows phone如何實現json接口的調用
    目前QQ、新浪、搜狐微博都開放了API供開發人員調用,本文就是將從如何調用最簡單的json類型的接口開始逐步深入微博客戶端的開發。  因為各大客戶端的API調用都需要用戶傳入appkey和用戶名、密碼等信息,基於循序漸進的考慮,我們將從一個最簡單的第三方接口調用展開,以展示在WP7上是如何調用json類型接口的。
  • 通過REST API 公開異步通信在Spring5中
    如果我們通過發送CreateOrderCommand來創建訂單,則此訂單將導致更新訂單狀態的各種事件。然後我們需要發送一個查詢,我們也會收到異步結果。我們的Web和移動前端通過REST API與微服務後端進行通信。當用戶創建訂單(點擊「購買」按鈕)時,他們會立即獲得結果。對於這兩個前端而言,最能模擬這種用戶體驗的API是最有意義的。
  • 在IDEA中使用RestTemplate方式進行微服務之間相互調用
    接著前面2篇文章下面繼續創建一個微服務項目,並通過RestTemplate方式進行2個微服務項目之間調用。Module,如下圖所示:2、在左側選擇Spring Initializr,然後點擊Next,如下圖所示:3、輸入Group和Artifact,然後點擊Next,如下圖所示:4、在左側Dependencies中選擇Cloud Discovery,右側選擇Eureka Discovery,然後點擊Next,如下圖所示:5、輸入Module name等信息後
  • 微信小程序API相關知識科普
    API是一種接口函數,把函數封裝起來,給開發者,這樣好多的功能就不需要你去實現了,只要會調用就好了。小程序開發框架提供豐富的微信小程序api接口,可以方便的調起微信提供的能力,如獲取用戶信息,本地存儲,支付功能等。
  • obgame分享:電競LOL數據API接口-API調用
    分享使用 OBGAME電競數據 接口調用的示例代碼,接的是英雄聯盟的【選手基本信息】接口.接口請求地址:http://api.xxe.io/?
  • 架構設計優雅編程之REST
    REST API接口幾種調用方式?rest apiREST概念是什麼?REST接口調用方式?REST接口調用,一般前端通過異步調用(Ajax)方式,而後端則可以使用多種方式來處理,常見的有以下幾種:HttpURLConnection方式;HttpClient方式【最常用】;Spring
  • 小程序地圖學習之獲取位置 獲取經緯度 獲取地名 獲取地址
    我們只需要調用相關的api就可以實現大致的功能。如:獲取經緯度,獲取位置,獲取地址,獲取地名。接下來就具體給大家講解老規矩先看效果圖接下來我們就來看看具體實現步驟一,定義一個按鈕來調用位置獲取的api<!
  • Dubbo-Api-Docs 發布
    而其他人想要使用該功能就必須先通過接口開發者編寫的文檔或者其他方式,了解清楚接口信息才能使用該功能測試接口。Dubbo 這邊有沒有集合文檔展示和測試功能,可以不用寫文檔就能把接口直接給調用方,類似 Swagger/Springfox 的工具呢?有些是基於 Springfox 做的,直接一個文本域放 JSON,與目前 Admin 中的測試功能大同小異。
  • Django REST Framework教程(6): 認證詳解及如何使用Token認證
    當客戶端發送登錄請求通過驗證後,Django通過session將用戶信息存儲在伺服器中保持用戶的請求狀態。Session身份驗證適用於與你的網站在相同的Session環境中運行的AJAX客戶端 (註:這也是Session認證的最大弊端)。基本認證BasicAuthentication類:此認證方案使用HTTP 基本認證,針對用戶的用戶名和密碼進行認證。
  • 微信第三方實現一鍵登錄及獲取用戶信息的方法(PHP版)
    (商務合作聯繫QQ號:2230304070)http://www.jb51.net/article/94717.htm本文實例講述了PHP版微信第三方實現一鍵登錄及獲取用戶信息的方法。再說後臺邏輯,首先調用微信接口的SDK.(後面會有)1include('.
  • python入門第十四課:API的調用
    一、調用天氣API比如需要獲取今天及後續幾天的天氣情況,我們可以調用天氣API,網上有很多接口,大家可以自己百度搜索。我們在瀏覽器輸入API的地址,返回了一串字符串。我們要做的是用Python訪問這個連結,獲取返回結果,然後對結果進行分析,提取其中的天氣數據,代碼如下:import requests# 執行API調用並存儲響應url = 'xxweather_mini