NestJS アプリ向けのステータスページと稼働監視
NestJS コントローラ、プロバイダ、マイクロサービス、BullMQ ワーカーを監視。Terminus 形式のヘルスエンドポイントが当社 JSON アサーションに合致。
NestJS のステータスページを公開する 3 つの方法
必要な制御レベルを選択 — ノーコード、ローコード、フルヘッドレス。
ホステッド
NestJS エンドポイントを追加し status.yourdomain.com に CNAME を向けるだけ。5 分で完成。
埋め込みバッジ
SVG の稼働率・ステータスバッジを README やランディングに埋め込み。5 分ごとに自動更新。
この health エンドポイントを NestJS アプリに貼り付けます
コピペして PulseAPI を URL に向けるだけ。健康なら 200、劣化なら 503 を返します。
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.
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 で描画。