技术开发 频道

通过Kettle调用Rest API获取信息

  【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中所示:

通过Kettle调用Rest API获取信息
▲图1 Kettle运行主界面

  二、通过Rest API获取Open Stack环境拓扑信息

  2.1创建数据库表以存储拓扑信息

  Open Stack环境中主机的拓扑主要用Zone和Service来区分,一台主机属于一个特定的zone,提供特定的服务。在MySQL数据库中创建如图2所示的数据表。第一个字段日期时间,存放系统获取信息的时间,用于后续对拓扑结构变化历史的跟踪。

通过Kettle调用Rest API获取信息
▲图2 存储Open Stack环境拓扑信息的数据库表结构

  2.2 获取并解析Open Stack环境访问令牌

  进入Kettle的主界面,选择“文件”—>“新建”—>“转换”创建一个新的转换。添加“输入”—>“生成记录”,“查询”—>“Rest Client”,“输入”—>“Json输入”并连接各转换,如图3所示。

通过Kettle调用Rest API获取信息
▲图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

通过Kettle调用Rest API获取信息
▲图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解析转换的输入信息。

通过Kettle调用Rest API获取信息
▲图5 Rest Client参数通用设置

  编辑Rest Client的Header配置,如图6中所示。

  • 设置Content-Type为上一步中的参数Content-Type中获得。

通过Kettle调用Rest API获取信息
▲图6 Rest Client调用Headers设置

  2.2.3 配置Json输入解析获得令牌

  双击打开“解析令牌”编辑界面,编辑Json输入的“文件”配置界面。勾选“源定义在一个字段里?”,在“从字段获取源”选项里选择上一步传来的result内容。如图7中所示。

通过Kettle调用Rest API获取信息
▲图7 Json输入设置:“文件”

  切换到Json输入的“字段”配置界面。定义所需要的字段,来存放解析的Rest API返回值。可以参考如图8中所示。

  • 令牌获取时间:access.token.issued_at

  • 令牌过期时间:access.token.expires

  • 令牌ID:access.token.id

通过Kettle调用Rest API获取信息
▲图8 Json输入设置中定义“字段”

  2.3 获取拓扑信息并写入数据库表

  在前面获取令牌的步骤基础上,利用获得的令牌和其他的基本信息,重新调用Rest API并进行解析,最后写入到数据库表中。在上面的转换过程中添加如图9中所示的转换过程,并进行相应的配置。

通过Kettle调用Rest API获取信息
▲图9 调用Rest API获得拓扑信息并写入数据库

  2.3.1 再次调用Rest Client转换获得拓扑信息

  双击打开“获取拓扑”进入编辑界面,编辑Rest Client通用配置,如图10中所示。

  • URL设置为 http://<IP地址>:8774/v2/<租户名称>/os-hosts。

  • HTTP Method设置为: GET。

  • Application Type设置为JSON.

  • API调用的返回值写入result_topo中作为后续Json解析转换的输入信息。

通过Kettle调用Rest API获取信息
▲图10 Rest Client参数通用设置

  在Headers界面将上一步中取得的令牌设置为名称为X-Auth-Token的值,如图11中所示。

通过Kettle调用Rest API获取信息
▲图11 Rest Client调用的Headers设置

  2.3.2 配置Json输入解析获得拓扑信息

  如图12中所示。

  • zone:hosts..zone

  • 主机名称:hosts..host_name

  • 服务类型:hosts..service

通过Kettle调用Rest API获取信息
▲图12 Json输入中设置解析

  2.3.3 选择需要的字段

  如图13中所示,仅仅选取需要的字段:zone, Host_name, service。

通过Kettle调用Rest API获取信息
▲图13 选取需要的字段

  2.3.4 获取系统时间信息

  如图14中所示,取得系统的时间信息,用于写入数据库表。

通过Kettle调用Rest API获取信息
▲图14 获取系统时间

  2.3.5 连接时间信息和拓扑信息

  如图15中所示,将系统的时间信息和Open Stack环境拓扑信息连接生成数据表。

通过Kettle调用Rest API获取信息
▲图15 连接系统时间和拓扑信息

  2.3.6 将包含时间的拓扑信息写入数据库表

  如图16中所示,建立数据库的连接,并将时间和拓扑信息写入数据库。

通过Kettle调用Rest API获取信息
▲图16 将信息写入数据库表

  所导出的Open Stack环境拓扑信息如图17中所示。

通过Kettle调用Rest API获取信息
▲图17 数据库中的拓扑信息记录

  三、Kettle参数设置以及如何利用获取到的信息

  3.1 将参数设置到properties文件

  在一个比较复杂的转换工程中,需要设计多个转换以实现所需的功能,为了能够方便的适应环境的变化,一般会将所用的到参数写入配置文件中,然后在配置转换时调用。这里介绍两种方式:

  • 编辑—设置环境变量

  • 编辑—编辑Kettle.properties文件(或者编辑文件<安装目录>\.kettle\kettle.properties)

  调用参数时,利用${<变量名称>}或者%%<变量名称>%%的形式调用,如图18中所示:

通过Kettle调用Rest API获取信息
▲图18 调用环境变量设置转换

  3.2 以报告形式呈现主机拓扑

  对于已经存入数据库的Open Stack环境信息,我们可以用图形工具或者编程的方式方便进行展示。图19所示是在web页面呈现拓扑信息,图中不同的颜色是基于主机资源使用情况呈现的,红色代表资源利用率很低,黄色代表资源利用率较低。

通过Kettle调用Rest API获取信息
▲图19 在Web页面呈现所获得的数据

  四、总结

  通过Kettle可以获得所有能够通过Open Stack提供的API的信息,下表列出了一个典型的环境所提供的所有服务类型。前面的示例只是调用了Compute服务的OS-hosts信息,还可以通过调用Ceilmeter来获得计算资源的性能信息。

通过Kettle调用Rest API获取信息

参考资料

  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优化项目。

9
相关文章