|
|
51CTO旗下网站
|
|
移动端

2.4.4 应用程序运行状况报告

《Microsoft Azure 管理与开发(下册)平台服务PaaS》本书由世纪互联蓝云Microsoft Azure 开发技术支持团队的资深工程师们编写,主要阐述MicrosoftAzure PaaS 服务的开发应用,涉及计算服务、集成认证服务、数据存储服务、大数据服务等方面的内容。本节为大家介绍应用程序运行状况报告。

作者:世纪互联蓝云公司来源:电子工业出版社|2018-07-13 09:47

2.4.4 应用程序运行状况报告

通过运行状况报告,能够快速地定位问题的原因,这样才能够快速修复出现的问题。在Service Fabric 平台内,提供了很多系统应用监视服务和内部/外部的监视器,来监控群集内实体的运行状况。但有的时候,用户自己开发的服务运行正常与否,很难用公共的监控手段来判断,这就需要开发者根据自己的业务来实现侦测服务的监视器。为了满足各式各样的需求,Service Fabric 允许用户通过开放的API 在应用服务中发送运行状况报告,这样可以借助运行状况监视模型提供的统一的工具来监控群集内的应用服务运行状况。

运行状况报告不仅能够报告应用服务的运行状况,也可以发送资源监控指标类的运行状况报告。此类报告是运行状况监控模型中重要的组成部分。资源监控指标类的报告在Service Fabric 中会被用来平衡应用服务的资源。例如,一个应用程序有多个服务,每个服务都发送每秒请求数的资源指标报告,如果一个服务的每秒请求数的指标远远大于其他指标,Service Fabric 可以根据这些指标将服务在群集节点间移动以平衡资源。

资源指标报告可以更好地展示应用的性能状况,也可以借助资源指标来监控服务是否正常。例如,一个生产运行的应用程序服务,每天平均的每秒请求数大概在1000 左右,可以设置监控,如果该指标大于1500 时,就发送警告的运行状况报告。这样可以提前预知到访问量增大、资源紧张的情况,在出现问题前解决问题。

可以只在服务中定义多个资源指标,以监控服务的资源使用情况。但这里需要注意,在完全了解Service Fabric 群集的资源编排之前,建议先将资源指标的Weight 属性设置为0,这样群集在资源编排时,会忽略该指标。不要使用太多的加权指标,这样会使得ServiceFabric 群集的资源编排的行为变得非常难以理解。

1. 自定义运行状况报告

借助Service Fabric 平台API 发送高质量的运行状况报告,可以帮助预防和及时发现问题,以及在出现问题后快速定位问题,并找到解决方案,这样可以大大减少系统的故障时间。为了发送高质量的运行状况报告,在设计应用程序的监视系统时,需要考量应用程序中那些可能会影响服务运行质量的点,例如,某些共享的关键资源,某些关键API 或者服务的连通性,可以实现对这些资源的监控,如果达到阈值就向Service Fabric 报告该服务出现错误的运行状况。

在确定了监视的详细信息后,需要为其定义一个唯一的SourceId,如果使用相同的SourceId,也要确保它们是针对不同的实体发送的报告。如果报告的实体相同,也要保证报告的属性不一致。这样报告才能够互存。运行状况报告的属性也是有含义的,应该设置与捕获信息相关的名字。

Service Fabric 提供了三种发送运行状况报告的方式,每种方式针对的场景不一样,在使用前,需要了解每种方式的限制。

2. 使用Partition 或者CodePackageActiveContext 对象

在服务中可以使用Partition 和CodePackageActiveContext 对象发送运行状况,这种情况下只能发送当前服务运行上下文环境的运行状况报告。例如作为副本中运行的一段服务代码,只能报告该副本所属分区,以及所属应用程序的运行状况。可以直接在服务代码中获取这两个对象,发送运行状况报告。C#调用Partition 对象发送如下运行状况报告:

  1. HealthInformation healthInformation = new HealthInformation("ServiceCode",  
  2. "StateDictionary", HealthState.Error);  
  3. // 使用Partition 发送运行状况报告时,需要注意:  
  4. // 如果是有状态服务,  
  5. // 调用ReportPartitionHealth 报告当前分区运行状况  
  6. // 调用ReportReplicaHealth 报告当前副本运行状况  
  7. // 如果是无状态服务,调用ReportInstanceHealth 报告当前服务状况  
  8. this.Partition.ReportPartitionHealth(healthInformation);  
  9. C#调用CodePackageActiveContext 对象发送运行状况报告:  
  10. HealthInformation healthInformation = new HealthInformation("ServiceCode",  
  11. "StateDictionary", HealthState.Error);  
  12. var activationContext = FabricRuntime.GetActivationContext();  
  13. activationContext.ReportApplicationHealth(healthInformation);  
  14. 也可以借助ServicePartition 的API 来发送运行状况报告:  
  15. this.ServicePartition.ReportLoad(new List<LoadMetric> { new LoadMetric  
  16. ("MemoryInMb", 1234), new LoadMetric("metric1", 42) }); 

