HN 日本語サマリー

← 一覧へ戻る
AI・機械学習

Show HN: Ctrlb-decompose、LLMに送信する前にログからノイズを除去

Show HN: Ctrlb-decompose: Strip the noise from logs before sending to LLMs (github.com)

34 pointsby ruhani_grover7 コメント

要約

Ctrlb-decomposeは、大量のノイズの多いログ行を、統計情報、異常検知、相関関係を含む構造化されたパターンに圧縮するツールです。これにより、数百万行のログを、型付けされた変数、分位点統計、異常フラグ、重要度スコアリングを備えた少数の実行可能なパターンに変換できます。CLI、WASM経由のブラウザ、またはRustライブラリとして動作します。

全文翻訳

ctrlb-decompose 生のログ行を、統計情報、異常、相関関係を持つ構造化されたパターンに圧縮します。数百万ものノイズの多いログ行を、型付けされた変数、分位点統計、異常フラグ、重要度スコアリングを備えた少数の実行可能なパターンに変えます。CLI、WASM経由のブラウザ、またはRustライブラリとして実行できます。$ cat server.log | ctrlb-decompose ┌────────────────────────────────────────────────────────────────────┐ │ ctrlb-decompose: 1,247,831 lines -> 43 patterns (99.9% reduction) │ └────────────────────────────────────────────────────────────────────┘ #1 [ERROR] ██████████████████████ 18,402 (1.5%) <TS> ERROR [<*>] Connection to <ip> timed out after <duration> ip IPv4 unique=12 top: 10.0.1.15 (34%), 10.0.1.22 (28%) duration Duration p50=120ms p99=4.8s #2 [INFO] ████████████████████ 904,221 (72.5%) <TS> INFO [<*>] Request from <ip> completed in <duration> status=<status> ip IPv4 unique=1,847 top: 10.0.1.15 (12%), 10.0.1.22 (8%) duration Duration p50=23ms p99=312ms status Enum unique=3 values: 200 (91%), 404 (6%), 500 (3%) ウェブサイト近日公開。仕組み ctrlb-decompose は、2段階の正規化とクラスタリングパイプラインを使用しており、最小限のメモリフットプリントで単一のストリーミングパスでログを処理します。┌──────────────────────────────────────────────┐ │ ctrlb-decompose pipeline │ └──────────────────────────────────────────────┘ 生ログ行 │ ▼ ┌──────────────┐ タイムスタンプ(ISO 8601、Apache、│ Timestamp │ syslog、Unixエポックなど)を正規化された│ Extraction │ <TS>マーカーとDateTime値にストリップ&パースします。└──────┬───────┘ │ ▼ ┌──────────────┐ 整数、浮動小数点数、IPアドレス、文字列を│ CLP │コンパクトなプレースホルダーバイトに置き換えます。構造的に│ Encoding │同一の行は同じ「ログタイプ」を生成します。└──────┬───────┘ │ ▼ ┌──────────────┐ ツリーベースの類似性クラスタリング(Drain3)が│ Drain3 │ログタイプをパターンにグループ化します。異なるトークンは│ Clustering │ <*>ワイルドカードになります。増分処理– 2番目のパスは不要です。└──────┬───────┘ │ ▼ ┌──────────────┐ CLPデコードされた値をDrain3ワイルドカード│ Variable │位置とマージします。各変数を意味のある│ Extraction │タイプに分類します:IPv4、UUID、Duration、Enum、Integerなど。│ & Typing │└──────┬───────┘ │ ▼ ┌──────────────┐ DDSketch分位点(p50/p99)、HyperLogLog│ Statistics │カーディナリティ推定、トップk値、時間的│ Accumulation │バケット化、リザーバーサンプリングされた例行。└──────┬───────┘ │ ▼ ┌──────────────┐ 頻度スパイク、エラーカスケード、低カーディナリティ│ Anomaly │フラグ、二峰性分布、クラスタ化された│ Detection │数値検出。└──────┬───────┘ │ ▼ ┌──────────────┐ キーワードベースの重要度(ERROR > WARN > INFO > DEBUG)、│ Scoring │時間的共起、共有変数相関、│ & Correlation│パターン間のエラーカスケード検出。└──────┬───────┘ │ ▼ ┌──────────────┐ │ Output │──── 人間(ANSIターミナル)/ LLM(コンパクトなマークダウン)/ JSON└──────────────┘ ステージ1 – CLPエンコーディング CLP(Compressed Log Processor)エンコーディングは、変数トークンを型付けされたプレースホルダーに正規化するため、構造的に同一の行は実際の値に関係なく同一のログタイプを生成します:入力:「Request from 10.0.1.15 completed in 45ms status=200」ログタイプ:「Request from <dict> completed in <float>ms status=<int>」ステージ2 – Drain3クラスタリング Drainアルゴリズムは、ログタイプの上にプレフィックスツリーを構築し、トークンの類似性(設定可能なしきい値、デフォルト0.4)によってそれらをグループ化します。トークンが分岐する場所では、テンプレートに「*」ワイルドカードが追加されます。これは増分的に実行されます–各行は2番目のパスなしで一度処理されます。変数分類 抽出された変数は、よりリッチな分析のために意味のあるタイプに分類されます:タイプ 例 検出 IPv4 / IPv6 10.0.1.15 CIDRパターンマッチ UUID 550e8400-e29b-... 8-4-4-4-12 16進数フォーマット Duration 45ms, 3.2s 数値 + 時間単位サフィックス HexID 0x1a2b3c 4+ 16進数 Integer 200 i64としてパース Float 3.14 '.'を含む、f64としてパース Enum ERROR 低カーディナリティ(<=20ユニーク、トップ3 >= 80%) Timestamp 2024-01-15T14:22:01Z RFC 3339パターン String その他すべて フォールバックメモリ効率 Drain3クラスタ:O(k) LRUエビクション付き(デフォルト10k max) 分位点:DDSketch – 数値スロットあたり約200バイト固定、生値ストレージなし カーディナリティ:HyperLogLog++ – 高カーディナリティ変数あたり約200バイト 例:リザーバーサンプリング – パターンごとのバウンドバッファインストール macOS (Homebrew) brew tap ctrlb-hq/tap brew install ctrlb-decompose Debian / Ubuntu curl -LO https://github.com/ctrlb-hq/ctrlb-decompose/releases/download/v0.1.0/ctrlb-decompose_0.1.0-1_amd64.deb sudo dpkg -i ctrlb-decompose_0.1.0-1_amd64.debソースからビルド git clone https://github.com/ctrlb-hq/ctrlb-decompose.git cd ctrlb-decompose cargo build --release # バイナリは target/release/ctrlb-decompose にあります使用法 # 標準入力からパイプ cat /var/log/syslog | ctrlb-decompose # ファイルから読み込み ctrlb-decompose server.log # LLM最適化出力(コンパクト、トークン効率が良い) ctrlb-decompose --llm app.log # JSON出力 ctrlb-decompose --json app.log # トップ10パターンと各3つの例行 ctrlb-decompose --top 10 --context 3 app.logオプション ctrlb-decompose [OPTIONS] [FILE] 引数: [FILE] ログファイルパス(省略または「-」の場合は標準入力を読み込みます) オプション: --human 色付きの人間が読める出力(デフォルト) --llm LLM最適化されたコンパクトマークダウン --json 構造化JSON出力 --top <N> トップNパターンを表示(デフォルト:20) --context <N> パターンごとの例行(デフォルト:0) --no-color ANSIカラーを無効にする --no-banner ヘッダー/フッターを抑制する -q, --quiet プログレスメッセージを抑制する -h, --help ヘルプを表示する -V, --version バージョンを表示する出力フォーマットフォーマットフラグ 最適な用途 人間 --human (デフォルト) ターミナル調査 — カラフルで視覚的なバー LLM --llm LLMへの入力 — コンパクトでトークン効率の良いマークダウン JSON --json プログラムによる消費 — 構造化され、機械可読Claude Codeプラグイン ctrlb-decomposeをClaude Codeから直接使用 — CLIの知識は不要です。プラグインはctrlb-decomposeを自動的にインストールし、質問するだけでログを分析できます。インストール /plugin marketplace add ctrlb-hq/ctrlb-decompose /plugin install ctrlb-decompose@ctrlb-hq 使用法 単純な言葉で説明するだけです:「/var/log/app.logのエラーを分析してください」「このログファイルの最も一般的なパターンは何ですか?」「これらのログを要約し、異常を強調してください」Claudeはctrlb-decomposeがインストールされているか確認し(インストールされていない場合はインストール手順を案内し)、分析を実行し、結果を説明します—エラーを最初に表示し、異常を指摘し、次に調査すべきことを提案します。詳細については、plugin/README.mdを参照してください。ライセンスMIT