Passer au contenu

Healthchecks (Terminus)

L’intégration de Terminus vous fournit des vérifications de santé de préparation/de vivacité. Ces vérifications sont cruciales pour les configurations backend complexes. En résumé, une vérification de santé dans le domaine du développement web consiste généralement en une adresse spéciale, par exemple, https://my-website.com/health/readiness. Un service ou un composant de votre infrastructure (par exemple, Kubernetes) vérifie en continu cette adresse. Selon le code d’état HTTP retourné par une requête GET à cette adresse, le service prendra des mesures lorsqu’il recevra une réponse “non saine”. Étant donné que la définition de “sain” ou “non sain” varie selon le type de service que vous fournissez, l’intégration Terminus vous soutient avec un ensemble de indicateurs de santé.

Par exemple, si votre serveur web utilise MongoDB pour stocker ses données, il serait vital de savoir si MongoDB fonctionne toujours. Dans ce cas, vous pouvez utiliser le MongooseHealthIndicator. Si configuré correctement - plus d’informations à ce sujet plus tard - votre adresse de vérification de santé renverra un code d’état HTTP sain ou non, selon que MongoDB fonctionne ou non.

Getting started

Pour commencer avec @nestjs/terminus, nous devons installer la dépendance requise.

Fenêtre de terminal
$ npm install --save @nestjs/terminus

Setting up a Healthcheck

Une vérification de santé représente un résumé des indicateurs de santé. Un indicateur de santé exécute la vérification d’un service, qu’il soit dans un état sain ou non. Une vérification de santé est positive si tous les indicateurs de santé assignés fonctionnent correctement. Puisque de nombreuses applications auront besoin d’indicateurs de santé similaires, @nestjs/terminus fournit un ensemble d’indicateurs prédéfinis, tels que :

  • HttpHealthIndicator
  • TypeOrmHealthIndicator
  • MongooseHealthIndicator
  • SequelizeHealthIndicator
  • MikroOrmHealthIndicator
  • PrismaHealthIndicator
  • MicroserviceHealthIndicator
  • GRPCHealthIndicator
  • MemoryHealthIndicator
  • DiskHealthIndicator

Pour commencer avec notre première vérification de santé, créons le HealthModule et importons le TerminusModule dans son tableau d’importations.

import { Module } from '@nestjs/common';
import { TerminusModule } from '@nestjs/terminus';
@Module({
imports: [TerminusModule]
})
export class HealthModule {}

Nos vérifications de santé peuvent être exécutées en utilisant un contrôleur, qui peut être facilement mis en place en utilisant le Nest CLI.

Fenêtre de terminal
$ nest g controller health

HTTP Healthcheck

Une fois que nous avons installé @nestjs/terminus, importé notre TerminusModule et créé un nouveau contrôleur, nous sommes prêts à créer une vérification de santé.

Le HTTPHealthIndicator requiert le package @nestjs/axios, assurez-vous donc de l’avoir installé :

Fenêtre de terminal
$ npm i --save @nestjs/axios axios

Maintenant, configurons notre HealthController :

import { Controller, Get } from '@nestjs/common';
import { HealthCheckService, HttpHealthIndicator, HealthCheck } from '@nestjs/terminus';
@Controller('health')
export class HealthController {
constructor(
private health: HealthCheckService,
private http: HttpHealthIndicator,
) {}
@Get()
@HealthCheck()
check() {
return this.health.check([
() => this.http.pingCheck('nestjs-docs', 'https://docs.nestjs.com'),
]);
}
}

TypeOrm health indicator

Terminus offre la possibilité d’ajouter des vérifications de base de données à votre vérification de santé. Pour commencer avec cet indicateur de santé, vous devez consulter le chapitre Base de données et vous assurer que votre connexion à la base de données dans votre application est établie.

import { Controller, Get } from '@nestjs/common';
import { HealthCheckService, HttpHealthIndicator, HealthCheck } from '@nestjs/terminus';
@Controller('health')
export class HealthController {
constructor(
private health: HealthCheckService,
private db: TypeOrmHealthIndicator,
) {}
@Get()
@HealthCheck()
check() {
return this.health.check([
() => this.db.pingCheck('database'),
]);
}
}

Si votre base de données est accessible, vous devriez maintenant voir le résultat suivant lorsque vous demandez http://localhost:3000/health avec une requête GET :

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

Pour les cas avec plusieurs bases de données, vous devez injecter chaque connexion dans votre HealthController. Vous pouvez alors simplement passer la référence de connexion au TypeOrmHealthIndicator.

Disk health indicator

Avec le DiskHealthIndicator, nous pouvons vérifier combien d’espace de stockage est utilisé. Pour commencer, assurez-vous d’injecter le DiskHealthIndicator dans votre HealthController. L’exemple suivant vérifie l’utilisation du stockage du chemin / (ou sur Windows, vous pouvez utiliser C:\\). Si cela dépasse plus de 50 % de l’espace de stockage total, cela renverrait une vérification de santé non valide.

import { Controller, Get } from '@nestjs/common';
import { HealthCheckService, DiskHealthIndicator, HealthCheck } from '@nestjs/terminus';
@Controller('health')
export class HealthController {
constructor(
private health: HealthCheckService,
private disk: DiskHealthIndicator,
) {}
@Get()
@HealthCheck()
check() {
return this.health.check([
() => this.disk.checkStorage('storage', { path: '/', thresholdPercent: 0.5 }),
]);
}
}

More examples

Pour plus d’exemples de travail, vous pouvez consulter ces exemples.