A Alarm Context Tool (ACT) aprimora os alarmes do AWS CloudWatch, fornecendo contexto adicional para auxiliar na solução de problemas e na análise. Ao aproveitar os serviços da AWS, como Lambda, CloudWatch, X-Ray e Amazon Bedrock, esta solução agrega e analisa métricas, logs e rastreamentos para gerar insights significativos. Usando recursos generativos de IA do Amazon Bedrock, ele resume descobertas, identifica possíveis causas raízes e oferece links de documentação relevantes para ajudar os operadores a resolver problemas com mais eficiência. A implementação foi projetada para fácil implantação e integração em pipelines de observabilidade existentes, reduzindo significativamente os tempos de resposta e melhorando a análise da causa raiz.
Clone o repositório:
git clone https://github.com/aws-samples/alarm-context-tool
cd alarm-context-tool
Instale dependências se você planeja usar seu IDE para detectar problemas no código:
pip install -r ./dependencies_layer/requirements.txt
pip install aws_lambda_powertools
Para algumas regiões, pode ser necessário alterar a versão da camada do Lambda Insights após os dois pontos em 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 o arquivo template.yaml com o endereço de e-mail do destinatário e o endereço do remetente.
Resources :
AlarmContextFunction :
Type : AWS::Serverless::Function
Handler : lambda_function.alarm_handler
Runtime : python3.12
Environment :
Variables :
RECIPIENT : [email protected]
SENDER : Name <[email protected]>
Atualize variáveis de ambiente adicionais, se necessário
Atualize seus tópicos SNS que recebem notificações de alarmes do CloudWatch:
Use uma implantação guiada para começar:
sam build
sam deploy --guided
Posteriormente, você pode construir, implantar e testar usando o seguinte comando: O evento de teste deve ser compartilhado. Veja o teste
sam build ; sam deploy --no-confirm-changeset ; sam remote invoke --stack-name alarm-context-tool --region < aws-region > --test-event-name < test-event >
Depois de implantada, a função Lambda será acionada por tópicos SNS inscritos em alarmes do CloudWatch. A função aprimorará a mensagem de alarme com contexto adicional, como métricas, logs e rastreamentos relacionados. Ele usa o Amazon Bedrock para analisar os dados coletados e gerar insights acionáveis.
Para criar um novo manipulador para um serviço AWS diferente, siga estas etapas:
Crie um novo arquivo manipulador : Crie um novo arquivo Python no diretório handlers
. Por exemplo, new_service_handler.py
.
Defina a função do manipulador : implemente a função do manipulador semelhante aos manipuladores existentes. Aqui está um modelo:
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
Adicione o manipulador à função Lambda : atualize lambda_function.py
para importar e chamar seu novo manipulador com base no gatilho.
Atualize o modelo : modifique template.yaml
para incluir seu novo manipulador e atualize as permissões necessárias.
Resources :
AlarmContextFunction :
Type : AWS::Serverless::Function
Handler : lambda_function.alarm_handler
Runtime : python3.12
Policies :
- Statement :
- Effect : Allow
Action :
- new-service:Describe*
Resource : " * "
Adicione as permissões necessárias : certifique-se de que seu novo manipulador tenha as permissões necessárias atualizando o arquivo template.yaml
conforme mostrado acima.
Acionar um alarme : acione manualmente um alarme usando o seguinte comando, substituindo <alarm_name> pelo nome do seu alarme:
aws cloudwatch set-alarm-state --state-value ALARM --state-reason " Testing " --alarm-name " <alarm_name> "
Use os casos de teste gerados nos logs : A função principal do Lambda gera um caso de teste que pode ser usado no console do Lambda. Consulte Testando funções do Lambda no console ou usando sam remote invoke
.
Abra o console do CloudWatch
No painel de navegação, escolha Logs e Logs Insights .
No menu suspenso Selecionar grupo(s) de log, escolha /aws/lambda/alarm-context-tool-AlarmContextFunction-xxxxxxxxxxxx
Insira a seguinte consulta, substituindo <alarm_name> pelo nome do seu alarme:
fields @timestamp, @message, @logStream, @log
| filter message = "test_case" AND Records.0.Sns.Message like /<alarm_name>/
Escolha Executar consulta
Expanda uma entrada de log e copie todo o campo @message .
Você pode então usar isso para testar sua função Lambda sob demanda.
As seguintes variáveis de ambiente podem ser configuradas para a função Lambda:
AWS_LAMBDA_LOG_LEVEL
: define o nível de log para logs do AWS Lambda (por exemplo, INFO, DEBUG). O padrão é INFO
.ANTHROPIC_VERSION
: Especifica a versão do modelo Antrópico a ser utilizada. O padrão é bedrock-2023-05-31
.BEDROCK_MODEL_ID
: o ID do modelo Amazon Bedrock a ser usado. O padrão é anthropic.claude-3-sonnet-20240229-v1:0
.BEDROCK_REGION
: a região da AWS onde o modelo Bedrock está implantado. O padrão é us-east-1
.BEDROCK_MAX_TOKENS
: O número máximo de tokens a serem usados pelo modelo Bedrock. O padrão é 4000
.METRIC_ROUNDING_PRECISION_FOR_BEDROCK
: A precisão para arredondar métricas antes de enviar para Bedrock. O padrão é 3
.POWERTOOLS_LOG_LEVEL
: define o nível de log para logs do AWS Lambda Powertools (por exemplo, INFO, DEBUG). O padrão é INFO
.POWERTOOLS_LOGGER_LOG_EVENT
: permite o registro do evento completo nos logs do Lambda Powertools. O padrão é True
.POWERTOOLS_SERVICE_NAME
: o nome do serviço a ser usado no Lambda Powertools. O padrão é Alarm
.POWERTOOLS_TRACER_CAPTURE_RESPONSE
: controla se a resposta deve ser capturada no rastreamento. O padrão é False
.RECIPIENT
: O endereço de e-mail para receber notificações.SENDER
: O endereço de e-mail do remetente para notificações.USE_BEDROCK
: habilita ou desabilita o uso do Amazon Bedrock para IA generativa. O padrão é True
. Para configurar essas variáveis, atualize o arquivo 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): O nome do grupo de logs.start_time
(str): A hora de início da consulta.end_time
(str): O horário de término da consulta.query
(str): a consulta do Logs Insights.functions_metrics
)dashboard_metrics
(lista): a lista de métricas do painel.annotation_time
(str): o tempo de anotação para o painel.start
(str): A hora de início do painel.end
(str): A hora de término do painel.region
(str): a região da AWS.functions_xray
)trace_ids
(lista): a lista de IDs de rastreamento a serem processados.start_time
(str): A hora de início do processamento de rastreamento.end_time
(str): O horário de término do processamento de rastreamento.region
(str): a região da AWS. Consulte CONTRIBUINDO para obter mais informações.
Esta biblioteca está licenciada sob a licença MIT-0. Veja o arquivo LICENÇA.