In der Praxis werden Sie unweigerlich auf Probleme stoßen, die eine systematische Fehlersuche erfordern. In diesem Kapitel lernen Sie, wie Sie Probleme in OpenSearch effektiv diagnostizieren und beheben können. Wir werden sowohl grundlegende Strategien als auch spezifische Lösungsansätze für häufige Probleme behandeln.
Bevor wir uns mit spezifischen Problemen befassen, ist es wichtig, einen strukturierten Ansatz für das Troubleshooting zu entwickeln. Dieser sollte folgende Schritte umfassen:
OpenSearch bietet verschiedene APIs für die Diagnose. Hier sind die wichtigsten:
# Cluster-Gesundheit prüfen
GET _cluster/health
# Node-Statistiken abrufen
GET _nodes/stats
# Aufgabenliste anzeigen
GET _tasks
# Hot Threads analysieren
GET _nodes/hot_threads
Ein roter Cluster-Status bedeutet, dass primäre Shards nicht zugewiesen sind. Gehen Sie wie folgt vor:
# Identifizieren Sie die problematischen Indizes
GET _cat/indices?v&health=red
# Prüfen Sie den Shard-Status
GET _cat/shards?v&h=index,shard,prirep,state,unassigned.reason
# Analysieren Sie die nicht zugewiesenen Shards
GET _cluster/allocation/explain
Typische Lösungsansätze:
# Shard-Zuweisung erzwingen, wenn sicher
POST _cluster/reroute
{
"commands": [
{
"allocate_stale_primary": {
"index": "problematischer_index",
"shard": 0,
"node": "ziel_node",
"accept_data_loss": true
}
}
]
}
# Oder Index wiederherstellen, falls Backup verfügbar
POST /_snapshot/backup_repository/snapshot_1/_restore
{
"indices": "problematischer_index",
"ignore_unavailable": true
}
Bei Performance-Problemen sollten Sie systematisch vorgehen:
# Langsame Queries identifizieren
PUT /mein_index/_settings
{
"index.search.slowlog.threshold.query.warn": "10s",
"index.search.slowlog.threshold.fetch.warn": "1s",
"index.indexing.slowlog.threshold.index.warn": "10s"
}
# Hot Threads analysieren
GET /_nodes/hot_threads
# Thread Pools überwachen
GET /_nodes/stats/thread_pool
Typische Optimierungsmöglichkeiten:
# Cache-Einstellungen optimieren
PUT /mein_index/_settings
{
"index": {
"queries": {
"cache": {
"enabled": true
}
},
"fielddata": {
"cache": {
"size": "20%"
}
}
}
}
# Refresh-Intervall anpassen
PUT /mein_index/_settings
{
"index": {
"refresh_interval": "30s"
}
}
Speicherprobleme gehören zu den häufigsten Herausforderungen:
# JVM-Heap-Nutzung prüfen
GET _nodes/stats/jvm
# Circuit Breaker Status prüfen
GET _nodes/stats/breaker
Lösungsansätze:
# Circuit Breaker Einstellungen anpassen
PUT _cluster/settings
{
"persistent": {
"indices.breaker.total.limit": "70%",
"indices.breaker.fielddata.limit": "40%",
"indices.breaker.request.limit": "30%"
}
}
# Fielddata Cache begrenzen
PUT /mein_index/_settings
{
"index.fielddata.cache.size": "20%"
}
Bei Problemen mit der Indexierung:
# Indexierungs-Statistiken prüfen
GET _stats/indexing
# Mapping-Probleme identifizieren
GET /mein_index/_mapping
Beispiel für die Behebung von Mapping-Konflikten:
# Neuen Index mit korrigiertem Mapping erstellen
PUT /neuer_index
{
"mappings": {
"properties": {
"problematisches_feld": {
"type": "keyword"
}
}
}
}
# Daten reindexieren
POST /_reindex
{
"source": {
"index": "alter_index"
},
"dest": {
"index": "neuer_index"
}
}
Ein proaktiver Monitoring-Ansatz hilft, Probleme frühzeitig zu erkennen:
PUT _plugins/_alerting/monitors/system_monitor
{
"type": "monitor",
"name": "System Health Monitor",
"enabled": true,
"schedule": {
"period": {
"interval": 5,
"unit": "MINUTES"
}
},
"inputs": [
{
"search": {
"indices": [".monitoring-opensearch-*"],
"query": {
"bool": {
"must": [
{
"range": {
"@timestamp": {
"gte": "now-5m"
}
}
}
]
}
}
}
}
],
"triggers": [
{
"name": "System Alert",
"severity": "High",
"condition": {
"script": {
"source": """
def maxHeapUsage = 85.0;
def maxDiskUsage = 85.0;
return ctx.results[0].hits.hits.any(hit -> {
def stats = hit._source;
return stats.jvm.mem.heap_used_percent > maxHeapUsage ||
stats.fs.total.used_percent > maxDiskUsage;
});
"""
}
}
}
]
}
In manchen Fällen benötigen Sie detailliertere Logging-Informationen:
# config/log4j2.properties
logger.action.name = org.opensearch.action
logger.action.level = debug
logger.transport.name = org.opensearch.transport
logger.transport.level = debugDokumentation
Monitoring
Backup und Recovery
Diese Best Practices helfen Ihnen, effektiv mit Problemen umzugehen und sie zukünftig zu vermeiden.