NestJS

面向 NestJS 应用的状态页和正常运行时间监控

监控 NestJS 控制器、provider、微服务和 BullMQ worker。Terminus 风格的健康端点与我们的 JSON 断言天然契合。

为 NestJS 发布状态页的三种方式

选择所需的控制级别 — 零代码、低代码或完全 headless。

托管

添加 NestJS 端点,把 CNAME 指向 status.yourdomain.com,完成。5 分钟搞定。

Headless

通过公共 API 在你的 NestJS 应用内构建自有 UI,完全掌控设计与品牌。

查看 API

嵌入式徽章

将 SVG 正常运行时间和状态徽章放入 README 或落地页。每 5 分钟自动更新。

把这个 health 端点加入你的 NestJS 应用

复制、粘贴、把 PulseAPI 指向 URL。健康时返回 200,降级时返回 503。

src/health/health.controller.ts
import { Controller, Get } from '@nestjs/common'
import {
  HealthCheck,
  HealthCheckService,
  TypeOrmHealthIndicator,
  MemoryHealthIndicator,
} from '@nestjs/terminus'

@Controller('health')
export class HealthController {
  constructor(
    private health: HealthCheckService,
    private db: TypeOrmHealthIndicator,
    private memory: MemoryHealthIndicator,
  ) {}

  @Get()
  @HealthCheck()
  check() {
    return this.health.check([
      () => this.db.pingCheck('database'),
      () => this.memory.checkHeap('memory_heap', 300 * 1024 * 1024),
    ])
  }
}

Terminus 默认返回 PulseAPI 能断言的结构 — `$.details.database.status == "up"` 开箱即用。

NestJS 应用会出什么故障 — 如何捕获

应用坏掉但 Terminus 指标仍通过

关键服务宕机时 db ping 仍可能成功。叠加 HTTP ping 和 schema 断言以获得真实覆盖。

微服务传输层故障

gRPC 或 Redis 掉线导致静默超时。直接监控每个微服务端点。

BullMQ 处理器崩溃

Worker 退出后 API 仍保持在线。暴露处理器心跳并在停止时告警。

Headless 视角

不喜欢我们的状态页? 用 NestJS 自己构建。

我们的 API 返回的数据与托管 UI 完全一致。完整 OpenAPI 规范见 api.pulseapi.tech/docs.

为自定义页面代理状态数据的 Nest 控制器。
import { Controller, Get } from '@nestjs/common'
import { HttpService } from '@nestjs/axios'
import { firstValueFrom } from 'rxjs'

@Controller('status')
export class StatusController {
  constructor(private http: HttpService) {}

  @Get()
  async status() {
    const res = await firstValueFrom(
      this.http.get('https://api.pulseapi.tech/status/acme', { timeout: 5000 }),
    )
    return res.data
  }
}

NestJS 监控 — FAQ

能否开箱使用 Terminus?

可以。Terminus 的默认响应结构直接映射到我们的 JSON-path 断言。

能否监控微服务?

可以。用 HTTP 暴露每个健康检查,作为独立端点添加。

支持 GraphQL 吗?

支持。POST 一个 query 并对 JSON 响应结构断言。

能从 NestJS 渲染状态页吗?

可以。在控制器中调用 API 并返回 JSON,或用 Handlebars/MJML 渲染。

5 分钟开始监控你的 NestJS 应用

免费套餐,无需信用卡。添加端点,故障时接收告警。