引言
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 个小时):
-f 表示生成的数据文件名中有时间;
-s 30 表示每 30 秒采集一次数据;
-c 180 表示采集 180 次,30*180=5400 秒,刚好是 1 个半小时的数据,这样运行一次这个程序就会生成一个采集 1 个半小时数据的文件。
该行命令将在当前目录中创建输出文件,其名称为:
<hostname>_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 <name> -f <filename>"
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" )
outputname=${filename}_${name}."csv"
echo $outputname
echo "CPU,seq,Edate,Etime,User%,Sys%,Wait%,Idle%" > ${outputname}
;;
"DISK" )
outputname=${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
others=`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}'`
others=`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}'`
others=`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 及生成 AIX 性能报告
Cognos 目录设置
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
创建 CPU Cube 及生成相关 AIX 性能报告
新建模型:
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 所示:
图 1 .CPU Cube 设计模型
检查模型:
Tools- 〉 check model,检查模型。如果有问题按提示解决模型问题,如果没有问题,会显示“Check model is finished. No problems were found.”。
建立 cube:
Run- 〉 create Powercubes,会生成 cube。
浏览 cube:
Tools- 〉 powerplay。如图 2 所示:
图 2. CPU Cube
显示柱状图的方法:
Explore- 〉 swap rows and columns 将行列交换。
将指标拖拽到行区域,然后删除 idle 指标。
Explore- 〉 change to reportor 将工作模式从探查模式转换到报表模式。
删除报表上汇总信息:将鼠标放在报表区 cpu 那一列,按‘ del ’键删除 cpu 汇总信息。Explore- 〉 change display- 〉选择累积柱状图。
通过上述操作以后,可以显示柱状图。如图 3 所示:
图 3 .CPU 分析报告
此报表可保存。File- 〉 save- 〉 nmon_CPU.ppx。以后可以打开这个报表查看。
创建 DISK Cube 及生成相关 AIX 性能报告
新建模型:
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 所示:
图 4. DISK Cube 设计模型
检查模型:
Tools- 〉 check model, 检查模型。如果有问题按提示解决模型问题,如果没有问题,会显示‘ Check model is finished. No problems were found. ’。
建立 cube:
Run- 〉 create Powercubes,会生成 cube。
浏览 cube:
Tools- 〉 powerplay。如图 5 所示:
图 5. DISK Cube
显示折线图的方法:
Explore- 〉 change to reportor 将工作模式从探查模式转换到报表模式。
删除报表上汇总信息:将鼠标放在报表区 DISK 那一行,按‘ del ’键删除 DISK 汇总信息。将鼠标放在报表区 etime 那一列,按‘ del ’键删除 etime 汇总信息。
Explore- 〉 change display- 〉选择多折线。
通过上述操作以后,可以显示折线图图。如图 6 所示:
图 6. DISK 分析报告
此报表可保存。File- 〉 save- 〉 nmon_DISK.ppx。以后可以打开这个报表查看。
结束语
Cognos 提供了直观和强大的展现和操纵数据的前端,通过它可以很好地对 nmon 采集的 AIX 性能数据进行分析。
作者简介
李尚忠,IBM 软件工程师,国家软件系统分析师。现在 IBM 中国软件开发中心长期从事存储软件的相关工作。具有丰富的存储技术经验。
徐贤良,GBICC 软件工程师,PMP。长期从事对商业智能相关工作,有相当丰富的商业智能工作经验,对数据仓库相关领域和技术有独到的理解。
http://www.ibm.com/developerworks/cn/aix/library/1008_lisz_cognosaix/index.html