Warum tritt bei Kinesis Data Firehose, die eine OpenSearch Service-Domain als Ziel hat, ein Fehler bei der Datenübermittlung auf?

Lesedauer: 6 Minute
0

Ich möchte Daten von Amazon Kinesis Data Firehose an meine Amazon OpenSearch Service-Domain senden, aber die Datenübermittlung schlägt fehl.

Kurzbeschreibung

Die folgenden Gründe können zu einer fehlgeschlagenen Lieferung zwischen Kinesis Data Firehose und Amazon OpenSearch Service führen:

  • Ungültiges Lieferziel
  • Fehlen geeigneter Berechtigungen
  • Probleme beim Aufrufen der AWS Lambda-Funktion
  • Gesundheitsprobleme der OpenSearch Service-Domain

Behebung

Schalten Sie Protkollierung für Kinesis Data Firehose ein. Senden Sie Ihre Fehlerprotokolle an Amazon CloudWatch, um das Problem einzugrenzen. Suchen Sie dann in Amazon CloudWatch Logs nach dem Protokollgruppennamen /aws/kinesisfirehose/delivery-stream-name.

Um Protokolle an Ihre CloudWatch-Protokollgruppe zu übermitteln, muss die Kinesis Data Firehose-Rolle über die folgenden Berechtigungen verfügen:

{     "Action": [
          "logs:PutLogEvents"     ]
},
{
     "Resource": [
          "arn:aws:logs:region:account-id:log-group:log-group-name:log-stream:log-stream-name"
     ]
}

Stellen Sie sicher, dass Sie Kinesis Data Firehose Zugriff auf ein öffentliches OpenSearch Service-Ziel gewähren. Wenn Sie die Datentransformationsfunktion verwenden, müssen Sie auch Zugriff auf Lambda gewähren. Weitere Informationen finden Sie unter Ingest Streaming-Daten in Amazon Elasticsearch Service innerhalb der Privatsphäre Ihrer VPC mit Amazon Kinesis Data Firehose.

Ungültiges Lieferziel

Vergewissern Sie sich, dass Sie ein gültiges Kinesis Data Firehose-Lieferziel angegeben haben und dass Sie den richtigen ARN verwenden. Sehen Sie sich die DeliveryToElasticsearch.Success-Metrik in CloudWatch an, um zu überprüfen, ob Ihre Lieferung erfolgreich war. Ein Metrikwert von Null ist eine Bestätigung dafür, dass die Lieferungen nicht erfolgreich waren. Weitere Informationen zur DeliveryToElasticsearch.Success-Metrik finden Sie unter Lieferung an OpenSearch Service in CloudWatch-Metriken für die Datenbereitstellung.

Fehlen geeigneter Berechtigungen

Basierend auf der Konfiguration von Kinesis Data Firehose sind mehrere Berechtigungen erforderlich.

Um Datensätze an einen Amazon Simple Storage Service (Amazon S3)-Bucket zu übermitteln, sind die folgenden Berechtigungen erforderlich:

{      
     "Effect": "Allow",
     "Action": [
          "s3:AbortMultipartUpload",
          "s3:GetBucketLocation",
          "s3:GetObject",
          "s3:ListBucket",
          "s3:ListBucketMultipartUploads",
          "s3:PutObject"
     ],
     "Resource": [
          "arn:aws:s3:::bucket-name",
          "arn:aws:s3:::bucket-name/*"
     ]
}

**Hinweis:**Um diese Richtlinie verwenden zu können, muss die Amazon S3-Bucket-Ressource vorhanden sein.

Wenn Ihre Kinesis Data Firehose im Ruhezustand verschlüsselt ist, sind die folgenden Berechtigungen erforderlich:

{
     "Effect": "Allow",
     "Action": [
          "kms:Decrypt",
          "kms:GenerateDataKey"
     ],
     "Resource": [
          "arn:aws:kms:region:account-id:key/key-id"
     ],
     "Condition": {
          "StringEquals": {
               "kms:ViaService": "s3.region.amazonaws.com"
          },
          "StringLike": {
               "kms:EncryptionContext:aws:s3:arn": "arn:aws:s3:::bucket-name/prefix*"
          }
     }
}

Um Berechtigungen für den Zugriff auf den OpenSearch Service zu gewähren, aktualisieren Sie Ihre Berechtigungen:

{
     "Effect": "Allow",
     "Action": [
          "es:DescribeElasticsearchDomain",
          "es:DescribeElasticsearchDomains",
          "es:DescribeElasticsearchDomainConfig",
          "es:ESHttpPost",
          "es:ESHttpPut"
     ],
     "Resource": [
          "arn:aws:es:region:account-id:domain/domain-name",
          "arn:aws:es:region:account-id:domain/domain-name/*"
     ]
},
{
     "Effect": "Allow",
     "Action": [
          "es:ESHttpGet"
     ],
     "Resource": [
          "arn:aws:es:region:account-id:domain/domain-name/_all/_settings",
          "arn:aws:es:region:account-id:domain/domain-name/_cluster/stats",
          "arn:aws:es:region:account-id:domain/domain-name/index-name*/_mapping/type-name",
          "arn:aws:es:region:account-id:domain/domain-name/_nodes",
          "arn:aws:es:region:account-id:domain/domain-name/_nodes/stats",
          "arn:aws:es:region:account-id:domain/domain-name/_nodes/*/stats",
          "arn:aws:es:region:account-id:domain/domain-name/_stats",
          "arn:aws:es:region:account-id:domain/domain-name/index-name*/_stats"
     ]
}

Wenn Sie Kinesis Data Streams als Quelle verwenden, aktualisieren Sie Ihre Berechtigungen:

{
     "Effect": "Allow",
     "Action": [
          "kinesis:DescribeStream",
          "kinesis:GetShardIterator",
          "kinesis:GetRecords",
          "kinesis:ListShards"
     ],
     "Resource": "arn:aws:kinesis:region:account-id:stream/stream-name"
}

Um Kinesis Data Firehose für die Datentransformation zu konfigurieren, aktualisieren Sie Ihre Richtlinie:

{
     "Effect": "Allow",
     "Action": [
          "lambda:InvokeFunction",
           "lambda:GetFunctionConfiguration"
      ],
     "Resource": [
         "arn:aws:lambda:region:account-id:function:function-name:function-version"
     ]
}

Wenn Sie die feinkörnige Zugriffskontrolle (FGAC) in Ihrem Cluster aktivieren, melden Sie sich bei OpenSearch Dashboards an und fügen Sie eine Rollenzuordnung hinzu. Das Rollmapping ermöglicht es der Kinesis Data Firehose-Rolle, Anfragen an OpenSearch Service zu senden.

Gehen Sie wie folgt vor, um sich bei OpenSearch Dashboards anzumelden und eine Rollenzuordnung hinzuzufügen:

  1. Öffnen Sie Dashboards.
  2. Wählen Sie die Registerkarte Sicherheit aus.
  3. Wählen Sie Rollen aus.
  4. Wählen Sie die Rolle all_access aus.
  5. Wählen Sie die Registerkarte Zugeordnete Benutzer aus.
  6. Wählen Sie Zuordnung verwalten aus.
  7. Geben Sie im Abschnitt Backend-Rollen die Data-Firehose-Rolle ein.
  8. Wählen Sie Zuordnen aus.

Probleme beim Aufrufen der AWS Lambda-Funktion

Überprüfen Sie die Kinesis Data Firehose ExecuteProcessing.Success and Errors-Metrik, um zu bestätigen, dass Kinesis Data Firehose Ihre Funktion aufruft. Wenn Kinesis Data Firehose Ihre Lambda-Funktion nicht aufgerufen hat, überprüfen Sie die Aufrufzeit, um festzustellen, ob sie den Timeout-Parameter überschreitet. Ihre Lambda-Funktion benötigt möglicherweise einen höheren Timeout-Wert oder benötigt mehr Speicher, um sie abzuschließen. Weitere Informationen zu Aufrufmetriken finden Sie unter Aufrufmetriken.

