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

7 minutos de lectura
0

No puedo transmitir mis registros de Amazon CloudWatch 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 registro invoca una función de Lambda, la invocación crea un índice y un campo de tipo en el dominio.

Los índices que se crean en Amazon OpenSearch Service, versión 6.0.0 o posteriores, solo pueden contener un tipo de asignación. Los índices que se crean en 5.x con varios tipos de asignación funcionan como antes en OpenSearch Service 6.x. Para obtener más información acerca de la eliminación de los tipos de asignación de OpenSearch Service, consulte Removal of mapping types (Eliminar tipos de asignación) en el sitio web de Elastic.

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

“reason”: “Rejecting mapping update to [

] as the final mapping would have more than 1 type: [log-group-1, log-group-2]“ (“motivo”: “Se rechaza la actualización de la asignación a [

], ya que la asignación final tendría más de un tipo: [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 registro 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_opensearch_execution, roles=[arn:aws:iam::123456789101:role/lambda_opensearch_execution], requestedTenant=null]"}],"type":"security_exception","reason":"no permissions for [indices:data/write/bulk] and User [name=arn:aws:iam::123456789101:role/lambda_opensearch_execution, roles=[arn:aws:iam::123456789101:role/lambda_opensearch_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 OpenSearch Service que ejecutan la versión 7.9 y posteriores (incluida la versión 1.x de OpenSearch)

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 OpenSearch Service con 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 (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 = false;"

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.

Mi filtro de suscripción a CloudWatch no envía datos a mi clúster a través de una función de Lambda predeterminada (OpenSearch Service 2.0 y versiones posteriores)

Es posible que aparezca un error si tiene un filtro de suscripción de CloudWatch para enviar registros a Amazon OpenSearch Service 2.x mediante la función de Lambda predeterminada. Si el filtro de suscripción no almacena los registros y aparece el siguiente error, el error se debe a un parámetro desactivado:

"{"statusCode":400,"responseBody":{"error":{"root_cause":[{"type":"illegal_argument_exception","reason":"Action/metadata line [1] contains an unknown parameter [_type]"}],"type":"illegal_argument_exception","reason":"Action/metadata line [1] contains an unknown parameter [_type]"},"status":400}}"

En las versiones 2.0 y posteriores de OpenSearch Service, el parámetro _type se elimina de los puntos de conexión de la API. Para resolver este error, también debe eliminar el parámetro del código de la función de Lambda.

1.    Abra la consola de AWS Lambda.

2.    Seleccione la función de Lambda predeterminada para el filtro de suscripción.

3.    Consulte el código de su función en Code source (Fuente del código).

4.    Busque la función transform (transformación) que se define en el código. Dentro de esta función, los datos se convierten al formato de indexación de JSON para OpenSearch Service. Las primeras líneas de este código tienen un aspecto similar al siguiente:

function transform(payload) {
    if (payload.messageType === 'CONTROL_MESSAGE') {
        return null;
    }

    var bulkRequestBody = '';

    payload.logEvents.forEach(function(logEvent) {
                var timestamp = new Date(1 * logEvent.timestamp);

5.    En la función transform (transformación), busque el parámetro _type. En la mayoría de los casos, estará en la línea 79. Elimine o comente la línea de código que agrega el parámetro _type. Tras la eliminación, el código tendrá un aspecto similar al siguiente:

var action = {
    "index": {}
};
action.index._index = indexName;
//action.index._type = payload.logGroup;
action.index._id = logEvent.id;

bulkRequestBody += [

Ahora puede enviar solicitudes de indexación sin problemas.


OFICIAL DE AWS
OFICIAL DE AWSActualizada hace un año