【问题标题】:SNS email notification based on lambda cloudwatch log with custom metrics基于具有自定义指标的 lambda cloudwatch 日志的 SNS 电子邮件通知
【发布时间】:2019-11-10 12:36:30
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

    您忘记根据documentationEvaluationPeriodsAlarmName等必填字段添加到您的put_metric_data中。

    您可以使用this 作为示例。

    【讨论】:

      猜你喜欢
      • 2014-01-02
      • 2022-10-08
      • 2019-02-11
      • 2011-03-09
      • 2018-01-07
      • 1970-01-01
      • 1970-01-01
      • 2019-08-17
      • 1970-01-01
      相关资源
      最近更新 更多