ASP.NET Core 5 Web API에서 QuickStart 상태 확인 설정

16258 단어 csharpdotnetwebdev
이 게시물에서는 ASP.NET Core 상태 검사를 .NET 5 Core API 프로젝트에 통합합니다. 이것은 그래픽 사용자 인터페이스를 사용하고 데이터베이스 종속성이 없는 상태 검사를 시작하기 위한 간단하고 빠른 시작 가이드입니다.

이 예에서는 가비지 수집기를 기반으로 한 메모리 검사가 설정됩니다. AspNetCore.Diagnostics.HealthChecks 라이브러리를 사용하여 보다 친숙한 사용자 인터페이스에 결과를 표시합니다.

설정



첫 번째 단계는 환경에서 새 ASP.NET Core WebApi 프로젝트를 만드는 것입니다. 이 예에서는 true로 설정된 openApi와 .NET 5를 사용합니다.



패키지



다음 너겟 패키지를 설치합니다.
  • AspNetCore.HealthChecks.UI
  • AspNetCore.HealthChecks.UI.InMemory.Storage
  • AspNetCore.HealthChecks.UI.Client

  • 서비스 구성




      public void ConfigureServices(IServiceCollection services)
            {
                services.AddHealthChecks().AddCheck<MemoryHealthCheck>("Memory");
                services.AddHealthChecksUI(opt =>
                {
                    opt.SetEvaluationTimeInSeconds(15); //time in seconds between check
                }).AddInMemoryStorage();
    
                services.AddControllers();
                services.AddSwaggerGen(c =>
                {
                    c.SwaggerDoc("v1", new OpenApiInfo { Title = "WebApi.HealthCheck", Version = "v1" });
                });
            }
    


    구성




      public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
            {
                if (env.IsDevelopment())
                {
                    app.UseDeveloperExceptionPage();
                    app.UseSwagger();
                    app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "WebApi.HealthCheck v1"));
                }
    
                app.UseHttpsRedirection();
    
                app.UseRouting();
    
                app.UseAuthorization();
    
                app.UseEndpoints(endpoints =>
                {
                    endpoints.MapControllers();
                });
    
                app.UseRouting()
                 .UseEndpoints(config =>
                 {
                     config.MapHealthChecks("/hc", new HealthCheckOptions
                     {
                         Predicate = _ => true,
                         ResponseWriter = UIResponseWriter.WriteHealthCheckUIResponse
                     });
    
                     config.MapHealthChecksUI(setup =>
                     {
                         setup.UIPath = "/hc-ui";
                         setup.ApiPath = "/hc-json";  
                     });
    
                     config.MapDefaultControllerRoute();
                 });
            }
    


    MemoryCheck.cs




     public class MemoryHealthCheck : IHealthCheck
        {
            private readonly IOptionsMonitor<MemoryCheckOptions> _options;
    
            public MemoryHealthCheck(IOptionsMonitor<MemoryCheckOptions> options)
            {
                _options = options;
            }
    
            public string Name => "memory_check";
    
            public Task<HealthCheckResult> CheckHealthAsync(
                HealthCheckContext context,
                CancellationToken cancellationToken = default(CancellationToken))
            {
                var options = _options.Get(context.Registration.Name);
    
                // Include GC information in the reported diagnostics.
                var allocated = GC.GetTotalMemory(forceFullCollection: false);
                var data = new Dictionary<string, object>()
            {
                { "AllocatedBytes", allocated },
                { "Gen0Collections", GC.CollectionCount(0) },
                { "Gen1Collections", GC.CollectionCount(1) },
                { "Gen2Collections", GC.CollectionCount(2) },
            };
                var status = (allocated < options.Threshold) ?
                    HealthStatus.Healthy : context.Registration.FailureStatus;
    
                return Task.FromResult(new HealthCheckResult(
                    status,
                    description: "Reports degraded status if allocated bytes " +
                        $">= {options.Threshold} bytes.",
                    exception: null,
                    data: data));
            }
        }
    
        public class MemoryCheckOptions
        {
            // Failure threshold (in bytes)
            public long Threshold { get; set; } = 1024L * 1024L * 1024L;
        }
    


    appsettings.json




    {
      "Logging": {
        "LogLevel": {
          "Default": "Information",
          "Microsoft": "Warning",
          "Microsoft.Hosting.Lifetime": "Information"
        }
      },
      "AllowedHosts": "*",
      "HealthChecksUI": {
        "HealthChecks": [
          {
            "Name": "Web App",
            "Uri": "/hc"
          }
        ]
      }
    }
    


    결과





    참조


  • Health checks in ASP.NET Core
  • GitHub Example
  • 좋은 웹페이지 즐겨찾기