配置 NET 6 Azure Function 应用程序运行状况检查

Phi*_*l S 4 c# azure azure-functions health-check dotnet-isolated

我正在努力寻找有关如何在 Azure 中为 .NET 6 Core 功能应用程序设置运行状况检查的任何最新文档。

该应用程序在应用程序服务计划(而不是消耗)内以 DOTNET-ISOLATED 运行。

文档解释了如何在 Azure 中设置运行状况检查部分(足够简单)。

但它没有从代码角度解释任何地方需要在函数应用程序端运行什么。有各种各样的健康检查东西可用,但它们似乎都是针对 WebApi 的,或者没有 .NET 6 的示例。

对于 WebApi 来说这很容易做到(只需几句俏皮话),但对于他们自己的函数应用程序却不是这样,这似乎很愚蠢?

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

我已经查看了一些关于 .NET 5 的文章和答案,包括这篇文章和答案,但它缺乏细节,并且似乎不是对 .NET 6 的明显翻译?

有人有一些工作代码的示例吗?健康检查需要多深入?我可以只编写一个返回 200 并将 Azure 指向它的简单函数吗?

Phi*_*l S 6

经过相当多的摸索之后,我最终想出了这个,这似乎可以完成工作。

首先,安装nuget包:

Microsoft.Extensions.Diagnostics.HealthChecks
版本 6.0.15

将其添加到您的启动/HostBuilder

services.AddHealthChecks();
Run Code Online (Sandbox Code Playgroud)

然后添加一个类似这样的函数:

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));
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

最后,在 Azure 中设置运行状况检查(部署代码后,如果使用插槽,请多次设置):

Azure 运行状况检查设置

希望这可以避免其他人的麻烦......