Por que eu tenho uma falha na entrega de dados com o Kinesis Data Firehose que tem um domínio do OpenSearch Service como destino?

6 minuto de leitura
0

Quero enviar dados do Amazon Kinesis Data Firehose para meu domínio do Amazon OpenSearch Service, mas tenho uma falha na entrega de dados.

Resumo

Os motivos a seguir podem causar uma falha na entrega entre o Kinesis Data Firehose e o Amazon OpenSearch Service:

  • Destino de entrega que não é válido
  • Falta de permissões adequadas
  • Problemas de invocação de funções do AWS Lambda
  • Problemas de integridade do domínio do OpenSearch Service

Resolução

Ative os Logs para o Kinesis Data Firehose. Entregue seus logs de erros ao Amazon CloudWatch para ajudar a restringir o problema. Em seguida, verifique o nome do grupo de logs /aws/kinesisfirehose/delivery-stream-name no Amazon CloudWatch Logs.

Para entregar logs ao seu grupo de logs do CloudWatch, a função Kinesis Data Firehose deve ter as seguintes permissões:

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

Verifique se você concedeu ao Kinesis Data Firehose acesso a um destino público do OpenSearch Service. Se usar o recurso de transformação de dados, também deverá conceder acesso ao Lambda. Para obter mais informações, consulte Ingerir dados de streaming no Amazon Elasticsearch Service dentro da privacidade da sua VPC com o Amazon Kinesis Data Firehose.

Destino de entrega que não é válido

Confirme se especificou um destino de entrega válido do Kinesis Data Firehose e se está usando o ARN correto. Veja a métrica DeliveryToElasticsearch.Success no CloudWatch para verificar se sua entrega foi bem-sucedida. Um valor métrico de zero é a confirmação de que as entregas não foram bem-sucedidas. Para obter mais informações sobre a métrica DeliveryToElasticsearch.Success, consulte Entrega ao OpenSearch Service nas métricas Entrega de dados do CloudWatch.

Falta de permissões adequadas

Com base na configuração do Kinesis Data Firehose, várias permissões são necessárias.

Para entregar registros a um bucket do Amazon Simple Storage Service (Amazon S3), as permissões a seguir são necessárias:

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

Observação: para usar essa política, o recurso de bucket do Amazon S3 deve estar presente.

Se o Kinesis Data Firehose estiver criptografado em repouso, as seguintes permissões serão necessárias:

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

Para liberar permissões de acesso ao OpenSearch Service, atualize suas permissões:

{
     "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 usa o Kinesis Data Streams como fonte, atualize suas permissões:

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

Para configurar o Kinesis Data Firehose para transformação de dados, atualize sua política:

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

Se ativar o controle de acesso refinado (FGAC) em seu cluster, faça login no OpenSearch Dashboards e adicione um mapeamento de funções. O mapeamento de rolagem permite que a função Kinesis Data Firehose envie solicitações ao OpenSearch Service.

Para fazer login nos painéis do OpenSearch e adicionar um mapeamento de funções, conclua as etapas a seguir:

  1. Abra Panéis.
  2. Selecione a guia Segurança.
  3. Selecione Funções.
  4. Selecione a função all_access.
  5. Selecione a guia Usuários mapeados.
  6. Selecione Gerenciar mapeamento.
  7. Na seção Funções de back-end, insira a função Kinesis Data Firehose.
  8. Selecione Mapear.

Problemas de invocação de funções do AWS Lambda

Verifique a métrica ExecuteProcessing.Success and Errors do Kinesis Data Firehose para confirmar se o Kinesis Data Firehose invoca sua função. Se o Kinesis Data Firehose não tiver invocado sua função Lambda, verifique o tempo de invocação para ver se ele está além do parâmetro de tempo limite. Sua função Lambda talvez precise de um valor de tempo limite maior ou de mais memória para ser concluída. Para mais informações sobre métricas de invocação, consulte Métricas de invocação.

Para identificar os motivos pelos quais o Kinesis Data Firehose não invoca a função Lambda, verifique no grupo CloudWatch Logs o /aws/lambda/lambda-function-name. Se a transformação de dados falhar, os registros com falha serão entregues ao bucket do S3 como backup na pasta processing-failed. Os registros no seu bucket do S3 também contêm a mensagem de erro de falha na invocação. Para obter mais informações sobre como resolver falhas de invocação do Lambda, consulte Tratamento de falhas na transformação de dados.

Problemas de integridade do domínio do OpenSearch Service

Verifique as métricas a seguir para garantir que o OpenSearch Service esteja em boas condições:

  • Utilização da CPU: se essa métrica for consistentemente alta, talvez o nó de dados não consiga responder a nenhuma solicitação ou a dados recebidos. Talvez seja necessário escalar seu cluster.
  • Alta pressão de memória JVM: se a pressão da memória da JVM estiver consistentemente acima de 80%, o cluster pode estar iniciando exceções de circuit breaker de memória. Essas exceções podem impedir que os dados sejam indexados.
  • ClusterWriteBlockException: Esse bloco de indexação ocorre quando seu domínio está sob alta pressão de memória JVM ou quando é necessário mais espaço de armazenamento. Se um nó de dados não tiver espaço suficiente, os novos dados não poderão ser indexados. Para obter mais informações sobre como solucionar problemas do OpenSearch Service, consulte Solução de problemas do Amazon OpenSearch Service.

Nenhum dado recebidos

Para confirmar que há dados de entrada para o Kinesis Data Firehose, monitore as métricas IncomingRecords e IncomingBytes. Um valor zero significa que não há registros que cheguem ao Kinesis Data Firehose. Para obter mais informações sobre as métricas IncomingRecords e IncomingBytes, consulte Ingestão de dados por meio de PUT direto em Métricas de ingestão de dados.

Se o fluxo de entrega usar o Amazon Kinesis Data Streams como fonte, verifique as métricas IncomingRecords e IncomingBytes do fluxo de dados do Kinesis. Essas duas métricas indicam dados recebidos. Um valor zero confirma que não há registros que cheguem aos serviços de streaming.

Verifique as métricas DataReadFromKinesisStream.Bytes e DataReadFromKinesisStream.Records para verificar se os dados estão vindo do Kinesis Data Streams para o Kinesis Data Firehose. Para obter mais informações sobre as métricas de dados, consulte Ingestão de dados por meio do Kinesis Data Streams em Métricas de ingestão de dados. Um valor zero pode indicar uma falha na entrega ao OpenSearch Service em vez de uma falha entre o Kinesis Data Streams e o Kinesis Data Firehose.

Você também pode verificar se as chamadas das APIs PutRecord e PutRecordBatch para o Kinesis Data Firehose são chamadas corretamente. Se não vê nenhuma métrica de fluxo de dados de entrada, verifique o produtor que executa as operações PUT. Para obter mais informações sobre como solucionar problemas de aplicativos de produtores, consulte Solução de problemas de produtores do Amazon Kinesis Data Streams.

AWS OFICIAL
AWS OFICIALAtualizada há 5 meses