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

discord Article's
30 articles in total
Favicon
TypeScript Discord Bot Handler
Favicon
Desvendando Subprocessos: Criando um Bot de Música com Go
Favicon
Does anyone know someone who makes Discord bots for free, or where to find such a person?
Favicon
Alarme Dynamo Throttle Events - Discord
Favicon
Boost Communication on Slack, Discord, GitHub, and Beyond! /BUTIFULL EMOJIS
Favicon
Using Discord as an unlimited cloud storage service
Favicon
Deploy your Discord Bot using Amazon EC2
Favicon
Discord Developer Cheat Sheet
Favicon
How to Set Up a Mock Server
Favicon
10 Cool Ideas for Discord Bots You Can Build Today
Favicon
Intro: Jonah 🐷
Favicon
Monetize your Discord community with these tips
Favicon
Creating a Moderation Bot for Discord
Favicon
Automating Event Management: A Discord to Google Calendar Bot
Favicon
Bulk Delete Messages with MEE6 Discord Bot
Favicon
Monitoring Discord server, detect CA, sending it to telegram bot
Favicon
Building a Discord Bot with OpenAI GPT
Favicon
Building a Cost-Effective Valheim Server on Azure with Serverless Discord Bot Integration
Favicon
Mass Delete Discord Messages Easily
Favicon
Hacktoberfest Extended Until November 30 for Robo.js
Favicon
Hacktoberfest 2024: Code Templates and Win Rewards 🎉
Favicon
Get News Updates automatically posted to your Discord using Supercog
Favicon
Hacktoberfest 2024: Create Discord Features or Videos to Win Rewards 🎉
Favicon
Running a Discord Bot on Raspberry Pi
Favicon
Missing Launch Button in your Discord Activity? Fix the Entry Point Command!
Favicon
🌟 Join the Open Source Community on Discord! 🚀
Favicon
DISCORD PROMOTION, DISOCRD SERVER PROMOTION
Favicon
I will discord promotion, nft discord server promotion, nft discord server marketing
Favicon
Patch Your Discord Activity’s Network Requests for Smooth CSP Compliance
Favicon
New PHP Package: Discord Table Builder

Featured ones: