Article
ctrlb-decompose: Log-Müll reduzieren bevor er das LLM erreicht
Das Problem
Wer schon mal LLMs auf Server-Logs losgelassen hat, kennt die Pain: Millionen von Zeilen, davon 90% identische Rauschen-Muster, und das LLM erstickt an Token-Costs bevor es die eigentlichen Insights findet. Raw-Logs in einen Prompt zu packen ist verschwenderisch und teuer.
Die Lösung
ctrlb-decompose ist ein Open-Source-Tool (MIT, Rust) das genau diese Lücke füllt. Es komprimiert rohe Log-Zeilen in strukturelle Muster — mit typisierten Variablen, Quantil-Statistiken, Anomalie-Flags und Severity-Scoring. Aus 1,2 Millionen Zeilen werden 43 Muster. Das ist eine Reduktion von 99,9%.
Wie es funktioniert
Die Pipeline läuft in einem einzigen Streaming-Pass mit minimalem Memory-Footprint:
- Timestamp-Extraktion: Parst ISO 8601, Apache, syslog, Unix epoch etc. in normalisierte
<TS>-Marker - CLP-Encoding: Ersetzt Integers, Floats, IPs und Strings durch kompakte Platzhalter. Strukturell identische Zeilen produzieren denselben “logtype”
- Drain3-Clustering: Baum-basiertes Similarity-Clustering gruppiert Logtypes zu Mustern. Differierende Tokens werden zu
<*>-Wildcards. Inkrementell, kein zweiter Pass nötig - Variable Extraction & Typing: Klassifiziert Variablen in semantische Typen: IPv4, UUID, Duration, Enum, Integer etc.
- Statistics: DDSketch-Quantile (p50/p99), HyperLogLog-Kardinalität, Top-k-Values, temporales Bucketing
- Anomaly Detection: Frequency-Spikes, Error-Cascades, bimodale Verteilungen
- Scoring & Correlation: Keyword-basierte Severity, temporale Co-Occurrence, Error-Cascade-Detection
Output-Formate
Drei Formate stehen zur Verfügung: ANSI-Terminal für Menschen, kompaktes Markdown für LLMs, und JSON für Programme. Das Markdown-Format ist explizit für LLM-Prompts optimiert — komprimiert, strukturiert, direkt verwendbar.
Verfügbarkeit
CLI, Browser-WASM und als Rust-Library. Es gibt auch ein Claude-Plugin im Repo. Das Tool ist aktiv entwickelt mit Benchmarks und Tests.
Fazit
Genau der richtige Pre-Processor wenn man LLMs für Log-Analyse einsetzt. Statt das Modell mit 1M Zeilen zu füttern, gibt man ihm 43 Muster mit Statistiken — und das Modell hat tatsächlich Kontext-Window übrig für die eigentliche Analyse. Die Rust-Implementierung macht’s schnell, WASM macht’s browser-tauglich. Saubere Sache.
Quelle: GitHub: ctrlb-hq/ctrlb-decompose