Уведомление по электронной почте SNS на основе лямбда-журнала облачных часов с пользовательскими метриками - PullRequest
0 голосов
/ 28 июня 2019

Я написал скрипт на 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 Ответ

1 голос
/ 28 июня 2019

Вы забыли добавить обязательные поля, такие как EvaluationPeriods, AlarmName и т. Д., В put_metric_data согласно документации .

Вы можете использовать this в качестве примера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...