Alert- und Benachrichtigungs-Plug-ins

Mit den integrierten Alerting- und Benachrichtigungs-Plug-ins von OpenSearch können Sie Clusterzustand, Performancemetriken und Betriebsprobleme überwachen.

Die richtige Skalierung und Optimierung von OpenSearch-Clustern ist für Performance und Kosteneffizienz von entscheidender Bedeutung. Im Laufe der Zeit können sich Cluster-Nutzungsmuster ändern, was zu Überlastung, erhöhten Latenzzeiten oder Fehlern führt. Proaktive Überwachung und Alarmierung sind unerlässlich, um potenzielle Probleme zu erkennen und zu mindern, bevor sie eskalieren.

OpenSearch verfügt über ein integriertes Alerting- und Monitoring-Plug-in, mit dem solche Alerts erstellt werden können. Dieses Thema enthält Anleitungen zum Einrichten von Alerts, zur Integration mit Oracle Notification Service (ONS) und zur Behebung häufiger Probleme.

OpenSearch Alerting-Plug-in

Das Alerting-Plug-in bietet Überwachung und Benachrichtigung für Ereignisse in OpenSearch. Es verwendet REST-APIs, um komplexe Alerts basierend auf Cluster- und Knotenmetriken zu erstellen. Das Alerting-Plug-in enthält die folgenden Funktionen:

  • Chained Monitore: Kombiniert mehrere Bedingungen aus verschiedenen REST-API-Ausgaben, um komplexe Alerts zu erstellen.
  • Kontrollierte Intervalle: Definiert, wie oft Alerts ausgewertet werden, um die Ermüdung von Benachrichtigungen zu vermeiden.
  • RBAC-Unterstützung: Verwendet rollenbasierte Zugriffskontrolle zur Verwaltung von Alerts.

Weitere Informationen zum OpenSearch-Monitoring finden Sie unter Monitoring.

Unterstützte Metriken und Alerts

Sie können das Alert-Plug-in für die folgenden Metriken konfigurieren:

  • Clusterzustand: Statusänderungen (Grün, Gelb, Rot).
  • Knotenmetriken: Hohe Festplattenauslastung, CPU, JVM-Druck.
  • Shard-Metriken: Große Shards, übermäßige Shard-Anzahl.
  • Aufgabenmetriken: Hängende oder abgelehnte Aufgaben, hohe Anzahl von Bildlaufaufgaben.
  • Throttling: Index- oder Abfrage-Throttling.

OpenSearch Benachrichtigungs-Plug-in

Verwenden Sie das Benachrichtigungs-Plug-in, um automatische Benachrichtigungen über die mit dem Alerting-Plug-in konfigurierten Alerts zu erhalten. Oracle Notification Service (ONS) ist in das Benachrichtigungs-Plug-in integriert. Sie können Kanäle mit dem Benachrichtigungs-Plug-in erstellen, das Benachrichtigungen an das konfigurierte ONS-Thema sendet. Sie können diese Kanäle dann mit Alerts verknüpfen, um Benachrichtigungen über das Auslösen von Alerts zu erhalten.

Im Folgenden finden Sie ein Beispiel für eine Alertbenachrichtigung:

Monitor Test index stats just entered alert status. Please investigate the issue.
- Trigger: test
- Severity: 2
- Period start: 2025-02-06-06T08:48:45.047Z
- Period end: 2025-02-06-06T08:49:45.047Z

Weitere Informationen zum OpenSearch Notifications-Plug-in finden Sie unter Benachrichtigungen.

Oracle Notification Service (ONS)

Der Oracle Cloud Infrastructure Notifications-Service (ONS) sendet über ein Publish-Subscribe-Muster sichere, äußerst zuverlässige Nachrichten an verteilte Komponenten. Sie können sie für Anwendungen verwenden, die auf Oracle Cloud Infrastructure und extern gehostet werden. Mit ONS werden Sie benachrichtigt, wenn Ereignisregeln oder Alarme ausgelöst werden, und Sie können Nachrichten direkt veröffentlichen.

ONS unterstützt die folgenden Kanäle für die Zustellung von Nachrichten:

  • E-Mail
  • Funktionen
  • HTTP-Endpunkt (für externe Anwendungen)
  • PagerDuty
  • Slack
  • SMS

Weitere Informationen zum OCI Notification-Service finden Sie unter Benachrichtigungen.

Die folgende Abbildung zeigt, wie Benachrichtigungen mit ONS übertragen werden:

Alertbenachrichtigung wird gesendet

