在 ALB 的节点应用程序中启用运行状况检查的代码
Code to enable healthcheck in node app for ALB
我正在检查以使用 Node.js 在 AWS 中启用应用程序负载均衡器。在我的 EC2 实例中,我使用 nginx 代理发送到 3000 端口,我配置的只是一个“/healthcheck”路径,用于在 nginx 中验证并节点健康控制。在 nginx 中非常简单
location /healthcheck {
return 200;
}
但是对于节点,我找不到一个干净的例子来为 3002 端口启用相同的功能。现在我有一个超时错误。
谢谢
PD:我检查了历史,最后一个答案是 3 年前创建一个 ping.html 文件
您基本上需要公开一个 healtcheck
端点。这将取决于您使用什么来创建 Web 服务器。选项有 express
、http
、hapijs
等。使用 express 的最简单路线可能是
const express = require('express')
const app = express()
const port = 3002
app.get('/healthcheck', (req, res) => res.send('Hello World!'))
app.listen(port, () => console.log(`Example app listening on port ${port}!`));
在您的 ALB 中,您可以简单地使用 http://someIp:3002/healthcheck
。如果它 returns 200 那意味着你的应用程序已经启动,否则没有。您需要确保该端口也已打开,以便在您的 ec2 上进行通信。
我已经做到了。在我的例子中,它用于 AWS 的基于 DNS 延迟的路由服务,但它的工作原理是一样的。
我在我的 nodejs 程序中设置了一个 /health
端点。这对 express 来说非常简单。然后我把这节放在 nginx.conf.
location /health {
proxy_pass http://relay/health;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
所有这些都是为了说服您的 nginx 反向代理将原始主机地址传递给 nodejs 服务器。我的服务器名为 "relay",你的服务器则有所不同。
我的 /health
端点在一切正常时设置为 return 200,在特定服务器时设置为 503("service unavailable" a/k/a "try again later")过载或正在脱机。完全死机的服务器根本不响应,AWS DNS 服务和 ALB 服务都能正确解释。
我还添加了一个非常小的 JSON 对象来描述服务器的当前状态、构建和启动的时间以及一些其他细节。很适合监控。
我正在检查以使用 Node.js 在 AWS 中启用应用程序负载均衡器。在我的 EC2 实例中,我使用 nginx 代理发送到 3000 端口,我配置的只是一个“/healthcheck”路径,用于在 nginx 中验证并节点健康控制。在 nginx 中非常简单
location /healthcheck {
return 200;
}
但是对于节点,我找不到一个干净的例子来为 3002 端口启用相同的功能。现在我有一个超时错误。
谢谢
PD:我检查了历史,最后一个答案是 3 年前创建一个 ping.html 文件
您基本上需要公开一个 healtcheck
端点。这将取决于您使用什么来创建 Web 服务器。选项有 express
、http
、hapijs
等。使用 express 的最简单路线可能是
const express = require('express')
const app = express()
const port = 3002
app.get('/healthcheck', (req, res) => res.send('Hello World!'))
app.listen(port, () => console.log(`Example app listening on port ${port}!`));
在您的 ALB 中,您可以简单地使用 http://someIp:3002/healthcheck
。如果它 returns 200 那意味着你的应用程序已经启动,否则没有。您需要确保该端口也已打开,以便在您的 ec2 上进行通信。
我已经做到了。在我的例子中,它用于 AWS 的基于 DNS 延迟的路由服务,但它的工作原理是一样的。
我在我的 nodejs 程序中设置了一个 /health
端点。这对 express 来说非常简单。然后我把这节放在 nginx.conf.
location /health {
proxy_pass http://relay/health;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
所有这些都是为了说服您的 nginx 反向代理将原始主机地址传递给 nodejs 服务器。我的服务器名为 "relay",你的服务器则有所不同。
我的 /health
端点在一切正常时设置为 return 200,在特定服务器时设置为 503("service unavailable" a/k/a "try again later")过载或正在脱机。完全死机的服务器根本不响应,AWS DNS 服务和 ALB 服务都能正确解释。
我还添加了一个非常小的 JSON 对象来描述服务器的当前状态、构建和启动的时间以及一些其他细节。很适合监控。