壹佰网|ERP100 - 企业信息化知识门户

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 319|回复: 0

使用 Cognos 分析 nmon 采集的 AIX 性能数据

[复制链接]
发表于 2012/3/15 15:40:39 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。如果您注册时有任何问题请联系客服QQ: 83569622  。

您需要 登录 才可以下载或查看,没有帐号?注册

x
简介: 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 个半小时数据的文件。

该行命令将在当前目录中创建输出文件,其名称为:

<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" )     
      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

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|Archiver|小黑屋|手机版|壹佰网 ERP100 ( 京ICP备19053597号-2 )

Copyright © 2005-2012 北京海之大网络技术有限责任公司 服务器托管由互联互通
手机:13911575376
网站技术点击发送消息给对方83569622   广告&合作 点击发送消息给对方27675401   点击发送消息给对方634043306   咨询及人才点击发送消息给对方138011526

GMT+8, 2025/11/30 15:02 , Processed in 0.010347 second(s), 14 queries , File On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表