简介:

欢迎来到小李哥全新亚马逊云科技AWS云计算知识学习系列,适用于任何无云计算或者亚马逊云科技技术背景的开发者,通过这篇文章大家零基础5分钟就能完全学会亚马逊云科技一个经典的服务开发架构方案。

我会每天介绍一个基于亚马逊云科技AWS云计算平台的全球前沿云开发/架构技术解决方案,帮助大家快速了解国际上最热门的云计算平台亚马逊云科技AWS最佳实践,并应用到自己的日常工作里。本次介绍的是如何搭建云资源监控平台,对云服务器状态监控,并在系统宕机时及时通知运维人员。本方案架构图如下:

方案所需基础知识  

什么是亚马逊云科技 CloudWatch?

Amazon CloudWatch 是亚马逊云科技提供的一项全面的监控和管理服务,帮助用户实时收集和跟踪亚马逊云科技资源和应用程序的运行状态。CloudWatch 可以监控各种 AWS 服务的指标、日志文件和事件,并提供告警、自动响应等功能,帮助用户确保其云资源始终处于健康和高效的运行状态。

为什么要对云资源进行监控?

确保系统可用性

通过 CloudWatch 监控云资源,用户可以及时检测到系统的异常情况,如性能下降、资源耗尽或服务中断。及时的告警和响应可以帮助迅速恢复服务,确保系统的高可用性和用户体验。

优化资源使用

CloudWatch 提供详细的资源使用情况报告,使用户能够识别并优化资源的配置和利用率。通过监控,可以避免资源浪费,确保每个资源都能得到充分利用,从而降低运营成本。

增强安全性

CloudWatch 还可以监控安全相关的事件,如未经授权的访问、异常流量模式等。通过对安全事件的实时监控,用户可以及时采取措施,保护云环境的安全性。

本方案包括的内容

1. 了解亚马逊云科技EC2服务器的云资源监控功能

2. 创建一个云端监控平台并添加云资源状态图表

3. 为EC2服务器添加CPU使用率报警

4. 为系统报警添加邮件通知,通知系统工程师

项目搭建具体步骤 

1. 登录亚马逊云科技控制台,打开EC2服务主页

2. 选择一台EC2服务器,点击Monitoring默认监控功能,我们可以看到监控指标有CPU、Memory、虚拟机状态监测、网络状态等

3. 接下来我们进入云资源监控服务CloudWatch

4. 点击左侧Metric监控指标页面,在指标搜索框中搜索”PowerPlantMetrics“,再点击进入该搜索类别。

 5.该搜索类别包括了多个监控指标,我们现在先搜索CPU。

6. 搜索后我们就可以找到服务器CPU状态的指标了,选中三台服务器,我们就可以看到服务器CPU状态曲线。

7. 接下来点击右上角的”Action“ -> "Add to Dashboard"把三个服务器CPU状态添加到监控面板中

8. 为面板起名”Power-Plant-Dashboard“,点击”Create New“创建一个新的CPU面板

9. 图表类型选择Bar柱状图,图表标题输入”Servers Idle CPU usage“,点击左下角Add添加该面板

10. 创建好后我们就可以看到CPU面板了,点击右上角Save保存该面板。

11. 点击左侧边栏,点击Alams报警功能,点击Create Alarm创建一个新的报警

12. 首先选择监控指标,点击”Select Metric“添加指标。

13. 我们选择我们刚刚查看的指标CPU使用率,我们添加server1 EC2服务器的CPU指标数据。

14. 添加CPU指标数据后,我们选择报警触发条件。本测试中我们选择Static静态模式,筛选条件为CPU指标小于(Lower)20%时触发。

15. 接下来我们配置报警通知,首先选择报警触发状态为"In Alarm",表示达到筛选条件时触发。通知将会通过SNS短信/邮件服务送达到系统工程师,我们创建一个新的SNS Topic,起名为”High_CPU_USAGE“,并配置通知送达邮箱。点击Create创建该SNS Topic主题。

16. 最后我们为该警报起名,点击Create创建。

17. 创建成功后我们就可以看到该警报进入了报警状态,并收到了报警邮件通知。

如何通过Python SDK Boto3代码创建监控报警

下面是一个使用 Python boto3 来创建 CloudWatch 警报的代码示例,该警报会监控 EC2 实例的 CPU 使用率是否超过 70%,并在超过阈值时通过 SNS topic 发送短信通知:

import boto3

# 创建 boto3 客户端
cloudwatch = boto3.client('cloudwatch')
sns = boto3.client('sns')

# 定义 SNS topic ARN(你需要先创建一个 SNS topic 并订阅短信号码)
sns_topic_arn = 'arn:aws:sns:us-west-2:123456789012:MySNSTopic'

# 定义 EC2 实例 ID 和报警名称
instance_id = 'i-0abcd1234efgh5678'
alarm_name = 'High-CPU-Utilization-Alarm'

# 创建 CloudWatch 警报
response = cloudwatch.put_metric_alarm(
    AlarmName=alarm_name,
    AlarmDescription='Alarm when CPU usage exceeds 70%',
    ActionsEnabled=True,
    AlarmActions=[sns_topic_arn],
    MetricName='CPUUtilization',
    Namespace='AWS/EC2',
    Statistic='Average',
    Dimensions=[
        {
            'Name': 'InstanceId',
            'Value': instance_id
        },
    ],
    Period=300,  # 监控5分钟的平均值
    EvaluationPeriods=1,
    Threshold=70.0,
    ComparisonOperator='GreaterThanThreshold',
    TreatMissingData='notBreaching'  # 当数据缺失时,不触发报警
)

print(f"Alarm {alarm_name} created successfully.")

代码解释:

cloudwatchsns 客户端

创建用于与 CloudWatch 和 SNS 进行交互的 boto3 客户端。

SNS Topic ARN

sns_topic_arn 是已经存在的 SNS 主题的 Amazon Resource Name (ARN),你需要预先创建 SNS 主题并将电话号码订阅到该主题,以便接收短信通知。

put_metric_alarm 方法

这个方法用于创建一个 CloudWatch 警报。

AlarmName: 设置警报的名称。

MetricName: 选择要监控的指标,这里是 CPUUtilization

Namespace: 指定指标的命名空间,EC2 的命名空间是 AWS/EC2

Dimensions: 指定要监控的 EC2 实例的 ID。

Period: 指定时间周期(以秒为单位),这里是5分钟(300秒)。

EvaluationPeriods: 指定警报条件的评估周期数(即多长时间内连续超过阈值才触发警报)。

Threshold: 设置阈值,这里是 70%。

ComparisonOperator: 设置比较运算符,这里使用 GreaterThanThreshold,表示当 CPU 使用率大于 70% 时触发警报。

AlarmActions: 设置在警报触发时采取的操作,这里是 SNS 通知。

SNS 短信通知

在 SNS topic 中订阅你的电话号码,当警报触发时,你将收到一条短信通知。

以上就是在亚马逊云科技上根据系统监控最佳实践,利用CloudWatch对云服务资源状态监控的全部步骤。欢迎大家关注0基础5分钟上手AWS系列,未来获取更多国际前沿的AWS云开发/云架构方案!

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