Ein „yellow“ Cluster-Status im Wazuh-Indexer (OpenSearch) sorgt oft für Unruhe: Läuft noch alles? Gehen Daten verloren? Muss ich mir Sorgen machen?
Im Fall von Johan Ekenlycka war die Situation typisch für viele All-in-one- oder Single-Node-Wazuh-Setups:
Der Cluster lief, aber:
- Status:
yellow - Einige Shards waren unassigned
- Plattenplatz war völlig in Ordnung
max_shards_per_nodewar bereits hochgedreht
Schauen wir uns an, was genau passiert ist – und wie das Problem sauber gelöst wurde.
1. Ausgangssituation: Gelber Cluster, genügend Speicher
Johan nutzt:
- Wazuh 4.10
- Einen einzelnen Indexer-Node
- 200 GB Platte, ~50 % belegt
Cluster-Health sah so aus:
"status": "yellow",
"number_of_nodes": 1,
"number_of_data_nodes": 1,
"active_primary_shards": 1366,
"active_shards": 1366,
"unassigned_shards": 32
Die unassigned Shards betrafen ausschließlich „Meta-Indizes“:
.opendistro-ism-managed-index-history-*.opendistro-ism-config.opendistro-job-scheduler-locksecurity-auditlog-*
Also keine „normalen“ Wazuh-Indices wie wazuh-alerts-*, sondern die internen Indizes von Index State Management (ISM) und Security/Audit.
2. Diagnose: Warum sind die Shards unassigned?
Ein Blick auf die Erklärung per _cluster/allocation/explain zeigte:
"can_allocate": "no",
"allocate_explanation": "cannot allocate because allocation is not permitted to any of the nodes",
"deciders": [
{
"decider": "enable",
"decision": "NO",
"explanation": "replica allocations are forbidden due to cluster setting [cluster.routing.allocation.enable=primaries]"
},
{
"decider": "same_shard",
"decision": "NO",
"explanation": "a copy of this shard is already allocated to this node"
}
]
Außerdem waren folgende Cluster-Settings gesetzt:
"cluster": {
"routing": {
"allocation": {
"enable": "primaries"
}
},
"max_shards_per_node": "3000"
}
Was bedeutet das?
allocation.enable = primaries→
Nur Primary Shards dürfen neuen Nodes zugewiesen werden, keine Replicas.- Der einzige Node im Cluster (Single-Node-Setup) hat bereits die Primaries.
- Die betroffenen Indizes haben Replica-Shards, die nirgendwo hin können:
- Sie dürfen nicht auf denselben Node (wegen
same_shard) - Es gibt keinen zweiten Node
- Und
allocation.enable=primariesblockiert Replikate ohnehin
- Sie dürfen nicht auf denselben Node (wegen
Ergebnis:
Die Primaries laufen, aber die Replikate bleiben unassigned → Cluster-Status: yellow.
3. Wichtige Erkenntnis: Replica-Shards auf einem Single-Node-Cluster sind sinnlos
Jakub Pacowski brachte es auf den Punkt:
Da du nur einen Indexer-Node hast, kannst du keine Replikate sinnvoll zuweisen.
Lösung: Replica-Anzahl auf 0 setzen.
Auf einem Single-Node-Cluster bringen Replikate:
- keine Redundanz (es gibt ja nur einen Node)
- aber zusätzliche Shard-Overhead, Zuweisungsfehler und gelben Status
4. Die Lösung: Replica-Anzahl auf 0 setzen
Um das Problem zu lösen, wurden für die .opendistro-*-Indizes (und später auch für den Security-Audit-Index) die Replica-Shards deaktiviert.
Beispiel-Befehl (auf dem Indexer-Node)
curl \
--cert /etc/wazuh-indexer/certs/admin.pem \
--key /etc/wazuh-indexer/certs/admin-key.pem \
--cacert /etc/wazuh-indexer/certs/root-ca.pem \
-X PUT "https://127.0.0.1:9200/.opendistro-*/_settings" \
-H 'Content-Type: application/json' \
-d '{
"index.number_of_replicas": 0,
"index.auto_expand_replicas": false
}'
Anschließend:
curl \
--cert /etc/wazuh-indexer/certs/admin.pem \
--key /etc/wazuh-indexer/certs/admin-key.pem \
--cacert /etc/wazuh-indexer/certs/root-ca.pem \
"https://127.0.0.1:9200/_cluster/health?pretty"
Nach diesem Schritt:
- Cluster-Status wechselt von yellow → green
- unassigned Shards verschwinden
- alles läuft stabil
Johan bestätigte:
„Thanks, this did indeed solve the issue. Had to do the same settings change to an opensearch audit log shard.“
5. Nebenbaustelle: max_shards_per_node hochgedreht
Ein weiterer wichtiger Punkt im Thread:
Die Einstellung cluster.max_shards_per_node war von 1000 auf 3000 erhöht worden.
Das ist ein häufiger Reflex:
„Cluster meckert über Shards? Dann stellen wir das Limit eben höher!“
Kurzfristig mag das helfen – langfristig ist es gefährlich:
- Jeder Shard kostet RAM, Filehandles, CPU
- Zu viele kleine Indizes/Shards machen den Indexer langsam
- Resourcenverbrauch steigt dramatisch an, bevor das Limit nochmals erreicht wird
Jakub und Kevin warnten beide:
max_shards_per_nodeerhöhen sollte nur eine temporäre Notlösung sein- Besser:
- Shard-Anzahl reduzieren
- Retention/ILM/ISM-Policies anpassen
- ggf. zusätzliche Indexer-Nodes einführen
Kevin verwies zusätzlich auf einen ausführlichen Blogpost zum Thema „Shard Exhaustion“ in Wazuh-Umgebungen – lesenswert für alle, die All-in-one-Setups oder stark gewachsene Cluster betreiben.
6. Best Practices für Single-Node- und Small-Cluster-Wazuh-Installationen
Aus dem Thread lassen sich ein paar klare Empfehlungen ableiten:
6.1 Replica-Shards auf Single-Node-Cluster deaktivieren
Für System-Indizes wie:
.opendistro-*.plugins-ml-*security-auditlog-*
auf einem Single-Node-Cluster:
index.number_of_replicas = 0index.auto_expand_replicas = false
6.2 Shard-Anzahl im Blick behalten
max_shards_per_nodenicht einfach immer weiter erhöhen- lieber:
- Datenhaltung prüfen (wie viele Tage/Wochen brauche ich wirklich?)
- Indexpattern zusammenführen
- evtl. Shardanzahl pro Index reduzieren (z. B. von 5 auf 1, wenn wenig Daten)
6.3 Cluster-Health regelmäßig prüfen
_cluster/health?pretty_cat/indices?v_cluster/allocation/explainbei Problemen
So erkennt man:
- unassigned Shards
- zu viele Indizes/Shards
- auffällige System-Indizes
6.4 Langfristig: Skalierung planen
Wenn:
- Agents, Events und Datenvolumen wachsen
- Dashboards immer langsamer werden
- Indexer-CPU und Heap am Limit sind
dann ist der richtige Weg:
- weitere Indexer-Nodes hinzufügen
- Sharding-Strategie überdenken
- nicht nur Settings „höher drehen“
7. Fazit
Der Fall von Johan zeigt sehr anschaulich:
- Ein gelber Wazuh-Indexer-Cluster ist nicht immer ein Storage- oder Hardwareproblem.
- Oft steckt schlicht eine Replica-Konfiguration dahinter, die nicht zum Setup passt – insbesondere bei Single-Node-Installationen.
- Die Lösung war vergleichsweise simpel:
- Replica-Anzahl für
.opendistro-*und Audit-Indizes auf 0 setzen auto_expand_replicasdeaktivieren- Cluster-Health erneut prüfen
- Replica-Anzahl für
Gleichzeitig ist der Thread eine Warnung davor, max_shards_per_node als Dauerlösung hochzudrehen. Shard-Exhaustion ist ein realer Feind von Performance und Stabilität – und lässt sich nur durch bewusste Sharding- und Retention-Strategien wirklich in den Griff bekommen.
https://wazuh.slack.com/archives/C0A933R8E/p1763980736524649