Step By Step使用Python分析AIX SNAP(4)——获取需要的信息

上一节我们已经知道了如何利用Python打开SNAP文件,以及如何把信息写入到Excel文件中。

但是SNAP中的信息很多,很多时候我们只是需要其中的一些信息,而不是把整个文件的内容都输出出来。

比如,我只是想知道这个OS的主机名和CPU内存资源,或者机器的型号序列号。

比如

SNAP里面/general/lparstat.out文件,包含如下信息

Node Name                                  : Node1
Partition Name                             : Node1
Partition Number                           : 6
Type                                       : Dedicated-SMT
Mode                                       : Capped
Entitled Capacity                          : 5.00
Partition Group-ID                         : 32774
Shared Pool ID                             : -
Online Virtual CPUs                        : 5
Maximum Virtual CPUs                       : 10
Minimum Virtual CPUs                       : 1
Online Memory                              : 47872 MB
Maximum Memory                             : 73728 MB
Minimum Memory                             : 2048 MB
Variable Capacity Weight                   : -
Minimum Capacity                           : 1.00
Maximum Capacity                           : 10.00
Capacity Increment                         : 1.00
Maximum Physical CPUs in system            : 16
Active Physical CPUs in system             : 16
Active CPUs in Pool                        : -
Shared Physical CPUs in system             : 0
Maximum Capacity of Pool                   : 0
Entitled Capacity of Pool                  : 0
Unallocated Capacity                       : -
Physical CPU Percentage                    : 100.00%
Unallocated Weight                         : -
Memory Mode                                : Dedicated
Total I/O Memory Entitlement               : -
Variable Memory Capacity Weight            : -
Memory Pool ID                             : -
Physical Memory in the Pool                : -
Hypervisor Page Size                       : -
Unallocated Variable Memory Capacity Weight: -
Unallocated I/O Memory entitlement         : -
Memory Group ID of LPAR                    : -
Desired Virtual CPUs                       : 5
Desired Memory                             : 47872 MB
Desired Variable Capacity Weight           : -
Desired Capacity                           : 5.00
Target Memory Expansion Factor             : -
Target Memory Expansion Size               : -
Power Saving Mode                          : Disabled

假如我们只需要输出Node Name 、Online Virtual CPUs 、Online Memory这三项内容,那么可以使用如下Python程序,修改自exmaple1

#! /usr/bin/env python
#coding=utf-8

import tarfile
snapfile = tarfile.open("snap.pax")
#打开snap.pax文件

lparinfo=snapfile.extractfile("./general/lparstat.out").readlines()
#读取snap.pax包中的/general/lparstat.out文件
#注意使用的是readlines(),表示按行读取,读取的结果是数组,即lparinfo[0]是第一行,lparinfo[1]是第二行。。。

outputfile=open("lparinfo.txt",'w')
#将输出保存在lparinfo.txt文件

for line in lparinfo:
    if line.find("Node Name")!=-1 or line.find("Online Virtual CPUs")!=-1 or line.find("Online Memory")!=-1:
        outputfile.write(line)
#这里是一个循环,循环取数组lparinfo中的每一个值给变量line,即第一次循环line=lparinfo[0],第二次循环line=lparinfo[1]
#line.find()表示在变量line字符串内查找是否有对应的内容,比如line.find("Node Name")就是查找line内是否存在"Node Name"
#返回的值是查找内容在line内的位置号,找不到就返回-1,line.find("Node Name")!=-1即表示line中有"Node Name"
#当查找到"Node Name"、"Online Virtual CPUs"、"Online Memory"任意一个时,输出该行内容到outputfile

outputfile.close()

将以上内容保存为example3.py,同目录下有一个snap.pax的文件,双击运行example3.py,就会产生一个lparinfo.txt的文件

内容应该是

Node Name                                  : Node1
Online Virtual CPUs                        : 5
Online Memory                              : 47872 MB

