NestJS

NestJS アプリ向けのステータスページと稼働監視

NestJS コントローラ、プロバイダ、マイクロサービス、BullMQ ワーカーを監視。Terminus 形式のヘルスエンドポイントが当社 JSON アサーションに合致。

NestJS のステータスページを公開する 3 つの方法

必要な制御レベルを選択 — ノーコード、ローコード、フルヘッドレス。

ホステッド

NestJS エンドポイントを追加し status.yourdomain.com に CNAME を向けるだけ。5 分で完成。

ヘッドレス

Public 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 とスキーマアサーションを重ねましょう。

マイクロサービス輸送層の障害

gRPC や Redis のドロップは静かにタイムアウトします。各マイクロサービスを直接監視。

BullMQ プロセッサのクラッシュ

ワーカーが終了しても API は稼働し続けます。プロセッサのハートビートを公開してアラート。

ヘッドレス視点

当社のステータスページが気に入らない? 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 し JSON レスポンスの形をアサート。

NestJS からステータスページを描画?

はい。コントローラで API を呼び JSON を返すか、Handlebars/MJML で描画。

NestJS アプリの監視を 5 分で開始

無料プラン、クレジットカード不要。エンドポイントを追加して障害時にアラート。