Wie sorge ich dafür, dass CloudWatch Logs in meine Domäne von Amazon OpenSearch Service streamt?

Letzte Aktualisierung: 20.1.2022

Ich kann meine Amazon CloudWatch Logs nicht auf meine Amazon-OpenSearch-Service-Domäne streamen. Wie behebe ich dieses Problem?

Auflösung

Ich kann nicht mehrere CloudWatch-Protokollgruppen auf dieselbe OpenSearch-Service-Domäne streamen

Standardmäßig erstellt Amazon CloudWatch nur eine AWS-Lambda-Funktion für jede OpenSearch-Service-Domäne. Wenn Sie mehrere Protokollgruppen einrichten, um Daten in Ihre Domäne zu indizieren, rufen dann alle mehreren Protokollgruppen dieselbe Lambda-Funktion auf. Wenn die erste Protokollgruppe eine Lambda-Funktion aufruft, erstellt der Aufruf einen Index und ein Typfeld in Ihrer Domäne.

In Elasticsearch 6.0.0 oder höher erstellte Indizes können nur einen einzigen Mappingtyp enthalten. Indizes, die in 5.x mit mehreren Mappingtypen erstellt wurden, funktionieren weiterhin wie zuvor in Elasticsearch 6.x. Weitere Informationen zur Veraltungsweise von Elasticsearch-Mappingtypen finden Sie unter Entfernen von Mappingtypen auf der Elasticsearch-Website.

Wenn andere Protokollgruppen versuchen, dieselbe Lambda-Funktion aufzurufen, schlägt der Aufruf mit der folgenden Fehlermeldung fehl:

"reason": "Rejecting mapping update to [<index_name>] as the final mapping would have more than 1 type: [log-group-1, log-group-2]”

Aktualisieren Sie Ihre Lambda-Funktion mit der folgenden Syntax, um dieses Problem zu beheben:

var indexName = [
        'cwl-' + payload.logGroup.toLowerCase().split('/').join('-') + '-' + timestamp.getUTCFullYear(),
        ('0' + (timestamp.getUTCMonth() + 1)).slice(-2),
        ('0' + timestamp.getUTCDate()).slice(-2) 
        ].join('.');

Diese Syntax erstellt mehrere Indizes für die verschiedenen Protokollgruppen, die in Ihre OpenSearch-Service-Domäne streamen.

Speichern Sie dann die aktualisierte Lambda-Funktion, um separate Indizes für die mehreren Protokollgruppen zu erstellen, die in Ihre Domäne streamen.

Ich kann nicht auf eine VPC-basierte OpenSearch-Service-Domäne im selben AWS-Konto streamen

Wichtig: Bevor Sie die CloudWatch-Protokollgruppen auf Ihre VPC-basierte OpenSearch-Service-Domäne streamen, müssen Sie Ihre Rollenrichtlinie für AWS Identity and Access Management (IAM) aktualisieren. An die IAM-Rolle, die an die entsprechende Lambda-Funktion angehängt ist, muss die Richtlinie AWSLambdaVPCAccessExecutionRole angefügt sein.

Hier ist eine Richtlinie für AWSLambdaVPCAccessExecutionRole im JSON-Format:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "logs:CreateLogGroup",
                "logs:CreateLogStream",
                "logs:PutLogEvents",
                "ec2:CreateNetworkInterface",
                "ec2:DescribeNetworkInterfaces",
                "ec2:DeleteNetworkInterface"
            ],
            "Resource": "*"
        }
    ]
}

Hinweis: Diese verwaltete Richtlinie ermöglicht es der Lambda-Funktion, die CloudWatch-Protokollgruppe in Ihren Cluster in der VPC zu schreiben.

Nachdem Sie die Richtlinie an Ihre Lambda-Funktion angehängt haben, können Sie damit beginnen, die Protokolle an Ihre OpenSearch-Service-Domäne in der VPC zu streamen.

Ich kann meine CloudWatch-Protokollgruppe nicht auf eine OpenSearch-Service-Domäne streamen, wenn eine feinkörnige Zugriffssteuerung aktiviert ist

Wenn Sie Ihre CloudWatch Logs mit einer feinkörnigen Zugriffssteuerung an eine OpenSearch-Service-Domäne streamen, tritt möglicherweise der folgende Berechtigungsfehler auf:

