论文复现: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 的算法流程可以分为以下几个主要步骤:
- 日志分组(Log Grouping):
- 目的: 将具有相似静态文本的日志分组在一起,为后续的 LLM 解析做准备。
- 方法: 采用基于固定深度的分组树的策略。
- 第一步: 根据日志的 token 长度进行分组,将 token 长度相似的日志划分到同一个子集中。
- 第二步: 在固定的深度存储 K 个前缀 token,这样做可以避免分组爆炸,从而提升分组效率。
- 第三步: 抽象数值字面量,使用通配符符号()。 这样做可以防止第三步中分组的爆炸,从而使分组效率低下。
- 第四步: 计算新日志与现有日志组之间的相似度,判断新日志应该插入到哪个组中。相似度计算采用 Jaccard 相似度,如果相似度高于阈值(例如 0.5),则将日志插入到现有组中,否则创建一个新的日志组。
- 基于 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): 验证生成的日志模板是否能够匹配组内的所有日志。如果存在未匹配的日志,则使用自反思机制,重新生成日志模板,直到所有日志都能被匹配。
- Prompt 设计: 设计包含以下几个部分的 Prompt:
- 模板记忆(Template Memory for Efficient Log Parsing):
- 目的: 存储解析后的日志模板,避免重复的 LLM 查询,提高解析效率。
- 方法: 将解析后的日志模板存储在内存中,并根据 token 长度进行排序。当需要解析新的日志时,首先在内存中查找匹配的日志模板。如果找到匹配的模板,则直接使用该模板进行解析,否则调用 LLM 进行解析。

浙公网安备 33010602011771号