论文复现:LibreLog: Accurate and Efficient Unsupervised Log Parsing Using Open-Source Large Language Models

LibreLog: Accurate and Efficient Unsupervised Log Parsing Using Open-Source Large Language Models(可以)

代码链接:https://github.com/zeyang919/LibreLog
提出的LibreLog框架:其核心思想是利用开源的 LLM(例如 Llama3-8B)的强大文本理解和生成能力,结合有效的日志分组和模板记忆机制,实现准确且高效的日志解析,而无需人工标注数据。

LibreLog 的算法流程可以分为以下几个主要步骤:

  1. 日志分组(Log Grouping):
    • 目的: 将具有相似静态文本的日志分组在一起,为后续的 LLM 解析做准备。
    • 方法: 采用基于固定深度的分组树的策略。
      • 第一步: 根据日志的 token 长度进行分组,将 token 长度相似的日志划分到同一个子集中。
      • 第二步: 在固定的深度存储 K 个前缀 token,这样做可以避免分组爆炸,从而提升分组效率。
      • 第三步: 抽象数值字面量,使用通配符符号()。 这样做可以防止第三步中分组的爆炸,从而使分组效率低下。
      • 第四步: 计算新日志与现有日志组之间的相似度,判断新日志应该插入到哪个组中。相似度计算采用 Jaccard 相似度,如果相似度高于阈值(例如 0.5),则将日志插入到现有组中,否则创建一个新的日志组。
  2. 基于 LLM 的无监督日志解析(LLM-based Unsupervised Log Parsing):
    • 目的: 利用 LLM 将分组后的日志解析为日志模板,区分静态文本和动态变量。
    • 方法: 采用检索增强生成(Retrieval-Augmented Generation,RAG)的方法,结合自反思机制。
      • Prompt 设计: 设计包含以下几个部分的 Prompt:
        • 指令(Instruction): 明确告诉 LLM 需要完成的任务,即识别和提取日志中的动态变量,并生成日志模板。
        • 输入/输出示例(Input/Output Example): 提供一个输入输出的例子,帮助 LLM 理解任务的目标和格式。
        • 检索增强(Retrieval-Augmented Log Parsing): 从每个日志组中选择具有代表性的日志,以帮助 LLM 更好地理解日志的结构和动态变量。代表性日志的选择基于 Jaccard 相似度,选择与其他日志相似度最低的日志。
      • 模板提取: 从 LLM 的响应中提取生成的日志模板。
      • 模板标准化(Post-processing Template Standardization): 对提取的日志模板进行标准化处理,例如移除不必要的字符和标记,将动态变量替换为正则表达式。
      • 自反思验证(Self-Reflection for Verifying Log Template): 验证生成的日志模板是否能够匹配组内的所有日志。如果存在未匹配的日志,则使用自反思机制,重新生成日志模板,直到所有日志都能被匹配。
  3. 模板记忆(Template Memory for Efficient Log Parsing):
    • 目的: 存储解析后的日志模板,避免重复的 LLM 查询,提高解析效率。
    • 方法: 将解析后的日志模板存储在内存中,并根据 token 长度进行排序。当需要解析新的日志时,首先在内存中查找匹配的日志模板。如果找到匹配的模板,则直接使用该模板进行解析,否则调用 LLM 进行解析。
posted @ 2025-02-20 15:45  云岛夜川川  阅读(130)  评论(0)    收藏  举报