如何通过 CloudWatch 按 CPU 使用情况监控所有 ec2
How to monitor all ec2 by CPU usage via CloudWatch
我正在尝试设置对大量 ec2 的监控,它们的数量在不断变化。我希望此实例的所有者在 CPU 使用率长时间处于低水平时收到通知。
我可以创建一个函数来获取所有 ec2 的列表,然后获取它们的 CPU 利用率,然后向所有者发送消息。这个选项不适合我,因为它需要一些时间来监视状态,而不是在函数启动时每秒获取 CPU 利用率值。总的来说,这种方法看起来很糟糕。
我可以在cloudwatch 中设置闹钟,但只能针对一个特定实例。这个选项不合适,因为有很多 ec2 并且它们的数量各不相同。
我可以创建一个包含 ec2 名称及其 CPU 利用率的仪表板。该仪表板将动态补充。但是我还没有想出如何从它发送通知。
没有第三方解决方案如何解决我的问题?
您会发现一些现有的 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 使用百分比。对于指定的时间。
我还在学习中,但如果有任何问题,我会尽力回答。谢谢大家!
我正在尝试设置对大量 ec2 的监控,它们的数量在不断变化。我希望此实例的所有者在 CPU 使用率长时间处于低水平时收到通知。
我可以创建一个函数来获取所有 ec2 的列表,然后获取它们的 CPU 利用率,然后向所有者发送消息。这个选项不适合我,因为它需要一些时间来监视状态,而不是在函数启动时每秒获取 CPU 利用率值。总的来说,这种方法看起来很糟糕。
我可以在cloudwatch 中设置闹钟,但只能针对一个特定实例。这个选项不合适,因为有很多 ec2 并且它们的数量各不相同。
我可以创建一个包含 ec2 名称及其 CPU 利用率的仪表板。该仪表板将动态补充。但是我还没有想出如何从它发送通知。
没有第三方解决方案如何解决我的问题?
您会发现一些现有的 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 使用百分比。对于指定的时间。
我还在学习中,但如果有任何问题,我会尽力回答。谢谢大家!