L17-利用Pandas解析日志数据

2023-05-16

利用Pandas 分析日志数据

文章目录

  • 利用Pandas 分析日志数据
    • 1、简介
    • 2、获取数据
    • 3、数据解析
    • 4、简单可视化
    • 5、小结

1、简介

app程序在日常运行中会生成多种非结构化的日志数据,由于可读性差通常仅仅用于排错。若能将数据处理成结构化表格信息,则可便于分析各步骤的执行状况例如起止时间、耗时,进而辅助性能与维稳性的优化。此文主要通过非结构化数据日志文件样例,来介绍如何利用Pandas中的技巧,完成数据从非结构化到结构化的过程。

2、获取数据

  • Demo数据样例
样例数据如下
步骤1 开始
步骤1: : 任务1 : Followed link after success : 开始执行任务 (2019/05/10 02:00:22.177)
步骤1: : 任务1 : [nr=6, errors=0, exit_status=0, result=true] : 任务执行完毕 (2019/05/10 02:00:45.227)
步骤1: : 任务2 : Followed link after success : 开始执行任务 (2019/05/10 02:00:45.227)
步骤1: : 任务2 : [nr=6, errors=0, exit_status=0, result=true] : 任务执行完毕 (2019/05/10 02:09:21.490)
步骤2: : START : Start of job entry : 开始执行任务 (2019/05/10 02:10:26.177)
步骤2: : START : [nr=7, errors=0, exit_status=0, result=true] : 任务执行完毕 (2019/05/10 02:10:26.179)
步骤2: : 任务5 : Followed无条件的链接 : 开始执行任务 (2019/05/10 02:10:26.179)
步骤2: : 任务5 : [nr=7, errors=0, exit_status=0, result=true] : 任务执行完毕 (2019/05/10 02:17:51.991)

如上样例,源日志记录中包含步骤名称、任务名称、执行状态及执行的时间。带有这样信息的数据行才是待提取的数据记录。

  • 提取源数据中的指定记录
    通过如上分析,我们只需要提取有效信息,即源日志文件中包含’: :’'标识的行记录。先将源日志存入列表,再将列表存入dataframe对象的message字段。可参考如下。
lst_log = []
log_dir = r'D:\myPC\Python\VScodeBook\DataSet\pj1_日志分析\log20190101.txt'
with open(log_dir, encoding='utf-8') as log_etl:
        for line in log_etl:
                # 逐行读取数据 ,只取有效数据 
                if ' :  : ' in line:
                        lst_log.append(line.strip())
df_etllog = pd.DataFrame({'message':lst_log})
df_etllog.head()

数据预览1
在这里插入图片描述

3、数据解析

  • 提取核心字段数据
    日志数据的核心内容均以’:'标记,可用来作分割符。此处利用pandas的str.split()函数来切分字段,并扩展成多列。另外,通过join将源数据记录也合并入新的数据,便于核查解析的正确性。
df_etllog1 = df_etllog['message'].str.split(' : ',expand = True)
# 重命名列
df_etllog1.columns=['步骤名称','c1','任务项','c2','状态']
df_etllog2 = df_etllog1.join(df_etllog)

数据预览2
在这里插入图片描述

  • 解析日期字段
    观察以上数据得知日期信息并没有被正确分割解析。此处需要单独对该字段进行二次拆分,以’(‘为标识,并置空’)’ 字符 、更改为日期数据类型
df_etllog3 = df_etllog2['状态'].str.split('(',expand=True)
df_etllog3.columns=['完成状态','时间']

# 去除字符
df_etllog3['时间'] = df_etllog3['时间'].str.replace(')','')
# 转化为时间类型
# df_etllog3['时间'].astype(np.datetime64)
df_etllog3['时间'] = pd.to_datetime(df_etllog3['时间'])
# 索引重命名
df_etllog4 = df_etllog3.join(df_etllog2)[['步骤名称','任务项','完成状态','时间']]
df_etllog4.index.name='执行顺序'

数据预览3
在这里插入图片描述

  • 分组计算
    1、取起止时间
    基于如上结构数据,利用groupby按指定列进行分组聚合,得到任务的起止时间,并reset索引,保留分组字段。
