如何在 Node.js 中实现健康检查

为什么需要健康检查?

健康检查有助于确保 API 的可用性,及时发现和解决问题。

在 Node.js 中实现健康检查

1. 添加健康检查路由

routes 文件夹中新建 healthchecker.js 文件,并添加以下代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
const express = require("express");
const router = express.Router({});

router.get('/', async (_req, res, _next) => {
const healthcheck = {
uptime: process.uptime(),
message: 'OK',
timestamp: Date.now()
};
try {
res.send(healthcheck);
} catch (error) {
healthcheck.message = error;
res.status(503).send();
}
});

module.exports = router;

2. 注册健康检查路由

index.js 文件中添加以下代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
const express = require("express");
const app = express();
const dotenv = require("dotenv");
const session = require('express-session');
dotenv.config();
const passport = require("passport");
const { loginCheck } = require("./auth/passport");
loginCheck(passport);

app.set("view engine", "ejs");
app.use(express.urlencoded({ extended: false }));
app.use(session({ secret: 'oneboy', saveUninitialized: true, resave: true }));

app.use(passport.initialize());
app.use(passport.session());
app.use("/", require("./routes/login"));
app.use('/healthcheck', require('./routes/healthchecker'));

const PORT = process.env.PORT || 3000;
app.listen(PORT, console.log("Server has started at port " + PORT));

启动服务器并访问 http://localhost:3000/healthcheck,将看到服务器运行时间、状态信息和时间戳。

3. 添加响应时间

另一件需要检查的事情是响应时间——服务器响应请求需要多长时间。

healthchecker.js 文件中,添加 process.hrtime() 方法记录响应时间:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
const express = require("express");
const router = express.Router({});

router.get('/', async (_req, res, _next) => {
const startHrTime = process.hrtime();
const healthcheck = {
uptime: process.uptime(),
message: 'OK',
timestamp: Date.now(),
responsetime: process.hrtime(startHrTime)
};
try {
res.send(healthcheck);
} catch (error) {
healthcheck.message = error;
res.status(503).send();
}
});

module.exports = router;

重新启动服务器并刷新页面,将看到带有响应时间的健康检查信息。

最佳实践

  • 安全性:考虑将身份验证或 IP 白名单添加到健康检查端点,以防止未经授权的访问。
  • 监控和自动化:设置完成后,可以将其集成到监控工具或 CI/CD 管道中。自动化系统可以定期 ping 该端点,以确保应用程序能够响应。如果出现故障,这些系统可以触发警报,甚至启动恢复过程。

健康检查有助于快速解决问题,确保应用程序的高可用性和稳定性。在开发过程中考虑健康检查,可以更好地监控和维护应用程序。