针对主机CPU idle性能情况需求脚本编写

【环境介绍】

  系统环境:Linux + osw + python 2.7.10

  

【背景描述】

需求:当系统服务器出现性能告警的时候,需要定位具体的时间点来进行有针对性的去查询产生的问题。OSW提供了很好的数据采取,同时也有图形显示看出性能问题的时间点,但是反映发现OSW只能看到CPU的idle情况图形显示。那么要求能否查询CPU的使用情况,而不是idel情况信息,同时需要图形显示出来。

 

【监控优化过程及思路】

对于上面描述的问题:

1,  主机信息数据采取。                         ----直接使用OSW采集的数据(osw配置可参考Oracle官网)

2,  针对数据来生成图形显示。              ----使用Python来进行图形显示处理

 

【测试结果及脚本】

通过测试库测试脚本。结果如下:

1,  数据信息:采用现有的OSW数据信息,截图如下:

 

2,  主机CPU使用率用Python最终结果:截图如下:

 

 

【通用日志处理】

主要实现功能的脚本如下:

1,  使用shell进行数据处理:

cat >linux_cpu.sh

######################################################################

# linux_cpu.sh

# This script is cpu check

# Author CZT

######################################################################

echo "eg :/home/oracle/archive/oswtop"

read -p "Enter the oswtop accuracy path:" v_path

while [ ! $v_path ]

do

read -p "Enter the oswtop accuracy path:" v_path

done

 

if [ ! -d $v_path ] && [ ! -x $v_path ];

then

echo -e "Note: The oswtop path does not exist."

else

echo -e "Get data,please wait......\c"

cat  $v_path/* |grep -i 'zzz'|awk '{for(i=3+1;i<=NF;i++)printf $i "  ";printf",\n"}' > ./DATE_TIME.txt》》》抽取时间数据

echo "......"

cat  $v_path/* |grep -i 'idle'|awk '{print int(100-$3)}'|sed 's/$/,/' > ./CPU.txt》》》抽取CPU数据

echo  "Get data successfully,Now run the python......"

fi

python linux_cpu.py》》》调用Linux_cpu.py实现表格生成

echo "Run the python successfully,done"

2,  Python实现连接多个数据库查询数据库状态信息:

cat > linux_cpu.py

######################################################################

# linux_cpu.py

# This script is system cpu check

# Author CZT

######################################################################

# -*- coding:UTF-8 -*-

import xlsxwriter

 

workbook = xlsxwriter.Workbook('linux_cpu.xlsx')》》》定义Excel文件信息

worksheet = workbook.add_worksheet()

bold = workbook.add_format({'bold': 1})

 

# Add the worksheet data that the charts will refer to.

patch_file_name1="DATE_TIME.txt"》》》定义时间信息数组X

inFile1= open(patch_file_name1,'r')

x = [] 

for line1 in open(patch_file_name1):

        trainingSet = line1.split(',')

        x.append(trainingSet[0])

 

patch_file_name2="CPU.txt"》》》定义CPU信息数组Y

inFile2= open(patch_file_name2,'r')

y = [] 

for line2 in open(patch_file_name2):

        trainingSet = line2.split(',')

        y.append(float(trainingSet[0]))

 

data = [

    x,

    y,

]》》》定义时间和CPU二维数组

 

headings = ['TIME', 'CPU(%)']》》》设置Excel中sheet中第一行信息

worksheet.write_row('A1', headings, bold)

worksheet.write_column('A2', data[0])》》》设置Excel中A2列插入二维数组data X

worksheet.write_column('B2', data[1])》》》设置Excel中A2列插入二维数组data Y

 

# Create a new chart object. In this case an embedded chart.

chart1 = workbook.add_chart({'type': 'line'})

 

# Configure the first series.

row=len(x)》》》设置二维数组data X的长度

chart1.add_series({

    'name': ['Sheet1', 0, 1],

    'categories': ['Sheet1', 1, 0, row, 0],

    'values': ['Sheet1', 1, 1, row, 1],

})》》》指定Excel中sheet生成表格的范围

 

# Add a chart title and some axis labels.》》》定义表格的注释信息

chart1.set_title ({'name': 'Results of cpu analysis'})

chart1.set_x_axis({'name': 'Time list'})

chart1.set_y_axis({'name': 'Usage pct (%)'})

 

# Set an Excel chart style. Colors with white outline and shadow.

chart1.set_style(10)

 

# Insert the chart into the worksheet (with an offset).

worksheet.insert_chart('D2', chart1, {'x_offset': 25, 'y_offset': 10})

 

workbook.close()

3,  用法:按照TXT文件创建两件文件linux_cpu.py/linux_cpu.sh后,直接运行sh linux_cpu.sh按照提示输入准确的oswtop目录即可。然后查看linux_cpu.xlsx Excel文件信息。

 

 

【问题思考】

1,  主机有一定的限制,例如HP,AIX。得有TOP命令生成的OSW数据才能使用该脚本;

2,  Python使用的限制,对于生产EXCEL表格,需要手动安装xlsxwriter插件才能使用。

 

【总结】:

1,  对数据库出现问题的时候主机性能情况肯定随之波动,使用该脚本更加细化的找到发生的时间点,对于问题定位和解决很有帮助和说服力;

本次脚本涉及shell和Python脚本,选择正确的语言和方式结合达到效果还是比较可观。

posted @ 2018-05-27 16:07  zetan·chen  阅读(685)  评论(0编辑  收藏  举报