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

2024-04-27 04:08:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我编写了一个python脚本,用cron设置通过电子邮件获取实例信息,并填充度量。使用以下代码,我可以在cloudwatch日志控制台中查看所有日志。然而,“dimension”永远不会在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
            )

如果我在这里遗漏了什么,谁能帮忙吗。提前谢谢。在


Tags: instancenameimportclientdatetimevalueexamplelogger