3

我正在尝试为 AWS Elastic Beanstalk 环境的所有实例上的内存设置 Cloudwatch 警报。我已经使用以下教程设置了在 Cloudwatch 上获取内存使用情况的功能:

https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/customize-containers-cw.html

现在我想设置一个警报,如果任何这些实例的 MemoryUtilization 超过某个阈值,就会触发该警报。我可以选择所有并分别设置警报,但我想确保即使 Beanstalk 扩展集群或交换实例,也不必重新配置警报。

有没有一种方法可以为实例名称 =“env-name”且指标为 MemoryUtilization 的情况设置警报?

4

3 回答 3

1

我从您的问题中了解到以下要求:

  1. 您有多个指标并希望在配置警报时使用逻辑 OR 条件,例如 (avg metric1 > x || avg metric2 > y) ==> 将警报状态设置为 ALARM
  2. 当弹性 beantalk 在横向扩展期间启动新实例时,您希望警报考虑新指标可用。
  3. 您希望在弹性 beantalk 扩展时不考虑旧指标。

我认为这目前是不可能的。
在 aws 讨论论坛 [1] 上正在进行讨论,这表明至少 (1) 可以使用 Metric Math。公制数学功能支持最大。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 -度量数据

于 2019-07-06T00:34:57.610 回答
1

在您的环境的 Elastic Beanstalk 控制台中:

  1. 单击左侧导航链接中的监控链接。
  2. 在概览下方的监​​控部分中,单击编辑按钮。
  3. 为资源选择 AWSEBAutoScalingGroup。
  4. 在 CloudWatch 指标下选择 MemoryUtilization。
  5. 根据需要修改统计信息和描述。
  6. 单击添加按钮,然后单击监控部分中的保存按钮。
  7. 向下滚动以找到添加的新面板。单击面板右上角的铃铛图标。这将带您进入设置以设置新警报。

如果您没有看到可用的 MemoryUtilization 指标,请验证您是否正确设置了内存指标的集合。

于 2019-07-06T03:42:25.653 回答
1

Cloudwatch 无法以通用方式创建警报。只有 2 种方法可以完成任务。

1) 在您的 AMI 中创建一个启动脚本。当一个新实例启动时,它负责自己的 Cloudwatch 警报。我很久以前就用过这个,方法很可靠。但是,在终止时运行脚本并不可靠,因此您必须定期清除旧警报。

2)使用具有不错功能的工具(咳咳……不是 Cloudwatch)。我推荐蓝色斗牛士。有了它们,您甚至不必设置警报或阈值,机器学习会自动为您的资源建立基线并为您创建警报。

如果您来到这里并且对 Beanstalk 或 Cloudwatch 的了解不够深入,无法做出贡献,请从这里开始:如何使用 CloudWatch 监控 AWS Elastic Beanstalk

于 2019-07-11T20:10:39.633 回答