Perché si verifica un errore di consegna dei dati in Kinesis Data Firehose con un dominio Servizio OpenSearch come destinazione?

6 minuti di lettura
0

Desidero inviare dati da Amazon Kinesis Data Firehose al mio dominio Servizio OpenSearch di Amazon, ma ho riscontrato un errore di consegna dei dati.

Breve descrizione

I seguenti motivi possono causare una mancata consegna tra Kinesis Data Firehose e Servizio OpenSearch di Amazon:

  • Destinazione di consegna non valida
  • Mancanza di autorizzazioni adeguate
  • Problemi di invocazione della funzione AWS Lambda
  • Problemi di integrità del dominio Servizio OpenSearch

Soluzione

Attiva la registrazione per Kinesis Data Firehose. Invia i log degli errori ad Amazon CloudWatch per risolvere il problema. Quindi, controlla il nome del gruppo di log /aws/kinesisfirehose/delivery-stream-name in Amazon CloudWatch Logs.

Per inviare i log al gruppo di log di CloudWatch, il ruolo Kinesis Data Firehose deve disporre delle seguenti autorizzazioni:

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

Verifica di concedere a Kinesis Data Firehose l'accesso a una destinazione pubblica del Servizio OpenSearch. Se utilizzi la funzionalità di trasformazione dei dati, devi anche concedere l'accesso a Lambda. Per ulteriori informazioni, consulta la sezione Ingest streaming data into Amazon Elasticsearch Service within the privacy of your VPC with Amazon Kinesis Data Firehose.

Destinazione di consegna non valida

Verifica di avere specificato una destinazione di consegna Kinesis Data Firehose valida e di utilizzare l'ARN corretto. Visualizza la metrica DeliveryToElasticsearch.Success in CloudWatch per verificare se la consegna è avvenuta con successo. Un valore metrico pari a zero rappresenta la conferma che le consegne non sono andate a buon fine. Per ulteriori informazioni sulla metrica DeliveryToElasticsearch.Success, consulta la sezione Delivery to OpenSearch Service in Data delivery CloudWatch metrics.

Mancanza di autorizzazioni adeguate

In base alla configurazione di Kinesis Data Firehose, sono necessarie diverse autorizzazioni.

Per inviare i record a un bucket Amazon Simple Storage Service (Amazon S3), sono necessarie le seguenti autorizzazioni:

{      
     "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/*"
     ]
}

Nota: per utilizzare questa policy, deve essere presente la risorsa del bucket Amazon S3.

Se Kinesis Data Firehose è crittografato quando è inattivo, sono necessarie le seguenti autorizzazioni:

{
     "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*"
          }
     }
}

Per consentire le autorizzazioni per l'accesso al Servizio OpenSearch, aggiorna le tue autorizzazioni:

{
     "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"
     ]
}

Se utilizzi il flusso di dati Kinesis come origine, aggiorna le autorizzazioni:

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

Per configurare Kinesis Data Firehose per la trasformazione dei dati, aggiorna la tua policy:

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

Se attivi il controllo granulare degli accessi (FGAC) sul cluster, accedi ai OpenSearch Dashboards e aggiungi una mappatura dei ruoli. La mappatura dei rulli consente al ruolo Kinesis Data Firehose di inviare richieste al Servizio OpenSearch.

Per accedere a OpenSearch Dashboards e aggiungere una mappatura dei ruoli, completa i seguenti passaggi:

  1. Apri Dashboards.
  2. Scegli la scheda Sicurezza.
  3. Scegli Ruoli.
  4. Scegli il ruolo all_access.
  5. Scegli la scheda Utenti mappati.
  6. Scegli Gestisci mappatura.
  7. Nella sezione Ruoli backend, inserisci il ruolo Kinesis Data Firehose.
  8. Scegli Mappa.

Problemi di invocazione della funzione AWS Lambda

Controlla la metrica Kinesis Data Firehose ExecuteProcessing.Success ed Errori per verificare se Kinesis Data Firehose richiama la tua funzione. Se Kinesis Data Firehose non ha richiamato la funzione Lambda, controlla l'ora di chiamata per verificare se supera il parametro di timeout. La funzione Lambda potrebbe richiedere un valore di timeout maggiore o richiedere più memoria per il suo completamento. Per ulteriori informazioni sulle metriche di chiamata, consulta la sezione Invocation metrics.

Per identificare i motivi per cui Kinesis Data Firehose non richiama la funzione Lambda, verifica /aws/lambda/lambda-function-name nel gruppo CloudWatch Logs. Se la trasformazione dei dati ha esito negativo, i record non riusciti vengono consegnati al bucket S3 come backup nella cartella processing-failed. I record nel bucket S3 contengono anche il messaggio di errore per l’invocazione non riuscita. Per ulteriori informazioni sulla risoluzione degli errori di chiamata Lambda, consulta la sezione Data transformation failure handling.

Problemi di integrità del dominio Servizio OpenSearch

Controlla le seguenti metriche per assicurarti dell’integrità del Servizio OpenSearch:

  • Utilizzo della CPU: se questa metrica è costantemente elevata, il nodo di dati potrebbe non essere in grado di rispondere alle richieste o ai dati in arrivo. Potrebbe essere necessario dimensionare il cluster.
  • Pressione della memoria JVM: se la pressione della memoria JVM è costantemente superiore all'80%, è possibile che il cluster stia avviando eccezioni relative agli interruttori di memoria. Tali eccezioni possono impedire l'indicizzazione dei dati.
  • ClusterWriteBlockException: questo blocco di indicizzazione si verifica quando il dominio è sottoposto a un'elevata pressione di memoria JVM o quando è necessario più spazio di archiviazione. Se un nodo di dati non dispone di spazio sufficiente, i nuovi dati non possono essere indicizzati. Per ulteriori informazioni sulla risoluzione dei problemi di Servizio OpenSearch, consulta la sezione Troubleshooting Amazon OpenSearch Service.

Nessun dato in entrata

Per confermare la presenza di dati in entrata per Kinesis Data Firehose, è necessario monitorare le metriche IncomingRecords e IncomingBytes. Un valore pari a zero indica che non ci sono record che raggiungono Kinesis Data Firehose. Per ulteriori informazioni sulle metriche IncomingRecords e IncomingBytes, consulta la sezione Data ingestion through direct PUT in Data ingestion metrics.

Se il flusso di distribuzione utilizza il flusso di dati Amazon Kinesis come origine, controlla le metriche IncomingRecords e IncomingBytes del flusso di dati Kinesis. Queste due metriche indicano i dati in entrata. Un valore pari a zero conferma che non ci sono record che raggiungono i servizi di streaming.

Controlla le metriche DataReadFromKinesisStream.Bytese DataReadFromKinesisStream.Records per verificare se i dati provengono dal flusso di dati Kinesis verso Kinesis Data Firehose. Per ulteriori informazioni sulle metriche dei dati, consulta Data ingestion through Kinesis Data Streams in Data ingestion metrics. Un valore pari a zero può indicare una mancata consegna al Servizio OpenSearch anziché un errore tra il flusso di dati Kinesis e Kinesis Data Firehose.

È possibile anche verificare se le chiamate API PutRecord e PutRecordBatch per Kinesis Data Firehose vengono richiamate correttamente. Se non visualizzi alcuna metrica del flusso di dati in entrata, verifica il produttore che esegue le operazioni PUT. Per ulteriori informazioni sulla risoluzione dei problemi relativi alle applicazioni di produzione, consulta Troubleshooting Amazon Kinesis Data Streams producers.

AWS UFFICIALE
AWS UFFICIALEAggiornata 5 mesi fa