ASP.NET Core優雅的添加HealthCheck

ASP.NET Core 2.2 之後提供了內置的 Health Checks 來幫助您監視和報告應用程序的健康狀況。默認情況是不需要在額外的引入其它nuget包的,因爲AspNet Core自帶了這些功能。

public void ConfigureServices(IServiceCollection services)
{
    //使用該擴展方法
    services.AddHealthChecks();
}

public void Configure(IApplicationBuilder app)
{
    app.UseRouting();

    app.UseEndpoints(endpoints =>
    {
        //使用該擴展方法
        endpoints.MapHealthChecks("/health");
    });
}

進行請求"health"路徑,就會得到下面的結果:
image

內置的AddHealthChecks功能比較簡單,而現實場景我們是需要對各種指標進行檢查的,redis,數據庫,RabbitMQ,上游api等等。

而Nugget早已經有人造好輪子,大部分場景我們下載使用即可。

我們可以先添加AspNetCore.Diagnostics.HealthChecks基礎包,然後需要添加那種檢查,就添加對應的包即可。

<PackageReference Include="AspNetCore.HealthChecks.NpgSql" Version="5.0.2" />
<PackageReference Include="AspNetCore.HealthChecks.Rabbitmq" Version="5.0.1" />
<PackageReference Include="AspNetCore.HealthChecks.Redis" Version="5.0.1" />
<PackageReference Include="AspNetCore.HealthChecks.UI.Client" Version="5.0.1" />
<PackageReference Include="Microsoft.Extensions.Diagnostics.HealthChecks" Version="5.0.17" />
services.AddHealthChecks()
	.AddNpgSql("ConnectionString")
	.AddRedis("ConnectionString")
	.AddRabbitMQ("ConnectionString", null, "rabbitMQ");
app.UseEndpoints(endpoints =>
{
	endpoints.MapControllers();
	//設置健康檢查終結點
	endpoints.MapHealthChecks("/health", new HealthCheckOptions()
	{
		//設置返回格式
		ResponseWriter = UIResponseWriter.WriteHealthCheckUIResponse
	});
});

接下來我們再次進行請求"health"路徑,就會得到下面的結果:
image

如果還想給健康檢查配置訪問控制可以
image
一般情況nuget包是夠用的

Install-Package AspNetCore.HealthChecks.ApplicationStatus
Install-Package AspNetCore.HealthChecks.ArangoDb
Install-Package AspNetCore.HealthChecks.Aws.S3
Install-Package AspNetCore.HealthChecks.Aws.SecretsManager
Install-Package AspNetCore.HealthChecks.Aws.Sns
Install-Package AspNetCore.HealthChecks.Aws.Sqs
Install-Package AspNetCore.HealthChecks.Aws.SystemsManager
Install-Package AspNetCore.HealthChecks.Azure.IoTHub
Install-Package AspNetCore.HealthChecks.AzureDigitalTwin
Install-Package AspNetCore.HealthChecks.AzureKeyVault
Install-Package AspNetCore.HealthChecks.AzureServiceBus
Install-Package AspNetCore.HealthChecks.AzureStorage
Install-Package AspNetCore.HealthChecks.Consul
Install-Package AspNetCore.HealthChecks.CosmosDb
Install-Package AspNetCore.HealthChecks.DocumentDb
Install-Package AspNetCore.HealthChecks.DynamoDB
Install-Package AspNetCore.HealthChecks.Elasticsearch
Install-Package AspNetCore.HealthChecks.EventStore
Install-Package AspNetCore.HealthChecks.EventStore.gRPC
Install-Package AspNetCore.HealthChecks.Gcp.CloudFirestore
Install-Package AspNetCore.HealthChecks.Gremlin
Install-Package AspNetCore.HealthChecks.Hangfire
Install-Package AspNetCore.HealthChecks.IbmMQ
Install-Package AspNetCore.HealthChecks.InfluxDB
Install-Package AspNetCore.HealthChecks.Kafka
Install-Package AspNetCore.HealthChecks.Kubernetes
Install-Package AspNetCore.HealthChecks.MongoDb
Install-Package AspNetCore.HealthChecks.MySql
Install-Package AspNetCore.HealthChecks.Nats
Install-Package AspNetCore.HealthChecks.Network
Install-Package AspNetCore.HealthChecks.Npgsql
Install-Package AspNetCore.HealthChecks.OpenIdConnectServer
Install-Package AspNetCore.HealthChecks.Oracle
Install-Package AspNetCore.HealthChecks.RabbitMQ
Install-Package AspNetCore.HealthChecks.RavenDB
Install-Package AspNetCore.HealthChecks.Redis
Install-Package AspNetCore.HealthChecks.SendGrid
Install-Package AspNetCore.HealthChecks.SignalR
Install-Package AspNetCore.HealthChecks.Solr
Install-Package AspNetCore.HealthChecks.SqLite
Install-Package AspNetCore.HealthChecks.SqlServer
Install-Package AspNetCore.HealthChecks.System
Install-Package AspNetCore.HealthChecks.Uris

如果nuget沒有符合你的包,可以自己實現

public class DatabaseHeaCheakCheck : IHealthCheck
{
	public async Task<HealthCheckResult> CheckHealthAsync(HealthCheckContext context
		, CancellationToken cancellationToken = default)
	{
		try
		{
			// 你要檢查的業務
			throw new ArgumentNullException();
			return HealthCheckResult.Healthy();
		}
		catch(Exception ex)
		{
			return HealthCheckResult.Unhealthy(exception:ex );
		}
	}
}
services.AddHealthChecks()
	.AddCheck<DatabaseHeaCheakCheck>("Database")
	.AddNpgSql("ConnectionString")
	.AddRedis("ConnectionString")
	.AddRabbitMQ("ConnectionString", null, "rabbitMQ");

接下來我們再次進行請求"health"路徑,就會得到下面的結果:
image
微軟官方文檔-ASP.NET Core 中的運行狀況檢查
https://learn.microsoft.com/zh-cn/aspnet/core/host-and-deploy/health-checks?view=aspnetcore-3.1#health-check-publisher

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章