Beispielalerts mit Benachrichtigungen

Sie können Alerts erstellen, um die meisten wichtigen Bereiche von OpenSearch zu überwachen, die sich auf die Performance des Clusters OpenSearch auswirken können. Best Practices sind das Einrichten von Alerts auf Warnungsebene, die darauf hinweisen, dass einige Parameter problematisch werden, sodass Korrekturmaßnahmen ergriffen werden können, bevor das Cluster OpenSearch in einen fehlerhaften Status versetzt wird.

Die folgenden Abschnitte enthalten Alerts auf Warnungs- und Fehlerebene, die in Ihrem OpenSearch-Cluster eingerichtet werden können.

Benachrichtigungskanal

Bevor Sie Alerts erstellen, sollten Sie einen Benachrichtigungskanal einrichten. Mit Ihrem Abonnement für den ONS-Kanal können Sie automatische Benachrichtigungen über verschiedene Kommunikationsmethoden erhalten, darunter E-Mail, Slack, OCI-Funktionen, Streams und andere.

Im folgenden Beispiel wird gezeigt, wie Sie einen Benachrichtigungskanal erstellen:

{

   "config_id": "sample-id",
   "name": "test-ons1",
   "config": {
      "name": "test-ons1",
      "description": "send notifications",
      "config_type": "ons",
       "is_enabled": true,
       "ons": {
         "topic_id": "ocid1.onstopic.oc1.iad.amaaaaaawtpq47yar24xitgso2wble2a5shal52r6zoc6eyth3jzsmbvxspa"
       }
   }
}

Cluster Zustand

Das OpenSearch-Cluster weist die folgenden Zustandsstatus auf:

  • Grün: Alle Shards verfügbar.
  • Gelb: Einige Replikat-Shards sind nicht verfügbar. Die Performance kann beeinträchtigt werden, da weniger Replikate verfügbar sind.
  • Rot: Einige primäre Shards sind nicht verfügbar. Rot gibt an, dass die Daten nicht verfügbar sind, was dazu führt, dass Abfragen zu nicht verfügbaren Shards nicht erfolgreich sind.

Alerts für gelbe Cluster konfigurieren

Verwenden Sie die folgende Konfiguration, um Yellow Alerts für Ihr Cluster einzurichten:

POST: {{host}}/_plugins/_alerting/monitors/
{
  "type": "monitor",
  "schema_version": 0,
  "name": "ClusterHealthYellow",
  "monitor_type": "cluster_metrics_monitor",
  "enabled": true,
  "schedule": {
    "period": {
      "interval": 1,
      "unit": "MINUTES"
    }
  },
  "inputs": [
    {
      "uri": {
        "api_type": "CLUSTER_HEALTH",
        "path": "_cluster/health",
        "path_params": "",
        "url": "http://localhost:9200/_cluster/health",
        "clusters": []
      }
    }
  ],
  "triggers": [
    {
      "query_level_trigger": {
        "id": "xElVw5YBqFMdxmRChxIO",
        "name": "Check cluster health",
        "severity": "1",
        "condition": {
          "script": {
            "source": "ctx.results[0].status == \"yellow\"",
            "lang": "painless"
          }
        },
        "actions": [
          {
            "id": "notification585623",
            "name": "Notify test",
            "destination_id": "0WZDw5YBwxP9poIbQC8c",
            "message_template": {
              "source": "Monitor {{ctx.monitor.name}} just entered alert status. Please investigate the issue.\n  - Trigger: {{ctx.trigger.name}}\n  - Severity: {{ctx.trigger.severity}}\n  - Period start: {{ctx.periodStart}}\n  - Period end: {{ctx.periodEnd}}",
              "lang": "mustache"
            },
            "throttle_enabled": true,
            "subject_template": {
              "source": "Alerting Notification action",
              "lang": "mustache"
            },
            "throttle": {
              "value": 30,
              "unit": "MINUTES"
            }
          }
        ]
      }
    }
  ],
  "delete_query_index_in_every_run": false,
  "owner": "alerting"
}

Alerts für gelbe Cluster konfigurieren

Verwenden Sie die folgende Konfiguration, um rote Alerts für Ihr Cluster einzurichten:

POST {{host}}/_plugins/_alerting/monitors/
{
  "type": "monitor",
  "schema_version": 0,
  "name": "ClusterHealthRed",
  "monitor_type": "cluster_metrics_monitor",
  "enabled": true,
  "schedule": {
    "period": {
      "interval": 1,
      "unit": "MINUTES"
    }
  },
  "inputs": [
    {
      "uri": {
        "api_type": "CLUSTER_HEALTH",
        "path": "_cluster/health",
        "path_params": "",
        "url": "http://localhost:9200/_cluster/health",
        "clusters": []
      }
    }
  ],
  "triggers": [
    {
      "query_level_trigger": {
        "id": "xElVw5YBqFMdxmRChxIO",
        "name": "Check cluster health",
        "severity": "1",
        "condition": {
          "script": {
            "source": "ctx.results[0].status == \"red\"",
            "lang": "painless"
          }
        },
        "actions": [
          {
            "id": "notification585623",
            "name": "Notify test",
            "destination_id": "0WZDw5YBwxP9poIbQC8c",
            "message_template": {
              "source": "Monitor {{ctx.monitor.name}} just entered alert status. Please investigate the issue.\n  - Trigger: {{ctx.trigger.name}}\n  - Severity: {{ctx.trigger.severity}}\n  - Period start: {{ctx.periodStart}}\n  - Period end: {{ctx.periodEnd}}",
              "lang": "mustache"
            },
            "throttle_enabled": true,
            "subject_template": {
              "source": "Alerting Notification action",
              "lang": "mustache"
            },
            "throttle": {
              "value": 30,
              "unit": "MINUTES"
            }
          }
        ]
      }
    }
  ],
  "delete_query_index_in_every_run": false,
  "owner": "alerting"
}

Anzahl der Knoten

Verwenden Sie die folgende Konfiguration, um die Anzahl der Knoten für das Cluster anzugeben:

POST {{host}}/_plugins/_alerting/monitors/
{
  "type": "monitor",
  "schema_version": 0,
  "name": "ClusterNodesUnavailable",
  "monitor_type": "cluster_metrics_monitor",
  "enabled": true,
  "schedule": {
    "period": {
      "interval": 1,
      "unit": "MINUTES"
    }
  },
  "inputs": [
    {
      "uri": {
        "api_type": "CLUSTER_HEALTH",
        "path": "_cluster/health",
        "path_params": "",
        "url": "http://localhost:9200/_cluster/health",
        "clusters": []
      }
    }
  ],
  "triggers": [
    {
      "query_level_trigger": {
        "id": "xElVw5YBqFMdxmRChxIO",
        "name": "Check all nodes available",
        "severity": "1",
        "condition": {
          "script": {
            "source": "ctx.results[0].number_of_nodes< 8",
            "lang": "painless"
          }
        },
        "actions": [
          {
            "id": "notification585623",
            "name": "Notify test",
            "destination_id": "0WZDw5YBwxP9poIbQC8c",
            "message_template": {
              "source": "Monitor {{ctx.monitor.name}} just entered alert status. Please investigate the issue.\n  - Trigger: {{ctx.trigger.name}}\n  - Severity: {{ctx.trigger.severity}}\n  - Period start: {{ctx.periodStart}}\n  - Period end: {{ctx.periodEnd}}",
              "lang": "mustache"
            },
            "throttle_enabled": true,
            "subject_template": {
              "source": "Alerting Notification action",
              "lang": "mustache"
            },
            "throttle": {
              "value": 30,
              "unit": "MINUTES"
            }
          }
        ]
      }
    }
  ],
  "delete_query_index_in_every_run": false,
  "owner": "alerting"
}

Problembehebung

Der Clusterzustand kann aus verschiedenen Gründen gelb oder rot werden, z. B. wegen eines nicht erfolgreichen Restore-Vorgangs, weil die Knoten vorübergehend getrennt werden und der Datenträger voll wird. Während einige Probleme vom OCI OpenSearch-Team behoben werden müssen, können Sie andere Probleme selbst beheben.

Befolgen Sie diese Schritte, um Probleme selbst zu beheben:

  • Rufen Sie eine Liste aller Shards mit der Cat Shards-API ab, um eine Vorstellung von den nicht zugewiesenen Shards zu erhalten.
  • Wenn das Cluster OpenSearch rot ist:
    • Prüfen Sie den Zuordnungsgrund für die nicht zugewiesenen Shards mit der CAT-Zuweisungs-API.
    • Verwenden Sie die Force-Umleitungs-API, um die Neuzuweisung von Shards zu versuchen, wenn das Problem temporär war und gemindert wird.
    • Wenn in der Erklärung zur Shard-Zuweisung ein nicht erfolgreicher Wiederherstellungsversuch erwähnt wird, stellen Sie das Cluster auf einen früheren bekannten guten Zustand zurück.
    • Wenn das Problem weiterhin besteht, wenden Sie sich an das OCI-Team OpenSearch.
  • Wenn das Cluster OpenSearch gelb ist:
    • Prüfen Sie, ob die Anzahl der Knoten gleich oder größer als die maximale Anzahl der Replikate für einen Index ist.
    • Prüfen Sie den Zuordnungsgrund für die nicht zugewiesenen Shards mit der CAT-Zuweisungs-API
    • Wenn das Problem vorübergehend zu sein scheint, verwenden Sie die Force-Umleitungs-API, um die Shards neu zuzuweisen.

