Logo

dev-resources.site

for different kinds of informations.

Alarme Dynamo Throttle Events - Discord

Published at
12/22/2024
Categories
dynamodb
notification
discord
lambda
Author
aldeiacloud
Author
11 person written this
aldeiacloud
open
Alarme Dynamo Throttle Events - Discord

Essa configuração monitora determinadas métricas de uma tabela DynamoDB e envia uma notificação para um canal Discord se forem detectados eventos de throttling.


Primeiro Passo - Configuração da Lambda

Amostragem geral:

Image description

Image description

Runtime:

Image description

Variáveis de Ambiente:

Image description

Resource-based - Policy Statements (Importante para o alarme conseguir triggar a lambda)

Image description

Configuração da resource-based policy: (ARN do alarme criado para triggar a lambda)

Image description

Permissões necessárias:

Image description

Código Lambda:

import json
import boto3
import requests
import os
from datetime import datetime, timedelta

# Configurações do Discord Webhook
DISCORD_WEBHOOK_URL = os.environ['DISCORD_WEBHOOK_URL']

# Cliente boto3 para o CloudWatch
cloudwatch = boto3.client('cloudwatch')

def send_discord_notification(message):
    data = {
        "content": message
    }
    response = requests.post(DISCORD_WEBHOOK_URL, json=data)
    if response.status_code != 204:
        raise ValueError(f"Falha ao enviar notificação para o Discord: {response.status_code}, {response.text}")

def lambda_handler(event, context):
#    print("Evento recebido:", json.dumps(event))
    print(event) 
    # Métricas a serem monitoradas
    metrics_to_monitor = [
        'WriteThrottleEvents',
        'ReadThrottleEvents'
    ]

    # Nome da tabela DynamoDB a ser monitorada
    table_name = os.environ['TABLE_NAME']
    print(f"Tabela a ser monitorada: {table_name}")

    for metric_name in metrics_to_monitor:
        print(f"Verificando métrica: {metric_name}")

        response = cloudwatch.get_metric_statistics(
            Namespace='AWS/DynamoDB',
            MetricName=metric_name,
            Dimensions=[
                {
                    'Name': 'TableName',
                    'Value': table_name
                }
            ],
            StartTime=datetime.utcnow() - timedelta(minutes=5),
            EndTime=datetime.utcnow(),
            Period=60,
            Statistics=['Sum']
        )

        print(f"Resposta da CloudWatch: {response}")

        data_points = response.get('Datapoints', [])
        if data_points:
            for point in data_points:
                print(f"Ponto de dados: {point}")
                if point['Sum'] > 0:
                    message = f"Evento de throttle ({metric_name}) detectado na tabela {table_name} com {int(point['Sum'])} eventos."
                    print(f"Enviando mensagem para o Discord: {message}")
                    try:
                        send_discord_notification(message)
                    except Exception as e:
                        print(f"Erro ao enviar notificação para o Discord: {e}")
                    else:
                        print("Notificação enviada com sucesso.")
                else:
                    print(f"Nenhum evento de throttle detectado para {metric_name}.")
        else:
            print(f"Nenhum ponto de dados encontrado para {metric_name}.")

    print("Processo de verificação concluído.")

    return {
        'statusCode': 200,
        'body': json.dumps('Notificações enviadas se algum evento de throttle for detectado.')
    }
Enter fullscreen mode Exit fullscreen mode

Download Lambda Code [dynamo-throttle-events.zip]
https://github.com/aldeiacloud/DynamoThrottleEvents/raw/refs/heads/main/ecbb053f-e092-4059-b39d-f8f184166e76.zip


  1. Função principal (lambda_handler):
    • Recebe o evento e o contexto quando acionada.
    • Define as métricas a serem monitoradas: WriteThrottleEvents e ReadThrottleEvents.
    • Obtém o nome da tabela DynamoDB a ser monitorada a partir das variáveis de ambiente.
    • Para cada métrica, consulta o CloudWatch para obter estatísticas sobre eventos de throttling nos últimos 5 minutos.
    • Analisa os pontos de dados retornados:
      • Se houver eventos de throttling (soma maior que 0), envia uma notificação para o Discord com detalhes.
      • Caso contrário, indica que não foram detectados eventos de throttling.
    • Finaliza o processo de verificação e retorna um status de sucesso.

A função envia uma notificação ao Discord somente se detectar eventos de throttling nas métricas monitoradas da tabela DynamoDB especificada.



Segundo Passo - Configuração do Alarme CloudWatch

Amostragem geral:

Image description

Table Name / Statistic / Period:

Image description

Condições:

Image description

Lambda action:

Image description

Image description


Feito, agora quando o alarme triggar algum throttle na leitura ou escrita da tabela configurada no alerta e nas variáveis do lambda, ele vai enviar para o grupo de texto no discord.

Após forçar um throttle, conseguimos receber o evento no Discord:

Image description

dynamodb Article's
30 articles in total
Favicon
Efficient Batch Writing to DynamoDB with Python: A Step-by-Step Guide
Favicon
Advanced Single Table Design Patterns With DynamoDB
Favicon
DynamoDB GUI in local
Favicon
Stream Dynamo para RDS Mysql
Favicon
Alarme Dynamo Throttle Events - Discord
Favicon
What I Learned from the 'Amazon DynamoDB for Serverless Architectures' Course on AWS Skill Builder
Favicon
A Novel Pattern for Documenting DynamoDB Access Patterns
Favicon
Making dynamodb queries just a little bit easier.
Favicon
Replicate data from DynamoDB to Apache Iceberg tables using Glue Zero-ETL integration
Favicon
Deploying a Globally Accessible Web Application with Disaster Recovery
Favicon
Practical DynamoDB - Locking Reads
Favicon
Databases - Query Data with DynamoDB
Favicon
Database Management in the cloud (RDS, DynamoDB)
Favicon
Securing Customer Support with AWS Services and Slack Integration
Favicon
Help! I Think I Broke DynamoDB – A Tale of Three Wishes 🧞‍♂️
Favicon
Mastering DynamoDB in 2025: Building Scalable and Cost-Effective Applications
Favicon
Syncing Data in Near Real-Time: Integrate DynamoDB and OpenSearch
Favicon
DynamoDB and the Art of Knowing Your Limits 💥When Database Bites Back 🧛‍♂️
Favicon
DynamoDB Transactions with AWS Step Functions
Favicon
Create an API to get data from your DynamoDB Database using CDK
Favicon
AWS Database - Part 2: DynamoDB
Favicon
Building event-driven workflows with DynamoDB Streams
Favicon
Setting up a REST API in Python for DynamoDB
Favicon
How to Create a (Nearly) Free Serverless Rate Limiter on AWS
Favicon
Query DynamoDB with SQL using Athena - Leveraging EventBridge Pipes and Firehose (2/2)
Favicon
Schema Validation in Amazon DynamoDB
Favicon
Use Cases for DynamoDB in Provisioned Mode vs. Auto Scaling: Advantages and Disadvantages
Favicon
Mastering DynamoDB: Batch Operations Explained
Favicon
Not only dynamoDb migration or seed scripting
Favicon
Query DynamoDB with SQL using Athena - Leveraging DynamoDB Exports to S3 (1/2)

Featured ones: