【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中所示:
二、通过Rest API获取Open Stack环境拓扑信息
2.1创建数据库表以存储拓扑信息
Open Stack环境中主机的拓扑主要用Zone和Service来区分,一台主机属于一个特定的zone,提供特定的服务。在MySQL数据库中创建如图2所示的数据表。第一个字段日期时间,存放系统获取信息的时间,用于后续对拓扑结构变化历史的跟踪。
2.2 获取并解析Open Stack环境访问令牌
进入Kettle的主界面,选择“文件”—>“新建”—>“转换”创建一个新的转换。添加“输入”—>“生成记录”,“查询”—>“Rest Client”,“输入”—>“Json输入”并连接各转换,如图3所示。
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
2.2.2 配置Rest Client获取令牌
双击打开“获取令牌”进入编辑界面,编辑Rest Client通用配置,如图5中所示。
API调用的URL从上一步骤中的参数token_rul获得。
API调用的方法从上一步中的参数http_method获得。
API传送的内容从上一步中的参数body中获得。
Application Type设置为JSON.
API调用的返回值写入result中作为后续Json解析转换的输入信息。
编辑Rest Client的Header配置,如图6中所示。
设置Content-Type为上一步中的参数Content-Type中获得。
2.2.3 配置Json输入解析获得令牌
双击打开“解析令牌”编辑界面,编辑Json输入的“文件”配置界面。勾选“源定义在一个字段里?”,在“从字段获取源”选项里选择上一步传来的result内容。如图7中所示。
切换到Json输入的“字段”配置界面。定义所需要的字段,来存放解析的Rest API返回值。可以参考如图8中所示。
令牌获取时间:access.token.issued_at
令牌过期时间:access.token.expires
令牌ID:access.token.id
2.3 获取拓扑信息并写入数据库表
在前面获取令牌的步骤基础上,利用获得的令牌和其他的基本信息,重新调用Rest API并进行解析,最后写入到数据库表中。在上面的转换过程中添加如图9中所示的转换过程,并进行相应的配置。
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解析转换的输入信息。
在Headers界面将上一步中取得的令牌设置为名称为X-Auth-Token的值,如图11中所示。
2.3.2 配置Json输入解析获得拓扑信息
如图12中所示。
zone:hosts..zone
主机名称:hosts..host_name
服务类型:hosts..service
2.3.3 选择需要的字段
如图13中所示,仅仅选取需要的字段:zone, Host_name, service。
2.3.4 获取系统时间信息
如图14中所示,取得系统的时间信息,用于写入数据库表。
2.3.5 连接时间信息和拓扑信息
如图15中所示,将系统的时间信息和Open Stack环境拓扑信息连接生成数据表。
2.3.6 将包含时间的拓扑信息写入数据库表
如图16中所示,建立数据库的连接,并将时间和拓扑信息写入数据库。
所导出的Open Stack环境拓扑信息如图17中所示。
三、Kettle参数设置以及如何利用获取到的信息
3.1 将参数设置到properties文件
在一个比较复杂的转换工程中,需要设计多个转换以实现所需的功能,为了能够方便的适应环境的变化,一般会将所用的到参数写入配置文件中,然后在配置转换时调用。这里介绍两种方式:
编辑—设置环境变量
编辑—编辑Kettle.properties文件(或者编辑文件<安装目录>\.kettle\kettle.properties)
调用参数时,利用${<变量名称>}或者%%<变量名称>%%的形式调用,如图18中所示:
3.2 以报告形式呈现主机拓扑
对于已经存入数据库的Open Stack环境信息,我们可以用图形工具或者编程的方式方便进行展示。图19所示是在web页面呈现拓扑信息,图中不同的颜色是基于主机资源使用情况呈现的,红色代表资源利用率很低,黄色代表资源利用率较低。
四、总结
通过Kettle可以获得所有能够通过Open Stack提供的API的信息,下表列出了一个典型的环境所提供的所有服务类型。前面的示例只是调用了Compute服务的OS-hosts信息,还可以通过调用Ceilmeter来获得计算资源的性能信息。
参考资料
Kettle随机文档
<Kettle安装目录>\docs\English
Pentaho社区
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优化项目。