Amazon EC2 ELB警报 - 哪个实例不健康



我们已经在Amazon EC2上托管了一些应用程序,并使用弹性负载平衡器(ELB)来管理一个应用程序的几个实例。另外,我们已经设置了ELB警报,以获取有关不健康的主机的通知,即当实例下降时。

到目前为止,我无法弄清楚在实例中确切地删除了警报时,除了AWS控制台中的ELB状态页面。但是,如果该实例再次回到服务中的状态,这也不会对我有所帮助。ELB发送的电子邮件通知不包含此信息;我在控制台中的警报历史记录中找不到它。

是否有办法触发了哪个实例ELB警报,即使该实例又回到了 ok ok 同时?

欢呼,Alex

可悲的是,亚马逊没有提供健康检查日志,因此,假设服务器不再不健康,则无法发现哪个实例失败了健康检查。您只能使用per-az指标来知道AZ是哪个实例。

但是,如果您在期间查询AWS API ,您可能会知道哪个实例会降低。因此,我想到了可能的解决方法:

  • 设置了一个新的SNS主题,并将HTTP操作添加到自定义URL,该URL触发列举实例并通过邮件发送该信息的作业。
  • 然后为不健康的霍斯特量> 0设置CloudWatch警报,然后将操作设置为SNS主题。

困难的部分是您的URL应该处理SNS订阅&此处描述的确认。

命令知道当前是哪个实例的命令是:

elb-describe-instance-health *LoadBalancerName* --region *YourRegion*

您可能可以使用可以获得状态的AWS SDK GEM或其他AWS库。使用它来创建一个cron任务,该任务定期获取每个实例的状态并将其记录在某个地方。要么将为您提供所需的东西,或者一个实例的状态消失会告诉您哪一个变态。

我们正在使用以下lambda功能来弥补缺乏健康检查记录:

'use strict';
var AWS = require('aws-sdk');
var elb = new AWS.ELB();
exports.handler = (event, context, callback) => {
    var params = {
        LoadBalancerName: "<elb_name_here>"
    };
    elb.describeInstanceHealth(params, function(err, data) {
        if (err) console.log(err, err.stack); // an error occurred
        else     console.log(data);           // successful response
    });
};

它不会在CloudWatch中产生最漂亮的日志,但是数据在那里。它使我们能够查看是否有一个特定的实例倾向于更频繁地掉落,等等。它的设置很像Gerardo Grignoli上面的答案。当触发警报时,我添加了一个CloudWatch警报,以将SNS消息发送到Lambda功能。它对消息本身无能为力 - 消息仅仅是lambda函数运行并记录实例状态的触发机制。

no。CloudWatch中的ELB指标并未从设计的角度为您提供此级别的细节和恕我直言。如果主机不健康,则在特定主机上的监视应报告该详细信息而不是ELB。如果一个节点在ELB中停用,则不应该是ELB的问题。虽然,在负载平衡器中,弄清楚一个令人震惊的状态是有意义的,其中6台机器中有3个进入服务状态。看看CloudWatch指标

转到负载平衡器并找到与您的ELB关联的负载平衡器。然后查看OutofService

的实例

最新更新