我们在Amazon EC2上托管了一些应用程序,并使用 Elastic Load Balancer(ELB)来管理一个应用程序的多个实例。此外,我们已设置ELB警报以获取有关不健康主机的通知,即实例已关闭时。
到目前为止,除了AWS控制台中的ELB状态页面之外,我无法确定在警报响起时检查哪个实例确实已关闭的位置。但是,如果实例再次返回 In Service 状态,这对我也没有帮助。 ELB发出的电子邮件通知不包含此信息;我无法在控制台的警报历史记录中找到它。
有没有办法告诉哪个实例触发了ELB警报,即使实例在此期间已回到 OK 状态?
干杯,亚历克斯
答案 0 :(得分:7)
可悲的是,亚马逊没有提供运行状况检查日志,因此假设服务器不再不健康,则无法找出之后哪个实例未通过运行状况检查。您只能使用Per-Az指标来了解哪个AZ是实例。
但是,如果在期间查询AWS api ,您可以知道哪个实例已关闭。所以,我想到了一个可能的解决方法:
困难的部分是您的网址应该处理SNS订阅&确认描述here。
知道哪个实例当前是OutOfService的命令是:
elb-describe-instance-health *LoadBalancerName* --region *YourRegion*
答案 1 :(得分:2)
您可以使用可以获取状态的AWS SDK gem或其他AWS库。使用它来创建一个cron任务,定期获取每个实例的状态并将其记录在某处。要么你会得到你需要的东西,要么一个实例的状态消失会告诉你哪一个坏了。
答案 2 :(得分:2)
我们正在使用以下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's answer非常相似。我添加了一个CloudWatch警报,以便在触发警报时向Lambda函数发送SNS消息。它对消息本身没有任何作用 - 消息只是Lambda函数运行和记录实例状态的触发机制。
答案 3 :(得分:-3)
没有。 CloudWatch中的ELB指标不会从设计角度为您提供该级别的详细信息和IMHO。如果主机运行状况不佳,则特定主机上的监控应报告不是ELB的详细信息。如果一个节点在ELB中停止服务,那对ELB来说应该不是问题。虽然,在负载均衡器中,确定一个警报状态是有意义的,其中6台机器中的3台进入“未处于服务状态”。查看CloudWatch指标
答案 4 :(得分:-3)
转到负载均衡器并找到与您的ELB关联的负载均衡器。然后查看OutofService
的实例