Ein effektives Monitoring ist entscheidend für die Aufrechterhaltung eines gesunden OpenSearch-Clusters. Ähnlich wie ein Arzt die Vitalzeichen überwacht, müssen wir wichtige Metriken verfolgen, die den Gesundheitszustand und die Performance unseres Systems anzeigen. In diesem Kapitel erfahren Sie, wie Sie ein umfassendes Monitoring implementieren, das Ihnen hilft, das Verhalten Ihres Clusters zu verstehen, potenzielle Probleme vorherzusagen und auf Probleme zu reagieren, bevor sie Ihre Benutzer beeinträchtigen.
Das Monitoring in OpenSearch arbeitet auf mehreren Ebenen, die jeweils unterschiedliche Einblicke in den Gesundheitszustand und die Performance Ihres Clusters bieten. Lassen Sie uns diese Ebenen erkunden und verstehen, wie wir das Monitoring für jede implementieren können.
Die Grundlage des OpenSearch-Monitorings beginnt mit der Cluster-Gesundheit. Betrachten Sie die Cluster-Gesundheit als den Puls Ihres Systems - sie bietet unmittelbare Einblicke, ob Ihr Cluster korrekt funktioniert.
Implementieren wir ein grundlegendes Cluster Health Monitoring:
GET /_cluster/health
Für eine kontinuierliche Überwachung benötigen wir jedoch etwas Ausgereifteres:
PUT _plugins/_alerting/monitors/cluster_health_monitor
{
"type": "monitor",
"name": "Cluster Health Monitor",
"enabled": true,
"schedule": {
"period": {
"interval": 1,
"unit": "MINUTES"
}
},
"inputs": [
{
"search": {
"indices": [".monitoring-opensearch-*"],
"query": {
"bool": {
"must": [
{
"range": {
"timestamp": {
"gte": "now-5m"
}
}
},
{
"term": {
"type": "cluster_stats"
}
}
]
}
}
}
}
],
"triggers": [
{
"name": "Cluster-Status-Alert",
"severity": "High",
"condition": {
"script": {
"source": "ctx.results[0].hits.hits.any(hit -> hit._source.status != 'green')"
}
},
"actions": [
{
"name": "Operations benachrichtigen",
"destination_id": "ops_slack",
"message_template": {
"source": "Cluster-Gesundheit hat sich verschlechtert. Aktueller Status: {{ctx.results.0.hits.hits.0._source.status}}"
}
}
]
}
]
}
Dieser Monitor prüft die Cluster-Gesundheit jede Minute und alarmiert, wenn der Status nicht mehr “green” ist. Das Skript wertet den Cluster-Status aus und löst Benachrichtigungen aus, wenn Probleme erkannt werden.
Einzelne Nodes benötigen ein detailliertes Monitoring, um sicherzustellen, dass sie optimal arbeiten. Implementieren wir ein umfassendes Node-Monitoring:
PUT _plugins/_alerting/monitors/node_monitor
{
"type": "monitor",
"name": "Node Performance Monitor",
"enabled": true,
"schedule": {
"period": {
"interval": 1,
"unit": "MINUTES"
}
},
"inputs": [
{
"search": {
"indices": [".monitoring-opensearch-*"],
"query": {
"bool": {
"must": [
{
"term": {
"type": "node_stats"
}
}
]
}
}
}
}
],
"triggers": [
{
"name": "Hohe CPU-Auslastung",
"severity": "High",
"condition": {
"script": {
"source": """
def maxCpuPercent = 80.0;
return ctx.results[0].hits.hits.any(hit -> {
def stats = hit._source;
return stats.process.cpu.percent > maxCpuPercent;
});
"""
}
}
},
{
"name": "Hohe Heap-Nutzung",
"severity": "High",
"condition": {
"script": {
"source": """
def maxHeapPercent = 85.0;
return ctx.results[0].hits.hits.any(hit -> {
def stats = hit._source;
return (stats.jvm.mem.heap_used_percent > maxHeapPercent);
});
"""
}
}
}
]
}
Indizes sind der Ort, an dem Ihre Daten leben, und sie benötigen sorgfältiges Monitoring. Erstellen wir ein umfassendes Index-Monitoring-System:
PUT _plugins/_alerting/monitors/index_monitor
{
"type": "monitor",
"name": "Index Health Monitor",
"enabled": true,
"schedule": {
"period": {
"interval": 5,
"unit": "MINUTES"
}
},
"inputs": [
{
"search": {
"indices": [".monitoring-opensearch-*"],
"query": {
"bool": {
"must": [
{
"term": {
"type": "index_stats"
}
}
]
}
}
}
}
],
"triggers": [
{
"name": "Index-Wachstums-Alert",
"severity": "Medium",
"condition": {
"script": {
"source": """
def indexGrowthThreshold = 50.0; // 50% Wachstum
return ctx.results[0].hits.hits.any(hit -> {
def stats = hit._source;
def currentSize = stats.primaries.store.size_in_bytes;
def previousSize = stats.primaries.store.previous_size_in_bytes;
return (currentSize > previousSize * (1 + indexGrowthThreshold/100));
});
"""
}
}
}
]
}
Performance Monitoring geht über grundlegende Gesundheitsprüfungen hinaus, um zu verstehen, wie gut Ihr Cluster arbeitet. Implementieren wir ein umfassendes Performance Monitoring.
Zuerst richten wir ein Monitoring für langsame Queries ein:
PUT /my-index/_settings
{
"index.search.slowlog.threshold.query.warn": "10s",
"index.search.slowlog.threshold.query.info": "5s",
"index.search.slowlog.threshold.query.debug": "2s",
"index.search.slowlog.threshold.fetch.warn": "1s",
"index.search.slowlog.threshold.fetch.info": "800ms",
"index.search.slowlog.threshold.fetch.debug": "500ms",
"index.indexing.slowlog.threshold.index.warn": "10s",
"index.indexing.slowlog.threshold.index.info": "5s",
"index.indexing.slowlog.threshold.index.debug": "2s"
}
Erstellen wir nun einen Monitor für die Analyse langsamer Queries:
PUT _plugins/_alerting/monitors/query_performance_monitor
{
"type": "monitor",
"name": "Query Performance Monitor",
"enabled": true,
"schedule": {
"period": {
"interval": 5,
"unit": "MINUTES"
}
},
"inputs": [
{
"search": {
"indices": ["*slowlog*"],
"query": {
"bool": {
"must": [
{
"range": {
"took": {
"gte": 5000
}
}
}
]
}
}
}
}
],
"triggers": [
{
"name": "Langsame-Query-Alert",
"severity": "Medium",
"condition": {
"script": {
"source": "ctx.results[0].hits.total.value > 5"
}
},
"actions": [
{
"name": "Entwicklungsteam benachrichtigen",
"destination_id": "dev_slack",
"message_template": {
"source": "Mehrere langsame Queries erkannt. Bitte Query-Muster untersuchen."
}
}
]
}
]
}
Ressourcen-Monitoring hilft, Ressourcenerschöpfung zu verhindern. Implementieren wir ein umfassendes Ressourcen-Monitoring:
PUT _plugins/_alerting/monitors/resource_monitor
{
"type": "monitor",
"name": "Ressourcennutzungs-Monitor",
"enabled": true,
"schedule": {
"period": {
"interval": 1,
"unit": "MINUTES"
}
},
"inputs": [
{
"search": {
"indices": [".monitoring-opensearch-*"],
"query": {
"bool": {
"must": [
{
"term": {
"type": "node_stats"
}
}
]
}
}
}
}
],
"triggers": [
{
"name": "Speicherplatz-Alert",
"severity": "High",
"condition": {
"script": {
"source": """
def diskThreshold = 85.0; // 85% Festplattennutzung
return ctx.results[0].hits.hits.any(hit -> {
def stats = hit._source;
return stats.fs.total.available_in_bytes <
(stats.fs.total.total_in_bytes * (1 - diskThreshold/100));
});
"""
}
}
},
{
"name": "Speicherdruck-Alert",
"severity": "High",
"condition": {
"script": {
"source": """
def memoryThreshold = 85.0; // 85% Speichernutzung
return ctx.results[0].hits.hits.any(hit -> {
def stats = hit._source;
return stats.jvm.mem.heap_used_percent > memoryThreshold;
});
"""
}
}
}
]
}
Ein Monitoring-Dashboard bietet einen visuellen Überblick über die Gesundheit und Performance Ihres Clusters. Erstellen wir ein umfassendes Dashboard:
PUT _plugins/_dashboards/api/saved_objects/dashboard/cluster_overview
{
"attributes": {
"title": "Cluster-Übersicht",
"panels": [
{
"type": "visualization",
"name": "Cluster-Gesundheit",
"params": {
"type": "metric",
"source": {
"index": ".monitoring-opensearch-*",
"aggs": {
"cluster_status": {
"terms": {
"field": "cluster_status",
"size": 1
}
}
}
}
}
},
{
"type": "visualization",
"name": "Node-Status",
"params": {
"type": "gauge",
"source": {
"index": ".monitoring-opensearch-*",
"aggs": {
"avg_cpu": {
"avg": {
"field": "process.cpu.percent"
}
}
}
}
}
}
]
}
}
Ein robustes Alerting-System stellt sicher, dass Sie über wichtige Ereignisse informiert werden. Implementieren wir ein umfassendes Alerting-System:
PUT _plugins/_alerting/destinations/ops_team
{
"name": "Operations-Team-Alerts",
"type": "slack",
"slack": {
"url": "https://hooks.slack.com/services/your-webhook-url"
}
}
PUT _plugins/_alerting/destinations/emergency
{
"name": "Notfall-Alerts",
"type": "email",
"email": {
"to": ["ops-emergency@example.com"],
"subject_template": "{{ctx.monitor.name}}: {{ctx.trigger.name}}",
"message_template": {
"source": "Alert-Details:\n{{ctx.results.0.hits.hits.0._source}}"
}
}
}
Bei der Implementierung von Monitoring in OpenSearch sollten Sie diese wichtigen Prinzipien beachten:
Datenaufbewahrung:
Alert-Konfiguration:
Performance-Auswirkungen: