健康チェックを加えること.NETコアアプリケーション


この一連の投稿では、ヘルスチェックについて話し、Webアプリケーション/Web APIを監視します.
また、他の記事と私のブログをチェックアウトhttps://rmauro.dev
このブログ記事では、アプリケーションの状態を監視するためにエンドポイントを追加します.
そして、あなたはそれがかなり簡単であるのを見ます.NETコアアプリケーション.コードのほんの数列で、我々はインフラストラクチャを我々のサービスの健康状態を表示する準備ができています.
次のようなサービスを監視できます.
  • データベース(SQL Server、Oracle、MySQL、MongoDBなど)
  • 外部API接続
  • ディスク接続(読み書き)
  • キャッシュサービス( REDIS , memcacheなど)
  • あなたが考えることができる基本的な何でも.もしあなたに合った実装が見つからない場合は、カスタム実装を作成できます.

    健康終点モニタリングパターン


    でも.なぜ?

    Implement functional checks in an application that external tools can access through exposed endpoints at regular intervals. This can help to verify that applications and services are performing correctly.


    への参照https://docs.microsoft.com/en-us/azure/architecture/patterns/health-endpoint-monitoring

    基本健康チェック


    まず、HealthCheckサービスを追加します.
    public void ConfigureServices(IServiceCollection services)
    {
        //adding health check services to container
        services.AddHealthChecks();
    }
    

    Startup.cs


    第2に、HeadCheckエンドポイントを構成するパイプラインを追加します.
    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
    
        //adding health check endpoint
        app.UseHealthChecks("/healthcheck");
    
        app.UseMvcWithDefaultRoute();
    }
    

    Startup.cs for .Net Core 2.2


    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
            {
                if (env.IsDevelopment())
                {
                    app.UseDeveloperExceptionPage();
                }
    
                app.UseRouting();
    
                app.UseEndpoints(endpoints =>
                {
                    endpoints.MapHealthChecks("/healthcheck");
                    endpoints.MapDefaultControllerRoute();
                });
            }
    

    Startup.cs for .Net Core 3.1


    常にUSEMVCの前に置いてください.私たちはエンドポイントの前に実行されるMVCパイプラインを望まない.
    URLのビルド、実行、アクセスhttp://{YOUR-URL}/healthcheck あなたはこのようなものを見るべきです.

    すべての設定を行い、監視リストにサービスを追加し始める.MongoDBを監視リストに追加しましょう.

    MongoDBをモニタサービスとして追加する


    Xabarilのリストから選びましょう.XabarilのGithubリポジトリには、aspnetcoreの束が含まれています.診断法Healthcheckパッケージを使用する準備ができました.
    AspNetCore.HealthChecks.System
    AspNetCore.HealthChecks.Network
    AspNetCore.HealthChecks.SqlServer
    AspNetCore.HealthChecks.MongoDb
    AspNetCore.HealthChecks.Npgsql
    AspNetCore.HealthChecks.Elasticsearch
    AspNetCore.HealthChecks.Redis
    AspNetCore.HealthChecks.EventStore
    AspNetCore.HealthChecks.AzureStorage
    AspNetCore.HealthChecks.AzureServiceBus
    AspNetCore.HealthChecks.AzureKeyVault
    AspNetCore.HealthChecks.MySql
    

    https://github.com/xabaril/AspNetCore.Diagnostics.HealthChecks


    その他多くのパッケージ.

    バック・トゥ・ビジネス.
    まず、nugetパッケージを追加するAspNetCore.HealthChecks.MongoDb プロジェクトに.
    そして、それらはMongoDB健康チェックを含むためにaddHealthCheckを修正します.
    public void ConfigureServices(IServiceCollection services)
    {
        //adding health check services to container
        services.AddHealthChecks()
            .AddMongoDb(mongodbConnectionString: "YOUR-CONNECTION-STRING",
            name: "mongo", 
            failureStatus: HealthStatus.Unhealthy); //adding MongoDb Health Check
    }
    

    Startup.cs


    これらの変更の後、それはすべての設定です.アプリケーションを実行し、再度ヘルスステータスページをチェックできます.

    ほかのエンドポイントの追加


    では、監視エンドポイントに関する詳細な情報を表示する別のエンドポイントを作成しましょう.
    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        //... ommited code
    
        //adding health check endpoint
        app.UseHealthChecks("/healthcheck");
    
        //adding custom json response
        app.UseHealthChecks("/hc",
           new HealthCheckOptions
           {
               ResponseWriter = async (context, report) =>
               {
                   var result = JsonConvert.SerializeObject(
                       new
                       {
                           status = report.Status.ToString(),
                           errors = report.Entries.Select(e => new { key = e.Key, value = Enum.GetName(typeof(HealthStatus), e.Value.Status) })
                       });
                   context.Response.ContentType = MediaTypeNames.Application.Json;
                   await context.Response.WriteAsync(result);
               }
           });
    
        app.UseMvcWithDefaultRoute();
    }
    

    Startup.cs for .Net 2.2


    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
            {
                //... ommited code
    
                app.UseEndpoints(endpoints =>
                {
                    endpoints.MapHealthChecks("/healthcheck");
                    endpoints.MapHealthChecks("/hc",
                       new HealthCheckOptions
                       {
                           ResponseWriter = async (context, report) =>
                           {   //using the new json serializer
                               var result = JsonSerializer.Serialize(
                                   new
                                   {
                                       status = report.Status.ToString(),
                                       errors = report.Entries.Select(e => new { key = e.Key, value = Enum.GetName(typeof(HealthStatus), e.Value.Status) })
                                   });
    
                               context.Response.ContentType = MediaTypeNames.Application.Json;
    
                               await context.Response.WriteAsync(result);
                           }
                       });
    
                    endpoints.MapGet("/", async context => await context.Response.WriteAsync("Hello World!"));
                    endpoints.MapDefaultControllerRoute();
                });
            }
    

    Startup.cs for .Net 3.1


    もう一度実行し、エンドポイントにアクセスする/hc .

    それだ!
    次の記事では、UI(ユーザーインターフェイス)をどのように置くかを示します.

    分岐節のソースコード- 1

  • https://github.com/ricardodemauro/Health-Check-Series
  • 当初投稿

  • https://rmauro.dev/adding-health-checks-to-net-core-application/
  • 参考記事

  • https://docs.microsoft.com/en-us/azure/architecture/patterns/health-endpoint-monitoring
  • https://www.hanselman.com/blog/HowToSetUpASPNETCore22HealthChecksWithBeatPulsesAspNetCoreDiagnosticsHealthChecks.aspx
  • https://github.com/xabaril/AspNetCore.Diagnostics.HealthChecks