df_etllog5 = df_etllog4.groupby(['步骤名称','任务项'])['时间'].agg([np.min, np.max]).rename(columns={'amin':'开始时间','amax':'结束时间'}).reset_index()

​ 2、利用起止时间,作减计算耗时,单位精确到分钟(dt.seconds/60)。

df_etllog5['耗时(分钟)'] = (df_etllog5['结束时间'] - df_etllog5['开始时间']).dt.seconds/60

数据预览4
在这里插入图片描述

4、简单可视化

到这里,其实已经完成了数据清洗的目标。基于这份结构化的数据,可以很方便分析日常各任务的运行状态及耗时情况。此处提供如下参考,利用条形图按耗时展现TOP 10 任务。

  • 提取耗时超过阈值(例如5分钟)的任务,并降序,作为重点分析对象
df_rs5min = df_etllog5[df_etllog5['耗时(分钟)'] > 5].sort_values(['开始时间'], ascending=True)
  • matplotlib利用条形图可视化
plt.barh(df_rsL5min['任务项'], df_rsL5min['耗时(分钟)'],
        height=0.8,
        linestyle='--',
        alpha=0.8)
plt.show()

5、小结

利用pandas的这些基本功能来解析固定格式的非结构化数据,确实很得心应手。只要日志文件能按统一的规则存储,则仍然能无压力解析。基于结构化的数据,能很方便利用可视化工具完成日常的性能监控报告。欢迎分享、尝试。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

L17-利用Pandas解析日志数据 的相关文章

