ctrlb-decompose: 用于 LLMs 的日志压缩和模式提取

ctrlb-decompose: 用于 LLMs 的日志压缩和模式提取

用于 LLM 分析的日志压缩

ctrlb-decompose 是一个高性能工具,旨在从原始日志中去除噪声,将数百万行日志转换为少量可操作的结构模式。此过程在将日志馈送到大型语言模型 (LLM) 时可减少令牌消耗和噪声,使模型能够基于日志的结构本质进行推理,而不是逐行处理重复内容。

双阶段归一化和聚类管道

ctrlb-decompose 使用两阶段管道在单次流式传输中以最小的内存占用处理日志:

阶段 1: CLP 编码

该工具使用压缩日志处理器 (CLP) 编码将变量标记归一化为类型化的占位符。这确保了结构相同的行无论具体数值如何,都会生成相同的 "logtype"。例如,像 Request from 10.0.1.15 completed in 45ms status=200 这样的行会被归一化为 Request from <dict> completed in <float>ms status=<int>

阶段 2: Drain3 聚类

编码之后,Drain3 算法在 logtype 上构建前缀树,根据标记相似性(默认阈值为 0.4)将其分组。当标记出现分歧时,工具会插入 <*> 通配符以创建模板。此过程是增量的,意味着每行只需处理一次,无需第二次遍历。

变量分类和语义类型

提取的变量将被分类为语义类型,以提供更丰富的分析和统计信息。该工具检测以下类型:

类型 示例 检测方法
IPv4 / IPv6 10.0.1.15 CIDR 模式匹配
UUID 550e8400-e29b-... 8-4-4-4-12 十六进制格式
Duration 45ms, 3.2s 数字 + 时间单位后缀
HexID 0x1a2b3c 4+ 十六进制位数
Integer 200 解析为 i64
Float 3.14 包含 .,解析为 f64
Enum ERROR 基数低(<=20 唯一,前 3 名 >= 80%)
Timestamp 2024-01-15T14:22:01Z RFC 3339 模式
String any other value 后备

内存效率和统计累积

为了保持低内存占用,ctrlb-decompose 使用了几种概率数据结构:

  • Drain3 聚类:以 O(k) 复杂度管理并采用 LRU 淘汰(最多 10k)。
  • 分位数:使用 DDSketch 来维持每个数值槽固定约 200 字节,而不存储原始值。
  • 基数:采用 HyperLogLog++ 来处理高基数变量(每个变量约 200 字节)。
  • 示例:使用蓄水池抽样为每种模式维护一个有界的示例行缓冲区。

输出格式和集成

ctrlb-decompose 支持三种主要的输出格式以适应不同的工作流程:

  1. Human (--human): 默认输出,具有 ANSI 颜色和可视化条形图,用于终端检查。
  2. LLM (--llm): 一种紧凑且令牌高效的 Markdown 格式,专门设计用于 LLM 消费。
  3. JSON (--json): 一种用于程序化消费的结构化格式。

Claude Code 插件

该工具通过插件与 Claude Code 集成。用户可以使用 /plugin marketplace add ctrlb-hq/ctrlb-decompose 进行安装,然后使用诸如 "Analyze the errors in /var/log/app.log." 之类的自然语言命令分析日志。

社区见解

"最后,一个工具能够解决此问题而不迫使你采用整个生态系统。我欣赏它如何通过仅专注于分解步骤并做好它来践行 Unix 哲学。"

安装

ctrlb-decompose 可通过 macOS 的 Homebrew 获得(brew install ctrlb-decompose),也可作为 Debian/Ubuntu 的 .deb 包,或者可以使用 Cargo 从源码构建。

Sources