服务结构运行状况检查

时间:2018-12-18 15:58:59

标签: asp.net-core azure-service-fabric guest-executable

服务结构是否有内置的健康检查?我有一个用NET Core 2.2编写的来宾可执行文件,并在其中使用了运行状况检查功能。例如,我有一个简单的运行状况检查,它返回不正常状态:

        services
            .AddHealthChecks()
            .AddCheck<DocumentDbHealthCheck>("cosmos-database");

    internal class DocumentDbHealthCheck : IHealthCheck
    {
        public Task<HealthCheckResult> CheckHealthAsync(HealthCheckContext context, CancellationToken cancellationToken = default(CancellationToken))
        {
            return Task.FromResult(HealthCheckResult.Unhealthy());
        }
    }

我已经使用:

app.UseHealthChecks(@"/foo/bar/v1/healthcheck");

但是,当我在本地启动我的服务结构实例时,状态是健康的,我期望它处于错误/不健康的状态。

是否可以让服务结构符合API运行状况检查路线?

1 个答案:

答案 0 :(得分:1)

AspNetCore上引入的Healthcheck是一种用于返回有关某些服务状态的数据的机制,它不影响服务的实际状态。

在Service Fabric中,如果要将服务中的运行状况报告给Service Fabric运行状况系统,则可以使用ReportReplicaHealth() API。类似于this

HealthInformation healthInformation = new HealthInformation("ServiceCode", "StateDictionary", HealthState.Error);
this.Partition.ReportReplicaHealth(healthInformation);

这将在SF Explorer中显示为错误。

您还可以按照here的说明使用FabricClient报告问题,在这种情况下,您将创建一个服务来监视其他服务,然后报告它们的状态(也称为看门狗)。

AFAIK,Service Fabric没有HTTP探针机制来检查服务的运行状况,它使用服务报告的直接向运行状况子系统报告的内部指标。

如果您打算在发送请求之前使用它来验证服务是否正常,则可以使用load balancer http probes,也可以将其放在处理失败的代理后面,然后将请求转发给有效节点,例如here中所述的内置反向代理。