ctrlb-decompose:針對 LLM 的日誌壓縮與模式提取

ctrlb-decompose: 針對 LLM 的日誌壓縮與模式提取

供 LLM 分析的日誌壓縮

ctrlb-decompose 是一款高性能工具,旨在從原始日誌中去除雜訊,將數百萬行日誌轉換為少量的可操作結構模式。當將日誌輸入大型語言模型 (LLM) 時,此過程能減少 Token 消耗並降低雜訊,讓模型能夠針對日誌的結構本質進行推理,而非處理個別且重複的行。

兩階段正規化與聚類流水線

ctrlb-decompose 使用兩階段流水線,以極低的記憶體佔用在單次串流處理中處理日誌:

階段 1: CLP 編碼

該工具使用壓縮日誌處理器 (CLP) 編碼將變量 Token 正規化為類型佔位符。這確保了結構相同的行無論具體數值為何,都會產生相同的 "logtype"。例如,Request from 10.0.1.15 completed in 45ms status=200 這一行會被正規化為 Request from <dict> completed in <float>ms status=<int>

階段 2: Drain3 聚類

編碼完成後,Drain3 演算法會在 logtypes 上建立一棵前綴樹,根據 Token 相似度進行分組(預設閾值為 0.4)。在 Token 分歧處,工具會插入 <*> 通配符以建立模板。此過程是增量式的,這意味著每行只需處理一次,無需進行第二次掃描。

變量分類與語義類型化

提取的變量會被分類為語義類型,以提供更豐富的分析與統計。該工具可偵測以下類型:

類型 範例 偵測方法
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 其他任何值 備用方案

記憶體效率與統計累積

為了保持低記憶體佔用,ctrlb-decompose 利用了幾種機率性資料結構:

  • Drain3 Clusters: 以 O(k) 複雜度管理並使用 LRU 汰換機制 (最大 1 萬個)。
  • Quantiles: 使用 DDSketch 維護每個數值插槽約 200 位元組的固定空間,而不儲存原始值。
  • Cardinality: 採用 HyperLogLog++ 來處理高基數變量 (每個變量約 200 位元組)。
  • Examples: 使用蓄水池抽樣 (reservoir sampling) 為每個模式維護一個受限的範例行緩衝區。

輸出格式與整合

ctrlb-decompose 支援三種主要的輸出格式以適應不同的工作流程:

  1. Human (--human): 預設輸出,具備 ANSI 顏色和視覺化條形圖,用於終端機調查。
  2. LLM (--llm): 緊湊且具 Token 效率的 Markdown 格式,專為 LLM 消耗而設計。
  3. JSON (--json): 用於程式化處理的結構化格式。

Claude Code 插件

該工具透過插件與 Claude Code 整合。使用者可以使用 /plugin marketplace add ctrlb-hq/ctrlb-decompose 進行安裝,然後使用自然語言指令進行日誌分析,例如 "Analyze the errors in /var/log/app.log"。

社群見解

Hacker News 上的使用者強調了該工具遵循 Unix 哲學,因為它專注於單一分解步驟,而不需要採用整個生態系統。有些人建議擴展工具功能,與 OpenTelemetry 整合,將模式轉換為指標 (metrics)、日誌 (logs) 或追蹤 (traces),以降低數據傳輸成本。

"終於有一個工具可以在不強迫你採用整個生態系統的情況下解決這個問題。我非常欣賞它如何透過僅專注於分解步驟並做好這件事,來契合 Unix 哲學。"

安裝

ctrlb-decompose 可透過 Homebrew 安裝於 macOS (brew install ctrlb-decompose),作為 .deb 套件提供給 Debian/Ubuntu,或者可以使用 Cargo 從原始碼構建。

Sources