我正在尝试在AWS Elastic Beanstalk环境的所有实例上设置CloudWatch警报,以设置内存。我已经设置了使用以下教程在CloudWatch上获取内存的功能:
https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/customize-containers-containers-cw.html
现在,我想设置一个警报,如果这些实例的记忆力超出了一定阈值,该警报将触发。我可以分别选择所有这些和设置警报,但是我想确保即使Beanstalk缩放群集或交换了实例,也不必重新配置警报。
有没有办法为实例name =" env-name"和memoreutilization的情况设置警报?
我从您的问题中了解的是以下要求:
- 您有多个指标,并且要在配置警报时使用逻辑或条件,例如(avg metric1> x || avg metric2> y(==>将警报状态设置为警报
- 您希望警报考虑新的指标在弹性beanstalk启动新实例时可用。
- 您希望旧指标在弹性豆stald缩放的情况下不立即考虑。
我认为目前是不可能的。
AWS讨论论坛[1]正在进行一个持续的讨论,该论坛表明,使用公制数学至少可以(1(。公制数学功能支持最大。10个指标。
解决方案
您需要做的是创建一个单个度量标准,该指标是否应触发警报是否应触发('计算指标'(。有多种方法可以实现这一目标:
- 对于复杂的指标,您可以编写一个bash脚本并使用cron上的EC2实例运行。该脚本将首先使用尺寸过滤器('List-Metrics'(查询现有的指标,然后收集每个度量标准('Get-Metric-data'(,汇总它,然后推动计算的度量数据点('Put-Metric-data'(。
- 如果指标很简单,则可以尝试AWS put-metric-data脚本的汇总选项[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"
汇总的文档选项说:
添加了汇总的指标,例如类型,AMI ID和的总体
。
参考
[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控制台中:
- 单击左侧导航链接中的监视链接。
- 在概述下,在"监视"部分中,单击"编辑"按钮。
- 为资源选择AwseBautoscalingGroup。
- 在CloudWatch Metric下选择MemoryUtilization。
- 根据需要修改统计和描述。
- 单击"添加"按钮,然后单击"监视"部分中的"保存"按钮。
- 向下滚动以找到添加的新面板。单击面板右上角的铃铛图标。这将带您到设置设置新的警报。
如果您看不到可用的内存度量,请验证是否正确设置了内存度量集合的集合。
CloudWatch无法以通用方式创建警报。只有两种方法可以完成任务。
1(在您的AMI中创建一个启动脚本。启动新实例时,它将负责其自己的CloudWatch警报。我很久以前就使用了此方法,方法很扎实。但是,在终止时运行脚本并不可靠,因此您必须定期清理旧的警报。
2(使用具有不错的功能的工具(Ahem ....不是CloudWatch(。我推荐蓝色斗牛士。与他们一起,您甚至不必设置警报或阈值,机器学习会自动基础您的资源并为您创建警报。
如果您到达这里并且不知道Beanstalk或CloudWatch足够贡献,请从这里开始:如何使用CloudWatch