随机推荐

  • L4-深度分析Python数据库(SQLServer)访问中的连接

    1 环境准备 首先就是要安装包 xff0c 直接使用pip命令安装即可 pip install pymssql 2 Python pymssql库的数据库访问分析 参考下图 xff0c 描述了数据库连接在单次访问中的创建与关闭 值得注意的是
  • L5-利用Python生成器巧解算法小题

    介绍两个利用Python生成器替代传统的循环遍历操作来解决问题的例子 经过思考与实践 xff0c 充分利用这种自有特征 xff0c 理解实现的细节 xff0c 感受这种编程方式的优雅 1 字符替换 将 aeiou 进行替换 xff0c 规则
  • L6-Numpy中的随机函数

    文章目录 1 rand 2 randn 3 randint 4 random 5 choice 6 随机种子seed 本文汇总了Numpy中常见的取随机数的函数 xff0c 介绍了基本用法 1 rand 指定的输出的二维数组的型 xff0c
  • L7-Python字符串格式化小结

    文章目录 一 百分号 1 直接使用2 表达式赋值3 绑定变量名4 格式符汇总说明5 更精细化的控制 二 format控制基本语法1 绑定变量名2 绑定对象属性3 通过下标取元素来赋值4 填充与对齐5 精度与类型6 千位分隔符 本篇汇总了Py
  • L8-Flatten拍平多维数组的元素

    文章目录 案例说明1 最平凡 xff1a 数组索引访问2 最伤脑 xff1a 二次遍历 列表生成器3 最灵巧 xff1a 活用函数sum 为什么sum 还可以这样玩 xff1f 4 最省心 xff1a 一步到位 xff0c Numpy fl
  • L9-Python内部变量的作用域问题

    文章目录 写在开头一 连续等式判断二 函数内部变量作用域的变更1 对外部变量不进行运算 xff0c 直接访问2 直接对外部变量进行操作运算3 新增global声明 xff0c 再操作 写在开头 分享 记录两个有意思的案例 xff0c 平时碰
  • L10-简谈正则表达式中几个函数的使用

    文章目录 概述1 match 2 search 3 sub 4 compile 5 findall 6 finditer 7 split 8 subn 9 groups 10 贪婪模式与惰性模式注意事项 概述 正则表达式本身是一种小型的 高
  • L11-Python中的高阶函数的使用

    Python中的函数是一个对象 xff0c 既可以作为输入参数 xff0c 也可以作为返回结果 在这里聊聊几个常用的高阶函数 xff0c 来看看函数是如何被作为输入参数 返回结果来使用的 1 map 映射函数 语法 xff1a map fu
  • L12-聊聊Python的装饰器

    文章目录 1 基本介绍2 理解函数2 1 函数也是对象2 2 嵌套函数2 3 返回结果为函数2 4 函数作为输入参数 3 创建装饰器4 带参数的装饰器5 装饰器的应用 监控日志 1 基本介绍 定义 在函数调用前后自动打印日志 xff0c 称
  • L13-理解Python中的特殊的返回值-函数

    文章目录 说明1 初识返回值 函数2 辨识函数对象3 闭包的注意事项谨记如何避免 xff1f 说明 在Python中 xff0c 一切函数即对象 函数同时也可视作变量 xff0c 作为一个返回值 下面通过实际案例来说明下 xff0c 当函数
  • c语言将两个递增的顺序表合并为一个递减的顺序表

    eg xff1a 顺序表A xff1a 1 3 5 7 顺序表B xff1a 2 4 6 8 合并后的表C xff1a 8 7 6 5 4 3 2 1 思路 xff1a 从后往前遍历顺序表A和B xff0c 如果当前A表的数大于等于B表的数
  • L15-Python cookbook 数据结构与算法练习题

    文章目录 1 解压赋值给多个变量2 解压可迭代对象赋值给多个变量3 查找集合中最大 最小的N个元素 heap4 处理字典中的多值映射的两种方式 defaultdict 5 排序字典的键值对元素 OreredDict6 查找字典的相同点7 命
  • 理解递归,从递归的本质说起

    版权声明 xff1a 本文为博主原创文章 xff0c 遵循 CC 4 0 BY SA 版权协议 xff0c 转载请附上原文出处链接和本声明 本文链接 xff1a https blog csdn net allenchenhh133 arti
  • 靠写作能挣100万吗

    不要被标题吓到 xff0c 今天说的就是关于写作 Fenng大说 xff0c 同等能力的人绝对要文字写得好的 帅张说编程 英语 写作是程序员的3大底层能力 写作能给我带来什么 xff1f 王朔曾说 xff0c 写作是一条狗 xff0c 只要
  • “老赖”罗永浩被群嘲:莫欺少年穷,莫笑中年败,莫嘲梦想狂

    原文链接 xff1a https mp weixin qq com s x0fIynaA2hPi7blUoeYGxA 作者 l 粥左罗 来源 l 粥左罗的好奇心 xff08 ID xff1a fangdushe007 xff09 转载请联系
  • L16-分析数据库中的左连接

    许久以来 xff0c 在写表的左联接条件的时候 xff0c 似乎已彻底习惯了在右表上设置联接条件 今天意外发现居然也可以在左表上设置 xff0c 而且顺势借用到了需求实践中 重新翻看下官方文档的说明 xff0c 暂且也算温故而知新了 联接类
  • 高知的程序员必须甩脱穷人思维

    版权声明 xff1a 本文为博主原创文章 xff0c 遵循 CC 4 0 BY SA 版权协议 xff0c 转载请附上原文出处链接和本声明 本文链接 xff1a https blog csdn net mogoweb article det
  • L19-将多表分批次从数据库导出到Excel

    文章目录 1 应用场景2 功能事项3 主要实现概览主要方法 4 使用示例5 总结 1 应用场景 最近经常需要手工从后台数据库导出某些数据表到Excel文件 xff0c 而且源数据表的数据量大小不一 xff0c 导致在导出到本地文件这个过程中
  • L18-利用Pandas清洗与可视化时序数据

    获取时序数据并进行数据清洗与可视化分析 文章目录 获取时序数据并进行数据清洗与可视化分析1 准备工作2 加载数据3 数据处理 转化与合并4 可视化展现5 小结 1 准备工作 tushare是一个第三方财经数据接口包 xff0c 需要安装包并
  • L17-利用Pandas解析日志数据

    利用Pandas 分析日志数据 文章目录 利用Pandas 分析日志数据1 简介2 获取数据3 数据解析4 简单可视化5 小结 1 简介 app程序在日常运行中会生成多种非结构化的日志数据 xff0c 由于可读性差通常仅仅用于排错 若能将数