下一步,我们结合起来,不再把内容输出到文本文件,而是输出到Excel文件

#! /usr/bin/env python
#coding=utf-8

import tarfile
import xlwt

excelfile = xlwt.Workbook()
table = excelfile.add_sheet(u"测试表")
#创建一个Excel表对象,并创建一个名为“测试表”的sheet

snapfile = tarfile.open("snap.pax")
#打开snap.pax文件

lparinfo=snapfile.extractfile("./general/lparstat.out").readlines()
#读取snap.pax包中的/general/lparstat.out文件

i=0
#利用变量i来作为输出表格的行数

for line in lparinfo:
if line.find("Node Name")!=-1 or line.find("Online Virtual CPUs")!=-1 or line.find("Online Memory")!=-1:
outputline=line.split(":")
#以":"为关键字去分隔line的内容,分隔后的内容为数组outputline,outputline[0]表示分隔的第一部分,以此类推
table.write(i,0,outputline[0].strip())
table.write(i,1,outputline[1].strip())
#将line内容的第一部分outputline[0]写入第i行的第0格,第二部分outputline[1]写入第1格,strip()用于去除多余空格
i=i+1
#行号加1

excelfile.save("test.xls")
#将内容保存在“test.xls"文件

输出的Excel文件test.xls,内容应该是

Node Name Node1
Online Virtual CPUs 5
Online Memory 47872 MB

下次我们研究一下更复杂的数据抓取

发表在 计算机与 Internet | 标签为 , , | 留下评论

Step By Step使用Python分析AIX SNAP(3)——打开SNAP与写入Excel

当初为什么选择Python来做这件事,主要是因为Python有以下几个好处:

1.语法比较简单,容易快速上手

2.功能足够强大,有各种现成的模块,能快速实现各种功能

之前我们说过,要用Python实现数据的抓取和输出功能,抓取需要能读取SNAP文件,输出需要能把信息写到Excel表格中。为了实现这两部分功能,我们不需要写一堆代码,因为已经有现成的模块,我们只需要下载回来简单安装一下就好。

(1)读取SNAP

上一次我们提到过,SNAP文件其实是打包了两层,首先是以pax格式将所有文件打包成一个文件,然后再以Z模式压缩了一遍。所以我们直接查看的时候,需要解包两次才能看到那些文件。

对于Z模式的压缩,似乎由于专利限制之类的问题,我目前没有找到现成的Python模块可以去解压缩,如果有哪位知道,欢迎告诉我。

而对于pax的打包,则是跟tar格式类似,可以使用Python自带的tarfile模块去打开。

所以我们可以先利用解压缩软件,解开压缩,让snap.pax.Z解压为snap.pax,然后就可以利用Python处理了。

先给出一个例子example1

#! /usr/bin/env python
#coding=utf-8
#以上两句用于声明python的环境和使用utf-8编码

import tarfile #导入tarfile模块,用于打开pax包文件
snapfile = tarfile.open("snap.pax")

#打开pax文件,其中snapfile为包文件对象,“snap.pax”是pax包文件的文件名
adapter=snapfile.extractfile("./general/lsdev.adapter").read()

#解包并读取包内的“./general/lsdev.adapter”文件,内容保存在名为adapter的对象
outputfile=open("lsdev-adapter.txt",'w')

#选择输出文件,“lsdev-adapter.txt”是输出的文件名,‘w’表示写模式,文件对象名为outputfile
outputfile.write(adapter)

#将adapter对应的内容写入outputfile
outputfile.close()

#使用完,关闭outputfile

如果你已经安装了Python,那么把上面的内容复制到记事本,然后保存为“example1.py”(文件名无所谓,以py结尾即可),同目录下有一个snap.pax的文件。双击运行一下“example1.py”,你就会看到同目录下增加了一个lsdev-adapter.txt的文件,打开里面的内容,就是SNAP包中lsdev.adapter的内容。

