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.
$ 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.
$ 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é :
$ 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.