Python 调用 Micro 宏自动解析 Nmon 文件进行数据归档

关于 nmon

nmon 是一款强大的检测后台服务器运行状态的工具, 在性能测试中我们常常使用 nmon 监控后台服务器运行状态。但是 nmon 生成的监控文件没办法直接阅读, 需要通过其他辅助工具来解析生成的文件。目前最好用的是宏。

关于宏

用过 nmon 的都知道, excel 宏是目前最好用的 nmon analyser工具, 能够将 nmon 结果文件解析成可读性较高的 excel 图表。工具用起来是非常方便, 但是也不是没有缺点, 一旦 nmon 结果文件数量非常大, 那么就需要非常大的人力去操作 excel, 保存解析结果并进行数据归档, 非常麻烦。

为了省事情, 我写了一个脚本。

这个脚本的功能非常简单, 自动调用宏解析 nmon 文件, 并获取解析的结果文件, 提取出常用的数据(例如cpu、内存、磁盘和网络)。

下面来分享下思路, 准备好了吗?黑威够

思路

思路就一句话「将需要手动的部分自动化或者说程序化」, 虽然你可能会说这是一句废话, 但是确实是我思考时所使用的方法。回忆一下, 在操作宏时, 有哪几个地方是需要手动去操作的。

  1. 打开 excel 文件
  2. 点击 sheet 页面上的按钮
  3. 选择需要解析的 nmon 文件
  4. 保存解析结果文件
  5. 分析结果文件, 并对所需数据进行计算与提取

以上 5 个步骤, 就是脚本需要做的事情, 脚本将这些操作实现, 那么自动化也就实现了。

一个一个来, 先说第一个。

1. 打开 excel 文件

python 提供了非常丰富的库让我们对 excel 进行操作, 例如 xlrd、xlwt、xlutils 等。因此打开 excel 文件操作解决。

2. 点击 sheet 页面上的按钮

点击操作不好模仿, 但是通过分析宏代码可以看出(如下图所示), 当点击按钮时, 其实就是调用了宏里面一个叫「main」的子程序, 那么我们只需要在 python 中直接调用这个子程序并传入所需参数即可, 这也是整个宏程序的入口。

button_click

3.选择需要解析的 nmon 文件

excel 让我们选择待解析的 nmon 文件方式是弹出一个的对话框。找到这部分代码:

 FileList = Application.GetOpenFilename("NMON Files(*.csv;*.nmon),*.csv;*.nmon", 1, "Select NMON file(s) to be processed", , True)

GetOpenFilename 方法的最后一个参数为 True, 则会返回一个包含所有选择文件名的数组, 后续宏的一切操作都是基于此数组进行, 因此如果需要隐藏此步骤, 该数组需要自行提供。所以除了 python 代码外, 宏代码我们也需要略作修改。在入口程序 main 中添加一个数组参数, 并将其赋值给 FileList 即可。

4. 保存解析结果文件

和选择待解析的 nmon 文件套路相同, 保存解析的结果文件, 也是弹出一个对话框, 选择文件保存的路径及名称。(当然如果你解析的时候选择了多个文件, 那么就没有这个步骤, 宏会自动把解析结果和 nmon 文件保存在同一目录下, 并自动命名)。同样找到这部分代码:

Call Application.Dialogs(xlDialogSaveAs).Show(Arg1:=Output_Filename, Arg2:=xlWorkbookDefault)

仿照多文件时的操作,将其替换为可以直接保存的方法:

Nmonfile.saveAs(SavePath)

SavePath 是自定义的一个保存路径, 是一个 string 类型的变量, 也需要在 python 调用 main 时,通过参数传递, 因此入口程序 main 又需要增加一个 string 参数。

5.分析结果文件, 并对所需数据进行计算与提取

到这一步就是纯 python 的第三方包操作了, 使用第三方模块打开结果文件, 找到所需提取的数据, 然后读取, 再写入一个新的 excel 中。

当然我已经对操作宏与解析结果文件中常用的一些数据进行了封装提取(例如 cpu、内存、磁盘与网络数据), 只需要直接调用即可, 如果有特殊需求可以通过传入 sheet 名,行,列数获取指定单元格数据。

实例

这是一个使用的范例:

Python 调用 Micro 宏自动解析 Nmon 文件进行数据归档_第1张图片

一些补充

  • python 版本使用的是 3
  • 本模块中用到的第三方 python 模块有
    • win32api
    • win32com
    • pythoncom
    • xlrd
    • xlwt
    • xlutils
  • 如果没安装上述第三方模块会导致运行时找不到对应的模块运行失败
  • 如果对源码感兴趣, 请点击这里
  • 如果有需要修改过的 excel 与封装的 python 包的,可以关注我的微信公众号,回复「nmon」获取。

公众号
Python 调用 Micro 宏自动解析 Nmon 文件进行数据归档_第2张图片

你可能感兴趣的:(python)