Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

129
Visualizações
¿Cómo generar una alerta cuando se envía un mensaje SQS a la cola de mensajes fallidos?

Meta

Con el objetivo de que se active una alerta de CloudWatch cuando un mensaje de una cola de SQS a una función lambda supere el número máximo de reintentos.

Problema

Supuse que sería fácil y que la métrica NumberOfMessagesReceived lo reflejaría. Aquellos familiarizados con esto sabrán que este no es el caso.

Soluciones

La solución del 'limbo'

Mi solución rápida y fácil para este problema fue introducir un "Limbo" que actúa como el primer DLQ y en cuestión de segundos envía el mensaje al DLQ final/real. En las métricas, esto da como resultado un pico en la métrica de mensajes visibles de la cola "Limbo". Entonces, tener un umbral de alerta de " > 0 " significa que cada vez que esa cola recibe un mensaje, se puede emitir una alerta.

Sin embargo, los poderes por encima de mí no están contentos con tener una cola "Limbo" para cada vez que queremos esta funcionalidad.

Captura de pantalla que muestra el comportamiento deseado usando la cola "Limbo" aquí

Por lo que he podido averiguar, existen algunos métodos alternativos, pero estos parecen peores que la Solución Limbo .

Nueva función Lambda

El primero es tener una nueva función lambda que use un SQS DLQ como fuente y genere la alerta.

Intercepción de tiempo de ejecución de Lambda

En segundo lugar, tener la lógica have dentro de las lambdas existentes (que procesan los mensajes de SQS) leer la cantidad de veces que se ha vuelto a intentar un mensaje y, en el momento final, generar la alerta. Este tipo de elimina la ventaja de usar una cola y una política de re-conducción en primer lugar, y es una solución de ingeniería excesiva.

Matemáticas métricas

La última alternativa que se me ocurre es usar algunas matemáticas métricas para mirar el DLQ y calcular si hubo un aumento en los últimos X minutos.

Todas estas parecen soluciones extrañas y demasiado complejas para lo que (estoy convencido) debe tener una implementación simple. ¿Cómo creo una alerta cada vez que un DLQ recibe un mensaje?

over 4 years ago · Santiago Trujillo
2 Respostas
Responde à pergunta

0

Encontré este mismo problema y tuve éxito al implementarlo usando Metrics Math. Cloudwatch tiene una función RATE() que:

"Devuelve la tasa de cambio de la métrica por segundo. Esto se calcula como la diferencia entre el valor del punto de datos más reciente y el valor del punto de datos anterior, dividido por la diferencia de tiempo en segundos entre los dos valores".

https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/using-metric-math.html

Así que creé una alarma que analiza la tasa de cambio de la métrica ApproximateNumberOfMessagesVisible en la cola Deadletter. Entra en alarma cuando la tasa de cambio es mayor que 0. Aquí hay un ejemplo de plantilla de Cloudformation para la alarma:

 DeadletterAlarm: Type: AWS::CloudWatch::Alarm Properties: AlarmName: "DEADLETTER_ALARM" ComparisonOperator: GreaterThanThreshold EvaluationPeriods: 1 TreatMissingData: missing Threshold: '0' Metrics: - Id: r1 Expression: RATE(FILL(m1, 0)) ReturnData: true - Id: m1 Label: VisibleAverage ReturnData: false MetricStat: Stat: Average Period: '300' Metric: MetricName: ApproximateNumberOfMessagesVisible Namespace: AWS/SQS Dimensions: - Name: QueueName Value: "Deadletter_queue_name"
over 4 years ago · Santiago Trujillo Relatório

0

Otra forma de lograr esto es generar una alarma en ApproximateNumberOfMessagesDelayed . Entonces solo necesita establecer un retraso en su DLQ. Así que podría verse algo como esto:

 MyDLQAlarm: Type: AWS::CloudWatch::Alarm Properties: AlarmName: MyDLQAlarm AlarmDescription: "Alarm when we have 1 or more failed messages in 10 minutes for MyQueue." Namespace: "AWS/SQS" MetricName: "ApproximateNumberOfMessagesDelayed" Dimensions: - Name: "QueueName" Value: Fn::GetAtt: - "MyQueue" - "QueueName" Statistic: "Sum" Period: 300 DatapointsToAlarm: 1 EvaluationPeriods: 2 Threshold: 1 ComparisonOperator: "GreaterThanOrEqualToThreshold" AlarmActions: - Ref: "SNSTopic"

Entonces su DLQ puede verse así:

 MyQueueDLQ: Type: AWS::SQS::Queue Properties: QueueName: MyQueueDLQ MessageRetentionPeriod: 1209600 DelaySeconds: 60
over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda