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

news/2024/12/17 10:24:38/文章来源:https://www.cnblogs.com/cnsre/p/18611786

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

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

准备工作

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

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

创建SNS主题

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

  • 登录到 Amazon SNS 控制台。

sre运维|Linux运维|关键词

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

sre运维|Linux运维|关键词

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

sre运维|Linux运维|关键词

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

sre运维|Linux运维|关键词

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

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

创建Lambda函数

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

  • 访问 Amazon Lambda 控制台,点击“创建函数”。

sre运维|Linux运维|关键词

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

sre运维|Linux运维|关键词

编写Lambda函数代码

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

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

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

sre运维|Linux运维|关键词

下面是具体代码内容:

'''
Author       : Wenlong Xue 
Date         : 2023-02-27 13:35
LastEditors  : Wenlong Xue 
LastEditTime : 2023-02-27 17:52
Description  : 为 VPC 中的 EC2 实例创建磁盘使用百分比的 CloudWatch 告警,并在磁盘使用超过阈值时发送通知到 SNS 主题
'''
import boto3def 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:HighDiskUsedMetricName='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中找到这个觉得然后给他添加对应的权限。

sre运维|Linux运维|关键词

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

sre运维|Linux运维|关键词

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

最后权限如下:

sre运维|Linux运维|关键词

注意

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

测试函数

现在,我们已经创建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'

参考资料

  • AWS Lambda文档: https://docs.aws.amazon.com/lambda/
  • AWS CloudWatch文档: https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/
  • AWS SNS文档: https://docs.aws.amazon.com/sns/index.html

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


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/854215.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

实现hive的bitmap同步到doris

背景: 官方提供的方案不可行 doris提供的hive-udf中:https://doris.apache.org/zh-CN/docs/3.0/ecosystem/hive-bitmap-udf 官网方式如下: 需要使用doris外接hive的元数据地址:hive.metastore.uris 这里有个问题是,很多公司都会有数据安全和权限控制,这个接口一般不会外露…

一款可以完整保留排版的PDF翻译,GitHub增长第一

最近看论文较多,顺手给大家推荐一个用下来觉得不错的开源PDF翻译工具:PDFMathTranslate 目前这款开源项目在GitHub上已经收获了7.6K Star,而且由于一直处于增长趋势榜第一的位置,预计未来还会持续增长许多。 PDFMathTranslate 简介开源项目地址:https://github.com/Byaidu…

在 IIS 中发布网站,使用 PUT、DELETE 等请求方法时,提示错误:HTTP 错误 405.0 - Method Not Allowed

搜了一圈,发现是因为安装了 IIS 的 WebDAV 功能,就会导致站点出现此类问题 一种方法是移除 WebDAV 功能,但比较费时费力 另一种就是在站点的 Web.config 中显式移除 WebDAV 模块 配置文件: <configuration><system.webServer><modules><!-- 移除模块 …

如何用python批量转换.doc文件为.docx文件

需要用到的库: pywin32、os实现效果: 把文件夹下的文件1.doc、2.doc、3.doc 转化成1.docx、2.docx、3.docx,保存到output文件夹下。 代码运行前: 代码运行后: 实现代码:# 批量把".doc"文件另存在".docx"文件import osfrom win32com import clientde…

数据分布检验利器:通过Q-Q图进行可视化分布诊断、异常检测与预处理优化

在机器学习和数据分析中,我们经常需要验证数据是否符合某种特定的分布(如正态分布)。这种验证对于选择合适的统计方法和机器学习模型至关重要。例如许多统计检验和机器学习算法都假设数据服从正态分布。如果这个假设不成立,我们可能需要对数据进行转换或选择其他更适合的方…

修改jar包中的class文件,重新打包成jar(原MANIFEST.MF保持不变)

不使用ide(如idea,eclipse)版 修改jar包中的class文件,重新打包成jar(原MANIFEST.MF保持不变)1:把待修改的jar包放入jd-gui,找到待修改的class文件 2:找到对应的文件ctrl+s保存,把待调整的.class转为.java 3:修改java文件中的对应代码 4.把需要的jar包放在同一个目…

Bootstrap多级下拉菜单插件

bootstrap-submenu是一款在原生bootstrap Dropdowns组件的基础上进行扩展,可以生成多级子菜单的多级下拉菜单插件。 原生的bootstrap下拉菜单只有一层,通过bootstrap-submenu插件,可以生成多级子菜单。在线预览 下载安装 可以通过npm和bower来安装bootstrap-submenu插件。$ …

Shenzi pg walkthrough Intermediate window

nmap └─# nmap -p- -A -sS -T5 192.168.218.55 Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-12-16 23:45 UTC Stats: 0:00:02 elapsed; 0 hosts completed (1 up), 1 undergoing SYN Stealth Scan SYN Stealth Scan Timing: About 0.97% done Stats: 0:00:03 elapse…

适配信创环境的国产FTP替代软件,让数据传输更环保高效!

文件传输协议(FTP),诞生于1971年,自20世纪70年代发明以来,FTP已成为传输大文件的不二之选。内置有操作系统的 FTP 可提供一个相对简便、看似免费的文件交换方法,因此得到广泛使用。但随着技术的发展和企业对于文件传输的需求日益增长,传统FTP协议由于其在安全性、传输效…

跨域文件管控新方案,让数据管理变得简单而高效!

随着经济的快速发展,越来越多的企业规模不断扩大,并在异国、异地设立分支机构。这些分支机构与企业总部之间需要进行频繁的文件传输和数据交换,以支持企业的日常运营和决策。由于分支机构可能位于不同的地理位置、拥有不同的网络环境和组织架构,因此跨域文件管控传输成为了…

服务器性能测试利器之sysbench

目录前言 特征 安装 测试 回到顶部 前言 sysbench是一个开源的、模块化的、跨平台的多线程性能测试工具,可以用来进行CPU、内存、磁盘I/O、线程、数据库的性能测试。sysbench是基于LuaJIT的可编写脚本的多线程基准测试工具。sysbench附带以下捆绑的基准测试:oltp_*.lua:类似…

知识付费源码-知识付费平台全面升级

来自www.tuzhi.ltd在当今社会快速发展的背景下,教育和软件行业正经历一次巨大的革新。随着数字化转型浪潮推动下,在线教育和知识付费模式的广泛应用已经成为推动教育资源分配均衡和个性化学习需求满足的重要力量。其中,知识付费在线教育系统的崛起不仅优化了传统教学的组织和…