La herramienta de contexto de alarma (ACT) mejora las alarmas de AWS CloudWatch al proporcionar contexto adicional para ayudar en la resolución de problemas y el análisis. Al aprovechar los servicios de AWS como Lambda, CloudWatch, X-Ray y Amazon Bedrock, esta solución agrega y analiza métricas, registros y seguimientos para generar información significativa. Utilizando capacidades de IA generativa de Amazon Bedrock, resume los hallazgos, identifica posibles causas fundamentales y ofrece enlaces de documentación relevantes para ayudar a los operadores a resolver problemas de manera más eficiente. La implementación está diseñada para una fácil implementación e integración en procesos de observabilidad existentes, lo que reduce significativamente los tiempos de respuesta y mejora el análisis de la causa raíz.
Clonar el repositorio:
git clone https://github.com/aws-samples/alarm-context-tool
cd alarm-context-tool
Instale dependencias si planea usar su IDE para detectar problemas en el código:
pip install -r ./dependencies_layer/requirements.txt
pip install aws_lambda_powertools
Para algunas regiones, es posible que necesite cambiar la versión de la capa para Lambda Insights después de los dos puntos en template.yaml. Consulte https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Lambda-Insights-extension-versionsx86-64.html.
- !Sub arn:aws:lambda:${AWS::Region}:580247275435:layer:LambdaInsightsExtension:49
Edite el archivo template.yaml con la dirección de correo electrónico del destinatario y la dirección del remitente.
Resources :
AlarmContextFunction :
Type : AWS::Serverless::Function
Handler : lambda_function.alarm_handler
Runtime : python3.12
Environment :
Variables :
RECIPIENT : [email protected]
SENDER : Name <[email protected]>
Actualice variables de entorno adicionales si es necesario
Actualice sus temas de SNS que reciben notificaciones de alarmas de CloudWatch:
Utilice una implementación guiada para comenzar con:
sam build
sam deploy --guided
Posteriormente, puede compilar, implementar y probar usando el siguiente comando: El evento de prueba debe ser compartido. Ver pruebas
sam build ; sam deploy --no-confirm-changeset ; sam remote invoke --stack-name alarm-context-tool --region < aws-region > --test-event-name < test-event >
Una vez implementada, la función Lambda será activada por los temas de SNS suscritos a CloudWatch Alarms. La función mejorará el mensaje de alarma con contexto adicional, como métricas, registros y seguimientos relacionados. Utiliza Amazon Bedrock para analizar los datos recopilados y generar información útil.
Para crear un nuevo controlador para un servicio de AWS diferente, siga estos pasos:
Cree un nuevo archivo de controlador : cree un nuevo archivo de Python en el directorio handlers
. Por ejemplo, new_service_handler.py
.
Definir la función del controlador : implemente la función del controlador de manera similar a los controladores existentes. Aquí hay una plantilla:
import boto3
import botocore
from aws_lambda_powertools import Logger , Tracer
logger = Logger ()
tracer = Tracer ()
@ tracer . capture_method
def process_new_service ( dimensions , region , account_id , namespace , change_time , annotation_time , start_time , end_time , start , end ):
# Your implementation here
pass
Agregue el controlador a la función Lambda : actualice lambda_function.py
para importar y llamar a su nuevo controlador según el activador.
Actualice la plantilla : modifique template.yaml
para incluir su nuevo controlador y actualice los permisos necesarios.
Resources :
AlarmContextFunction :
Type : AWS::Serverless::Function
Handler : lambda_function.alarm_handler
Runtime : python3.12
Policies :
- Statement :
- Effect : Allow
Action :
- new-service:Describe*
Resource : " * "
Agregue los permisos necesarios : asegúrese de que su nuevo controlador tenga los permisos necesarios actualizando el archivo template.yaml
como se muestra arriba.
Activar una alarma : active manualmente una alarma usando el siguiente comando, reemplazando <alarm_name> con el nombre de su alarma:
aws cloudwatch set-alarm-state --state-value ALARM --state-reason " Testing " --alarm-name " <alarm_name> "
Utilice los casos de prueba generados en los registros : la función principal de Lambda genera un caso de prueba que se puede utilizar en la consola de Lambda. Consulte Prueba de funciones de Lambda en la consola o mediante sam remote invoke
.
Abra la consola de CloudWatch
En el panel de navegación, elija Registros y luego elija Logs Insights .
En el menú desplegable Seleccionar grupo(s) de registro, elija /aws/lambda/alarm-context-tool-AlarmContextFunction-xxxxxxxxxxxx
Ingrese la siguiente consulta, reemplazando <alarm_name> con el nombre de su alarma:
fields @timestamp, @message, @logStream, @log
| filter message = "test_case" AND Records.0.Sns.Message like /<alarm_name>/
Elija Ejecutar consulta
Expanda una entrada de registro y copie todo el campo @message .
Luego puede usar esto para probar su función Lambda bajo demanda.
Las siguientes variables de entorno se pueden configurar para la función Lambda:
AWS_LAMBDA_LOG_LEVEL
: establece el nivel de registro para los registros de AWS Lambda (por ejemplo, INFO, DEBUG). El valor predeterminado es INFO
.ANTHROPIC_VERSION
: Especifica la versión del modelo Anthropic que se utilizará. El valor predeterminado es bedrock-2023-05-31
.BEDROCK_MODEL_ID
: ID del modelo de Amazon Bedrock que se utilizará. El valor predeterminado es anthropic.claude-3-sonnet-20240229-v1:0
.BEDROCK_REGION
: la región de AWS donde se implementa el modelo Bedrock. El valor predeterminado es us-east-1
.BEDROCK_MAX_TOKENS
: la cantidad máxima de tokens que utilizará el modelo Bedrock. El valor predeterminado es 4000
.METRIC_ROUNDING_PRECISION_FOR_BEDROCK
: La precisión para redondear las métricas antes de enviarlas a Bedrock. El valor predeterminado es 3
.POWERTOOLS_LOG_LEVEL
: establece el nivel de registro para los registros de AWS Lambda Powertools (p. ej., INFO, DEBUG). El valor predeterminado es INFO
.POWERTOOLS_LOGGER_LOG_EVENT
: habilita el registro del evento completo en los registros de Lambda Powertools. El valor predeterminado es True
.POWERTOOLS_SERVICE_NAME
: el nombre del servicio que se utilizará en Lambda Powertools. El valor predeterminado es Alarm
.POWERTOOLS_TRACER_CAPTURE_RESPONSE
: controla si se captura la respuesta en el seguimiento. El valor predeterminado es False
.RECIPIENT
: La dirección de correo electrónico para recibir notificaciones.SENDER
: La dirección de correo electrónico del remitente para notificaciones.USE_BEDROCK
: habilita o deshabilita el uso de Amazon Bedrock para IA generativa. El valor predeterminado es True
. Para configurar estas variables, actualice el archivo template.yaml
:
Resources :
AlarmContextFunction :
Type : AWS::Serverless::Function
Handler : lambda_function.alarm_handler
Runtime : python3.12
Environment :
Variables :
AWS_LAMBDA_LOG_LEVEL : INFO
ANTHROPIC_VERSION : bedrock-2023-05-31
BEDROCK_MODEL_ID : anthropic.claude-3-sonnet-20240229-v1:0
BEDROCK_REGION : us-east-1
BEDROCK_MAX_TOKENS : 4000
METRIC_ROUNDING_PRECISION_FOR_BEDROCK : 3
POWERTOOLS_LOG_LEVEL : INFO
POWERTOOLS_LOGGER_LOG_EVENT : " True "
POWERTOOLS_SERVICE_NAME : Alarm
POWERTOOLS_TRACER_CAPTURE_RESPONSE : " False "
RECIPIENT : [email protected]
SENDER : Name <[email protected]>
USE_BEDROCK : " True "
functions_logs
)log_group_name
(cadena): el nombre del grupo de registros.start_time
(str): la hora de inicio de la consulta.end_time
(str): la hora de finalización de la consulta.query
(cadena): la consulta de Logs Insights.functions_metrics
)dashboard_metrics
(lista): la lista de métricas del panel.annotation_time
(str): el tiempo de anotación para el panel.start
(cadena): la hora de inicio del panel.end
(str): la hora de finalización del panel.region
(cadena): la región de AWS.functions_xray
)trace_ids
(lista): la lista de ID de seguimiento para procesar.start_time
(str): la hora de inicio del procesamiento de seguimiento.end_time
(str): la hora de finalización del procesamiento de seguimiento.region
(cadena): la región de AWS. Consulte CONTRIBUCIÓN para obtener más información.
Esta biblioteca tiene la licencia MIT-0. Ver el archivo de LICENCIA.