3. 使用FabricClient

FabricClient 的使用限制较大,必须要求Service Fabric 不能开启安全模式,而且服务必须以管理员的身份运行才可以使用。一般很少在服务代码中使用该方法来报告运行状况。也不建议这么做,除非应用程序属于管理监控级别,用来监控其他服务的运行。可以使用Fabric Client 报告群集任何一部分实体的运行情况。C#使用FabricClient 发送运行状况报告示例如下:

  1. var replicaHealthReport = new StatefulServiceReplicaHealthReport(  
  2. this.Context.PartitionId,  
  3. this.Context.ReplicaId,  
  4. new HealthInformation("ServiceCode", "StateDictionary",  
  5. HealthState.Error));  
  6. fabricClient.HealthManager.ReportHealth(replicaHealthReport); 

FabricClient 提供了一些客户端发送的参数配置,来设置发送运行状况报告的频率,超时重试机制可以确保报告能够到达运行状况存储器。以下是FabricClient 设置的参数。

(1) HealthReportSendInterval,报告发送的周期,FabricClient 在收到报告后并不会立即发送,而是定期将报告批量发送出去,以提高性能,该属性默认值为30 秒。

(2) HealthReportReTrySendIntelval,FabricClient 发送失败或者超时后,重新尝试发送的时间间隔。默认值为30 秒。

(3) HealthOpreationTimeout,FabricClient 发送报告的超时时间,如果超时,就会触发重试,直到报告发送成功为止,默认时间为2 分钟。

C# 配置代码示例:

  1. var clientSettings = new FabricClientSettings()  
  2. {  
  3. HealthOperationTimeout = TimeSpan.FromSeconds(120),  
  4. HealthReportSendInterval = TimeSpan.FromSeconds(0),  
  5. HealthReportRetrySendInterval = TimeSpan.FromSeconds(40),  
  6. };  
  7. var fabricClient = new FabricClient(clientSettings); 

在使用PowerShell 时,也可以配置这些参数,在连接Connect-ServiceFabricCluster 的命令参数中有相应的配置,参考命令如下:

  1. Connect-ServiceFabricCluster -HealthOperationTimeoutInSec 120  
  2. -HealthReportSendIntervalInSec 0 -HealthReportRetrySendIntervalInSec 40 

因为FabricClient 的定期批量发送机制,所以无论是客户端,还是接收端都需要考虑报告的唯一性。例如,当相同的实体每秒产生100 个相同报告,客户端会按照报告的属性进行排重,留下最后一个版本的报告,它反映了实体最新的运行状况。

4. 使用PowerShell 或者REST API

可以借助PowerShell 提供的脚本或者Service Fabric 的REST API 来针对群集的任何实体发送运行状况报告。该种方式适合于在群集外向群集内的实体进行监控并报告运行状况的情况,适合的场景是作为外部的监控系统。

Power Shell 命令发送运行状况报告示例:

  1. Send-ServiceFabricNodeHealthReport -NodeName Node.1 -HealthState Warning  
  2. -SourceId PowershellWatcher -HealthProperty CPU -Description "CPU is above 80%  
  3. threshold" -TimeToLiveSec 120 

关于REST API 如何发送运行状况报告,可以参考官方Service Fabric API 文档:https://docs.microsoft.com/en-us/rest/api/servicefabric/sfclient-index


喜欢的朋友可以添加我们的微信账号:

51CTO读书频道二维码


51CTO读书频道活动讨论群:365934973

【责任编辑:book TEL:(010)68476606】

回书目   上一节   下一节
点赞 0
分享:
大家都在看
猜你喜欢

读 书 +更多

SQL应用与开发标准教程

本书主要介绍了SQL的数据库应用和开发技术,内容涉及关系数据库和SQL概述,SQL环境,SQL对于数据表的操作,数据库查询知识,SQL数据的修改...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