"{\"statusCode\":403,\"responseBody\":{\"error\":{\"root_cause\":[{\"type\":\"security_exception\",\"reason\":\"no permissions for [indices:data/write/bulk] and User [name=arn:aws:iam::123456789101:role/lambda_elasticsearch_execution, roles=[arn:aws:iam::123456789101:role/lambda_elasticsearch_execution], requestedTenant=null]\"}],\"type\":\"security_exception\",\"reason\":\"no permissions for [indices:data/write/bulk] and User [name=arn:aws:iam::123456789101:role/lambda_elasticsearch_execution, roles=[arn:aws:iam::123456789101:role/lambda_elasticsearch_execution], requestedTenant=null]\"},\"status\":403}}"

Wenn Sie diese Fehlermeldung aus Ihren Lambda-Funktionsprotokollen erhalten, ist das Rollen-Mapping unvollständig.

Hinweis: Standardmäßig erstellt OpenSearch Service eine AWS-Lambda-Funktion für Sie.

Amazon-OpenSearch-Domains mit 7.9 und höher (einschließlich OpenSearch Version 1.x)

Führen Sie die folgenden Schritte aus, um die Fehlermeldung zu beheben:

1.    Öffnen Sie OpenSearch Dashboards. Einen Link zu OpenSearch Dashboards finden Sie in der Domänenübersicht Ihrer OpenSearch-Service-Konsole.

2.    Wählen Sie im Navigationsbereich Sicherheit.

3.    Wählen Sie Rollen.

4.    Wählen Sie die Rolle all_access.

5.    Wählen Sie die Registerkarte Zugeordnete Benutzer.

6.    Wählen Sie auf der Dialogseite Zugeordnete Benutzer die Option Zuordnung verwalten.

7.    Geben Sie unter Backend-Rollen die Lambda-Funktion zum Ausführen der Rolle ARN ein.

8.    Wählen Sie Map. Ihre Protokolle sollten jetzt auf Ihre OpenSearch-Service-Domäne streamen.

Weitere Informationen zum Rollen-Mapping finden Sie unter Rollen den Benutzern zuordnen.

Amazon-OpenSearch-Domains mit 7.8 und früher

Führen Sie die folgenden Schritte aus, um die Fehlermeldung zu beheben:

1.    Öffnen Sie OpenSearch Dashboards. Einen Link zu OpenSearch Dashboards finden Sie in der Domänenübersicht Ihrer OpenSearch-Service-Konsole.

2.    Wählen Sie im linken Navigationsbereich das Schlosssymbol.

3.    Wählen Sie Rollenzuordnungen aus.

4.    Wählen Sie all_access und security_manager als Ihre Rollen.

Hinweis: Die Rolle all_access bietet nur Zugriff auf Ihren Cluster. Basierend auf Ihrem Anwendungsfall können Sie Ihrem Cluster auch eine feinkörnige Zugriffssteuerung hinzufügen.

5.    Bearbeiten Sie das Mapping für all_access.

6.    Fügen Sie für die Backend-Rolle die Ausführungsrolle der Lambda-Funktion hinzu und wählen Sie Senden. Ihre Protokolle sollten jetzt auf Ihre OpenSearch-Service-Domäne streamen.

Meine CloudWatch Logs werden nicht an meine OpenSearch-Service-Domäne geliefert

Wenn Sie CloudWatch Logs (mithilfe der standardmäßigen AWS Lambda-Funktion) auf Ihre OpenSearch-Service-Domäne streamen, kann der folgende Indexierungsfehler auftreten:

"errorMessage": "{\"statusCode\":200,\"responseBody\":{\"took\":42,\"errors\":true}}",

Hinweis: Standardmäßig werden AWS Lambda-Fehler als 200-OK-Antworten zurückgegeben.

Führen Sie die folgenden Schritte aus, um diese Fehlermeldung zu beheben:

1.    Öffnen Sie die standardmäßige AWS-Lambda-Funktion.

2.    Finden Sie die folgende Code-Zeile:

"var logFailedResponses = true;"

3.    Aktualisieren Sie den Wert var logFailedResponses auf „true“. Dieses Update bietet zusätzliche Informationen für alle neuen Indexierungsanfragen mithilfe der AWS Lambda-Funktion. Sie können die zusätzlichen Informationen verwenden, um die Ursache Ihres Indizierungsproblems zu ermitteln.

Ich erhalte einen cluster_block_exception-Fehler

Clusterblock-Ausnahmen werden durch Folgendes verursacht:

  • Mangel an freiem Speicherplatz
  • Übermäßiger JVM-Speicherdruck

Weitere Informationen zur Fehlerbehebung bei Clusterblock-Ausnahmen finden Sie unter ClusterBlockException.

Amazon OpenSearch Service ist der Nachfolger von Amazon Elasticsearch Service.


War dieser Artikel hilfreich?


Benötigen Sie Hilfe zur Fakturierung oder technischen Support?