在使用 ALB 附加服务时,指定运行状况检查路径或端口非常重要。
ALB 不会检查响应正文,但会检查状态码,因此唯一会返回200
状态码的调用是curl -I http://127.0.0.1:15672
rest 将需要身份验证或 404 或 403,LB 将目标标记为不健康。
因为 15672 将返回 200。
此外,验证所需目标组的 ECS 任务的健康检查,它是否指向实例的正确端口。
第二个选项:此外,您可以为 LB 编写自定义健康检查,它将监控容器的两个端口,因为 ALB 检查健康检查一次只检查一个端口,一个简单的示例可以基于 nodejs,因此这意味着您有运行简单的节点应用程序,它将检查端口并响应 ALB 健康检查。
在这种情况下,您的健康检查将是/ping
,端口将是3007
下面是我们用于此类 ECS 任务的代码,我们需要检查多个端口。
var express = require('express');
const isAllReachable = require('is-all-reachable');
var request = require('request');
var app = express();
app.get('/ping', (req, res) => {
isAllReachable([
// first check if all reachable
'http://localhost:15672'
// 'http://localhost:otherport'
], (err, reachable, host) => {
//if reachable then do API request if its responding
if (reachable) {
console.log("Health check passed");
console.log("checking rabbitMQ");
request.get('http://localhost:15672/api/vhosts', {
'auth': {
'user': 'guest',
'pass': 'guest',
'sendImmediately': false
}
}, function(error, response, body) {
console.log({
"status_code": response.statusCode,
"body": body
})
if (error) {
console.log(error)
console.log("failed to get vhosts");
res.status(500).send('health check failed');
} else {
res.status(200).send('rabbit mq is running');
}
})
} else {
console.log("health check failed. ", "This server is not reachable", err);
res.status(500).send('health check failed. one of the port is not reachable.');
console.log(reachable)
}
});
});
app.listen(3007, () => console.log('LB custom Health check server listening on port 3007!'));
对于 Rabbit 监控,可以深入探索rabbitmq 监控。