终极Nest.js健康监控方案:Terminus模块完全指南

【免费下载链接】terminus Terminus module for Nest framework (node.js) :robot: 【免费下载链接】terminus 项目地址: https://gitcode.com/gh_mirrors/terminus3/terminus

Terminus模块是Nest.js框架的官方健康检查解决方案,为Node.js服务器端应用提供了全面的健康监控能力。通过简单几步配置,你就能为应用添加强大的健康检查功能,实时监控系统状态并快速定位问题。

为什么选择Terminus模块?

在现代微服务架构中,应用健康监控至关重要。Terminus模块作为Nest.js生态系统的一部分,提供了以下核心优势:

  • 开箱即用:无需复杂配置即可实现基础健康检查
  • 多类型支持:内置对数据库、内存、磁盘、HTTP服务等多种健康检查类型
  • 灵活扩展:轻松自定义健康检查逻辑以适应特定业务需求
  • 标准化输出:提供一致的健康状态报告格式,便于监控系统集成

快速安装Terminus模块

安装Terminus模块非常简单,只需执行以下命令:

npm install --save @nestjs/terminus

Terminus会根据你选择的健康检查类型,提示安装必要的依赖项,确保你只安装实际需要的包。

基本配置步骤

1. 导入Terminus模块

首先,在你的Nest.js应用模块中导入Terminus模块。如果你需要数据库健康检查,确保相关的数据库模块(如TypeOrmModule)也已导入:

// app.module.ts
@Module({
  controllers: [HealthController],
  imports: [
    // 确保数据库模块已导入
    TypeOrmModule.forRoot({ ... }),
    TerminusModule
  ],
})
export class HealthModule { }

2. 创建健康检查控制器

接下来,创建一个健康检查控制器,定义健康检查端点和检查项:

// health.controller.ts
@Controller('health')
export class HealthController {
  constructor(
    private health: HealthCheckService,
    private db: TypeOrmHealthIndicator,
  ) {}

  @Get()
  @HealthCheck()
  readiness() {
    return this.health.check([
      async () => this.db.pingCheck('database', { timeout: 300 }),
    ]);
  }
}

3. 访问健康检查端点

完成配置后,你可以通过访问http://localhost:3000/health来查看应用健康状态,典型的响应格式如下:

{
  "status": "ok",
  "info": {
    "database": {
      "status": "up"
    }
  },
  "details": {
    "database": {
      "status": "up"
    }
  }
}

支持的健康检查类型

Terminus模块支持多种健康检查类型,满足不同场景需求:

数据库健康检查

支持主流ORM和数据库:

  • TypeORM:TypeOrmHealthIndicator
  • Mongoose:MongooseHealthIndicator
  • Sequelize:SequelizeHealthIndicator
  • Prisma:PrismaHealthIndicator
  • MikroORM:MikroOrmHealthIndicator

相关实现代码可以在lib/health-indicator/database/目录下找到。

系统资源监控

  • 内存检查:监控应用内存使用情况,防止内存泄漏
  • 磁盘检查:监控磁盘空间使用,避免存储空间耗尽

实现代码位于lib/health-indicator/memory/lib/health-indicator/disk/目录。

外部服务监控

  • HTTP服务检查:监控依赖的外部HTTP服务可用性
  • 微服务检查:支持gRPC等微服务健康检查

相关实现可在lib/health-indicator/http/lib/health-indicator/microservice/目录查看。

高级用法

自定义健康检查

你可以轻松创建自定义健康检查逻辑,只需实现自己的健康检查函数:

@Get()
@HealthCheck()
customHealthCheck() {
  return this.health.check([
    async () => this.db.pingCheck('database', { timeout: 300 }),
    async () => ({
      custom: { status: 'up' }
    })
  ]);
}

错误处理与日志

Terminus提供了灵活的错误处理机制,可通过error-logger模块配置错误日志策略,相关代码位于lib/health-check/error-logger/目录。

实际应用示例

项目提供了多个示例应用,展示不同场景下的Terminus配置:

  • 基础应用示例:sample/000-dogs-app/
  • Mongoose数据库示例:sample/001-mongoose-app/
  • 微服务应用示例:sample/002-microservice-app/
  • 内存监控示例:sample/003-memory-app/
  • gRPC应用示例:sample/004-grpc-app/

要运行示例,首先克隆仓库:

git clone https://gitcode.com/gh_mirrors/terminus3/terminus
cd terminus

然后进入相应示例目录并启动:

cd sample/000-dogs-app
pnpm start:dev

测试与贡献

Terminus模块有完善的测试覆盖,包括单元测试和端到端测试。要运行测试:

# 单元测试
pnpm test

# 端到端测试(需要Docker)
docker compose up -d
pnpm test:e2e

如果你想为项目做贡献,请参考CONTRIBUTING.md文件了解贡献指南。

总结

Terminus模块为Nest.js应用提供了简单而强大的健康监控解决方案,无论是小型应用还是复杂的微服务架构,都能轻松集成并满足监控需求。通过本文介绍的方法,你可以快速为应用添加专业的健康检查功能,提升系统可靠性和可维护性。

想了解更多细节,可以查阅官方文档或浏览项目源代码,开始构建更健壮的Nest.js应用吧! 🚀

【免费下载链接】terminus Terminus module for Nest framework (node.js) :robot: 【免费下载链接】terminus 项目地址: https://gitcode.com/gh_mirrors/terminus3/terminus

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