如何使用 Lambda 自动添加CloudWatch所有实例磁盘告警及 SNS 通知

利用Lambda轻松实现EC2实例监控

最近新增了一些服务器,因为每个服务器的基础监控都是要做的。我就想,如何能够快速便捷的方式把这些基础指标都监控上呢?本文将详细介绍如何通过Lambda自动为所有EC2实例添加CloudWatch磁盘告警,并在磁盘利用率超过阈值时,通过SNS主题发送通知。

准备工作

在开始前,我们需要准备:

  • AWS账号:开通一个AWS账号。
  • SNS主题:在SNS上创建一个主题,并添加订阅者。订阅方式可以是邮件、短信等。
  • VPC ID:登录VPC控制台获取VPC ID。
  • Lambda:需要创建一个Lambda。

创建SNS主题

接下来,我们需要在AWS SNS上创建一个主题,并将订阅者添加到主题中。这些订阅者将会接收磁盘使用超过阈值时的通知。我们可以选择电子邮件、短信等通知方式。

[图片上传失败...(image-be9cc5-1734401893089)]

  • 单击左侧面板上的“主题”,然后单击“创建主题”。

[图片上传失败...(image-959592-1734401893089)]

  • 输入主题名称和主题显示名称,单击“创建主题”。

[图片上传失败...(image-303680-1734401893089)]

  • 在主题页面上,单击“订阅”,选择希望接收通知的通知方式。

[图片上传失败...(image-ba818e-1734401893089)]

  • 根据选定的订阅类型输入相关信息,单击“创建订阅”。
  • 在主题页面上,您将看到已创建的订阅。
    举个例子,如果我们选择“邮件”作为订阅方式:
  • 在“电子邮件订阅”下,输入接收通知的电子邮件地址。
  • 单击“创建订阅”。
  • 您应会收到一封来自AWS通知的验证电子邮件。请按照电子邮件中的说明进行验证。
  • 一旦验证通过,该订阅将变为“已验证”状态。

现在,当CloudWatch告警触发并调用SNS主题时,验证的电子邮件地址将收到有关警报的电子邮件通知。我们也可以添加多个订阅以接收通过不同渠道的通知,例如电子邮件、短信等。 添加订阅者后,我们可以在SNS主题的“概述”页查看订阅的详细信息和状态。在测试Lambda函数时,这有助于确保订阅设置正确和通知能正常发送。

创建Lambda函数

接下来,我们可以在Lambda控制台创建一个新的Lambda函数。

[图片上传失败...(image-280e29-1734401893089)]

  • 选择“从头开始” ,输入函数名称,如“create_cloudwatch_alarm_for_ec2_disk_usage”。
  • 选择Python作为运行环境,选择 创建具有基本 Lambda 权限的新角色。
  • 点击“创建函数”。

[图片上传失败...(image-eae30a-1734401893089)]

编写Lambda函数代码

代码我已经写好了,各位大佬收好。代码功能是为所有EC2实例设置CloudWatch磁盘告警,当磁盘利用率超过阈值时,通过SNS主题发送通知。

  1. 连接EC2客户端。
  2. 获取VPC中运行的EC2实例列表。
  3. 遍历实例创建CloudWatch磁盘使用百分比告警。默认阈值是80%。
  4. 告警触发SNS主题“you_sns_arn”。

将下面代码复制后进行部分修改。然后替换掉原有代码后,然后保存并部署。

[图片上传失败...(image-58445b-1734401893089)]

下面是具体代码内容:

'''
Author       : Wenlong Xue 
Date         : 2023-02-27 13:35
LastEditors  : Wenlong Xue 
LastEditTime : 2023-02-27 17:52
Description  : 为 VPC 中的 EC2 实例创建磁盘使用百分比的 CloudWatch 告警,并在磁盘使用超过阈值时发送通知到 SNS 主题
'''
import boto3