Wenn mindestens ein Knoten im Cluster für einen längeren Zeitraum nicht verfügbar ist, wenden Sie sich an das OCI-Team OpenSearch. Diese Symptome deuten darauf hin, dass etwas mit der zugrunde liegenden Infrastruktur falsch sein könnte.

Statistiken auf Knotenebene

Alle OpenSearch-Knoten sollten einen guten Puffer in Bezug auf alle grundlegenden Metriken, wie CPU, RAM und Festplattenspeicher, aufweisen, damit sie optimal funktionieren. Das Erreichen kritischer Ebenen dieser Metriken kann zu verringerten Latenzzeiten, erhöhten Verzögerungen und schließlich dazu führen, dass Knoten aufgehängt werden oder das Cluster verlassen.

Sie können zwei Alertsbenen für diese Metriken festlegen: eine für eine Warnstufe und eine für eine kritische Ebene.

High Disk/CPU/JVM

Warnungsebene

Verwenden Sie die folgende Konfiguration, um einen Alert auf Warnstufe für die OpenSearch-Knoten anzugeben:

POST {{host}}/_plugins/_alerting/monitors/

{
  "type": "monitor",
  "name": "DiskUsage",
  "monitor_type": "cluster_metrics_monitor",
  "enabled": false,
  "enabled_time": null,
  "schedule": {
    "period": {
      "interval": 1,
      "unit": "MINUTES"
    }
  },
  "inputs": [
    {
      "uri": {
        "api_type": "NODES_STATS",
        "path": "_nodes/stats",
        "path_params": "",
        "url": "http://localhost:9200/_nodes/stats"
      }
    }
  ],
  "triggers": [
    {
      "query_level_trigger": {
        "name": "test",
        "severity": "2",
        "condition": {
          "script": {
            "source": "for (entry in ctx.results[0].nodes.entrySet())\n\n{\n\n    if ((entry.getValue().fs.total.total_in_bytes -entry.getValue().fs.total.free_in_bytes)*100/entry.getValue().fs.total.total_in_bytes > 70) {\n\n        return true;\n\n}\n\n}\n\nreturn false;",
            "lang": "painless"
          }
        },
        "actions": [
            {
              "id": "notification585623",
              "name": "Notify test",
              "destination_id": "0WZDw5YBwxP9poIbQC8c",
              "message_template": {
                "source": "Monitor {{ctx.monitor.name}} just entered alert status. Please investigate the issue.\n  - Trigger: {{ctx.trigger.name}}\n  - Severity: {{ctx.trigger.severity}}\n  - Period start: {{ctx.periodStart}}\n  - Period end: {{ctx.periodEnd}}",
                "lang": "mustache"
              },
              "throttle_enabled": true,
              "subject_template": {
                "source": "Alerting Notification action",
                "lang": "mustache"
              },
              "throttle": {
                "value": 30,
                "unit": "MINUTES"
              }
            }
        ]
      }
    }
  ]
}
Kritische Ebene

Verwenden Sie die folgende Konfiguration, um einen Alert auf kritischer Ebene für die OpenSearch-Knoten anzugeben:

POST {{host}}/_plugins/_alerting/monitors/

