如何为beantalk环境内存设置cloudwatch报警
How to setup cloudwatch alarm for beanstalk environment memory
我正在尝试为 AWS Elastic Beanstalk 环境的所有实例上的内存设置 Cloudwatch 警报。我已经使用以下教程设置了在 Cloudwatch 上获取内存使用情况的功能:
https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/customize-containers-cw.html
现在我想设置一个警报,如果这些实例中的任何一个的 MemoryUtilization 超出特定阈值,该警报就会触发。我可以 select 全部并分别为每个设置警报,但我想确保即使 Beanstalk 扩展集群或交换实例,也不必重新配置警报。
有没有一种方法可以针对实例名称 = "env-name" 且指标为 MemoryUtilization 的情况设置警报?
根据你的问题我了解到的是以下要求:
- 您有多个指标并希望在配置警报时使用逻辑或条件,例如(avg metric1 > x || avg metric2 > y) ==> 将警报状态设置为 ALARM
- 您希望当弹性 beantalk 在扩展期间启动新实例时新指标可用时,警报考虑新指标。
- 您希望在弹性 beantalk 扩展时不考虑旧指标。
我认为目前这是不可能的。
aws 讨论论坛 [1] 上正在进行讨论,表明至少 (1) 可以使用 Metric Math。度量数学功能支持最大值。 10 个指标。
解决方案
您需要做的是,创建一个单独的指标来传输是否应触发警报的信息 ('computed metric')。有多种方法可以实现这一点:
- 对于复杂的指标,您可以使用 cron 在 EC2 实例上编写 bash 脚本和 运行 脚本。该脚本将首先使用维度过滤器 ('list-metrics') 查询现有指标,然后收集每个指标 ('get-metric-data'),聚合它,然后推送计算的指标数据点 ('put-metric-data')。
- 如果指标相当简单,您可以尝试 AWS put-metric-data 脚本的 aggregate 选项 [2]:
option_settings:
"aws:elasticbeanstalk:customoption" :
CloudWatchMetrics : "--mem-util --mem-used --mem-avail --disk-space-util --disk-space-used --disk-space-avail --disk-path=/ --auto-scaling --aggregated"
聚合 选项的文档说:
Adds aggregated metrics for instance type, AMI ID, and overall for the region.
参考资料
[1] https://forums.aws.amazon.com/thread.jspa?threadID=94984
[2] https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/mon-scripts.html#put-metric-data
在您环境的 Elastic Beanstalk 控制台中:
- 单击 left-hand 侧导航 link 中的监控 link。
- 在“概述”下方的“监视”部分中,单击“编辑”按钮。
- 为资源选择 AWSEBAutoScalingGroup。
- 在 CloudWatch 指标下选择 MemoryUtilization。
- 根据需要修改统计信息和说明。
- 单击“添加”按钮,然后单击“监视”部分中的“保存”按钮。
- 向下滚动以找到添加的新面板。单击面板右上角的铃铛图标。这将带您进入设置以设置新闹钟。
如果您没有看到可用的 MemoryUtilization 指标,请验证您是否已正确设置内存指标的集合。
Cloudwatch 无法以通用方式创建警报。只有两种方法可以完成任务。
1) 在您的 AMI 中创建一个启动脚本。启动新实例时,它负责自己的 Cloudwatch 警报。我很久以前用过这个,而且方法很扎实。但是,运行 终止脚本不可靠,因此您必须定期清除旧警报。
2) 使用功能强大的工具(咳咳……不是 Cloudwatch)。我推荐Blue Matador。有了它们,您甚至不必设置警报或阈值,机器学习会自动为您的资源设定基线并为您创建警报。
如果您来到这里并且对 Beanstalk 或 Cloudwatch 的了解不够深,无法做出贡献,请从这里开始:How to Monitor AWS Elastic Beanstalk with CloudWatch
我正在尝试为 AWS Elastic Beanstalk 环境的所有实例上的内存设置 Cloudwatch 警报。我已经使用以下教程设置了在 Cloudwatch 上获取内存使用情况的功能:
https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/customize-containers-cw.html
现在我想设置一个警报,如果这些实例中的任何一个的 MemoryUtilization 超出特定阈值,该警报就会触发。我可以 select 全部并分别为每个设置警报,但我想确保即使 Beanstalk 扩展集群或交换实例,也不必重新配置警报。
有没有一种方法可以针对实例名称 = "env-name" 且指标为 MemoryUtilization 的情况设置警报?
根据你的问题我了解到的是以下要求:
- 您有多个指标并希望在配置警报时使用逻辑或条件,例如(avg metric1 > x || avg metric2 > y) ==> 将警报状态设置为 ALARM
- 您希望当弹性 beantalk 在扩展期间启动新实例时新指标可用时,警报考虑新指标。
- 您希望在弹性 beantalk 扩展时不考虑旧指标。
我认为目前这是不可能的。
aws 讨论论坛 [1] 上正在进行讨论,表明至少 (1) 可以使用 Metric Math。度量数学功能支持最大值。 10 个指标。
解决方案
您需要做的是,创建一个单独的指标来传输是否应触发警报的信息 ('computed metric')。有多种方法可以实现这一点:
- 对于复杂的指标,您可以使用 cron 在 EC2 实例上编写 bash 脚本和 运行 脚本。该脚本将首先使用维度过滤器 ('list-metrics') 查询现有指标,然后收集每个指标 ('get-metric-data'),聚合它,然后推送计算的指标数据点 ('put-metric-data')。
- 如果指标相当简单,您可以尝试 AWS put-metric-data 脚本的 aggregate 选项 [2]:
option_settings:
"aws:elasticbeanstalk:customoption" :
CloudWatchMetrics : "--mem-util --mem-used --mem-avail --disk-space-util --disk-space-used --disk-space-avail --disk-path=/ --auto-scaling --aggregated"
聚合 选项的文档说:
Adds aggregated metrics for instance type, AMI ID, and overall for the region.
参考资料
[1] https://forums.aws.amazon.com/thread.jspa?threadID=94984
[2] https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/mon-scripts.html#put-metric-data
在您环境的 Elastic Beanstalk 控制台中:
- 单击 left-hand 侧导航 link 中的监控 link。
- 在“概述”下方的“监视”部分中,单击“编辑”按钮。
- 为资源选择 AWSEBAutoScalingGroup。
- 在 CloudWatch 指标下选择 MemoryUtilization。
- 根据需要修改统计信息和说明。
- 单击“添加”按钮,然后单击“监视”部分中的“保存”按钮。
- 向下滚动以找到添加的新面板。单击面板右上角的铃铛图标。这将带您进入设置以设置新闹钟。
如果您没有看到可用的 MemoryUtilization 指标,请验证您是否已正确设置内存指标的集合。
Cloudwatch 无法以通用方式创建警报。只有两种方法可以完成任务。
1) 在您的 AMI 中创建一个启动脚本。启动新实例时,它负责自己的 Cloudwatch 警报。我很久以前用过这个,而且方法很扎实。但是,运行 终止脚本不可靠,因此您必须定期清除旧警报。
2) 使用功能强大的工具(咳咳……不是 Cloudwatch)。我推荐Blue Matador。有了它们,您甚至不必设置警报或阈值,机器学习会自动为您的资源设定基线并为您创建警报。
如果您来到这里并且对 Beanstalk 或 Cloudwatch 的了解不够深,无法做出贡献,请从这里开始:How to Monitor AWS Elastic Beanstalk with CloudWatch