¿Cómo soluciono problemas de CloudWatch Logs para que se transmitan los registros a mi dominio de Amazon OpenSearch Service?

Última actualización: 20/01/2022

No puedo transmitir mi Amazon CloudWatch Logs a mi dominio de Amazon OpenSearch Service. ¿Cómo soluciono esto?

Resolución

No puedo transmitir varios grupos de registros de CloudWatch al mismo dominio de OpenSearch Service

De forma predeterminada, Amazon CloudWatch crea solo una función de AWS Lambda para cada dominio de OpenSearch Service. Si configura varios grupos de registros para que indexen datos en su dominio, todos esos grupos de registros invocarán la misma función de Lambda. Cuando el primer grupo de registros invoca una función de Lambda, la invocación crea un índice y un campo de tipo en el dominio.

Los índices creados en Elasticsearch 6.0.0 o posterior pueden contener solo un tipo de asignación. Los índices creados en versiones 5.x con varios tipos de mapeo seguirán funcionando igual que antes en Elasticsearch 6.x. Para obtener más información acerca de los tipos de asignación de Elasticsearch, consulte Eliminar tipos de asignación en el sitio web de Elasticsearch.

Cuando otros grupos de registros intentan invocar la misma función de Lambda, la invocación falla y devuelve el siguiente mensaje de error:

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

Para resolver este problema, actualice la función de Lambda con la siguiente sintaxis:

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

Esta sintaxis crea varios índices para los distintos grupos de registros que se transfieren por streaming a su dominio de OpenSearch Service.

A continuación, guarde la función de Lambda actualizada para que cree índices separados para los múltiples grupos de registros que están en streaming hacia su dominio.

No puedo transmitir registros a un dominio de OpenSearch Service basado en VPC en la misma cuenta de AWS

Importante: Antes de transmitir por streaming los grupos de registros de CloudWatch a su dominio de OpenSearch Service basado en VPC, asegúrese de actualizar la política de roles de AWS Identity and Access Management (IAM). El rol de IAM adjunto a la función de Lambda correspondiente debe tener adjunta la política AWSLambdaVPCAccessExecutionRole.

A continuación, puede encontrar una política AWSLambdaVPCAccessExecutionRole en formato JSON:

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

Nota: Esta política administrada permite a la función de Lambda escribir el grupo de registros de CloudWatch en el clúster de la VPC.

Después de adjuntar la política a la función de Lambda, puede empezar a transmitir por streaming los registros a su dominio de OpenSearch Service en la VPC.

No puedo transmitir mi grupo de registros de CloudWatch a un dominio de OpenSearch Service cuando el control de acceso detallado está habilitado

Si transmite sus registros de CloudWatch Logs a un dominio de OpenSearch Service con control de acceso detallado, es posible que se produzca el siguiente error de permisos:

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

Si recibe este mensaje de error de los registros de la función de Lambda, la asignación de roles está incompleta.

Nota: De forma predeterminada, OpenSearch Service crea una función de AWS Lambda por usted.

Dominios de Amazon OpenSearch en los que ejecuten la versión 7.9 y posteriores (incluyendo OpenSearch versión 1.x)

Para resolver el mensaje de error, lleve a cabo los siguientes pasos:

1.    Abra OpenSearch Dashboards. Encontrará un enlace a OpenSearch Dashboards en el resumen del dominio de la consola de OpenSearch Service.

2.    En el panel de navegación, elija Security (Seguridad).

3.    Elija Roles (Roles).

4.    Elija el rol all_access.

5.    Elija la pestaña Mapped users (Usuarios asignados).

6.    En la página de diálogo Mapped users (Usuarios asignados), elijaManage mapping (Administrar asignación).

7.    En Backend roles (Roles de backend), ingrese el ARN del rol de ejecución de la función de Lambda.

8.    Seleccione Map (Mapa). Ahora los registros se deberían transmitir al dominio de OpenSearch Service.

Para obtener más información acerca de la asignación de roles, consulte Asignar roles a usuarios.

Dominios de Amazon OpenSearch en los que se ejecuten la versión 7.8 y anteriores

Para resolver el mensaje de error, lleve a cabo los siguientes pasos:

1.    Abra OpenSearch Dashboards. Encontrará un enlace a OpenSearch Dashboards en el resumen del dominio de la consola de OpenSearch Service.

2.    En el panel de navegación izquierdo, elija el icono de candado.

3.    Seleccione Role mappings (Asignaciones de roles).

4.    Elija all_access y security_manager como sus roles.

Nota: El rol all_access proporciona acceso únicamente a su clúster. En función del caso de uso, también puede agregar control de acceso detallado al clúster.

5.    Edite la asignación de all_access.

6.    En Backend Role (Rol de backend), agregue el rol de ejecución de la función de Lambda y elija Submit (Enviar). Ahora los registros se deberían transmitir al dominio de OpenSearch Service.

Los registros de CloudWatch no se entregan a mi dominio de OpenSearch Service

Cuando transmite los registros de CloudWatch Logs (mediante la función predeterminada de AWS Lambda) a su dominio de OpenSearch Service, es posible que se produzca el siguiente error de indexación:

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

Nota: De forma predeterminada, los errores de AWS Lambda se devuelven como respuestas 200 OK.

Para solucionar este mensaje de error, lleve a cabo los siguientes pasos:

1.    Abra la función predeterminada de AWS Lambda.

2.    Busque la siguiente línea de código:

"var logFailedResponses = true;"

3.    Actualice el valor var logFailedResponses a “true” (verdadero). Esta actualización proporciona información adicional sobre cualquier nueva solicitud de indexación que utilice la función de AWS Lambda. Puede utilizar la información adicional para identificar la causa del problema de indexación.

Recibo un error cluster_block_exception

Las excepciones de bloques de clúster se deben a lo siguiente:

  • falta de espacio de almacenamiento libre
  • presión excesiva en la memoria de JVM

Para obtener más información acerca de cómo solucionar las excepciones de bloques de clúster, consulte ClusterBlockException.

Amazon OpenSearch Service es el sucesor de Amazon Elasticsearch Service.


¿Le resultó útil este artículo?


¿Necesita asistencia técnica o con la facturación?