Jacky's blog
首页
  • 学习笔记

    • web
    • android
    • iOS
    • vue
  • 分类
  • 标签
  • 归档
收藏
  • tool
  • algo
  • python
  • java
  • server
  • growth
  • frida
  • blog
  • SP
  • more
GitHub (opens new window)

Jack Yang

编程; 随笔
首页
  • 学习笔记

    • web
    • android
    • iOS
    • vue
  • 分类
  • 标签
  • 归档
收藏
  • tool
  • algo
  • python
  • java
  • server
  • growth
  • frida
  • blog
  • SP
  • more
GitHub (opens new window)
  • python 学习指南
  • python 中的设计模式
  • module

  • tool

  • other

    • scrapy shell
    • xpath
    • ipython
    • pyproject_toml文件
    • python中的反射
    • 统计学数学概念整理
    • setuptools打包与安装
    • 日志分析工具
      • 背景
      • 理论
      • 示例
  • 《python》
  • other
Jacky
2023-09-28
目录

日志分析工具

# 背景

【问】我想做一个日志分析工具, 日志中包含了固定格式的很多行, 可以通过正则匹配到固定的行, 解析这些行获取事件信息, 事件信息有 3 要素 event pid ts, 分别代表事件名称, 事件的 pid 和发生的时间点。另外事件需要关联此次事件的配置信息, 这个配置信息在其他行中获取 最后我需要通过 pandas 分析。写出推荐的做法

# 理论

构建一个日志分析工具, 需要多个步骤来解决问题。以下是一种可能的推荐做法:

  • 正则表达式匹配和数据提取:

    使用正则表达式匹配来识别和提取固定格式的日志行, 以获取事件信息(event、pid、ts)以及配置信息。将这些信息存储在一个数据结构中, 例如字典或列表

  • 构建数据结构:

    创建一个数据结构来存储事件信息。可以考虑使用字典或列表, 其中每个条目包含事件的名称(event)、事件的 pid、发生的时间点(ts)以及关联的配置信息。将所有事件的信息存储在一个数据结构中, 以备后续处理

  • 数据分析和转换:

    使用 Pandas 进行数据分析和转换。将数据结构转换为 Pandas DataFrame, 以便更轻松地进行查询和分析。在 DataFrame 中, 您可以执行各种操作, 如过滤、排序、分组、计算汇总统计信息等

  • 分析和可视化:

    利用 Pandas 提供的功能, 进行事件信息的分析和可视化。您可以使用 Pandas 内置的功能来进行数据汇总、图表绘制, 以及各种数据分析操作。根据您的需求, 可以生成报告、图表或其他可视化输出

  • 可扩展性:

    考虑将整个流程封装成一个可重复使用的工具或脚本。这将使您能够处理大量日志文件, 并可以随着需求的变化轻松扩展功能

  • 错误处理和日志记录:

    添加适当的错误处理机制, 以处理不匹配的日志行或其他异常情况。同时, 记录日志以追踪处理过程中的事件, 以便排除问题或进行故障排除

这个推荐做法的关键是将日志分析任务分解为多个步骤, 并使用适当的工具来完成每个步骤。正则表达式用于提取信息, Pandas 用于数据分析, 而模块化的结构可以使代码更容易维护和扩展

# 示例

以下是一个简化的示例, 演示了如何使用 Python、正则表达式、Pandas 和模拟的日志数据来提取事件信息、配置信息, 并使用 Pandas 进行分析:

import pandas as pd
import re

# 模拟的日志数据
log_data = """
Event: EventA
Pid: 1
Timestamp: 2023-09-19 10:00:00

Event: EventB
Pid: 2
Timestamp: 2023-09-19 10:15:00

Config: ConfigA
Param1: Value1
Param2: Value2

Event: EventC
Pid: 3
Timestamp: 2023-09-19 10:30:00

Config: ConfigB
Param1: Value3
Param2: Value4
"""

# 使用正则表达式匹配事件信息
event_pattern = re.compile(r'Event: (.+?)\nPid: (\d+)\nTimestamp: (.+)')
events = event_pattern.findall(log_data)

# 使用正则表达式匹配配置信息
config_pattern = re.compile(r'Config: (.+?)\nParam1: (.+?)\nParam2: (.+)')
configs = config_pattern.findall(log_data)

# 创建 Pandas DataFrame
event_df = pd.DataFrame(events, columns=["Event", "Pid", "Timestamp"])
config_df = pd.DataFrame(configs, columns=["Config", "Param1", "Param2"])

# 合并事件信息和配置信息
result_df = event_df.merge(config_df, how="left", left_on="Event", right_on="Config")

# 打印结果
print(result_df)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43

这个示例演示了如何从日志数据中提取事件信息和配置信息, 并将其组合成一个 Pandas DataFrame 以供进一步分析。您可以根据实际的日志数据和需求进行修改和扩展

上次更新: 2025/10/09, 23:53:03
setuptools打包与安装

← setuptools打包与安装

最近更新
01
npx 使用指南
10-12
02
cursor
09-28
03
inspect
07-20
更多文章>
Theme by Vdoing | Copyright © 2019-2025 Jacky | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式