ASP.순핵심 건강검진

17909 단어 csharpdotnettutorial
프로젝트를 개발할 때, 여러 개의 서비스가 서로 이야기를 나누고 있기 때문에, 그들의 서비스 상황을 즉시 보기 어렵다.
이 문서에서는 ASP를 구성하는 방법에 대해 설명합니다.NET 핵심 건강검진과 그 중에서 우리가 어떤 다른 지표를 수집할 수 있는지 연구한다.

💡 Follow along with the code samples for this blog post from this repo.


설정


나는 ASP.NET 의 MVC와 템플릿을 사용할 것이다. 왜냐하면 너희들 대부분이 그것을 잘 알고 있기 때문이다.그러나 API, 콘솔 또는 Blazor와 같은 다른 항목 유형도 사용할 수 있습니다.
MVC 애플리케이션을 구축해 보겠습니다.
dotnet new mvc -n Monitor
dotnet new sln
dotnet sln add Monitor
우선 HealthChecks 패키지를 설치해야 합니다.
cd Monitor/
dotnet add package AspNetCore.HealthChecks.UI
지금 우리는 그것을 중간부품 파이프에 연결할 준비를 하고 있다.

애플리케이션 구성


Configure Services 메서드에 다음을 추가하려면 Startup.cs로 이동합니다.
services.AddHealthChecks();
우선, 프로그램의 현재 상태를 표시하기 위해 JSON을 출력하는 단점을 추가할 것입니다.
app.UseEndpoints(endpoints =>
{
    endpoints.MapControllerRoute(
        name: "default",
        pattern: "{controller=Home}/{action=Index}/{id?}");

        // Mapping a new endpoint to see the health
    endpoints.MapHealthChecks("/health");
});

응, 이것은 특별히 유용한 것이 아니야.우리가 사용하는 이 건강 검사 패키지는 많은 다른 출력 형식을 제공한다.그들은 확장성을 가지기 때문에 사용자 정의 출력 형식을 사용할 수도 있습니다.만약 많은 서비스가 서로 통신한다면, JSON이라는 형식을 사용하는 것은 의미가 있습니다.

💡 Feel free to skip this section and jump ahead to “Registering health checks” section to see the final result.


상태 점검 UI 대시보드


우리가 흥미를 느끼는 것은 상자에서 나온 계기판을 보는 것이다.현재 프로젝트를 모니터링 프로그램으로 사용해서 실행 중인 다른 프로그램의 운행 상황을 탐지하고 검사할 것입니다.다음 그림은 우리가 원하는 상태를 설명한다.

우리는 어떤 것들을 직관적으로 볼 수 있고 해결 방안을 확장하기 시작할 수 있는 점에 도달할 수 있다.대시보드를 사용할 수 있도록 백업 메모리가 필요합니다.우리는 AspNetCore.HealthChecks.UI.InMemory.Storage라는 소포가 필요하다
dotnet add package AspNetCore.HealthChecks.UI.InMemory.Storage
Startup/Configure Services 클래스의 코드를 변경합니다.이전 코드를 다음 코드로 바꿉니다.
// ..
services.AddHealthChecksUI()
        .AddInMemoryStorage();
// ..
다음은 계기판을 볼 수 있도록 새로운 단점을 비추자.
// ...
app.UseEndpoints(endpoints =>
{
    endpoints.MapControllerRoute(
        name: "default",
        pattern: "{controller=Home}/{action=Index}/{id?}");

    endpoints.MapHealthChecksUI();
});

//...
현재 우리는 우리가 무엇을 얻었는지 보기 위해 프로그램을 실행할 준비가 되어 있다.
dotnet new webapi -n Service1
dotnet new webapi -n Service2
dotnet sln add Service1 Service2
우리는 상기 절차에서 만든 두 항목에 건강검진 중간부품을 추가해야 한다.
창업하다.대테러 엘리트
public void ConfigureServices(IServiceCollection services)
{
    // ...
    services.AddHealthChecks();
    // ...
}

