.Net Core 애플리케이션에 상태 확인 추가
또한 다른 기사가 있는 내 블로그를 확인하십시오 --> https://rmauro.dev
이 블로그 게시물에서는 애플리케이션 상태를 모니터링하는 엔드포인트를 추가합니다.
그리고 .Net Core 애플리케이션에서는 매우 간단하다는 것을 알 수 있습니다. 몇 줄의 코드만으로 서비스의 상태를 표시할 수 있는 인프라가 준비되었습니다.
다음과 같은 서비스를 모니터링할 수 있습니다.
기본적으로 생각할 수 있는 모든 것. 적합한 구현을 찾지 못한 경우 맞춤형 구현을 생성할 수 있습니다.
상태 엔드포인트 모니터링 패턴
하지만. 왜요?
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
기본 상태 확인 추가
먼저 ConfigureServices 메서드에 HealthCheck 서비스를 추가합니다.
public void ConfigureServices(IServiceCollection services)
{
//adding health check services to container
services.AddHealthChecks();
}
Startup.cs
둘째, 파이프라인 구성에 상태 확인 엔드포인트를 추가합니다.
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.Diagnostics.HealthChecks 패키지가 포함되어 있습니다.
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 상태 확인을 포함하도록 AddHealthChecks를 수정합니다.
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(사용자 인터페이스)를 넣는 방법을 보여드리겠습니다.
소스 코드 At - 브랜치 Article-1
원래 게시 위치:
참조 기사
Reference
이 문제에 관하여(.Net Core 애플리케이션에 상태 확인 추가), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/rmaurodev/adding-health-checks-to-net-core-application-2o6텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)