Skip to content

Instantly share code, notes, and snippets.

@davidrosenstark
Created June 1, 2020 14:23
Show Gist options
  • Save davidrosenstark/3ab2aa8ebe88b55f456bdc618934cbdc to your computer and use it in GitHub Desktop.
Save davidrosenstark/3ab2aa8ebe88b55f456bdc618934cbdc to your computer and use it in GitHub Desktop.
alarm notifier
import boto3
import datetime
import pytz
import os
import logging
import json
cloudwatch_client = boto3.client('cloudwatch')
sns_client = boto3.client('sns')
#Use this to identify alarms for our specific env
environment = os.environ.get("ENV")
minutes_elapsed_to_notify = os.environ.get("WARN_AFTER_MINUTES", default=5)
#arn of SNS topic to send to
sns_arn=os.environ.get("NOTIFY_ARN")
_logger = logging.getLogger(__name__)
log_level = os.getenv('LOG_LEVEL', logging.INFO)
_logger.setLevel(log_level)
def lambda_handler(event, _):
alarms = cloudwatch_client.describe_alarms(AlarmNamePrefix=f"{environment}-", StateValue="ALARM")
current_time = datetime.datetime.now(pytz.utc)
if (len(alarms['MetricAlarms']) > 0):
_logger.debug(f"Looping through active alarms to see ones older than {minutes_elapsed_to_notify} minutes")
for record in alarms['MetricAlarms']:
_logger.debug(f"{record['AlarmName']}: last_update: {record['StateUpdatedTimestamp']}")
minutes_elapsed = (current_time - record['StateUpdatedTimestamp']).seconds // 60
if minutes_elapsed > minutes_elapsed_to_notify:
_logger.info(f"Notifying about alarm {record['AlarmName']}")
message = {"ContinuedAlarmName" : record['AlarmName'], "AlarmDurationMinutes": minutes_elapsed}
sns_client.publish(TopicArn=sns_arn, Message=json.dumps(message))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment