NestJS

Страница статуса и мониторинг uptime для приложений NestJS

Мониторинг NestJS-контроллеров, провайдеров, микросервисов и BullMQ-воркеров. Terminus-style health естественно ложится на наши JSON-ассершны.

Три способа запустить страницу статуса для NestJS

Выберите нужный уровень контроля — zero-code, low-code или полный headless.

Хостед

Добавьте NestJS-эндпоинт, направьте CNAME на status.yourdomain.com — готово. 5 минут.

Headless

Через публичный API собрать свою UI прямо в NestJS-приложении. Полный контроль дизайна и брендинга.

Смотреть API

Встраиваемые бейджи

SVG-бейджи uptime и статуса в README или лендинг. Обновляются каждые 5 минут.

Вставьте этот health endpoint в своё 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 уже отдаёт нужную форму — `$.details.database.status == "up"` работает из коробки.

Что ломается в NestJS-приложениях и как это поймать

Индикаторы Terminus зелёные при сломанной апп

DB-пинг может проходить, пока критический сервис упал. Сочетайте HTTP-пинги и schema-ассершны.

Отказы транспорта микросервисов

Падения gRPC или Redis дают тихие таймауты. Мониторьте каждый микросервис напрямую.

Падающие процессоры BullMQ

Воркер может выйти, API работает. Экспозируйте heartbeat и алертьте.

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 ассершны.

Можно мониторить микросервисы?

Да. Экспозируйте каждую health-проверку по HTTP и добавляйте как отдельные эндпоинты.

Поддерживает GraphQL?

Да. POST-запрос с query и ассершн по форме JSON-ответа.

Можно рендерить страницу статуса из NestJS?

Да. Запрос API в контроллере и возврат JSON, или рендер Handlebars/MJML.

Запустите мониторинг NestJS-приложения за 5 минут

Бесплатный тариф, без карты. Добавьте эндпоинт, получайте алерты о падениях.