以上去掉注释(#号开头的部分),真正的语句只有6句。是不是非常简单?

这可以当做一个小模板,比如你想输出snap.pax里的/general/lsdev.disk的内容,那么把前面程序里

adapter=snapfile.extractfile(“./general/lsdev.adapter”).read()

引号内的.general/lsdev.adapter 替换为./general/lsdev.disk即可,非常简单。

 

(2)输出到Excel文件

Python自带的模块没有读写Excel的功能,这就需要额外安装。

能实现该功能的模块有很多,我使用的是python-excel

它其实是由3个模块组成,xlrd,xlwt,xlutils

xlrd  用于读取Excel文件

xlwt 用于把数据写入Excel文件

xlutils 实现一些处理Excel文件的功能

官网 http://www.python-excel.org/ 不过因为挂在Google的服务上,所以结果你懂的……

好在不影响我们下载使用,以下地方都可以下载到

https://github.com/python-excel     (包括3个模块和使用说明)

https://pypi.python.org/pypi/xlrd   xlrd模块

https://pypi.python.org/pypi/xlwt  xlwt模块

https://pypi.python.org/pypi/xlutils/  xlutils模块

顺便说一句 https://pypi.python.org/pypi  这个网站相当于Python模块的大集合,绝大多数Python的模块都会在这里,Python是非常鼓励大家共享代码共享功能的,不必重复去造轮子。

由于我们这次是要把信息输出到Excel文件,因此需要用到xlwt模块。

安装这个模块有两种方式,一种方式是在上面的网站下载xlwt,会得到一个压缩包,解压缩之后,在解包的目录下面,会看到一个setup.py的文件,然后在该目录下执行命令(需要切换到命令提示符操作)

python setup.py install

等待安装完成即可,基本上其他的Python模块也都可以使用这样的安装方法

第二种方式更简单,直接在Python的安装目录下,执行命令(需要切换到命令提示符操作)

pip install xlwt

就可以了。不过这种方式容易出错,建议大家用第一种方式保险一些。

安装完成后,就可以使用这个模块向Excel文件写内容了。

以下是一个例子

#! /usr/bin/env python
#coding=utf-8

import xlwt     #导入xlwt模块

excelfile = xlwt.Workbook()
#创建一个工作薄,可以理解为一个Excel文件,取名为excelfile

table = excelfile.add_sheet(u"测试表")
#创建一个表,对应就是Excel文件中的一个Sheet,名为table

table.write(0,0,u"测试")
#向table表中第0行第0列的单元格中写入“测试”两个字,因为使用了中文,所以引号前面加u,表示unicode编码的字符串

table.write(0,1,u"成功")
#向table表中第0行第1列的单元格中写入“成功”两个字

excelfile.save("test.xls")
#将内容保存为文件名是test.xls的Excel文件

将以上内容保存为example2.py,双击运行后,就会在同目录下生成一个test.xls的Excel文件,打开后内容就是“测试”,“成功”。

可以看到,同样是只用了6条语句,就实现了最简单的把内容写入Excel文件。

下一次我们就讲讲如何把这两者结合,实现我们的SNAP分析功能

发表在 计算机与 Internet | 标签为 , , | 留下评论

Step By Step使用Python分析AIX SNAP(2)——SNAP结构

SNAP大概是AIX系统最常用的信息收集工具。

生成的snap.pax.Z默认保存在/tmp/ibmsupt/下面。

使用snap命令收集信息,最常用的是snap -gc,收集基本的信息,还有以下一些参数也很常用。

比如

-a    收集全部信息(不包括PowerHA信息),这个参数基本上是最全的信息收集,当然问题是收集的文件会比较大,特别是包含dump的时候,收集时间也比较长,仅在需要非常完整信息的时候才使用

-D  收集DUMP信息

-e  收集PowerHA信息

-f  收集文件系统信息

-k 收集内核信息

-L 收集LVM信息

-n 收集NFS信息

-t 收集网络相关信息

更多的参数可以查看snap命令的解释

http://www-01.ibm.com/support/knowledgecenter/api/content/nl/en-us/ssw_aix_71/com.ibm.aix.cmds5/snap.htm

以上参数可以组合,比如想收集基本信息,文件系统信息,LVM信息,网络信息,那么可以使用snap –gfLtc的命令

 

收集到的snap.pax.Z其实是个压缩包,你会发现,大部分压缩软件可以打开或者解压缩。

解压缩之后,你会得到一个snap.pax文件(这是坑爹吗……)。别急,这还是一个打包了的文件,虽然.pax这样的文件一般压缩软件不会关联,但是你还是可以强行用压缩软件去打开或者解压缩,再解包一次之后,你就会看到类似下面的文件结构。

不同的参数生成的snap文件,解压缩后里面的文件和目录可能不同,比如如果是snap -ac生成的,可能是这样

image

 

是的,就会多出这么多东西。

简单介绍一些常用的目录

\dump      存放生成的dump文件和一些dump相关的信息

\filesys     存放文件系统信息

\general   最常用的信息,整个系统软硬件相关的大部分信息都会保存在这个目录下

\hacmp   PowerHA相关的信息,一般会保存HA的两个或多个节点的信息

\kernel   内核相关的一些信息和参数

\lvm        LVM信息

\nfs          NFS网络文件系统的信息

\tcpip     网络相关的信息

还有一些不那么常用的目录,大家可以找个SNAP文件自己解开以后看看。

以上目录,你收集的SNAP文件未必都有,主要取决于收集时使用的命令参数。

目录下面的文件,绝大部分都是文本文件,可以直接用记事本之类的文本编辑器打开查看。而内容基本上都是各种系统命令的输出结果。

比如\general下有一个lsdev.adapter文件,保存的就是lsdev –Cc adapter命令的输出。

而\filesys下的filesys.snap则是保存了df –k ,mount,lsfs -l,lsvg -o等很多文件系统相关命令的输出结果。

 

篇幅关系这里不再展开介绍所有的文件,大家可以自己试试看。

而我们后面要做的,就是利用Python,把这些snap里的信息抓取出来,保存在一个Excel表格中,方便查看和展示。

未完待续。。。。

发表在 计算机与 Internet | 标签为 , , | 留下评论

生活的快乐

元旦闲着没事练手的小玩意,经过了一周,已经有了1000多的订阅数。

想起了小学的时候,作为学校的早上检查文明纪律的值日生,却被分配去了操场。上课前的空荡荡操场有什么可检查的呢。在闲逛了几个早晨以后,我带上了大垃圾袋,是的,我开始每天早上在操场上捡垃圾。当时也不清楚自己为什么会有这样的想法,可能只是觉得太闲了,而这么做,应该是对的。就这样,我捡了一个学期的垃圾,直到我被调离操场。

中学时候的事情,之前已经写过了,也是做了不少我觉得对别人觉得傻的事情。

大学的时候,就更不用说了,除了修电脑之外,就是做些奇奇怪怪的网站。前一段时间回忆起来,才想起来那时候做过的东西还真不少,要搁现在的学生,可能就是想着如何推广如何拉风投了吧。而当时,也就是觉得花些时间做这个是对的。

毕业工作以后,仍然是这样觉得。

这两天看完了马伯庸的《古董局中局3》,小说本身的故事很精彩,但是让我印象最深的,却不是情节,而是一句话“人在世上,总要坚持一些很蠢但是觉得对的事情。”

是啊,很多事情,有多蠢,多傻,不重要,付出了得不得回报,不重要,重要的是我觉得对,我觉得做了能带来快乐,就够了。

在操场上捡垃圾,看到满满的一袋垃圾扔进垃圾箱,我会觉得快乐。

下课后把教室瓷砖上的污迹都拖掉,我会觉得快乐。

把别人电脑修好,我会觉得快乐。

看着自己敲的代码变成一个网站,我会觉得快乐。

能找到故障的原因,帮客户解决问题,我会觉得快乐。

学习了一个Excel的技巧,我会觉得快乐。

看着自己的脚本能够节约不少工作量,我会觉得快乐。

拼好了一个模型,我会觉得快乐。

买到了一本好书,看完了一部好电影,我会觉得快乐。

带父母出去吃饭,发现有团购价能节省几十块钱,我会觉得快乐。

 

没有那么多的目的,没有那么多的欲望,生活中的乐趣随处都是。做你觉得对的事情,就能感受到快乐。至于它是不是蠢事,真不那么重要。

发表在 心情 | 3条评论

Step By Step使用Python分析AIX SNAP(1)——环境准备

之前做项目的时候,学了一点Python。虽然只是一点皮毛,离程序员还差的很远,却极大的提高了日常工作的效率。

因此也想在这里跟大家分享一下,希望大家能通过掌握一些新知识,提高工作效率,把更多的时间用于生活嘛: )

 