app.UseEndpoints(endpoints =>
{
    // ...
    endpoints.MapHealthChecks("/health", new HealthCheckOptions()
    {
        ResponseWriter = UIResponseWriter.WriteHealthCheckUIResponse
    });
   // ...
});
다음 줄을 우리가 만든 두 서비스 .csproj 파일에 복사해서 추가하십시오.
<PackageReference Include="AspNetCore.HealthChecks.UI" Version="5.0.1" />
<PackageReference Include="AspNetCore.HealthChecks.UI.Client" Version="5.0.1" />
마지막으로, 귀하는 서비스의 단점을 저희 모니터링 프로젝트에 추가해야 합니다.모니터 프로젝트의 appsettings.json 파일에 다음 위치를 추가합니다.구성에 대한 자세한 내용은 official docs로 이동하십시오.
"HealthChecksUI": {
  "HealthChecks": [
    {
      "Name": "Service 1",
      "Uri": "https://localhost:5011/health"
    },
    {
      "Name": "Service 2",
      "Uri": "https://localhost:5021/health"
    }
  ],
  "EvaluationTimeInSeconds": 10
},

💡 Don’t forget to take the port numbers your servers are running on from the corresponding launchSettings.json files. This could change depending on whether you are using IIS Express or Kestrel for development.


이 세 항목을 시작하면 건강검진 계기판을 볼 수 있습니다.
대시보드 UI의 기본 URI는 https://localhost:<app port>/healthchecks-ui입니다.

엔진 덮개 아래에서 이 소형 SPA 계기판은 URI/healthchecks-api를 돌아가며 이 URI는 JSON을 되돌려준다.

건강 검진을 등록하다.


다른 의존 항목을 도입하지 않고 보고할 3가지 상태를 시뮬레이션해 보겠습니다.
here로 가서 지원하는 건강 검사의 전체 목록을 보십시오.대시보드에서 작동하는 가상 건강 검사를 추가합니다.
우리는 아래의 코드로 Service1/Startup.cs의 코드를 교체할 것이다.
services.AddHealthChecks()
    .AddCheck("Foo", () =>
        HealthCheckResult.Healthy("Foo is OK!"), tags: new[] { "foo_tag" })
    .AddCheck("Bar", () =>
        HealthCheckResult.Unhealthy("Bar is unhealthy!"), tags: new[] { "bar_tag" })
    .AddCheck("Baz", () =>
        HealthCheckResult.Degraded("Baz is degraded!"), tags: new[] { "baz_tag" });

previous의 블로그 글에서 저는 어떻게 쉽게 Redis와 통합할 수 있는지 보여 드렸습니다.나는 건강 검사를 설정하기 위해 AspNetCore.HealthChecks.Redis 가방을 사용할 것이다.
dotnet add package AspNetCore.HealthChecks.Redis
우리는 또한 이 설정 위치를 그것의 appsettings.json 파일에 추가할 것이다.
"Redis": {
  "ConnectionString": "localhost:5002" 
},
포트5002에서 Redis docker 컨테이너를 회전합니다.
docker run --name redis-cache -p 5002:6379 -d redis
대시보드:

도커 용기를 수시로 멈추고, 오류가 계기판에 어떻게 표시되는지 보십시오.

맞춤형 상태 점검 추가


이제 우리 Service2 프로젝트로 전환하고, 그것으로 재미있는 일을 하자.우리는 우리의 맞춤형 건강 검사를 늘릴 것이다.
public class RemoteHealthCheck : IHealthCheck
{
    public Task<HealthCheckResult> CheckHealthAsync(HealthCheckContext context, CancellationToken cancellationToken = new CancellationToken())
    {
        var isHealthy = CheckRemoteEndpointHealth();

        return Task.FromResult(isHealthy ? 
            HealthCheckResult.Healthy("Remote endpoint is healthy.") :
            HealthCheckResult.Unhealthy("Remote endpoint is unhealthy"));
    }

    private bool CheckRemoteEndpointHealth()
    {
        // Just stubbing it out for demo
        var rnd = new Random().Next(1, 5);
        return rnd % 2 != 0;
    }
}
이제 Startup 클래스에 Remote Health Check을 등록할 수 있습니다.
services.AddHealthChecks()
        .AddCheck<RemoteHealthCheck>(nameof(RemoteHealthCheck));
이제 두 서비스의 상태가 대시보드에 표시됩니다.

Remote Health Check이 불건전한 무작위 값으로 되돌아오기 위해 설정되어 있는 것을 볼 수 있습니다.EvaluationTimeInSeconds 를 like 2s로 설정하여 결과를 신속하게 볼 수 있습니다.

결론


오늘은 ASP를 활용하여 개발자 경험을 개선하는 방법을 살펴보겠습니다.NET의 건강검진.너무 많은 공급자와 설정을 사용할 수 있습니다.자세한 내용은 docs에 문의하십시오.

도구책

  • https://github.com/Xabaril/AspNetCore.Diagnostics.HealthChecks
  • https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/health-checks?view=aspnetcore-5.0
  • 좋은 웹페이지 즐겨찾기