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

2023-10-31 11:40

本文主要是介绍使用 Cognos 分析 nmon 采集的 AIX 性能数据,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

李 尚忠, 软件工程师, IBM
李尚忠,IBM 软件工程师,国家软件系统分析师。现在 IBM 中国软件开发中心长期从事存储软件的相关工作。具有丰富的存储技术经验。
徐 贤良, 软件工程师, IBM
徐贤良,GBICC 软件工程师,PMP。长期从事对商业智能相关工作,有相当丰富的商业智能工作经验,对数据仓库相关领域和技术有独到的理解。

简介: 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 及生成 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 设计模型
图 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
图 2. CPU Cube

显示柱状图的方法:

Explore- 〉 swap rows and columns 将行列交换。

将指标拖拽到行区域,然后删除 idle 指标。

Explore- 〉 change to reportor 将工作模式从探查模式转换到报表模式。

删除报表上汇总信息:将鼠标放在报表区 cpu 那一列,按‘ del ’键删除 cpu 汇总信息。Explore- 〉 change display- 〉选择累积柱状图。

通过上述操作以后,可以显示柱状图。如图 3 所示:


图 3 .CPU 分析报告
图 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 设计模型
图 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
图 5. DISK Cube

显示折线图的方法:

Explore- 〉 change to reportor 将工作模式从探查模式转换到报表模式。

删除报表上汇总信息:将鼠标放在报表区 DISK 那一行,按‘ del ’键删除 DISK 汇总信息。将鼠标放在报表区 etime 那一列,按‘ del ’键删除 etime 汇总信息。

Explore- 〉 change display- 〉选择多折线。

通过上述操作以后,可以显示折线图图。如图 6 所示:


图 6. DISK 分析报告
图 6. DISK 分析报告

此报表可保存。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/

这篇关于使用 Cognos 分析 nmon 采集的 AIX 性能数据的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/315112

相关文章

Python使用Pandas对比两列数据取最大值的五种方法

《Python使用Pandas对比两列数据取最大值的五种方法》本文主要介绍使用Pandas对比两列数据取最大值的五种方法,包括使用max方法、apply方法结合lambda函数、函数、clip方法、w... 目录引言一、使用max方法二、使用apply方法结合lambda函数三、使用np.maximum函数

Qt 中集成mqtt协议的使用方法

《Qt中集成mqtt协议的使用方法》文章介绍了如何在工程中引入qmqtt库,并通过声明一个单例类来暴露订阅到的主题数据,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧... 目录一,引入qmqtt 库二,使用一,引入qmqtt 库我是将整个头文件/源文件都添加到了工程中进行编译,这样 跨平台

C++使用栈实现括号匹配的代码详解

《C++使用栈实现括号匹配的代码详解》在编程中,括号匹配是一个常见问题,尤其是在处理数学表达式、编译器解析等任务时,栈是一种非常适合处理此类问题的数据结构,能够精确地管理括号的匹配问题,本文将通过C+... 目录引言问题描述代码讲解代码解析栈的状态表示测试总结引言在编程中,括号匹配是一个常见问题,尤其是在

Java中String字符串使用避坑指南

《Java中String字符串使用避坑指南》Java中的String字符串是我们日常编程中用得最多的类之一,看似简单的String使用,却隐藏着不少“坑”,如果不注意,可能会导致性能问题、意外的错误容... 目录8个避坑点如下:1. 字符串的不可变性:每次修改都创建新对象2. 使用 == 比较字符串,陷阱满

Python使用国内镜像加速pip安装的方法讲解

《Python使用国内镜像加速pip安装的方法讲解》在Python开发中,pip是一个非常重要的工具,用于安装和管理Python的第三方库,然而,在国内使用pip安装依赖时,往往会因为网络问题而导致速... 目录一、pip 工具简介1. 什么是 pip?2. 什么是 -i 参数?二、国内镜像源的选择三、如何

使用C++实现链表元素的反转

《使用C++实现链表元素的反转》反转链表是链表操作中一个经典的问题,也是面试中常见的考题,本文将从思路到实现一步步地讲解如何实现链表的反转,帮助初学者理解这一操作,我们将使用C++代码演示具体实现,同... 目录问题定义思路分析代码实现带头节点的链表代码讲解其他实现方式时间和空间复杂度分析总结问题定义给定

Linux使用nload监控网络流量的方法

《Linux使用nload监控网络流量的方法》Linux中的nload命令是一个用于实时监控网络流量的工具,它提供了传入和传出流量的可视化表示,帮助用户一目了然地了解网络活动,本文给大家介绍了Linu... 目录简介安装示例用法基础用法指定网络接口限制显示特定流量类型指定刷新率设置流量速率的显示单位监控多个

JavaScript中的reduce方法执行过程、使用场景及进阶用法

《JavaScript中的reduce方法执行过程、使用场景及进阶用法》:本文主要介绍JavaScript中的reduce方法执行过程、使用场景及进阶用法的相关资料,reduce是JavaScri... 目录1. 什么是reduce2. reduce语法2.1 语法2.2 参数说明3. reduce执行过程

如何使用Java实现请求deepseek

《如何使用Java实现请求deepseek》这篇文章主要为大家详细介绍了如何使用Java实现请求deepseek功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1.deepseek的api创建2.Java实现请求deepseek2.1 pom文件2.2 json转化文件2.2

python使用fastapi实现多语言国际化的操作指南

《python使用fastapi实现多语言国际化的操作指南》本文介绍了使用Python和FastAPI实现多语言国际化的操作指南,包括多语言架构技术栈、翻译管理、前端本地化、语言切换机制以及常见陷阱和... 目录多语言国际化实现指南项目多语言架构技术栈目录结构翻译工作流1. 翻译数据存储2. 翻译生成脚本