{
  "type": "monitor",
  "name": "DiskUsage",
  "monitor_type": "cluster_metrics_monitor",
  "enabled": false,
  "enabled_time": null,
  "schedule": {
    "period": {
      "interval": 1,
      "unit": "MINUTES"
    }
  },
  "inputs": [
    {
      "uri": {
        "api_type": "NODES_STATS",
        "path": "_nodes/stats",
        "path_params": "",
        "url": "http://localhost:9200/_nodes/stats"
      }
    }
  ],
  "triggers": [
    {
      "query_level_trigger": {
        "name": "test",
        "severity": "2",
        "condition": {
          "script": {
            "source": "for (entry in ctx.results[0].nodes.entrySet())\n\n{\n\n    if ((entry.getValue().fs.total.total_in_bytes -entry.getValue().fs.total.free_in_bytes)*100/entry.getValue().fs.total.total_in_bytes > 85) {\n\n        return true;\n\n}\n\n}\n\nreturn false;",
            "lang": "painless"
          }
        },
        "actions": [
            {
              "id": "notification585623",
              "name": "Notify test",
              "destination_id": "0WZDw5YBwxP9poIbQC8c",
              "message_template": {
                "source": "Monitor {{ctx.monitor.name}} just entered alert status. Please investigate the issue.\n  - Trigger: {{ctx.trigger.name}}\n  - Severity: {{ctx.trigger.severity}}\n  - Period start: {{ctx.periodStart}}\n  - Period end: {{ctx.periodEnd}}",
                "lang": "mustache"
              },
              "throttle_enabled": true,
              "subject_template": {
                "source": "Alerting Notification action",
                "lang": "mustache"
              },
              "throttle": {
                "value": 30,
                "unit": "MINUTES"
              }
            }
        ]
      }
    }
  ]
}
Fehlerbehebung

Versuchen Sie bei hoher Datenträgernutzung, die Datenträgergröße zu erhöhen, oder richten Sie ISM-Policys ein, um alte Daten zu löschen.

Prüfen Sie die Traffic- und Knotenkonfigurationen. Wenn das Cluster aufgrund von Knotenparametern lange unter Stress steht, gibt es in der Regel ein unterkonfiguriertes Cluster.

Ausstehende Teilprojekte

Die Liste der ausstehenden Aufgaben gibt an, welche OpenSearch-Aufgaben auf welchen Knoten ausgeführt werden. Die meisten OpenSearch-Aufgaben, bei denen es sich nicht um einige wie die Neuindexierung handelt, sind kleine Aufgaben, die OpenSearch von größeren Aufgaben getrennt hat.

Verwenden Sie die folgende Konfiguration, um die ausstehenden Aufgaben für die OpenSearch-Knoten aufzulisten:

POST {{host}}/_plugins/_alerting/monitors/
{
    "type": "monitor",
    "schema_version": 0,
    "name": "pending_tasks",
    "monitor_type": "cluster_metrics_monitor",
    "enabled": true,
    "enabled_time": 1746584774661,
    "schedule": {
      "period": {
        "interval": 1,
        "unit": "MINUTES"
      }
    },
    "inputs": [
      {
        "uri": {
          "api_type": "CAT_TASKS",
          "path": "_cat/tasks",
          "path_params": "",
          "url": "http://localhost:9200/_cat/tasks",
          "clusters": []
        }
      }
    ],
    "triggers": [
      {
        "query_level_trigger": {
          "id": "jUOQqJYBQxJTy-1pqNIF",
          "name": "test",
          "severity": "1",
          "condition": {
            "script": {
              "source": "for (item in ctx.results[0].tasks){\n\nif(item.running_time_in_nanos> 300000000000) return true;\n}\nreturn false\n",
              "lang": "painless"
            }
          },
          "actions": [{
            "id": "notification585623",
            "name": "Notify test",
            "destination_id": "0WZDw5YBwxP9poIbQC8c",
            "message_template": {
              "source": "Monitor {{ctx.monitor.name}} just entered alert status. Please investigate the issue.\n  - Trigger: {{ctx.trigger.name}}\n  - Severity: {{ctx.trigger.severity}}\n  - Period start: {{ctx.periodStart}}\n  - Period end: {{ctx.periodEnd}}",
              "lang": "mustache"
            },
            "throttle_enabled": true,
            "subject_template": {
              "source": "Alerting Notification action",
              "lang": "mustache"
            },
            "throttle": {
              "value": 30,
              "unit": "MINUTES"
            }
          }]
        }
      }
    ],
    "delete_query_index_in_every_run": false
}
Fehlerbehebung

Ausstehende Aufgaben können auf eine Überlastung des Knotens, einen falschen Status des Knotens oder falsche Parameter für die Aufgabe hinweisen. Verwenden Sie die folgende Anleitung, um Probleme im Zusammenhang mit ausstehenden Knoten zu beheben:

  • Wenn Ihr Cluster mehrere Typzusammenführungen oder Bulkindizes ausführt, führen Sie eine Zusammenführung erzwingen, um das Problem zu beheben, während alles in einer Aktion zusammengeführt wird.
  • Wenn die Clusterupdateeinstellungen beim Typ "Cluster" hängen bleiben, kann dies auf ein Problem mit dem Status des Knotens oder den Warteschlangen des Knotens hinweisen. Versuchen Sie, hängende Aufgaben zu löschen oder den Knoten neu zu starten, um das Problem zu beheben.
  • Wenn im Cluster Snapshots hängen bleiben, kann dies auf ein Problem mit dem Repository hinweisen. Prüfen Sie die Repository-Einstellungen. Wenden Sie sich an das OCI-Team OpenSearch, wenn der Fehler mit automatisierten Backups zusammenhängt.

