Im Thread von Ewin Loppe ging es um ein typisches Thema in Wazuh-/OpenSearch-Umgebungen:
Der Cluster-Status ist gelb, einige Shards sind unassigned, und Dev Tools werfen plötzlich 403 / security_exception.
Schauen wir uns an, warum das passiert – und wie man es sauber behebt.
1. Ausgangslage: Cluster „yellow“ und unassigned Shards
Ewin hat den Clusterzustand geprüft:
curl -k -u admin:***** https://IP:9200/_cluster/health?pretty
Ausgabe (gekürzt):
{
"cluster_name" : "wazuh-cluster",
"status" : "yellow",
"number_of_nodes" : 1,
"number_of_data_nodes" : 1,
"active_primary_shards" : 452,
"unassigned_shards" : 8
}
Außerdem zeigte _cat/shards, dass es sich um .opendistro-* und .opensearch-* Indizes handelt – also Systemindizes. Für diese sah man jeweils:
- einen Shard mit
STARTED - einen zweiten mit
UNASSIGNED
→ Klassischer Fall: Replik-Shards auf einem Single-Node-Cluster.
2. Warum ist der Status gelb?
Kurz:
- green = alle Primary- und Replica-Shards zugewiesen
- yellow = alle Primaries zugewiesen, aber mindestens ein Replica-Shard unassigned
- red = Primaries fehlen → kritisch
In Ewins Fall:
number_of_nodes: 1unassigned_shards: 8- alle unassigned sind Replica-Shards von Systemindizes wie
.opendistro-alerting-alerts.
OpenSearch (und damit Wazuh Indexer) versucht Replica-Shards auf andere Knoten zu legen.
Aber es gibt nur einen Node – also:
„a copy of this shard is already allocated to this node“
→ Replica kann nicht auf denselben Node gelegt werden → bleibt unassigned → Status = yellow.
Das ist auf Einzelknoten nicht gefährlich, aber unschön – und nervig, wenn man’s sauber haben will.
3. Versuch über Dev Tools – und das 403-Problem
Ewin hat richtigerweise versucht, über Dev Tools die Anzahl der Replikas zu reduzieren:
PUT .opendistro-*/_settings
{
"index.number_of_replicas" : 0,
"index.auto_expand_replicas": false
}
Antwort:
{
"error": {
"type": "security_exception",
"reason": "no permissions for [] and User [name=admin, backend_roles=[admin]...]"
},
"status": 403
}
Das wirkt kontraintuitiv:
Man ist als admin im Dashboard unterwegs – und hat trotzdem keine Berechtigung, Systemindizes zu ändern.
Warum?
- Der OpenSearch-Sicherheitslayer (Security Plugin) schützt Systemindizes besonders streng.
- Der Dashboard-User
adminarbeitet nicht zwingend mit denselben Rechten wie der technische Zertifikats-Admin (admin.pem). - Für viele Low-Level-Aktionen sind Zertifikat-basierte Requests direkt am Indexer die zuverlässigere Methode.
4. Analyse der unassigned Shards
Sehr hilfreich (und von Othniel vorgeschlagen):
GET _cat/shards?v=true&h=index,shard,prirep,state,node,unassigned.reason&s=state
Und dann für ein konkretes Beispiel:
GET _cluster/allocation/explain?filter_path=index,node_allocation_decisions.node_name,node_allocation_decisions.deciders.*
{
"index": ".opendistro-alerting-alerts",
"shard": 0,
"primary": false
}
Antwort u. a.:
{
"decider": "same_shard",
"decision": "NO",
"explanation": "a copy of this shard is already allocated to this node [...]"
}
Damit ist klar:
Es handelt sich um Replica-Shards
Der Indexer verweigert sie, weil der Primary schon auf demselben Node liegt.
5. Saubere Lösung auf Single-Node-Cluster: Replikas auf 0 setzen
Wenn du nur einen Indexer-Knoten hast, brauchst du keine Replikas.
Im Gegenteil: auf einem Single Node sind sie sogar sinnlos.
Ziel:index.number_of_replicas = 0
für alle .opendistro-* und .opensearch-* Indizes.
Schritt 1 – Per Zertifikat direkt am Indexer arbeiten
Auf dem Indexer-Host:
curl --cacert /etc/wazuh-indexer/certs/root-ca.pem \
--cert /etc/wazuh-indexer/certs/admin.pem \
--key /etc/wazuh-indexer/certs/admin-key.pem \
-XPUT "https://127.0.0.1:9200/.opendistro-*/_settings" \
-H 'Content-Type: application/json' \
-d '{"index":{"number_of_replicas":0}}'
Optional noch für .opensearch-*:
curl --cacert /etc/wazuh-indexer/certs/root-ca.pem \
--cert /etc/wazuh-indexer/certs/admin.pem \
--key /etc/wazuh-indexer/certs/admin-key.pem \
-XPUT "https://127.0.0.1:9200/.opensearch-*/_settings" \
-H 'Content-Type: application/json' \
-d '{"index":{"number_of_replicas":0}}'
Wichtig:
127.0.0.1→ direkt auf dem Indexeradmin.pem+admin-key.pem→ technischer Superuser- Diese Requests umgehen die RBAC-Einschränkungen, die du im Dashboard siehst.
Du solltest als Antwort jeweils etwas mit "acknowledged": true sehen.
Schritt 2 – Clusterzustand erneut prüfen
curl --cacert /etc/wazuh-indexer/certs/root-ca.pem \
--cert /etc/wazuh-indexer/certs/admin.pem \
--key /etc/wazuh-indexer/certs/admin-key.pem \
"https://127.0.0.1:9200/_cluster/health?pretty"
Wenn alles passt:
unassigned_shardssollte 0 seinstatusbleibt auf Single Node manchmal trotzdem „yellow“, z. B. wenn es andere Spezialindices gibt – in deiner Konstellation sollten die 8 unassigned-Systemshards aber weg sein.
6. Alternative: Mehrere Indexer-Knoten statt Replika=0
Langfristig ist die robustere (und „grünere“) Variante:
- mindestens 3 Indexer-Knoten
- Replikas > 0 (typisch: 1)
- Shards werden automatisch verteilt
- Cluster kann einen Node verlieren, ohne Daten zu verlieren
Auf einem Single-Node-Cluster ist aber Replikas=0 die pragmatische und korrekte Einstellung.
7. Zusammenfassung
Problem:
- Clusterstatus yellow
- 8
unassigned_shards, alle Replica-Shards von.opendistro-*/.opensearch-* - Dev Tools → 403
security_exceptionbeim Ändern von Index-Settings
Ursachen:
- Single-Node-Cluster kann Replica-Shards nicht verteilen
- Dashboard-User
admindarf Systemindizes nicht anpassen (RBAC)
Lösung:
- Per Zertifikat direkt am Indexer einloggen
- Für
.opendistro-*und.opensearch-*:"index.number_of_replicas": 0 - Cluster-Health kontrollieren
Damit sind:
- die unassigned Replica-Shards weg
- die Shard-Anzahl konsistent
- und dein Monitoring deutlich entspannter
https://wazuh.slack.com/archives/C0A933R8E/p1765188207956149