Um herauszufinden, warum Kinesis Data Firehose die Lambda-Funktion nicht aufruft, suchen Sie in der CloudWatch Logs-Gruppe nach /aws/lambda/lambda-function-name. Wenn die Datentransformation fehlschlägt, werden die fehlgeschlagenen Datensätze als Backup im Ordner Verarbeitungsfehler an den S3-Bucket übermittelt. Die Datensätze in Ihrem S3-Bucket enthalten auch die Fehlermeldung für einen fehlgeschlagenen Aufruf. Weitere Informationen zum Beheben von Lambda-Aufruffehlern finden Sie unter Fehlerbehandlung bei der Datentransformation.

Gesundheitsprobleme der OpenSearch Service-Domain

Überprüfen Sie die folgenden Kennzahlen, um sicherzustellen, dass OpenSearch Service in gutem Zustand ist:

  • **CPU-Auslastung:**Wenn diese Metrik konstant hoch ist, kann der Datenknoten möglicherweise nicht auf Anfragen oder eingehende Daten antworten. Möglicherweise müssen Sie Ihren Cluster skalieren.
  • **Hoher JVM-Speicherdruck:**Wenn der JVM-Speicherdruck konstant über 80 % liegt, initiiert der Cluster möglicherweise Memory Circuit Breaker-Ausnahmen. Diese Ausnahmen können verhindern, dass die Daten indexiert werden.
  • **ClusterWriteBlockException:**Dieser Indexierungsblock tritt auf, wenn Ihre Domain einem hohen JVM-Speicherdruck ausgesetzt ist oder wenn mehr Speicherplatz benötigt wird. Wenn ein Datenknoten nicht genug Speicherplatz hat, können neue Daten nicht indexiert werden. Weitere Informationen zur Behebung von Problemen mit OpenSearch Service finden Sie unter Problembehandlung bei Amazon OpenSearch Service.

Keine eingehenden Daten

Überwachen Sie die Metriken IncomingRecords und IncomingBytes, um zu bestätigen, dass eingehende Daten für Kinesis Data Firehose vorliegen. Ein Wert von Null bedeutet, dass es keine Datensätze gibt, die Kinesis Data Firehose erreichen. Weitere Informationen zu den Metriken IncomingRecords und IncomingBytes finden Sie unter Datenaufnahme durch direkte PUT in den Datenaufnahme-Metriken.

Wenn der Lieferstream Amazon Kinesis Data Streams als Quelle verwendet, überprüfen Sie die Metriken IncomingRecords and IncomingBytes des Kinesis-Datenstreams. Diese beiden Metriken geben eingehende Daten an. Ein Wert von Null bestätigt, dass es keine Datensätze gibt, die die Streaming-Dienste erreichen.

Überprüfen Sie die Metriken DataReadFromKinesisStream.Bytes und DataReadFromKinesisStream.Records, um zu überprüfen, ob Daten von Kinesis Data Streams zu Kinesis Data Firehose kommen. Weitere Informationen zu den Datenmetriken finden Sie unter Datenaufnahme durch Kinesis Data Streams in den Datenaufnahme-Metriken. Ein Wert von Null kann eher auf einen Fehler bei der Übertragung an OpenSearch Service als auf einen Fehler zwischen Kinesis Data Streams und Kinesis Data Firehose hinweisen.

Sie können auch überprüfen, ob die PutRecord und PutRecordBatch-API-Aufrufe für Kinesis Data Firehose ordnungsgemäß aufgerufen wurden. Wenn Sie keine eingehenden Datenflussmetriken sehen, überprüfen Sie den Hersteller, der die PUT-Operationen ausführt. Weitere Informationen zur Behebung von Problemen mit der Produzenten-Anwendung finden Sie unter Fehlerbehandlung bei Amazon Kinesis Data Streams-Produzenten.

AWS OFFICIAL
AWS OFFICIALAktualisiert vor 5 Monaten