.NET 6独立模式Azure函数应用健康检查配置求助
.NET 6 Isolated模式Azure函数应用健康检查实现方案
一、最简健康检查函数(满足基础在线验证)
针对应用服务计划,你可以直接编写一个HTTP触发的函数,返回200状态码,代码示例如下:
using Microsoft.Azure.Functions.Worker; using Microsoft.Azure.Functions.Worker.Http; using Microsoft.Extensions.Logging; namespace YourFunctionProject { public class HealthChecker { private readonly ILogger<HealthChecker> _logger; public HealthChecker(ILogger<HealthChecker> logger) { _logger = logger; } [Function("HealthCheck")] public HttpResponseData Run([HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = "health")] HttpRequestData req) { _logger.LogInformation("Received health check request"); var response = req.CreateResponse(System.Net.HttpStatusCode.OK); response.Headers.Add("Content-Type", "text/plain; charset=utf-8"); response.WriteString("OK"); return response; } } }
配置Azure端健康检查时,将路径设置为/api/health(Isolated模式HTTP函数默认前缀为/api),并根据需求调整检查间隔、超时时间等参数即可。
二、健康检查的深度选择
你可以根据业务需求选择不同的检查深度:
- 极简级:就是上面的示例,仅验证服务是否能响应请求,适合快速确认实例在线状态。
- 基础级:增加核心依赖验证,比如数据库、缓存等。示例如下(以SQL数据库为例):
using Microsoft.Azure.Functions.Worker; using Microsoft.Azure.Functions.Worker.Http; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Logging; namespace YourFunctionProject { public class HealthChecker { private readonly ILogger<HealthChecker> _logger; private readonly YourDbContext _dbContext; public HealthChecker(ILogger<HealthChecker> logger, YourDbContext dbContext) { _logger = logger; _dbContext = dbContext; } [Function("HealthCheck")] public async Task<HttpResponseData> Run([HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = "health")] HttpRequestData req) { try { // 测试数据库连接可用性 await _dbContext.Database.CanConnectAsync(); var response = req.CreateResponse(System.Net.HttpStatusCode.OK); response.WriteString("OK - Database connected"); return response; } catch (Exception ex) { _logger.LogError(ex, "Health check failed"); var response = req.CreateResponse(System.Net.HttpStatusCode.ServiceUnavailable); response.WriteString($"FAILED: {ex.Message}"); return response; } } } }
- 进阶级:集成
Microsoft.Extensions.Diagnostics.HealthChecks库,统一管理多维度健康检查。首先在Program.cs注册健康检查服务:
using Microsoft.Azure.Functions.Worker; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; var host = new HostBuilder() .ConfigureFunctionsWorkerDefaults() .ConfigureServices(services => { services.AddHealthChecks() .AddSqlServer("YourDatabaseConnectionString"); // 添加SQL检查 // 可添加其他检查,比如AddRedis、AddAzureBlobStorage等 }) .Build(); host.Run();
然后在函数中调用健康检查服务:
using Microsoft.Azure.Functions.Worker; using Microsoft.Azure.Functions.Worker.Http; using Microsoft.Extensions.Diagnostics.HealthChecks; using Microsoft.Extensions.Logging; using System.Text.Json; namespace YourFunctionProject { public class HealthChecker { private readonly ILogger<HealthChecker> _logger; private readonly HealthCheckService _healthCheckService; public HealthChecker(ILogger<HealthChecker> logger, HealthCheckService healthCheckService) { _logger = logger; _healthCheckService = healthCheckService; } [Function("HealthCheck")] public async Task<HttpResponseData> Run([HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = "health")] HttpRequestData req) { var healthReport = await _healthCheckService.CheckHealthAsync(); var statusCode = healthReport.Status == HealthStatus.Healthy ? System.Net.HttpStatusCode.OK : System.Net.HttpStatusCode.ServiceUnavailable; var response = req.CreateResponse(statusCode); await response.WriteAsJsonAsync(healthReport, new JsonSerializerOptions { WriteIndented = true }); return response; } } }
三、关键注意事项
- 应用服务计划下,确保健康检查路径
/api/health可被Azure健康检查服务访问,建议设置AuthorizationLevel.Anonymous,或在应用服务的访问限制中添加Azure健康检查的IP段。 - Isolated模式下无需使用消耗计划专属的定时触发器方案,HTTP触发的函数更适合应用服务计划的健康检查场景。
内容的提问来源于stack exchange,提问作者Phil S
相关产品推荐
相关产品推荐