我 使用Python主要是用于一些数据和日志的整理。比如我们可能会收集AIX的SNAP文件,或者DS4000/5000的All support data,或者SAN交换机的supportshow等等。当只有一个文件的时候,一般问题不大,我们可以直接打开查看数据文件,找到需要的信息。但是当 我们收集到很多数据文件或者我们需要获取的信息比较多的时候,手工的方式就不那么方便了。

 

这里我想以最常用的AIX SNAP文件为例,一步步分享一些经验,最终的目的是,能够通过Python的脚本,快速提取多个SNAP文件中的信息,并输出成方便查看的表格。

大家通过这样的例子,不仅仅是用来分析AIX SNAP文件,同样的方法可以用于各种文本的处理。

 

一、环境准备

Python的入门其实不难,只需要在电脑上安装Python本身,然后随便用个记事本就可以开始写脚本了。

 

https://www.python.org/

这里可以下载安装Python,目前有2.X和3.X两个系列,这两个系列在语法等方面有些不同,模块的兼容性也会有影响,我使用的是2.X系列的版本,此次讲解也会以2.X的版本为例。

 

安装后建议在系统PATH中加入Python的安装目录,这样以后使用起来比较方便。

 

虽然理论上安装完后就可以使用,而且Python本身也自带了一个IDLE的编辑器,用于写脚本。不过我还是习惯使用ulipad这个编辑器。

