基于具有自定义指标的lambda cloudwatch日志的SNS电子邮件通知

时间:2019-06-28 14:35:05

标签: python aws-lambda amazon-sns amazon-cloudwatch

我编写了一个python脚本,以使用cron设置通过电子邮件获取实例信息,并填充指标。通过以下代码,我可以在cloudwatch日志控制台中查看所有日志。但是,“维度”永远不会在cloudwatch事件部分下创建,也不会触发任何邮件。

import boto3
import json
import logging
from datetime import datetime
logger = logging.getLogger()
logger.setLevel(logging.INFO)

def post_metric(example_namespace, example_dimension_name, example_metric_name, example_dimension_value, example_metric_value):
    cw_client = boto3.client("cloudwatch")
    response = cw_client.put_metric_data(
        Namespace=example_namespace,
        MetricData=[
            {
                'MetricName': example_metric_name,
                'Dimensions': [
                    {
                        'Name': example_dimension_name,
                        'Value': example_dimension_value
                    },
                ],
                'Timestamp': datetime.datetime.now(),
                'Value': int(example_metric_value)
            },
        ]
    )

def lambda_handler(event, context):
    logger.info(event)
    ec2_client = boto3.client("ec2")
    sns_client = boto3.client("sns")

    response = ec2_client.describe_instances(
        Filters=[
            {
                'Name': 'tag:Name',
                'Values': [
                    'jenkins-slave-*'
                ]
            }
        ]
    )['Reservations']

    for reservation in response:
        ec2_instances = reservation["Instances"]
        for instance in ec2_instances:
            myInstanceId = (instance['InstanceId'])
            myInstanceState = (instance['State']['Name'])
            myInstance = \
                (
                    {
                        'InstanceId': (myInstanceId),
                        'InstanceState': (myInstanceState),
                    }
                )
            logger.info(json.dumps(myInstance)
            post_metric("Jenkins", "ciname", "orphaned-slaves", myInstanceId, 1)

            # Send message to SNS (Testing purpose)
            SNS_TOPIC_ARN = 'arn:aws:sns:us-east-1:1234567890:example-instance-alarms'
            sns_client.publish(
                TopicArn = SNS_TOPIC_ARN,
                Subject = 'Instance Info: ' + myInstanceId,
                Message = 'Instance id: ' + myInstanceId
            )

如果我在这里没有任何东西,谁能帮忙。预先感谢。

1 个答案:

答案 0 :(得分:1)

您忘记根据documentationEvaluationPeriods中添加必填字段,例如AlarmNameput_metric_data等。

您可以使用this为例。