简介: nmon 是监控 AIX 和 Linux 性能的免费工具。通过它可以捕获操作系统大量有价值的性能统计信息。而 IBM Cognos 具有非常丰富而灵活的报表展现功能。在本文中,将两者相结合,通过遵循必要的步骤,使得 Cognos 用户方便快捷地创建关于 AIX 性能数据的报告和图表。首先通过 nmon 采集 AIX 的性能数据,然后通过 SHELL 脚本将 nmon 的数据捕获文件转换为 Cognos 识别的格式文件,最后,通过 Cognos 生成 AIX 性能报表。本文方法简便易行,从中既体现了 nmon 数据采集的优势,又充分展现了 Cognos 在报表生成和分析方面的强大功能。
nmon 工具可以为 AIX 和 Linux 性能专家提供监视和分析性能数据的功能。它所监控的操作系统资源比 AIX 和 Linux 操作系统自身提供的一些命令要全面。用五、六个工具做到的事情,通过这一个免费的工具就可以全部做到。所以,很多系统管理员喜欢 nmon,尽管其不是 IBM“正式”支持的工具。
IBM Cognos 提供大量的报告和分析功能,并支持面向服务的体系结构(SOA)。尽管 nmon analyser 作为生成 AIX 性能报告的免费工具,可从 nmon 的输出中生成大量的图形化报告。但是,与 IBM Cognos 相比,其生成的图表报告比较简单,并且由于电子表格的限制建议最多收集 300 个快照。而通过 IBM Cognos 可以有效地整合海量数据并为性能专家提供一个直观的、动态的和友善的界面。方便用户进行详细的 AIX 性能分析和定位,进而能找到问题的所在。此外,还可以支持大批量的快照。本文是针对 AIX 性能数据分析方面所做的一个有益的尝试。
本文假设您具有使用 AIX 和 IBM Cognos 的经验,并且能够访问 AIX 和 IBM Cognos 以执行管理任务。
本文假设您安装了以下软件:
- 运行在 AIX 上的 nmon 工具;
- 运行在 Windows® 上的 Cognos 8(8.1,8.2,8.3 和 8.4),安装并配置好。
运行带 -f 标志的 nmon 命令。有关详细信息,请参阅 nmon -h。但是作为示例,可以尝试运行下面的 nmon 命令来,告知 nmon 创建文件,并每隔 30 秒的时间进行一次数据收集,共采集 180 次(共计 1.5 个小时):
nmon -f -s 30 -c 180 |
-f 表示生成的数据文件名中有时间;
-s 30 表示每 30 秒采集一次数据;
-c 180 表示采集 180 次,30*180=5400 秒,刚好是 1 个半小时的数据,这样运行一次这个程序就会生成一个采集 1 个半小时数据的文件。
该行命令将在当前目录中创建输出文件,其名称为:
_date_time.nmon |
"hostname" 是这台主机的主机名。
该文件是采用逗号分隔值 (CSV) 的格式。由于 nmon 的输出文件中存在列数不一致的情况,所以这种文件并不能直接导入到 Cognos 中。因此要进行数据转换,生成 Cognos 识别的格式文件。
CPU 使用率和磁盘 I/O 速度、传输及读 / 写比率能在很大程度上反映操作系统的综合性能。因此,可以通过编写一个 shell 脚本来转换 nmon 采集到的相关数据,从而方便使用 Cognos 来迅速抽取不同维度的性能概览数据,进而分析 AIX 性能数据。
第一步,为了方便用户使用,定义帮助信息。实现代码如下:
清单 1. 帮助信息函数
#Output helpful information regarding how to use the function and its parameters # 用法 # -h 帮助信息 # -n 指定抽取数据的类别:CPU 或 DISK # -f 指定 nmon 生成的输出文件 help() { echo "usage: $0 [-h] -n -f " echo " -h FULL help information" echo " -n Specify the name." echo " Valid name are: CPU, DISK" echo " -f Specify the nmon output file." exit 0 } |
第二步,对输入参数进行校验。包括校验输入的参数个数,输入的抽取数据类别,以及输入的 nmon 生成的数据文件名称等等。具体实现代码如下:
清单 2. 输入参数校验
if [ $# -eq 0 ] then help fi while getopts ":hf:n:" optchar ; do case $optchar in f) filename=$OPTARG ;; n) name=$OPTARG ;; h) help ;; *) error "Invalid option" ;; esac done # Ensure that we got a name # 确保输入的抽取数据类别名不为空 if [ "${name}" == "" ] ; then error "No name specified" fi # Ensure that we got a filename # 确保输入的 nmon 输出文件名不为空 if [ "${filename}" == "" ] ; then error "No filename specified" fi # Ensure that the input file existed # 确保输入的 nmon 输出文件存在 if [ ! -f $filename ] ; then error "$filename does not exist!" fi if [ -z $filename ] ; then error "$filename file size is zero" fi if (test ! -r $filename ) ; then error "Cannot read file $filename" fi # Validate the name as one of the names allowable # 校验输入的抽取数据类别名 case "$name" in "CPU" ) utputname=${filename}_${name}."csv" echo $outputname echo "CPU,seq,Edate,Etime,User%,Sys%,Wait%,Idle%" > ${outputname} ;; "DISK" ) utputname=${filename}_${name}."csv" echo $outputname > ${outputname} ;; "" ) error "No name provided" ;; *) error "Invalid name provided" ;; esac |
第三步,以 nmon 性能工具生成的文件作为输入,然后从中抽取 CPU 使用率和磁盘 I/O 速度、传输及读 / 写比率等性能数据。实现代码如下:
清单 3. 抽取性能数据
i=0 j=0 t1="" line="" while read line; do # get seqno, Edate, Etime from file head # 从文件头中获取序号、日期、时间 if [[ $line == ZZZZ* ]] ; then seq1=`echo $line|awk -F',' '{print $2}'` Edate=`echo $line|awk -F',' '{print $4}'` Etime=`echo $line|awk -F',' '{print $3}'` let j=$j+1 let i=$i+1 continue fi if [ $j -eq 0 ] ; then let i=$i+1 # Special process of meta. data on the DISKXFER # 对 DISKXFER 元数据进行特殊处理 if [ $name == "DISK" ] ; then if [[ $line == DISKXFER* ]] ; then thers=`echo $line|cut -d, -f 3-11` echo "DISK,seq,Edate,Etime",$others > ${outputname} fi fi continue fi # processing CPU data # 处理 CPU 数据 if [ $name == "CPU" ] ; then if [[ $line == $name* ]] ; then t1=`echo $line|awk -F',' '{print $1}'` seq2=`echo $line|awk -F',' '{print $2}'` thers=`echo $line|cut -d, -f 3-6` if [[ $seq1 == $seq2 ]] ; then echo $t1,$seq1,$Edate,$Etime,$others >> ${outputname} fi let j=$j+1 let i=$i+1 continue fi fi # processing DISK data # 处理 DISK 数据 if [ $name == "DISK" ] ; then if [[ $line == DISK* ]] ; then t1=`echo $line|awk -F',' '{print $1}'` seq2=`echo $line|awk -F',' '{print $2}'` thers=`echo $line|cut -d, -f 3-11` if [[ $seq1 == $seq2 ]] ; then echo $t1,$seq1,$Edate,$Etime,$others >> ${outputname} fi let j=$j+1 let i=$i+1 continue fi fi let i=$i+1 done < ${filename} echo $i echo $j |
最后,数据转换脚本在本文中命名为 nmonext.ksh。
本文中数据转换脚本使用的 AIX 操作系统的 Level 是 6.1.3.0,使用的 shell 的名称是 Korn Shell。
数据转换脚本的使用分以下三步:
首先,把数据转换脚本 nmonext.ksh 用 ftp 上传到 AIX 机器的 nmon 工具生成输出文件的目录。例如:/home/root/nmon/
然后,执行授权命令:#chmod +x nmonext.ksh
最后,分别运行带不同抽取数据类别(如:CPU 或 DISK)的数据转换脚本 nmonext.ksh。
有关详细信息,请参阅 nmonext.ksh -h。作为示例,可以尝试运行下面的命令来从主机 p5m01 上的文件 p5m01_100310_2359.nmon 中抽取 CPU 使用率:
nmonext.ksh -n CPU -f p5m01_100310_2359.nmon |
该行命令将在当前目录中创建输出文件,其名称为:
p5m01_100310_2359.nmon_CPU.csv |
该文件是采用逗号分隔值 (CSV) 的格式,并且能被 Cognos 识别。
然后,尝试运行下面的命令来从主机 p5m01 上的文件 p5m01_100310_2359.nmon 中抽取磁盘 I/O 速度、传输及读 / 写比率:
nmonext.ksh -n DISK -f p5m01_100310_2359.nmon |
该行命令将在当前目录中创建输出文件,其名称为:
p5m01_100310_2359.nmon_DISK .csv |
实际命令执行及输出如下所示:
p5m01> nmonext.ksh -n CPU -f p5m01_100310_2359.nmon p5m01_100310_2359.nmon_CPU.csv 7943 2520 p5m01> nmonext.ksh -n DISK -f p5m01_100310_2359.nmon p5m01_100310_2359.nmon_DISK.csv 7943 1080 p5m01> |
完成上述步骤以后,把数据转换脚本生成的两个 .csv 后缀的数据文件用 ftp 方式上传到装有 Cognos 的 Windows 机器上。
Cube 的设计生成涉及多种文件,为了 cube 开发的规范和逻辑清晰,目录规范设置必不可少。本文中目录设置如下。
+nmon
+csv -- 存放源数据文件
+log -- 存放日志文件
+mdc -- 存放 cube 文件
+mdl -- 存放模型文件
+ppx -- 存放报表文件
+tmp -- 存放临时文件
具体设置方法是,在 Windows 机器上依次点击“开始 - 〉所有程序 - 〉 cognos8- 〉 tools- 〉 PowerPlay Transformer”从而,打开 Cognos PowerPlay Transformer。然后,依次点击
“file- 〉 preferences- 〉 directories”,进入到目录设置:
Models: C:\nmon\mdl
Datasource: C:\nmon\csv
Powercubes: C:\nmon\mdc
Data temporary files(dir1;dir2): C:\nmon\tmp
Models temporary files: C:\nmon\tmp
Log files: C:\nmon\log
新建模型:
file- 〉 new- 〉 model name: nmon_CPU.mdl
下一步 - 〉 Data source name: 默认 Data source type:delimited-field text with column titles
下一步 - 〉 file name: C:\nmon\csv\ p5m01_100310_2359.nmon_CPU.csv
下一步 - 〉去掉 autodesign
完成 - 〉设计向导退出,出现设计界面。
设计模型:
在设计界面 Datasource 框,seq 和 Edate 字段上右键点击‘删除 column ’,将这两个不用的字段删除。
将 Datasource 框中 CPU 字段拖拽到 demension map 框上部横条处释放,就填加了 CPU 维度。同理将 Etime 字段拖拽到 demension map 框上部横条处释放,填加 Etime 维度。
将 Datasource 框中 User 字段拖拽到 measures 框释放,就填加了 User 指标。同理将字段 Sys、Wait、Idle 拖拽到 measures 框释放,就填加了 Sys、Wait、Idle 指标。如图 1 所示:
检查模型:
Tools- 〉 check model,检查模型。如果有问题按提示解决模型问题,如果没有问题,会显示“Check model is finished. No problems were found.”。
建立 cube:
Run- 〉 create Powercubes,会生成 cube。
浏览 cube:
Tools- 〉 powerplay。如图 2 所示:
显示柱状图的方法:
Explore- 〉 swap rows and columns 将行列交换。
将指标拖拽到行区域,然后删除 idle 指标。
Explore- 〉 change to reportor 将工作模式从探查模式转换到报表模式。
删除报表上汇总信息:将鼠标放在报表区 cpu 那一列,按‘ del ’键删除 cpu 汇总信息。Explore- 〉 change display- 〉选择累积柱状图。
通过上述操作以后,可以显示柱状图。如图 3 所示:
此报表可保存。File- 〉 save- 〉 nmon_CPU.ppx。以后可以打开这个报表查看。
新建模型:
file- 〉 new- 〉 model name: nmon_DISK.mdl
下一步 - 〉 Data source name: 默认 Data source type:delimited-field text with column titles
下一步 - 〉 file name: C:\nmon\csv\ p5m01_100310_2359.nmon_DISK.csv
下一步 - 〉去掉 autodesign
完成 - 〉设计向导退出,出现设计界面。
设计模型:
在设计界面 Datasource 框,seq 和 Edate 字段上右键点击‘删除 column ’,将这两个不用的字段删除。
将 Datasource 框中 DISK 字段拖拽到 demension map 框上部横条处释放,就填加了 DISK 维度。同理将 Etime 字段拖拽到 demension map 框上部横条处释放,填加 Etime 维度。
将 Datasource 框中 hdisk0 字段拖拽到 measures 框释放,就填加了 hdisk0 指标。同理将字段 hdisk0、hdisk1、hdisk2 拖拽到 measures 框释放,就填加了 hdisk0、hdisk1、hdisk2 指标。如图 4 所示:
检查模型:
Tools- 〉 check model, 检查模型。如果有问题按提示解决模型问题,如果没有问题,会显示‘ Check model is finished. No problems were found. ’。
建立 cube:
Run- 〉 create Powercubes,会生成 cube。
浏览 cube:
Tools- 〉 powerplay。如图 5 所示:
显示折线图的方法:
Explore- 〉 change to reportor 将工作模式从探查模式转换到报表模式。
删除报表上汇总信息:将鼠标放在报表区 DISK 那一行,按‘ del ’键删除 DISK 汇总信息。将鼠标放在报表区 etime 那一列,按‘ del ’键删除 etime 汇总信息。
Explore- 〉 change display- 〉选择多折线。
通过上述操作以后,可以显示折线图图。如图 6 所示:
此报表可保存。File- 〉 save- 〉 nmon_DISK.ppx。以后可以打开这个报表查看。
Cognos 提供了直观和强大的展现和操纵数据的前端,通过它可以很好地对 nmon 采集的 AIX 性能数据进行分析。
原文链接:http://www.ibm.com/developerworks/cn/aix/library/1008_lisz_cognosaix/index.html
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/15082138/viewspace-672106/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/15082138/viewspace-672106/