在 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 服务器。选项有 expresshttphapijs 等。使用 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 对象来描述服务器的当前状态、构建和启动的时间以及一些其他细节。很适合监控。