L'Alarm Context Tool (ACT) améliore les alarmes AWS CloudWatch en fournissant un contexte supplémentaire pour faciliter le dépannage et l'analyse. En tirant parti des services AWS tels que Lambda, CloudWatch, X-Ray et Amazon Bedrock, cette solution regroupe et analyse les métriques, les journaux et les traces pour générer des informations significatives. Utilisant les capacités d'IA générative d'Amazon Bedrock, il résume les résultats, identifie les causes profondes potentielles et propose des liens de documentation pertinents pour aider les opérateurs à résoudre les problèmes plus efficacement. La mise en œuvre est conçue pour un déploiement et une intégration faciles dans les pipelines d'observabilité existants, réduisant considérablement les temps de réponse et améliorant l'analyse des causes profondes.
Clonez le dépôt :
git clone https://github.com/aws-samples/alarm-context-tool
cd alarm-context-tool
Installez les dépendances si vous prévoyez d'utiliser votre IDE pour détecter des problèmes dans le code :
pip install -r ./dependencies_layer/requirements.txt
pip install aws_lambda_powertools
Pour certaines régions, vous devrez peut-être modifier la version de la couche pour Lambda Insights après les deux-points dans template.yaml. Voir https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Lambda-Insights-extension-versionsx86-64.html.
- !Sub arn:aws:lambda:${AWS::Region}:580247275435:layer:LambdaInsightsExtension:49
Modifiez le fichier template.yaml avec l'adresse e-mail du destinataire et l'adresse de l'expéditeur.
Resources :
AlarmContextFunction :
Type : AWS::Serverless::Function
Handler : lambda_function.alarm_handler
Runtime : python3.12
Environment :
Variables :
RECIPIENT : [email protected]
SENDER : Name <[email protected]>
Mettez à jour les variables d'environnement supplémentaires si nécessaire
Mettez à jour vos sujets SNS qui reçoivent des notifications des alarmes CloudWatch :
Utilisez un déploiement guidé pour commencer :
sam build
sam deploy --guided
Par la suite, vous pouvez créer, déployer et tester à l'aide de la commande suivante : L'événement de test doit être partagé. Voir Tests
sam build ; sam deploy --no-confirm-changeset ; sam remote invoke --stack-name alarm-context-tool --region < aws-region > --test-event-name < test-event >
Une fois déployée, la fonction Lambda sera déclenchée par les sujets SNS abonnés à CloudWatch Alarms. La fonction améliorera le message d'alarme avec un contexte supplémentaire tel que des métriques, des journaux et des traces associés. Il utilise Amazon Bedrock pour analyser les données collectées et générer des informations exploitables.
Pour créer un nouveau gestionnaire pour un autre service AWS, procédez comme suit :
Créer un nouveau fichier de gestionnaire : Créez un nouveau fichier Python dans le répertoire handlers
. Par exemple, new_service_handler.py
.
Définir la fonction de gestionnaire : implémentez la fonction de gestionnaire similaire aux gestionnaires existants. Voici un modèle :
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
Ajoutez le gestionnaire à la fonction Lambda : mettez à jour lambda_function.py
pour importer et appeler votre nouveau gestionnaire en fonction du déclencheur.
Mettez à jour le modèle : modifiez template.yaml
pour inclure votre nouveau gestionnaire et mettez à jour les autorisations nécessaires.
Resources :
AlarmContextFunction :
Type : AWS::Serverless::Function
Handler : lambda_function.alarm_handler
Runtime : python3.12
Policies :
- Statement :
- Effect : Allow
Action :
- new-service:Describe*
Resource : " * "
Ajoutez les autorisations nécessaires : assurez-vous que votre nouveau gestionnaire dispose des autorisations requises en mettant à jour le fichier template.yaml
comme indiqué ci-dessus.
Déclencher une alarme : Déclenchez manuellement une alarme à l'aide de la commande suivante, en remplaçant <alarm_name> par le nom de votre alarme :
aws cloudwatch set-alarm-state --state-value ALARM --state-reason " Testing " --alarm-name " <alarm_name> "
Utiliser les cas de test générés dans les journaux : La fonction Lambda principale génère un scénario de test qui peut être utilisé dans la console Lambda. Consultez Test des fonctions Lambda dans la console ou en utilisant sam remote invoke
.
Ouvrez la console CloudWatch
Dans le volet de navigation, choisissez Logs , puis Logs Insights .
Dans la liste déroulante Sélectionner un ou plusieurs groupes de journaux, choisissez /aws/lambda/alarm-context-tool-AlarmContextFunction-xxxxxxxxxxxx
Saisissez la requête suivante, en remplaçant <alarm_name> par le nom de votre alarme :
fields @timestamp, @message, @logStream, @log
| filter message = "test_case" AND Records.0.Sns.Message like /<alarm_name>/
Choisissez Exécuter la requête
Développez une entrée de journal et copiez l'intégralité du champ @message .
Vous pouvez ensuite l'utiliser pour tester votre fonction Lambda à la demande.
Les variables d'environnement suivantes peuvent être configurées pour la fonction Lambda :
AWS_LAMBDA_LOG_LEVEL
: définit le niveau de journalisation pour les journaux AWS Lambda (par exemple, INFO, DEBUG). La valeur par défaut est INFO
.ANTHROPIC_VERSION
: Spécifie la version du modèle Anthropic à utiliser. La valeur par défaut est bedrock-2023-05-31
.BEDROCK_MODEL_ID
: ID du modèle Amazon Bedrock à utiliser. La valeur par défaut est anthropic.claude-3-sonnet-20240229-v1:0
.BEDROCK_REGION
: région AWS où le modèle Bedrock est déployé. La valeur par défaut est us-east-1
.BEDROCK_MAX_TOKENS
: Le nombre maximum de jetons à utiliser par le modèle Bedrock. La valeur par défaut est 4000
.METRIC_ROUNDING_PRECISION_FOR_BEDROCK
: La précision de l'arrondi des métriques avant l'envoi à Bedrock. La valeur par défaut est 3
.POWERTOOLS_LOG_LEVEL
: définit le niveau de journalisation pour les journaux AWS Lambda Powertools (par exemple, INFO, DEBUG). La valeur par défaut est INFO
.POWERTOOLS_LOGGER_LOG_EVENT
: active la journalisation de l'événement complet dans les journaux Lambda Powertools. La valeur par défaut est True
.POWERTOOLS_SERVICE_NAME
: nom du service à utiliser dans Lambda Powertools. La valeur par défaut est Alarm
.POWERTOOLS_TRACER_CAPTURE_RESPONSE
: contrôle s'il faut capturer la réponse dans le traçage. La valeur par défaut est False
.RECIPIENT
: L'adresse email pour recevoir les notifications.SENDER
: L'adresse email de l'expéditeur pour les notifications.USE_BEDROCK
: active ou désactive l'utilisation d'Amazon Bedrock pour l'IA générative. La valeur par défaut est True
. Pour configurer ces variables, mettez à jour le fichier 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
(str) : Le nom du groupe de journaux.start_time
(str) : L'heure de début de la requête.end_time
(str) : l'heure de fin de la requête.query
(str) : la requête Logs Insights.functions_metrics
)dashboard_metrics
(list) : liste des métriques du tableau de bord.annotation_time
(str) : l'heure d'annotation pour le tableau de bord.start
(str) : L’heure de début du tableau de bord.end
(str) : l'heure de fin du tableau de bord.region
(str) : la région AWS.functions_xray
)trace_ids
(list) : liste des ID de trace à traiter.start_time
(str) : heure de début du traitement de trace.end_time
(str) : heure de fin du traitement de trace.region
(str) : la région AWS. Voir CONTRIBUTION pour plus d'informations.
Cette bibliothèque est sous licence MIT-0. Voir le fichier LICENCE.