Como soluciono problemas com o CloudWatch Logs para que ele faça uma transmissão para o meu domínio do Amazon OpenSearch Service?

Data da última atualização: 2021-11-22

Não consigo fazer uma transmissão do meu Amazon CloudWatch Logs para o meu domínio do Amazon OpenSearch Service (sucessor do Amazon Elasticsearch Service). Como posso solucionar esse problema?

Resolução

Não consigo fazer uma transmissão de vários grupos de logs do CloudWatch para o mesmo domínio do OpenSearch Service

Por padrão, o Amazon CloudWatch cria apenas uma função do AWS Lambda para cada domínio do OpenSearch Service. Se você configurar vários grupos de log para indexar dados no seu domínio, todos os diversos grupos de logs invocarão a mesma função Lambda. Quando o primeiro grupo de logs invoca uma função Lambda, a chamada cria um índice e um campo de tipo no seu domínio.

Os índices criados no Elasticsearch 6.0.0 ou posterior podem conter apenas um único tipo de mapeamento. Os índices criados na versão 5.x com vários tipos de mapeamento continuarão funcionando como antes no Elasticsearch 6.x. Para obter mais informações sobre a descontinuação dos tipos de mapeamento do Elasticsearch, consulteRemoção de tipos de mapeamento no site do Elasticsearch.

Quando outros grupos de log tentam invocar a mesma função Lambda, a invocação falha com a seguinte mensagem de erro:

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

Para solucionar esse problema, atualize a sua função Lambda com a seguinte sintaxe:

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

Essa sintaxe cria vários índices para os diferentes grupos de logs que estão sendo transmitidos para o seu domínio do OpenSearch Service.

Em seguida, salve a função Lambda atualizada para criar índices separados para os diversos grupos de logs que estão sendo transmitidos para o seu domínio.

Não consigo fazer uma transmissão para um domínio do OpenSearch Service baseado em uma VPC na mesma conta da AWS

Importante: antes de fazer uma transmissão dos grupos de logs do CloudWatch para o domínio do OpenSearch Service baseado em uma VPC, atualize a sua política da função do AWS Identity and Access Management (IAM). A função do IAM anexada à função Lambda correspondente deve ter a política AWSLambdaVPCAccessExecutionRole anexada a ela.

Aqui está uma política AWSLambdaVPCAccessExecutionRole no formato JSON:

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

Observação: essa política gerenciada permite que a função Lambda grave o grupo de logs do CloudWatch no seu cluster na VPC.

Depois de anexar a política à sua função Lambda, você poderá começar a fazer uma transmissão dos logs para o domínio do OpenSearch Service na VPC.

Não consigo fazer uma transmissão do meu grupo de logs do CloudWatch para um domínio do OpenSearch Service quando o controle de acesso refinado está habilitado

Se você fizer uma transmissão do seu CloudWatch Logs para um domínio do OpenSearch Service com controle de acesso refinado, poderá receber o seguinte erro de permissões:

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

Se você receber essa mensagem de erro dos logs da função Lambda, o mapeamento de funções estará incompleto.

Observação: por padrão, o OpenSearch Service cria uma função do AWS Lambda para você.

Para solucionar a mensagem de erro, execute as seguintes etapas:

1.    Abra o OpenSearch Dashboards. Você pode encontrar um link para o OpenSearch Dashboards no resumo do domínio do seu console do OpenSearch Service.

2.    No painel de navegação esquerdo, escolha o ícone de cadeado.

3.    Selecione Role mappings (Mapeamentos de funções).

4.    Escolha all_access e security_manager como as suas funções.

Observação: a função all_access só fornece acesso ao seu cluster. Com base no seu caso de uso, você também pode adicionar controle de acesso refinado ao seu cluster.

5.    Edite o mapeamento para all_access.

6.    Em Backend Role (Função de backend), adicione a função de execução da função Lambda e escolha Send (Enviar). Os seus logs agora devem ser transmitidos para o seu domínio do OpenSearch Service.

Para obter mais informações sobre o mapeamento de funções, consulte Mapear funções para usuários.

Os meus logs do CloudWatch não estão sendo entregues ao meu domínio do OpenSearch Service

Quando você faz uma transmissão do CloudWatch Logs (usando a função padrão AWS Lambda) para o domínio do OpenSearch Service, pode receber o seguinte erro de indexação:

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

Observação: por padrão, os erros do AWS Lambda são retornados como respostas de 200 OK.

Para solucionar essa mensagem de erro, execute as seguintes etapas:

1.    Abra a função do AWS Lambda padrão.

2.    Encontre a seguinte linha de código:

"var logFailedResponses = true;"

3.    Atualize o valor var logFailedResponses como “true”. Essa atualização fornece informações adicionais para quaisquer novas solicitações de indexação usando a função do AWS Lambda. É possível usar as informações adicionais para identificar a causa do seu problema de indexação.

Estou recebendo um erro cluster_block_exception

As exceções de bloco de clusters ocorrem pelo seguinte:

  • Falta de espaço de armazenamento gratuito
  • Pressão excessiva de memória JVM

Para obter mais informações sobre como solucionar problemas de exceções de bloco de clusters, consulte ClusterBlockException.


Este artigo ajudou?


Precisa de ajuda com faturamento ou suporte técnico?