def lambda_handler(event, context):
    
    # 连接到 EC2 客户端
    ec2 = boto3.client('ec2')
    
    # 获取 VPC 中运行中的实例列表
    response = ec2.describe_instances(
        Filters=[
            {
                'Name': 'vpc-id',
                'Values': ['vpc-xxxxxx']      # 修改VPC ID
            },
            {
                'Name': 'instance-state-name',
                'Values': ['running']
            }
        ]
    )
    
    # 遍历实例并为磁盘使用百分比创建 CloudWatch 告警
    for reservation in response['Reservations']:
        for instance in reservation['Instances']:
            
            # 获取实例 ID 和 Name 标签
            instance_id = instance['InstanceId']
            instance_name = ''
            for tag in instance['Tags']:
                if tag['Key'] == 'Name':
                    instance_name = tag['Value']
                    break
            
            # 创建磁盘使用百分比的 CloudWatch 告警
            cloudwatch = boto3.client('cloudwatch')
            cloudwatch.put_metric_alarm(
                AlarmName='{}-磁盘使用百分比'.format(instance_name),
                AlarmDescription='{} - 磁盘使用百分比'.format(instance_name),
                ActionsEnabled=True,
                AlarmActions=['you_sns_arn'],   # 修改sns主题,如:arn:aws-cn:sns:cn-north-1:xxxxx:HighDiskUsed
                MetricName='disk_used_percent', # 根据情况修改
                Namespace='CWAgent',            # 根据情况修改
                Dimensions=[
                    {
                        'Name': 'InstanceId',
                        'Value': instance_id
                    }
                ],
                Statistic='Maximum',
                Period=300,
                EvaluationPeriods=1,
                Threshold=80.0,
                ComparisonOperator='GreaterThanOrEqualToThreshold'
            )

给IAM角色添加权限

因为 创建具有基本 Lambda 权限的新角色 的权限并不完整,所以我们要把代码中所要用到的权限给到这个新角色。

首先,Lambda中找到这个觉得然后给他添加对应的权限。

[图片上传失败...(image-c7559e-1734401893089)]

  • 找到创建的Lambda 函数。
  • 选择函数汇总的配置--权限。
  • 找到执行角色,并点击角色名称连接。

[图片上传失败...(image-6518af-1734401893089)]

  • 点击添加权限,选择附加策略。
  • 添加 CloudWatchFullAccessAmazonEC2ReadOnlyAccess 权限

最后权限如下:

[图片上传失败...(image-b1000e-1734401893089)]

注意

{{< alert theme="warning" dir="ltr" >}}
⚠️ 若提示确少什么权限就补充什么权限。
{{< /alert >}}

测试函数

现在,我们已经创建Lambda函数和SNS主题,并将订阅者添加到主题。我们可以测试Lambda函数功能。

  1. 我们可以手动运行测试来观察 CloudWatch告警项有没有被添加。
  2. 我们也可以进行添加触发器。如:固定时间段运行一次,来遍历新加的服务器。然后添加告警项。

常见问题及解决方案

{{< notice info "常见问题及解决方案" >}}
Q1: 没收到SNS通知怎么办?
A1: 确认订阅邮箱是否正确。检查AWS账号是否有权限向SNS发送通知。
Q2: 如何修改磁盘使用阈值?
A2: 编辑Lambda函数代码,更改"Threshold"的值。
Q3: CloudWatch的告警项中显示数据不足怎么办?
A3: 查看CloudWatch中原本磁盘的指标名称,并修改Lambda函数代码对应的值:MetricName='disk_used_percent';Namespace='CWAgent'
{{< /notice >}}

参考资料


作者:SRE运维博客
博客地址:https://www.cnsre.cn/
文章地址:https://www.cnsre.cn/posts/230506425079/
相关话题:https://www.cnsre.cn/tags/lambda/


©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,284评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,115评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,614评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,671评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,699评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,562评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,309评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,223评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,668评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,859评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,981评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,705评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,310评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,904评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,023评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,146评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,933评论 2 355

推荐阅读更多精彩内容