You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 22:23:15