Abgelehnte Aufgaben und Threads

Abgelehnte Threads weisen auf ein hohes Throttling-Niveau bei Aufgaben hin. Zum Beispiel, wenn es so viel Aktivität gibt, werden viele Index- und Suchanfragen, die nicht bedient werden können, stattdessen gedrosselt.

Verwenden Sie die folgende Konfiguration, um die abgelehnten Aufgaben und Threads aufzulisten:

POST {{host}}/_plugins/_alerting/monitors/
{
  "type": "monitor",
  "schema_version": 0,
  "name": "Rejected threads",
  "monitor_type": "cluster_metrics_monitor",
  "enabled": true,
  "schedule": {
    "period": {
      "interval": 1,
      "unit": "MINUTES"
    }
  },
  "inputs": [
    {
      "uri": {
        "api_type": "NODES_STATS",
        "path": "_nodes/stats",
        "path_params": "",
        "url": "http://localhost:9200/_nodes/stats",
        "clusters": []
      }
    }
  ],
  "triggers": [
    {
      "query_level_trigger": {
        "id": "1kNRrpYBQxJTy-1pGtJ9",
        "name": "rejected thread pool",
        "severity": "1",
        "condition": {
          "script": {
            "source": "for (entry in ctx.results[0].nodes.entrySet())\n{\n    for (e in entry.getValue().thread_pool.entrySet()) {\n        if(e.getValue().rejected>10){\n        return true;\n}\n\n}\n\n}\n\nreturn false;",
            "lang": "painless"
          }
        },
        "actions": [{
          "id": "notification585623",
          "name": "Notify test",
          "destination_id": "0WZDw5YBwxP9poIbQC8c",
          "message_template": {
            "source": "Monitor {{ctx.monitor.name}} just entered alert status. Please investigate the issue.\n  - Trigger: {{ctx.trigger.name}}\n  - Severity: {{ctx.trigger.severity}}\n  - Period start: {{ctx.periodStart}}\n  - Period end: {{ctx.periodEnd}}",
            "lang": "mustache"
          },
          "throttle_enabled": true,
          "subject_template": {
            "source": "Alerting Notification action",
            "lang": "mustache"
          },
          "throttle": {
            "value": 30,
            "unit": "MINUTES"
          }
        }]
      }
    }
  ],
  "delete_query_index_in_every_run": false,
  "owner": "alerting"
}
Fehlerbehebung

Abgelehnte Aufgaben können auf eine Überlastung des Systems hinweisen. Prüfen Sie den Typ der abgelehnten Aufgaben. Prüfen Sie, ob der Traffic dieser Aufgaben reduziert oder die Einstellungen/Struktur der Aufgabe geändert werden können.

Wenn die Suchfunktion gedrosselt wird, prüfen Sie, ob die Suchabfrage optimiert werden kann.

Wenn die Indexierungsfunktion gedrosselt wird, prüfen Sie, ob Sie die Indexierungsrate oder die Masseneinstellungen aktualisieren können oder ob Sie den Index und die Shards in kleinere Aufgaben aufteilen können.

Indexebenenstatistiken

Shard-Größe

Indexdaten werden in unabhängigen Strukturen gespeichert, die als Shards bezeichnet werden. Jedes Shard besteht aus Segmenten, die in den OpenSearch-Speicher geladen werden, um die Suchfunktion zu unterstützen. Shards im Bereich von 30-50 GB oder größer führen zu größeren Segmenten, die zu einer erhöhten Speicherauslastung führen. Die korrekte Skalierung von Shards ist für die Clusterperformance wichtig. Shard-Größen können in der Regel durch Index Lifecycle Management-(ILM-)Policys gesteuert werden. Bei Indizes, die kein ILM haben, können Sie Alerts für Shard-Größen einrichten, um zu verhindern, dass Indizes zu groß werden.

Verwenden Sie die folgende Konfiguration, um die Shards und deren Größe aufzulisten:

