Aws Lambda 收集 CloudWatch 事件

Posted Simeone`s blog

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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
                }
            ]
        }
    }
}

以上是关于Aws Lambda 收集 CloudWatch 事件的主要内容,如果未能解决你的问题,请参考以下文章

使用 Terraform 将 AWS Lambda 日志写入 CloudWatch 日志组

AWS 事件总线无法将日志写入来自 AWS Lambda 的自定义日志组上的 CloudWatch

如何将 AWS cloudwatch 事件添加到基于具有 terraform 的容器映像的 aws_lambda_function?

访问 AWS Lambda 的 Amazon CloudWatch 日志

javascript CloudWatch到AWS Lambda到Slack Channel Alerts和Charts。通过SNS主题通过Lambda函数将CloudWatch警报发布到Slack通

将 aws lambda 日志重定向到 cloudwatch 中的特定日志组