Ausgangslage:
Du planst eine Wazuh-Umgebung mit ~130 GB Log-Ingestion pro Tag (hauptsächlich High-Volume-Quellen wie Server, Cloud-Logs, Network Devices) und 90 Tage Retention. Dazu ein Indexer-Cluster (≥3 Nodes) mit 1 Replica.
1) Die Grundrechnung (Raw-Volumen)
- 130 GB/Tag × 90 Tage = 11.700 GB ≈ 11,7 TB Rohdaten
Das ist aber nicht das, was am Ende auf dem Indexer liegt.
2) Warum der Index größer wird als die Rohdaten
OpenSearch/Wazuh speichert nicht nur „Logzeilen“, sondern erzeugt u. a.:
- Inverted Index / Doc Values (Suchbarkeit & Aggregationen)
- Segment-Dateien, Metadaten, Dictionaries
- temporäre Daten bei Merges
Das erzeugt Index-Overhead (je nach Mapping, Felder, Kardinalität, Message-Größe etc. sehr unterschiedlich). Dazu kommt deine Replica.
3) Replication verdoppelt (typisch) den Storage
Wenn du 1 Replica nutzt, wird jedes Shard einmal zusätzlich gespeichert → ~2× Daten. OpenSearch/Wazuh steuert das über number_of_replicas.
4) Praktische Faustformel für Planung (komfortabel, nicht „auf Kante“)
Ich empfehle für einen belastbaren Plan:
Gesamt-Storage ≈ Raw × Retention-Tage × (Index-Overhead) × (1 + Replicas) × Headroom
Mit realistischen Annahmen:
- Index-Overhead: 1,2–1,6× (oft in dieser Größenordnung, kann aber höher sein je nach Feldern/Parsing)
- Replicas: 1 → Faktor 2
- Headroom: 1,25–1,35× (damit Merges, Peaks, Watermarks, Rebalancing nicht alles abwürgen)
Beispielrechnung (konservativ & „sicher“):
- Raw 90 Tage: 11,7 TB
- Overhead 1,4×: 16,4 TB
- Mit 1 Replica (×2): 32,8 TB
- 30% Headroom (×1,3): 42,6 TB
✅ Empfehlung: Plane ~35–45 TB „usable“ Cluster-Kapazität (nach RAID/Filesystem-Overhead) für 130 GB/Tag und 90 Tage mit 1 Replica – abhängig davon, wie „feldreich“ die Events sind.
Wenn du eher „schlanke“ Logs hast (wenig Felder, wenig lange Strings), kommst du ggf. näher an 30–35 TB. Bei sehr feldreichen Cloud-/Security-Events (viele Nested Fields, hohe Kardinalität) sind >45 TB nicht ungewöhnlich.
5) Was du konkret prüfen/optimieren solltest
A) Replica-/Shard-Strategie
- Prüfe
number_of_replicasund Shard-Anzahl für deine Indexgrößen. - Zu viele Shards erzeugen Overhead; zu große Shards können Merges/Recovery belasten.
B) ILM/ISM richtig aktiv nutzen (Retention wirklich erzwingen)
Setze eine Lifecycle-/State-Management-Policy, die Indizes nach 90 Tagen löscht/archiviert, sonst wächst alles weiter. Wazuh beschreibt dafür Index Lifecycle Management im Indexer-Cluster.
C) Kompression: Default vs. „best_compression“
OpenSearch bietet Index-Codecs:
- Standard ist LZ4 (schnell, weniger CPU)
best_compressionnutzt zlib (spart meist Platz, kostet CPU und kann Indexing/Search verlangsamen)- Wichtig: Codec greift nur bei neu erstellten Indizes bzw. wenn du reindexierst/neu schreibst.
➡️ Impact in der Praxis:
Wenn CPU ohnehin knapp ist oder du am Limit ingestierst, kann best_compression die Ingestion verschlechtern. Wenn Storage das Hauptproblem ist und CPU-Reserve da ist, kann es sich lohnen (am besten A/B über ein paar Tage messen).
6) „Next steps“ (Checkliste fürs saubere Sizing)
- Ist-Zustand messen: aktuelles Index-Wachstum pro Tag im Indexer (nicht Rohlog-Volumen schätzen).
- Replica-Faktor verifizieren:
number_of_replicasje Index prüfen. - Retention erzwingen: ILM/ISM Policy aktiv + prüfen, ob wirklich gelöscht/verschoben wird.
- Headroom einplanen: Ziel < 70–75% Disk dauerhaft (Watermarks vermeiden).
- Optional:
best_compressionnur nach Performance-Test (CPU/Latency).
Wenn du mir sagst, ob ihr wazuh-alerts (nur Alerts) oder zusätzlich archives/weitere Indizes schreibt und wie viele Replicas/Shards ihr aktuell nutzt, kann ich die 35–45 TB-Spanne noch enger und belastbarer für euren Fall rechnen.
https://wazuh.slack.com/archives/C0A933R8E/p1765764240968669