POST {{host}}/_plugins/_alerting/monitors/
{
  "type": "monitor",
  "schema_version": 0,
  "name": "Big shard size",
  "monitor_type": "cluster_metrics_monitor",
  "enabled": true,
  "schedule": {
    "period": {
      "interval": 1,
      "unit": "MINUTES"
    }
  },
  "inputs": [
    {
      "uri": {
        "api_type": "CAT_SHARDS",
        "path": "_cat/shards",
        "path_params": "",
        "url": "http://localhost:9200/_cat/shards",
        "clusters": []
      }
    }
  ],
  "triggers": [
    {
      "query_level_trigger": {
        "id": "pkOWqJYBQxJTy-1pO9Im",
        "name": "big shards",
        "severity": "1",
        "condition": {
          "script": {
            "source": "for (item in ctx.results[0].shards)\nif((item.store != null)&&(item.store.contains(\"gb\"))&&(item.store.length()>4)\n&&(Double.parseDouble(item.store.substring(0,item.store.length()-3))>30)) return true\n",
            "lang": "painless"
          }
        },
        "actions": [
          {
            "id": "notification585623",
            "name": "Notify test",
            "destination_id": "0WZDw5YBwxP9poIbQC8c",
            "message_template": {
              "source": "Monitor {{ctx.monitor.name}} just entered alert status. Please investigate the issue.\n  - Trigger: {{ctx.trigger.name}}\n  - Severity: {{ctx.trigger.severity}}\n  - Period start: {{ctx.periodStart}}\n  - Period end: {{ctx.periodEnd}}",
              "lang": "mustache"
            },
            "throttle_enabled": true,
            "subject_template": {
              "source": "Alerting Notification action",
              "lang": "mustache"
            },
            "throttle": {
              "value": 30,
              "unit": "MINUTES"
            }
          }
        ]
      }
    }
  ],
  "delete_query_index_in_every_run": false
}
Fehlerbehebung

Richten Sie die ILM-Policy Ihres Clusters so ein, dass Indizes überschrieben werden, wenn sie eine bestimmte Größe erreichen.

Erhöhen Sie die Anzahl der Shards für vorhandene Indizes, die mit der Funktion Neuindexierung gewachsen sind. Befolgen Sie für große Indizes mit mehr als 100 GB die folgenden Best Practices:

  • Teilen Sie die Aufgabe mithilfe der Abfrage-API in kleinere Teile auf.
  • Legen Sie die entsprechende Batchgröße und die Anzahl der Anforderungen pro Sekunde fest.

Nebenindexierung

Wenn Daten in das Cluster indexiert werden, schreibt OpenSearch sie zunächst in eine Translogdatei. Der OpenSearch-Prozess nimmt dann in regelmäßigen Abständen Einträge aus dieser Datei auf, um die Daten in ihre Apache Lucene-Strukturen aufzunehmen und entsprechende Segmente mit erforderlichen internen Objekten wie Tokenizers, Felddaten usw. zu erstellen. Hohe Aufnahmeraten oder ein unterkonfiguriertes Cluster können zu Verzögerungen beim Aufnahmeprozess führen. Hier wächst die Größe der Translog-Datei zusammen mit der Verzögerung bei der Indexierung von Dokumenten. Sie können dieses Verhalten mit den Indexierungsstatistiken überwachen.

Verwenden Sie die folgende Konfiguration, um Indexverzögerungen zu überwachen:

POST {{host}}/_plugins/_alerting/monitors/
{
  "type": "monitor",
  "schema_version": 0,
  "name": "UncommittedSize large",
  "monitor_type": "cluster_metrics_monitor",
  "enabled": true,
  "schedule": {
    "period": {
      "interval": 1,
      "unit": "MINUTES"
    }
  },
  "inputs": [
    {
      "uri": {
        "api_type": "NODES_STATS",
        "path": "_nodes/stats",
        "path_params": "",
        "url": "http://localhost:9200/_nodes/stats",
        "clusters": []
      }
    }
  ],
  "triggers": [
    {
      "query_level_trigger": {
        "id": "4Ulmw5YBqFMdxmRCWBL3",
        "name": "Uncommited size",
        "severity": "1",
        "condition": {
          "script": {
            "source": "for (entry in ctx.results[0].nodes.entrySet())\n{    if (entry.getValue().indices.translog.uncommitted_size_in_bytes>1000000000) {       \n      return true;\n     }\n}\nreturn false;",
            "lang": "painless"
          }
        },
        "actions": [
          {
            "id": "notification585623",
            "name": "Notify test",
            "destination_id": "0WZDw5YBwxP9poIbQC8c",
            "message_template": {
              "source": "Monitor {{ctx.monitor.name}} just entered alert status. Please investigate the issue.\n  - Trigger: {{ctx.trigger.name}}\n  - Severity: {{ctx.trigger.severity}}\n  - Period start: {{ctx.periodStart}}\n  - Period end: {{ctx.periodEnd}}",
              "lang": "mustache"
            },
            "throttle_enabled": true,
            "subject_template": {
              "source": "Alerting Notification action",
              "lang": "mustache"
            },
            "throttle": {
              "value": 30,
              "unit": "MINUTES"
            }
          }
        ]
      }
    }
  ],
  "delete_query_index_in_every_run": false,
  "owner": "alerting"
}
Fehlerbehebung

