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 健康检查的主要内容,如果未能解决你的问题,请参考以下文章