配置 NET 6 Azure Function 应用程序的健康检查。

3

我正在苦苦寻找有关如何在Azure中为.NET 6 Core函数应用程序设置健康检查的最新文档。

该应用程序在DOTNET-ISOLATED中运行,位于应用服务计划中(而非消费)。

这个文档解释了如何在Azure中设置健康检查部分(很容易)。

但是它没有在代码方面解释需要在函数应用程序端运行什么。有各种健康检查工具可用,但似乎都是针对WebApi的,或者没有.NET 6的示例。

这似乎很愚蠢,因为对于WebApi来说,这很容易做到(只需几个一行代码),但对于他们自己的函数应用程序却不是这样?

这看起来很简单,但似乎只适用于消费计划?

我看了几篇文章和答案,包括this one,针对 .NET 5,但缺乏细节,并且似乎不是明显的转换到 .NET 6?
有人有一些工作代码的例子吗?健康检查需要多深入?我可以只编写一个返回 200 的简单函数并将 Azure 指向它吗?

1
我们意识到,许多 ASP.NET 中“电池包含”的功能和“常规”函数应用程序在隔离的函数应用程序中不可用。 - Good Night Nerd Pride
太真实了,不幸的是 :( - Phil S
1个回答

4

经过一番折腾,我最终想出了这个方法,似乎可以完成工作。

首先,安装NuGet包:

Microsoft.Extensions.Diagnostics.HealthChecks
版本6.0.15

将此添加到您的Startup / HostBuilder中。

services.AddHealthChecks();

接下来添加一个类似于这样的函数:

using Microsoft.AspNetCore.Routing;
using Microsoft.Azure.Functions.Worker.Http;
using Microsoft.Azure.Functions.Worker;
using Microsoft.Extensions.Diagnostics.HealthChecks;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Grpc.Core;

namespace MyFunctionAppNameSpace
{
    public class HealthCheck
    {
        private readonly HealthCheckService _healthCheck;

        public HealthCheck(HealthCheckService healthCheck)
        {
            _healthCheck = healthCheck;
        }

        [Function(nameof(HealthCheck))]
        public async Task<IActionResult> Run([HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = "health")] HttpRequestData req,
            FunctionContext context)
        {
            var healthStatus = await _healthCheck.CheckHealthAsync();
            return new OkObjectResult(Enum.GetName(typeof(HealthStatus), healthStatus.Status));
        }
    }
}

最后,在 Azure 中设置健康检查(在部署代码之后,如果使用插槽,则需要多次进行设置)。

Azure Health Check Setup

希望这能为其他人省去麻烦...


你好 @https://stackoverflow.com/users/7861206/phil-s ,我遇到了一个类似的问题,你能看一下并给予建议吗 - https://stackoverflow.com/questions/76629891/how-to-configure-health-check-for-azure-function-app - The Inquisitive Coder

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接