首页 > 解决方案 > 基于具有自定义指标的 lambda cloudwatch 日志的 SNS 电子邮件通知

问题描述

我编写了一个 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
            )

如果我在这里遗漏任何东西,谁能帮忙。提前致谢。

标签: pythonaws-lambdaamazon-snsamazon-cloudwatch

解决方案


您忘记根据文档添加必填字段,例如EvaluationPeriodsAlarmName等等。put_metric_data

您可以以此为例。


推荐阅读