Service Fabric 健康检查

Posted

技术标签:

【中文标题】Service Fabric 健康检查【英文标题】:Service Fabric Health Checking 【发布时间】:2019-05-19 02:14:58 【问题描述】:

是否有针对服务结构的内置运行状况检查?我有一个用 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】:

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

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

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

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

您还可以使用 FabricClient 报告问题,如 here 所述,在这种情况下,您将创建一个服务来监控其他服务,然后报告它们的状态,也就是 Watchdog。

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

如果您打算在向其发送请求之前使用它来验证服务是否健康,您可以使用 load balancer http probes 或者您可以将其放在处理故障并将请求转发到有效节点的代理后面,就像here 中描述的内置反向代理一样。

【讨论】:

以上是关于Service Fabric 健康检查的主要内容,如果未能解决你的问题,请参考以下文章

Nginx实战|Nginx健康检查

idou老师教你学Istio 14:如何用K8S对Istio Service进行流量健康检查

Dokcer 配置健康检查

ELB 健康检查行为 - 健康阈值

elb健康检查和ec2健康检查有啥区别?

Eureka的健康检查