只有累積,沒有奇蹟

2023年2月22日 星期三

[NETCore] 如何設定 ASP.NET Core 健康檢查(Health Check)功能 - Health Check UI

前言
在前一篇針對 ASP.NET Core 2.2 新特性 Health Check功能做基本的介紹,接著要分享的是在 BeatPulse 中實用的功能 Health Check UI,提供 UI 介面顯示及儲存 Health Check 檢查的結果內容,如果有多台時也可以在設定檔加上指定 URL 達到同時監控多台的效果,此篇就針對 Health Check UI 做介紹若有問題或是錯誤的地方歡迎網路的高手大大給予指導

Health Check UI
要使用 Health Check UI 起手式是要安裝其套件  AspNetCore.HealthChecks.UI ,指令如下
install-package AspNetCore.HealthChecks.UI  
安裝完 nuget package 之後,在 Startup.cs 要註冊 service 與 middleware,定義 healthCheck 的路徑為 /hc,UI 顯示的路徑為 /hc-ui
public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddHealthChecksUI();
    }

    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        app.UseHealthChecks("/hc", new HealthCheckOptions
        {
            Predicate = _ => true,
            ResponseWriter = UIResponseWriter.WriteHealthCheckUIResponse
        });

        app.UseHealthChecksUI(options =>
        {
            options.UIPath = "/hc-ui";
        });        
    }
}  
下一步是 appsettings.json 加上 healthCheckUI 設定資訊,設定包含要檢查的內容網址、多久執行檢查的動作與發生意外時的處理機制,這裡設定每 10 秒進行一次檢查,檢查的內容來源為 /hc
"HealthChecks-UI": {
    "HealthChecks": [
      {
        "Name": "Health Check Demo",
        "Uri": "http://localhost:5000/hc"
      }
    ],
    "EvaluationTimeOnSeconds": 10,
    "MinimumSecondsBetweenFailureNotifications": 60
  }
檢查內容這裡沿用上一篇介紹 healthCheck 的內容項目,檢查 mssql、Redis、Memory 與第三方 url 檢康狀況,這裡就不在多加說明,想了解細節可以參考上一篇文章內容說明
public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
    
    services.AddHealthChecksUI();

    services.AddHealthChecks()
        .AddMemoryHealthCheck("Memory Health Check")
        .AddSqlServer(Configuration["ConnectionStrings:DefaultConnection"], name: "SQL Server HealthCheck")
        .AddRedis(Configuration["ConnectionStrings:RedisConn"], name: "Redis HealthCheck")
        .AddUrlGroup(new Uri("https://marcus116.blogspot.com"), "ThirdParty API HealthCheck",HealthStatus.Degraded);
    //省略
}
以上設定完畢後,執行專案並在瀏覽器輸入 /hc-ui,就可以看到將檢查的字串內容變為圖像顯示

Docker Image
作者也有提供 Docker health check image 給需要的人使用,可以透過 docker pull 取得 health check image 並使用 docker run 來執行
PS C:\> docker pull xabarilcoding/healthchecksui
Using default tag: latest
latest: Pulling from xabarilcoding/healthchecksui
27833a3ba0a5: Pull complete
25dbf7dc93e5: Pull complete
0ed9cb15d3b8: Pull complete
874ea13b7488: Pull complete
73d82f2e96ee: Pull complete
f856979cdc5c: Pull complete
Digest: sha256:fe18f7655f05872cd8b2644ce7d4603b1d03ae4e0b24fa59f4d960cdc7bde6c4
Status: Downloaded newer image for xabarilcoding/healthchecksui:latest
PS C:\> docker run --name healthcheck-ui -p 5000:80 -d xabarilcoding/healthchecksui:latest
詳細可以參考 HealthChecks UI Docker Image

感想
使用 health Check UI 幫助我們可以更快的了解需要檢查應用程式的健康狀態資訊,如果您的應用程式有不止一台,可以在 health Check Ui 設定檔節點新增多筆檢查來源與名稱來自訂不同的檢查行為,舉例來說 MSDN 有列出如果 Health Check 顯示多筆,希望這篇介紹可以有幫助到有需要的朋友,謝謝

參考
Health checks in ASP.NET Core
ASP.NET Core MVC - 2.2 Health Checks


0 意見:

張貼留言

Copyright © m@rcus 學習筆記 | Powered by Blogger

Design by Anders Noren | Blogger Theme by NewBloggerThemes.com