平台人生
作者平台人生·2017-01-04 09:36
软件开发工程师·平台人生

使用Python/Pandas分析告警日志数据

字数 2193阅读 7948评论 0赞 2

作者:吕磊
文章来自微信公众号:平台人生


Python

Python是一种面向对象的解释型程序设计语言。作为一种脚本语言,Python在运行性能上相对C/C++等编译型语言有一定不足,但Python语言的学习曲线比较平缓,写出的程序代码简洁,架构清晰,平台兼容性较好;同时PYTHON生态圈拥有大量的扩展模块;这些强大易用的第三方库使得PYTHON在系统运维/网络开发/科学计算/图像处理等领域都有广泛应用。

Pandas

这里的Pandas不是熊猫,而是一个开源的PYTHON数据分析模块,他提供了大量库和标准模块,能够对大型数据集进行快捷的处理和分析。在我们的日常工作中,经常会用到excel的数据透视表功能来对数据进行统计分析,但excel能够实现的功能较为简单,难以扩展,同时excel在数据量过大的场景中也难以发挥用武之地。

利用Pandas,我们可以实现很多excel中难以完成的任务。在本文中我们尝试使用Pandas对10w数量级的告警信息进行统计分析。哪个时段产生的告警数量最多,哪些主机的告警数量最多,哪些次要告警触发了主要告警,以及一些更为复杂的问题都可以通过Pandas来进行数据分析。

PANDAS中的数据结构介绍

在接触实际代码之前,我们先熟悉一下Pandas中常用的数据结构类型。在Pandas中有两类最重要的数据结构
一. Series
Series代表一个一维数组,和常用的List数据结构类似,我们可以把excel文件中的一列值赋给一个Series对象。
二. Dataframe
Dataframe是一个二维表状结构,和二维数组类似,我们可以把excel文件中n列m行的值赋给一个nm大小的Dataframe对象。
本文中主要将用到Dataframe对象,通过操作Dataframe对告警信息进行分析
批量读取xls数据文件

上图就是所有的次要告警数据文件,每个excel文件中有2000条数据。为方便处理,我们首先将所有次要告警的数据汇总,代码如下:
ImportPandas aspd #导入Pandas包
Import os #导入操作系统包
file_list = os.listdir(secondary_data_path)
total_arr = []
for f in file_list:
if f.endswith('.xls'):
df = pd.read_excel(data_path+f) #如果是xls文件则将其内容读取到df变量中
total_arr.append(df)
secondary_df = pd.concat(total_arr) #将所有xls文件内容整合到独个Dataframe中
tdf.to_csv(secondary_data_path +'secondary_total.csv')
汇总后的内容保存到本地文件方便后续操作

这部分代码功能很简单:每次用Pandas模块中的read_excel函数读取一个excel文件,将文件的内容保存到Dataframe类型的变量df中,然后将所有df合并到一个总的secondary_df,为了以后读取方便,我们同时将汇总后的数据保存到secondary_total.csv本地文件中。(同样的数据量,保存为csv格式比xls格式节省空间)。
用同样的方法,将主要告警的数据汇总到primary_df,保存到primary_total.csv文件中。
所有的告警信息都保存到了primary_df和secondary_df这两个Dataframe中,我们后续的所有操作都是基于这两个df。
首先看看告警信息都有哪些属性

我们单独挑出“配置项应用系统”这个属性来计数并排序,看看次要告警数量最多的应用系统都有哪些

数字总是略显枯燥,我们可以使用Python的matplotlib这个库来将数据可视化。根据各系统的告警数量作出柱状图,只需要两行代码

同样的方法,再看看主要告警的情况


接下来我们希望计算各系统主/次要告警的数量比,我们将主/次要告警的数量比看做一个告警传导率,比值越高的,说明次要告警转化为主要告警的传导率越高。

知道哪些系统的告警转化率较高之后,我们可以进一步分析,这些主要告警的告警指标类型都是什么?是CPU类,还是内存类,或是磁盘类?是否和次要告警的告警指标类型相同?下面的代码分别汇总转化率最高系统的主/次要告警类别。

可以看到,该系统中的主要告警主要是CPU使用率类,次要告警中较多的有CPU,磁盘和内存交换页三类。可见由CPU类次要告警触发的主要告警数量较多。如果想要降低主要告警的数量,可以从优化程序代码或增加CPU运算能力的方向着手。
后续我们还可以进行很多更加细化的分析,例如根据系统内主机,告警时间等维度来进行各类统计,可以通过散点图,饼状图,累积柱状图等多种形式对数据进行更加生动的展现。由于篇幅的限制,本文中不对此展开详细描述。

结语

Python/Pandas是一个轻量级的数据分析框架,使用Python/Pandas可以完成很多excel难以实现的功能,同时具备优异的扩展性和灵活性。配合Python的Matplotlib等模块,Pandas在数据可视化/绘图等领域也有很好的表现。本文仅实现了一些非常简单的功能,Pandas更多强大的功能等待待大家去发掘。

如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

2

添加新评论0 条评论

Ctrl+Enter 发表

本文隶属于专栏

作者其他文章

相关文章

相关问题

相关资料

X社区推广