Führen Sie bei der Fehlerbehebung bei der Nachlaufzeitindizierung die folgenden Aufgaben aus:

  • Indexierungsdruck überprüfen.
  • Prüfen Sie die anderen Knotenstatistiken, wie CPU, Speicher, Datenträger-I/O-Statistiken.

Berücksichtigen Sie die folgenden Optionen basierend auf den Ergebnissen der vorherigen Aufgaben:

  • Reduzieren Sie den Indexierungsdruck.
  • Die Konfiguration der Knoten erhöhen.
  • Erhöhen Sie die refresh_interval, wenn das Translog nicht zu hoch ist.

Throttling

OpenSearch speichert Daten in Form von Lucene-Segmenten. Die Segmente werden kondensiert und kontinuierlich zusammengeführt, um viele Operationen auf denselben Dokumenten zusammenzufassen. Wenn die erforderliche Indexierungsgeschwindigkeit größer ist als das, was das OpenSearch-Cluster aufnehmen kann, werden diese Zusammenführungen gedrosselt. Sie können Throttling mithilfe von Indexierungsstatistiken überwachen und den Throttling-Schwellenwert entsprechend Ihren Anforderungen aktualisieren.

Verwenden Sie die folgende Konfiguration, um Throttling einzurichten:

POST {{host}}/_plugins/_alerting/monitors/
{
  "type": "monitor",
  "schema_version": 0,
  "name": "Merge Throttling",
  "monitor_type": "cluster_metrics_monitor",
  "enabled": true,
  "schedule": {
    "period": {
      "interval": 1,
      "unit": "MINUTES"
    }
  },
  "inputs": [
    {
      "uri": {
        "api_type": "NODES_STATS",
        "path": "_nodes/stats",
        "path_params": "",
        "url": "http://localhost:9200/_nodes/stats",
        "clusters": []
      }
    }
  ],
  "triggers": [
    {
      "query_level_trigger": {
        "name": "Merge Throttling",
        "severity": "1",
        "condition": {
          "script": {
            "source": "for (entry in ctx.results[0].nodes.entrySet())\n{    if (entry.getValue().indices.merges.total_throttled_time_in_millis>300000) {       \n      return true;\n     }\n}\nreturn false;",
            "lang": "painless"
          }
        },
        "actions": [
          {
            "id": "notification585623",
            "name": "Notify test",
            "destination_id": "0WZDw5YBwxP9poIbQC8c",
            "message_template": {
              "source": "Monitor {{ctx.monitor.name}} just entered alert status. Please investigate the issue.\n  - Trigger: {{ctx.trigger.name}}\n  - Severity: {{ctx.trigger.severity}}\n  - Period start: {{ctx.periodStart}}\n  - Period end: {{ctx.periodEnd}}",
              "lang": "mustache"
            },
            "throttle_enabled": true,
            "subject_template": {
              "source": "Alerting Notification action",
              "lang": "mustache"
            },
            "throttle": {
              "value": 30,
              "unit": "MINUTES"
            }
          }
        ]
      }
    }
  ],
  "delete_query_index_in_every_run": false,
  "owner": "alerting"
}
Fehlerbehebung

Führen Sie bei der Throttling-Fehlerbehebung die folgenden Aufgaben aus:

  • Indexierungsdruck überprüfen.
  • Prüfen Sie die anderen Knotenstatistiken, wie CPU, Speicher, Datenträger-I/O-Statistiken.

Berücksichtigen Sie die folgenden Optionen basierend auf den Ergebnissen der vorherigen Aufgaben:

  • Reduzieren Sie den Indexierungsdruck.
  • Die Konfiguration der Knoten erhöhen.
  • Erhöhen Sie die refresh_interval, wenn das Translog nicht zu hoch ist.