Das Alarm Context Tool (ACT) erweitert AWS CloudWatch Alarms, indem es zusätzlichen Kontext zur Unterstützung bei der Fehlerbehebung und Analyse bereitstellt. Durch die Nutzung von AWS-Diensten wie Lambda, CloudWatch, X-Ray und Amazon Bedrock aggregiert und analysiert diese Lösung Metriken, Protokolle und Traces, um aussagekräftige Erkenntnisse zu generieren. Mithilfe generativer KI-Funktionen von Amazon Bedrock fasst es Ergebnisse zusammen, identifiziert potenzielle Grundursachen und bietet relevante Dokumentationslinks, um Betreibern dabei zu helfen, Probleme effizienter zu lösen. Die Implementierung ist für eine einfache Bereitstellung und Integration in bestehende Observability-Pipelines konzipiert, wodurch die Reaktionszeiten erheblich verkürzt und die Ursachenanalyse verbessert werden.
Klonen Sie das Repository:
git clone https://github.com/aws-samples/alarm-context-tool
cd alarm-context-tool
Installieren Sie Abhängigkeiten, wenn Sie Ihre IDE zum Erkennen von Problemen im Code verwenden möchten:
pip install -r ./dependencies_layer/requirements.txt
pip install aws_lambda_powertools
In einigen Regionen müssen Sie möglicherweise die Layer-Version für Lambda Insights nach dem Doppelpunkt in template.yaml ändern. Siehe https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Lambda-Insights-extension-versionsx86-64.html.
- !Sub arn:aws:lambda:${AWS::Region}:580247275435:layer:LambdaInsightsExtension:49
Bearbeiten Sie die Datei template.yaml mit der E-Mail-Adresse des Empfängers und der Absenderadresse.
Resources :
AlarmContextFunction :
Type : AWS::Serverless::Function
Handler : lambda_function.alarm_handler
Runtime : python3.12
Environment :
Variables :
RECIPIENT : [email protected]
SENDER : Name <[email protected]>
Aktualisieren Sie bei Bedarf zusätzliche Umgebungsvariablen
Aktualisieren Sie Ihre SNS-Themen, die Benachrichtigungen von CloudWatch-Alarmen erhalten:
Verwenden Sie zunächst eine geführte Bereitstellung:
sam build
sam deploy --guided
Anschließend können Sie mit dem folgenden Befehl erstellen, bereitstellen und testen: Das Testereignis muss gemeinsam genutzt werden. Siehe Testen
sam build ; sam deploy --no-confirm-changeset ; sam remote invoke --stack-name alarm-context-tool --region < aws-region > --test-event-name < test-event >
Nach der Bereitstellung wird die Lambda-Funktion durch SNS-Themen ausgelöst, die bei CloudWatch Alarms abonniert sind. Die Funktion erweitert die Alarmmeldung um zusätzlichen Kontext wie zugehörige Metriken, Protokolle und Traces. Es nutzt Amazon Bedrock, um die gesammelten Daten zu analysieren und umsetzbare Erkenntnisse zu generieren.
Um einen neuen Handler für einen anderen AWS-Service zu erstellen, führen Sie die folgenden Schritte aus:
Erstellen Sie eine neue Handler-Datei : Erstellen Sie eine neue Python-Datei im handlers
-Verzeichnis. Zum Beispiel new_service_handler.py
.
Definieren Sie die Handler-Funktion : Implementieren Sie die Handler-Funktion ähnlich wie bei vorhandenen Handlern. Hier ist eine Vorlage:
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
Fügen Sie den Handler zur Lambda-Funktion hinzu : Aktualisieren Sie lambda_function.py
um Ihren neuen Handler basierend auf dem Trigger zu importieren und aufzurufen.
Aktualisieren Sie die Vorlage : Ändern Sie template.yaml
um Ihren neuen Handler einzuschließen und die erforderlichen Berechtigungen zu aktualisieren.
Resources :
AlarmContextFunction :
Type : AWS::Serverless::Function
Handler : lambda_function.alarm_handler
Runtime : python3.12
Policies :
- Statement :
- Effect : Allow
Action :
- new-service:Describe*
Resource : " * "
Erforderliche Berechtigungen hinzufügen : Stellen Sie sicher, dass Ihr neuer Handler über die erforderlichen Berechtigungen verfügt, indem Sie die Datei template.yaml
wie oben gezeigt aktualisieren.
Einen Alarm auslösen : Lösen Sie manuell einen Alarm aus, indem Sie den folgenden Befehl verwenden und dabei <alarm_name> durch den Namen Ihres Alarms ersetzen:
aws cloudwatch set-alarm-state --state-value ALARM --state-reason " Testing " --alarm-name " <alarm_name> "
Verwenden Sie die in den Protokollen generierten Testfälle : Die Hauptfunktion von Lambda generiert einen Testfall, der in der Lambda-Konsole verwendet werden kann. Siehe Testen von Lambda-Funktionen in der Konsole oder mithilfe von sam remote invoke
.
Öffnen Sie die CloudWatch-Konsole
Wählen Sie im Navigationsbereich „Logs“ und dann „Logs Insights“ aus.
Wählen Sie im Dropdown-Menü Protokollgruppe(n) auswählen die Option /aws/lambda/alarm-context-tool-AlarmContextFunction-xxxxxxxxxxxx aus
Geben Sie die folgende Abfrage ein und ersetzen Sie <alarm_name> durch den Namen Ihres Alarms:
fields @timestamp, @message, @logStream, @log
| filter message = "test_case" AND Records.0.Sns.Message like /<alarm_name>/
Wählen Sie Abfrage ausführen
Erweitern Sie einen Protokolleintrag und kopieren Sie das gesamte @message -Feld.
Anschließend können Sie damit Ihre Lambda-Funktion bei Bedarf testen.
Für die Lambda-Funktion können folgende Umgebungsvariablen konfiguriert werden:
AWS_LAMBDA_LOG_LEVEL
: Legt die Protokollebene für AWS Lambda-Protokolle fest (z. B. INFO, DEBUG). Der Standardwert ist INFO
.ANTHROPIC_VERSION
: Gibt die zu verwendende Version des Anthropic-Modells an. Der Standardwert ist bedrock-2023-05-31
.BEDROCK_MODEL_ID
: Die ID des zu verwendenden Amazon Bedrock-Modells. Der Standardwert ist anthropic.claude-3-sonnet-20240229-v1:0
.BEDROCK_REGION
: Die AWS-Region, in der das Bedrock-Modell bereitgestellt wird. Der Standardwert ist us-east-1
.BEDROCK_MAX_TOKENS
: Die maximale Anzahl von Token, die vom Bedrock-Modell verwendet werden sollen. Der Standardwert ist 4000
.METRIC_ROUNDING_PRECISION_FOR_BEDROCK
: Die Genauigkeit für das Runden von Metriken vor dem Senden an Bedrock. Der Standardwert ist 3
.POWERTOOLS_LOG_LEVEL
: Legt die Protokollebene für AWS Lambda Powertools-Protokolle fest (z. B. INFO, DEBUG). Der Standardwert ist INFO
.POWERTOOLS_LOGGER_LOG_EVENT
: Aktiviert die Protokollierung des gesamten Ereignisses in Lambda Powertools-Protokollen. Der Standardwert ist True
.POWERTOOLS_SERVICE_NAME
: Der Name des Dienstes, der in Lambda Powertools verwendet werden soll. Die Standardeinstellung ist Alarm
.POWERTOOLS_TRACER_CAPTURE_RESPONSE
: Steuert, ob die Antwort in der Ablaufverfolgung erfasst werden soll. Der Standardwert ist False
.RECIPIENT
: Die E-Mail-Adresse zum Empfangen von Benachrichtigungen.SENDER
: Die E-Mail-Adresse des Absenders für Benachrichtigungen.USE_BEDROCK
: Aktiviert oder deaktiviert die Verwendung von Amazon Bedrock für generative KI. Der Standardwert ist True
. Um diese Variablen zu konfigurieren, aktualisieren Sie die Datei 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): Der Name der Protokollgruppe.start_time
(str): Die Startzeit für die Abfrage.end_time
(str): Die Endzeit für die Abfrage.query
(str): Die Logs Insights-Abfrage.functions_metrics
)dashboard_metrics
(Liste): Die Liste der Metriken für das Dashboard.annotation_time
(str): Die Annotationszeit für das Dashboard.start
(str): Die Startzeit für das Dashboard.end
(str): Die Endzeit für das Dashboard.region
(str): Die AWS-Region.functions_xray
)trace_ids
(Liste): Die Liste der zu verarbeitenden Trace-IDs.start_time
(str): Die Startzeit für die Trace-Verarbeitung.end_time
(str): Die Endzeit für die Trace-Verarbeitung.region
(str): Die AWS-Region. Weitere Informationen finden Sie unter BEITRAGEN.
Diese Bibliothek ist unter der MIT-0-Lizenz lizenziert. Siehe die LICENSE-Datei.