为什么需要健康检查?
健康检查有助于确保 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 该端点,以确保应用程序能够响应。如果出现故障,这些系统可以触发警报,甚至启动恢复过程。
健康检查有助于快速解决问题,确保应用程序的高可用性和稳定性。在开发过程中考虑健康检查,可以更好地监控和维护应用程序。