引言
nmon 工具可以為 AIX 和 Linux 性能專家提供監(jiān)視和分析性能數(shù)據(jù)的功能。它所監(jiān)控的操作系統(tǒng)資源比 AIX 和 Linux 操作系統(tǒng)自身提供的一些命令要全面。用五、六個工具做到的事情,通過這一個免費的工具就可以全部做到。所以,很多系統(tǒng)管理員喜歡 nmon,盡管其不是 IBM“正式”支持的工具。
IBM Cognos 提供大量的報告和分析功能,并支持面向服務的體系結(jié)構(gòu)(SOA)。盡管 nmon analyser 作為生成 AIX 性能報告的免費工具,可從 nmon 的輸出中生成大量的圖形化報告。但是,與 IBM Cognos 相比,其生成的圖表報告比較簡單,并且由于電子表格的限制建議最多收集 300 個快照。而通過 IBM Cognos 可以有效地整合海量數(shù)據(jù)并為性能專家提供一個直觀的、動態(tài)的和友善的界面。方便用戶進行詳細的 AIX 性能分析和定位,進而能找到問題的所在。此外,還可以支持大批量的快照。本文是針對 AIX 性能數(shù)據(jù)分析方面所做的一個有益的嘗試。
先決條件
本文假設您具有使用 AIX 和 IBM Cognos 的經(jīng)驗,并且能夠訪問 AIX 和 IBM Cognos 以執(zhí)行管理任務。
本文假設您安裝了以下軟件:
- 運行在 AIX 上的 nmon 工具;
- 運行在 Windows® 上的 Cognos 8(8.1,8.2,8.3 和 8.4),安裝并配置好。
數(shù)據(jù)采集
運行帶 -f 標志的 nmon 命令。有關(guān)詳細信息,請參閱 nmon -h。但是作為示例,可以嘗試運行下面的 nmon 命令來,告知 nmon 創(chuàng)建文件,并每隔 30 秒的時間進行一次數(shù)據(jù)收集,共采集 180 次(共計 1.5 個小時):
-f 表示生成的數(shù)據(jù)文件名中有時間;
-s 30 表示每 30 秒采集一次數(shù)據(jù);
-c 180 表示采集 180 次,30*180=5400 秒,剛好是 1 個半小時的數(shù)據(jù),這樣運行一次這個程序就會生成一個采集 1 個半小時數(shù)據(jù)的文件。
該行命令將在當前目錄中創(chuàng)建輸出文件,其名稱為:
<hostname>_date_time.nmon |
"hostname" 是這臺主機的主機名。
該文件是采用逗號分隔值 (CSV) 的格式。由于 nmon 的輸出文件中存在列數(shù)不一致的情況,所以這種文件并不能直接導入到 Cognos 中。因此要進行數(shù)據(jù)轉(zhuǎn)換,生成 Cognos 識別的格式文件。
數(shù)據(jù)轉(zhuǎn)換
CPU 使用率和磁盤 I/O 速度、傳輸及讀 / 寫比率能在很大程度上反映操作系統(tǒng)的綜合性能。因此,可以通過編寫一個 shell 腳本來轉(zhuǎn)換 nmon 采集到的相關(guān)數(shù)據(jù),從而方便使用 Cognos 來迅速抽取不同維度的性能概覽數(shù)據(jù),進而分析 AIX 性能數(shù)據(jù)。
數(shù)據(jù)轉(zhuǎn)換腳本的實現(xiàn)
第一步,為了方便用戶使用,定義幫助信息。實現(xiàn)代碼如下:
清單 1. 幫助信息函數(shù)
#Output helpful information regarding how to use the function and its parameters
# 用法
# -h 幫助信息
# -n 指定抽取數(shù)據(jù)的類別: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
}
|
第二步,對輸入?yún)?shù)進行校驗。包括校驗輸入的參數(shù)個數(shù),輸入的抽取數(shù)據(jù)類別,以及輸入的 nmon 生成的數(shù)據(jù)文件名稱等等。具體實現(xiàn)代碼如下:
清單 2. 輸入?yún)?shù)校驗
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
# 確保輸入的抽取數(shù)據(jù)類別名不為空
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
# 校驗輸入的抽取數(shù)據(jù)類別名
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 速度、傳輸及讀 / 寫比率等性能數(shù)據(jù)。實現(xiàn)代碼如下:
清單 3. 抽取性能數(shù)據(jù)
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 元數(shù)據(jù)進行特殊處理
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 數(shù)據(jù)
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 數(shù)據(jù)
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
|
最后,數(shù)據(jù)轉(zhuǎn)換腳本在本文中命名為 nmonext.ksh。
數(shù)據(jù)轉(zhuǎn)換腳本的使用
本文中數(shù)據(jù)轉(zhuǎn)換腳本使用的 AIX 操作系統(tǒng)的 Level 是 6.1.3.0,使用的 shell 的名稱是 Korn Shell。
數(shù)據(jù)轉(zhuǎn)換腳本的使用分以下三步:
首先,把數(shù)據(jù)轉(zhuǎn)換腳本 nmonext.ksh 用 ftp 上傳到 AIX 機器的 nmon 工具生成輸出文件的目錄。例如:/home/root/nmon/
然后,執(zhí)行授權(quán)命令:#chmod +x nmonext.ksh
最后,分別運行帶不同抽取數(shù)據(jù)類別(如:CPU 或 DISK)的數(shù)據(jù)轉(zhuǎn)換腳本 nmonext.ksh。
有關(guān)詳細信息,請參閱 nmonext.ksh -h。作為示例,可以嘗試運行下面的命令來從主機 p5m01 上的文件 p5m01_100310_2359.nmon 中抽取 CPU 使用率:
nmonext.ksh -n CPU -f p5m01_100310_2359.nmon |
該行命令將在當前目錄中創(chuàng)建輸出文件,其名稱為:
p5m01_100310_2359.nmon_CPU.csv |
該文件是采用逗號分隔值 (CSV) 的格式,并且能被 Cognos 識別。
然后,嘗試運行下面的命令來從主機 p5m01 上的文件 p5m01_100310_2359.nmon 中抽取磁盤 I/O 速度、傳輸及讀 / 寫比率:
nmonext.ksh -n DISK -f p5m01_100310_2359.nmon |
該行命令將在當前目錄中創(chuàng)建輸出文件,其名稱為:
p5m01_100310_2359.nmon_DISK .csv |
實際命令執(zhí)行及輸出如下所示:
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>
|
數(shù)據(jù)文件的上傳
完成上述步驟以后,把數(shù)據(jù)轉(zhuǎn)換腳本生成的兩個 .csv 后綴的數(shù)據(jù)文件用 ftp 方式上傳到裝有 Cognos 的 Windows 機器上。
創(chuàng)建 Cube 及生成 AIX 性能報告
Cognos 目錄設置
Cube 的設計生成涉及多種文件,為了 cube 開發(fā)的規(guī)范和邏輯清晰,目錄規(guī)范設置必不可少。本文中目錄設置如下。+nmon
+csv -- 存放源數(shù)據(jù)文件
+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
創(chuàng)建 CPU Cube 及生成相關(guān) 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
完成 - 〉設計向?qū)顺,出現(xiàn)設計界面。
設計模型:
在設計界面 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 將行列交換。
將指標拖拽到行區(qū)域,然后刪除 idle 指標。
Explore- 〉 change to reportor 將工作模式從探查模式轉(zhuǎn)換到報表模式。
刪除報表上匯總信息:將鼠標放在報表區(qū) cpu 那一列,按‘ del ’鍵刪除 cpu 匯總信息。Explore- 〉 change display- 〉選擇累積柱狀圖。
通過上述操作以后,可以顯示柱狀圖。如圖 3 所示:
圖 3 .CPU 分析報告
此報表可保存。File- 〉 save- 〉 nmon_CPU.ppx。以后可以打開這個報表查看。
創(chuàng)建 DISK Cube 及生成相關(guān) 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
完成 - 〉設計向?qū)顺觯霈F(xiàn)設計界面。
設計模型:
在設計界面 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 將工作模式從探查模式轉(zhuǎn)換到報表模式。
刪除報表上匯總信息:將鼠標放在報表區(qū) DISK 那一行,按‘ del ’鍵刪除 DISK 匯總信息。將鼠標放在報表區(qū) etime 那一列,按‘ del ’鍵刪除 etime 匯總信息。
Explore- 〉 change display- 〉選擇多折線。
通過上述操作以后,可以顯示折線圖圖。如圖 6 所示:
圖 6. DISK 分析報告
此報表可保存。File- 〉 save- 〉 nmon_DISK.ppx。以后可以打開這個報表查看。
結(jié)束語
Cognos 提供了直觀和強大的展現(xiàn)和操縱數(shù)據(jù)的前端,通過它可以很好地對 nmon 采集的 AIX 性能數(shù)據(jù)進行分析。
作者簡介
李尚忠,IBM 軟件工程師,國家軟件系統(tǒng)分析師,F(xiàn)在 IBM 中國軟件開發(fā)中心長期從事存儲軟件的相關(guān)工作。具有豐富的存儲技術(shù)經(jīng)驗。
徐賢良,GBICC 軟件工程師,PMP。長期從事對商業(yè)智能相關(guān)工作,有相當豐富的商業(yè)智能工作經(jīng)驗,對數(shù)據(jù)倉庫相關(guān)領(lǐng)域和技術(shù)有獨到的理解。
http://www.ibm.com/developerworks/cn/aix/library/1008_lisz_cognosaix/index.html