Quiero crear una notificación de alarma de Amazon CloudWatch para un cambio de estado a fin de incluir los eventos de registro que activaron la alarma.
Descripción corta
Puedes configurar los filtros de métricas para que coincidan con eventos de registro específicos, como los eventos de AWS CloudTrail que contienen errores AccessDenied o UnauthorizedOperations. A continuación, utiliza Registros de CloudWatch para obtener las métricas. Para supervisar las métricas, crea una alarma de CloudWatch.
De forma predeterminada, una alarma de CloudWatch que utiliza Amazon Simple Notification Service (Amazon SNS) envía una notificación preformateada que contiene detalles de alarma y métricas. Para determinar la causa del cambio de estado, puedes incorporar en la notificación los eventos de registro que activaron la alarma de CloudWatch.
Para invocar una función de AWS Lambda cuando cambia el estado de la alarma, utiliza la integración de Lambda directa con la alarma de CloudWatch. A continuación, la función de Lambda puede publicar una notificación personalizada con los eventos de registro relacionados.
Resolución
Requisito previo: Asegúrate de tener una alarma de CloudWatch existente que supervise una métrica personalizada desde un filtro de métrica. Para obtener más información, consulta Creación de una alarma de CloudWatch basada en un umbral estático.
Creación de una función de AWS Lambda
Configura una función de Lambda para realizar las siguientes acciones:
-
Analiza los detalles del evento de alarma de CloudWatch, como el nombre, la descripción, la marca de tiempo y el motivo del cambio de estado de la alarma. Puedes incorporar los detalles en el mensaje personalizado.
-
Utiliza Información de registros de CloudWatch para analizar los datos de registro del grupo de registro de CloudWatch relacionado.
Cuando la alarma cambia de estado, la función de Lambda emite la llamada a la API StartQuery para ejecutar una consulta en el grupo de registro. El siguiente ejemplo de consulta resume las llamadas a la API de CloudTrail que fallan con un error AccessDenied o UnauthorizedOperation:
filter (errorCode="AccessDenied" or errorCode="UnauthorizedOperation")
| stats count(*) as Hits by errorCode, errorMessage, sourceIPAddress, userIdentity.arn
| sort Hits desc
-
Utiliza GetQueryResults para recuperar los resultados correspondientes.
-
Utiliza la API de publicación de Amazon SNS para enviar un mensaje personalizado que contenga los detalles de la alarma y los resultados de las consultas de Información de registros de CloudWatch.
Información relacionada
¿Cómo personalizo la línea de asunto predeterminada de los correos electrónicos de Amazon SNS?