logo blog it atawiz
chevron up
6 minutes de lecture
Mise en place de Health Checks avec .NET 6 et Azure Monitor
AmenAllah - il y a un mois
Un Guide sur la Configuration des Health Checks avec ASP.NET 6 et leur Intégration avec Azure Web App et Azure Monitor.

Table of contents

Introduction

L'intérêt de l'utilisation des Health checks

Implémentation en ASP.NET Core 6

1. Inscrire les services

2. Ajouter un Health check de base de données

3. Créer un Health check personnalisé

4. Personnaliser le résultat:

Intégration: Azure et Azure Monitor Alerts

1. Déployez votre Web App

2. Activez l'option HealthCheck de votre AppService

Création d'une alerte avec Azure Monitor

Références

Introduction

Les « Health checks », ou vérifications de santé, permettent de connaître l’état de santé d’une application et de ses dépendances. C’est donc un très bon moyen pour s’assurer que votre application fonctionne correctement, tout en étant prévenu en cas d’indisponibilité liée à des pannes ou problèmes techniques. Techniquement, c’est une ressource RESTful normalisée fournissant un état global Healthy, Sick / Dead et un état de chacune des dépendances vitales.

L'intérêt de l'utilisation des Health checks

Les Health checks permettent de:

  • Avoir une visibilité globale, puis détaillée sur l'état de l'application.
  • Identifier la ou les sources de défaillances exactes.
  • Avoir des alertes personnalisées en cas de pannes critiques par exemple.

Implémentation en ASP.NET Core 6

Les Health Checks dans ASP.NET Core sont implémentés à l'aide d'un middleware intégré, et sont souvent utilisé pour garantir que certains services/composants d'un système fonctionnent correctement. Ceci sans qu’il soit nécessaire d’écrire des tests ou même de les exécuter à tout moment pendant le développement et le déploiement en production. Dans ce qui suit, nous allons voir les étapes d'implémentation des Health Checks en ASP.NET Core:

1. Inscrire les services

Pour inscrire les services Health Checks, utilisez AddHealthChecks dans Program.cs. Créez un point de terminaison de contrôle d’intégrité en appelant MapHealthChecks

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddHealthChecks();

var app = builder.Build();

app.MapHealthChecks("/health");

app.Run();

2. Ajouter un Health check de base de données

Dans cet exemple, nous ajoutons un HealthCheck pour vérifier la connexion avec une base de données SQL Server.

builder.Services.AddHealthChecks()
   .AddSqlServer(
       builder.Configuration.GetConnectionString("DefaultConnection"));

3. Créer un Health check personnalisé

Créez un nouveau fichier .cs dans votre projet nommé CustomHealthCheck.cs et écrivez-y le code suivant :

public class CustomHealthCheck : IHealthCheck
{
   public Task<HealthCheckResult> CheckHealthAsync(
       HealthCheckContext context, CancellationToken cancellationToken = default)
    {
        try
        {
            return Task.FromResult(
              HealthCheckResult.Healthy("The service is up and running."));
        }
        catch (Exception)
        {
            return Task.FromResult(
                new HealthCheckResult(
                    context.Registration.FailureStatus, "The service is down."));
        }
    }
}

Pour enregistrer votre health check, appelez AddCheck dans Program.cs:

builder.Services.AddHealthChecks()
    .AddCheck<CustomHealthCheck>("Custom")

4. Personnaliser le résultat:

Pour personnaliser la sortie du résultat d'un rapport de health checks, définissez la propriété HealthCheckOptions.ResponseWriter sur un délégué qui écrit la réponse :

app.MapHealthChecks("/health", new HealthCheckOptions
{
   ResponseWriter = WriteResponse
});

Exemple: Le délégué personnalisé suivant génère une réponse JSON personnalisée à l'aide de System.Text.Json :

private static Task WriteResponse(HttpContext context, HealthReport healthReport)
{
   context.Response.ContentType = "application/json; charset=utf-8";

   var options = new JsonWriterOptions { Indented = true };

   using var memoryStream = new MemoryStream();
   using (var jsonWriter = new Utf8JsonWriter(memoryStream, options))
   {
       jsonWriter.WriteStartObject();
       jsonWriter.WriteString("status", healthReport.Status.ToString());
       jsonWriter.WriteStartObject("results");

       foreach (var healthReportEntry in healthReport.Entries)
       {
           jsonWriter.WriteStartObject(healthReportEntry.Key);
           jsonWriter.WriteString("status",
               healthReportEntry.Value.Status.ToString());
           jsonWriter.WriteString("description",
               healthReportEntry.Value.Description);
           jsonWriter.WriteStartObject("data");

           foreach (var item in healthReportEntry.Value.Data)
           {
               jsonWriter.WritePropertyName(item.Key);

               JsonSerializer.Serialize(jsonWriter, item.Value,
                   item.Value?.GetType() ?? typeof(object));
           }

           jsonWriter.WriteEndObject();
           jsonWriter.WriteEndObject();
       }

       jsonWriter.WriteEndObject();
       jsonWriter.WriteEndObject();
   }

   return context.Response.WriteAsync(
       Encoding.UTF8.GetString(memoryStream.ToArray()));
}

Lorsque vous exécutez l'application et parcourez l'endpoint /health, les métadonnées de santé seront générées sous format JSON et affichées comme suit:

healthcheck_1.png

Intégration: Azure et Azure Monitor Alerts

Dans cette partie, nous allons voir comment intégrer les health checks avec une Azure Web App. Voici les étapes à suivre, pour l'intégration de health checks et aussi créer une alerte dans Azure Monitor.

1. Déployez votre Web App

Il faut bien sûr que votre Azure Web App soit déployée afin de pouvoir faire l'intégration des health checks.

healthcheck_2.png

2. Activez l'option HealthCheck de votre AppService

healthcheck_3.png

Création d'une alerte avec Azure Monitor

  1. Créez une règle d'alerte: sous l'onglet Monitoring -> Alerts
  2. Cliquez sur Créer puis Alert rule.
  3. Choisissez le scope de l'alerte: votre Web App.
  4. Pour les conditions:
  • Sélectionnez Health check status comme signal.
  • Choisissez les critères selon vos préférences; pour cet exemple, nous avons choisi de déclencher une alerte dans le cas où le Health Check renvoie une moyenne < 100, autrement dit, quand il y a au moins un résultat qui est Unhealthy.

healthcheck_4.png

  1. Créez l'action de l'alerte, vous pouvez choisir ça selon vos préférences. Pour cet exemple, nous avonss choisi l'envoi d'un email comme action pour notre alerte.

healthcheck_5.png

  1. Remplissez les détails de votre alerte.

healthcheck_6.png

  1. Cliquez sur Créer.

Après avoir créé l'alerte, vous allez recevoir un email avec les détails de l'alerte déclenchée.

healthcheck_7.png

Références

https://learn.microsoft.com/en-us/aspnet/core/host-and-deploy/health-checks?view=aspnetcore-7.0