如何通过 CloudWatch 按 CPU 使用情况监控所有 ec2

How to monitor all ec2 by CPU usage via CloudWatch

我正在尝试设置对大量 ec2 的监控,它们的数量在不断变化。我希望此实例的所有者在 CPU 使用率长时间处于低水平时收到通知。

我可以创建一个函数来获取所有 ec2 的列表,然后获取它们的 CPU 利用率,然后向所有者发送消息。这个选项不适合我,因为它需要一些时间来监视状态,而不是在函数启动时每秒获取 CPU 利用率值。总的来说,这种方法看起来很糟糕。

我可以在cloudwatch 中设置闹钟,但只能针对一个特定实例。这个选项不合适,因为有很多 ec2 并且它们的数量各不相同。

我可以创建一个包含 ec2 名称及其 CPU 利用率的仪表板。该仪表板将动态补充。但是我还没有想出如何从它发送通知。

没有第三方解决方案如何解决我的问题?

请参阅此 AWS 文档https://aws.amazon.com/blogs/mt/use-tags-to-create-and-maintain-amazon-cloudwatch-alarms-for-amazon-ec2-instances-part-1/

您会发现一些现有的 Lambda 函数会在自动创建 EC2 实例后创建 Cloudwatch 警报。

它看起来有点棘手,但如果您真的想让它自动运行,则值得一看。但是是的,单个云监视警报无法监视多个 EC2 实例。

--

另一件事,您将从现有模板中找到相同的示例 lambda 函数,它将直接创建该 lambda 函数,您可以对其进行测试。

我的问题已经解决了。在我看来,这是最简单的选择之一。

使用方法get_metric_data from AWS SDK for Python Boto3我写了一个函数:

import boto3
from statistics import mean
from datetime import timedelta, datetime

cloudwatch_client = boto3.client('cloudwatch')

response = cloudwatch_client.get_metric_data(
    MetricDataQueries=[
        {
            'Id': 'myrequest',
            'MetricStat': {
                'Metric': {
                    'Namespace': 'AWS/EC2',
                    'MetricName': 'CPUUtilization',
                    'Dimensions': [
                        {
                            'Name': 'InstanceId',
                            'Value': 'i-123abc456def'
                        }
                    ]
                },
                'Period': 3600,
                'Stat': 'Average',
                'Unit': 'Percent'
            }
        },
    ],
    StartTime=datetime.now() - timedelta(days=1),
    EndTime=datetime.now()
)
for MetricDataResults in response['MetricDataResults']:
    list_avg = mean(MetricDataResults['Values'])
    print(list_avg)

在输出中,我得到了平均 CPU 使用百分比。对于指定的时间。

我还在学习中,但如果有任何问题,我会尽力回答。谢谢大家!