Loading

Aws Lambda 收集 CloudWatch 事件

创建一个 Lambda

Lambda 控制台创建一个 python 的函数 collect_watch,暂时不需要添加触发器。

import json

def lambda_handler(event, context):
    
    print(json.dumps(event))
    
    return {
        'statusCode': 200,
        'body': json.dumps('Hello from Lambda!')
    }
创建一个警报

CloudWatch 控制台创建一个警报,具体创建过程这里不赘述。
我创建了一个 CPU 暂用率的警报。

创建事件规则

CloudWatch 控制台左边的菜单栏选择 事件 下的 规则,然后开始创建规则
选择 事件模式
服务名称选择 CloudWatch;
事件类型选择 CloudWatch Alarm State Change

在右侧点击 添加目标
选择 Lambda函数
函数选择前面创建的 collect_watch
点击右下的配置详细信息就创建完成了
去到 Lambda 控制台查看 collect_watch的详细信息就会发现函数自动添加了一个 Event Bridge 触发器。

测试一下

在我添加警报的 ec2 实例上运行一个程序使 CPU 占用率超过警报阈值触发警报,然后去 collect_watch 查看监控信息,查看输出日志,event 输出如下

{
    "version": "0",
    "id": "61f2d042-7c26-231c-c770-d402bae2ceb2",
    "detail-type": "CloudWatch Alarm State Change",
    "source": "aws.cloudwatch",
    "account": "043138196711",
    "time": "2021-05-28T07:52:30Z",
    "region": "us-west-2",
    "resources": [
        "arn:aws:cloudwatch:us-west-2:043138196711:alarm:awsec2-i-0762fa32d4122cdaa-GreaterThanOrEqualToThreshold-CPUUtilization"
    ],
    "detail": {
        "alarmName": "awsec2-i-0762fa32d4122cdaa-GreaterThanOrEqualToThreshold-CPUUtilization",
        "state": {
            "value": "ALARM",
            "reason": "Threshold Crossed: 1 out of the last 1 datapoints [99.6610169491529 (28/05/21 07:42:00)] was greater than or equal to the threshold (0.2) (minimum 1 datapoint for OK -> ALARM transition).",
            "reasonData": "{\"version\":\"1.0\",\"queryDate\":\"2021-05-28T07:52:30.143+0000\",\"startDate\":\"2021-05-28T07:42:00.000+0000\",\"statistic\":\"Maximum\",\"period\":300,\"recentDatapoints\":[99.6610169491529],\"threshold\":0.2,\"evaluatedDatapoints\":[{\"timestamp\":\"2021-05-28T07:42:00.000+0000\",\"sampleCount\":5.0,\"value\":99.6610169491529}]}",
            "timestamp": "2021-05-28T07:52:30.168+0000"
        },
        "previousState": {
            "value": "OK",
            "reason": "Threshold Crossed: 1 datapoint [0.10001852366388979 (28/05/21 07:17:00)] was not greater than or equal to the threshold (10.0).",
            "reasonData": "{\"version\":\"1.0\",\"queryDate\":\"2021-05-28T07:27:57.752+0000\",\"startDate\":\"2021-05-28T07:17:00.000+0000\",\"statistic\":\"Average\",\"period\":300,\"recentDatapoints\":[0.10001852366388979],\"threshold\":10.0,\"evaluatedDatapoints\":[{\"timestamp\":\"2021-05-28T07:17:00.000+0000\",\"sampleCount\":5.0,\"value\":0.10001852366388979}]}",
            "timestamp": "2021-05-28T07:27:57.769+0000"
        },
        "configuration": {
            "description": "从 EC2 控制台创建",
            "metrics": [
                {
                    "id": "28bcd8fa-5994-44bf-4931-1f466f7c2b7b",
                    "metricStat": {
                        "metric": {
                            "namespace": "AWS/EC2",
                            "name": "CPUUtilization",
                            "dimensions": {
                                "InstanceId": "i-0762fa32d4122cdaa"
                            }
                        },
                        "period": 300,
                        "stat": "Maximum"
                    },
                    "returnData": true
                }
            ]
        }
    }
}

posted @ 2021-05-28 16:45  Simeone_xu  阅读(193)  评论(0)    收藏  举报