https://github.com/limodou/ulipad

 

ulipad这个编辑器本身也是使用Python写的,要使用它,需要满足以下三个条件:

1.安装Python (相信你已经装了)

​2.安装wxpython,这是一个Python的图形化界面模块,ulipad需要它才能运行。可以在http://wxpython.org/ 下载

3.下载ulipad (在前面的网址中,选右下方的“download zip”下载解压即可。

 

当然,你如果嫌麻烦,完全可以不用ulipad,你可以使用任何你习惯的编辑器,甚至Windows自带的记事本就能开始Python的使用。

 

明天我会简单说明一下AIX SNAP文件的结构,毕竟我们的目的是满足日常的工作,而不是真正去做一个Python的程序员。

 

Python官网就有非常完善的文档,基本的语法也可以查看以下几个中文教程

 

Python 2.7入门

http://docs.pythontab.com/python/python2.7/

简明Python教程

http://sebug.net/paper/python/

Python资源大全

http://www.pythontab.com/pytools/

 

网上关于Python的信息非常多,如果你想偷懒,不看也没关系,后面我会通过例子让大家一步步能用上,尽量减少大家的学习成本。

 

由于微信的限制,点击“阅读原文”可以方便的打开以上链接。​ 或者大家可以在电脑上访问我的博客直接查看www.szqp.me

 

 

发表在 计算机与 Internet | 标签为 , , | 留下评论