Created
June 1, 2020 14:23
-
-
Save davidrosenstark/3ab2aa8ebe88b55f456bdc618934cbdc to your computer and use it in GitHub Desktop.
alarm notifier
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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