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

2.4.5.1 生成事件

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

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

2.4.5.1 生成事件

Service Fabric 事件可以分为两种类型,一种是群集基础结构级别事件,一种是应用级别事件。基础结构级别事件是Service Fabric 系统级别的事件,尽管Service Fabric 会保障应用的高可用性,但在出现故障时,还是要分析的故障是在群集内部还是在应用程序内部发生。所以对群集基础结构和应用程序的监视,对后续的故障诊断非常重要。

1. 生成基础结构级别事件

Service Fabric 平台内部生成基础结构级别事件的方式有很多,以下是常用的几种方式。

(1) 操作通道,有Service Fabric 或者群集执行的高级操作,包括部署应用,群集升级等。

(2) 客户信息通道,运行状况报告和负载均衡策略等。

(3) Reliable Services 事件,Reliable Services 编程模型特定的事件。

(4) Reliable Actors 事件,Reliable Actors 编程模型特定的事件。

(5) Service Fabric 支持日志,SF 生成的支持日志,该日志只能由微软支持团队读取。

这些生成日志的通道基本覆盖了所有的基础结构级别的日志,如果想优化基础结构级别日志,可以借助Service Fabric 的运行状况监控模型来添加自定义的运行状况报告和自定义性能计数器,来构建对应用服务的实时监视。

Service Fabric 运行状况监视模型会监控Service Fabric 群集中很多实体和操作的状态,允许向服务中添加自定义运行状况报告和自定义资源指标报告。这些信息都是ServiceFabric 基础结构级别的事件,这些事件信息将是进行监控诊断的重要信息来源。

另外,Service Fabric 提供的编程模型中包含EventSource 的API,使用该接口,可以在应用程序中记录Windows 跟踪事件,来观察应用程序的行为是否正常。在默认情况下,Service Fabric 的Reliable Service 和Reliable Actors 会产生一些系统级别的Windows 跟踪事件来追踪服务的运行状况,也可以在服务中定制自定义的Windows 跟踪事件。

2. 生成应用级别事件的

仅仅依靠系统级别的事件日志,很难精确地定位服务内部的问题。通常在设计应用服务时,会在服务运行期间加入很多日志,来跟踪应用程序服务的运行,记录运行状况和异常信息等,以便在遇到问题时,快速地定位问题。Service Fabric 为应用程序提供了记录事件的EventSource 接口,同时Service Fabric 也支持使用其他日志记录方式,例如:ASP.NETCore 日志或者Serilog 等。

3. EventSource 方式

当使用Visul Studio 创建模板应用程序时,服务会默认使用EventSource 的方式来生成应用服务的事件日志,例如:Reliable Services 的ServiceEventSource 和Reliable Actors 的ActorEventSource。可以借助这个类,来创建应用和服务的事件日志。当创建EventSource时,需要注意EventSource 的名称必须在整个群集中唯一。通常会使用“公司名称-解决方案-服务名称”来定义EventSource 的名称。

可以在EventSource 类中,添加自定义的事件方法,或者添加通用的事件生成方法,例如以下代码:

  1. [EventSource(Name = "MyCompany-VotingState-VotingStateService")]  
  2. internal sealed class ServiceEventSource : EventSource  
  3. {  
  4. public static readonly ServiceEventSource Current = new 
  5. ServiceEventSource();  
  6. // The Instance constructor is private, to enforce singleton semantics.  
  7. private ServiceEventSource() : base() { }  
  8. ...  
  9. private const int DebugEventId = 10;  
  10. [Event(DebugEventId, Level = EventLevel.Verbose, Message = "{0}")]  
  11. public void Debug(string msg)  
  12. {  
  13. WriteEvent(DebugEventId, msg);  
  14. }  
  15. private const int ErrorEventId = 11;  
  16. [Event(ErrorEventId, Level = EventLevel.Error, Message = "Error: {0} -  
  17. {1}")]  
  18. public void Error(string error, string msg)  
  19. {  
  20. WriteEvent(ErrorEventId, error, msg);  

在开发过程中,可以定义自定义的事件,这样可以快速地定位到某些特殊操作或者重要的行为,但不可能为每一个操作都定义一种事件。一般通常的做法是使用上面这种通用的定义方式,通过调用这些通用方法,生成相同结构的事件日志。

EventSource 事件日志是基于Windows 跟踪事件的,并且它的设计非常高效,相比其他记录事件日志的方式,占用更少的资源,并有更好的性能。官方也强烈推荐,在应用中使用这种方式来记录应用服务事件。

4. ASP. NET Core 记录方式

ASP.NET Core 框架,是微软发布的可以跨平台运行的.NET Framework。在ASP.NETCore 项目中,可以使用EventSource,也可以使用Microsoft.Extensions.Logging 来记录日志。ASP.NET Core 中有一个ILogger 接口,可以使用该接口来选择日志记录提供程序。

在ASP.NET Core 中使用Microsoft.Extensions.Logging 来记录事件日志的方式比较简单,只需在项目中引入Microsoft.Extensions.Logging 组件,并在项目中初始化ILogging 对象。

C#代码如下:

  1. private ILogger _logger = new LoggerFactory().CreateLogger<Stateless>(); 

这样就可以在项目中调用logger 来记录事件日志。以下是C#示例代码:

  1. _logger.LogDebug("Debug-level event from Microsoft.Logging");  
  2. _logger.LogInformation( " Informational-level event from Microsoft.  
  3. Logging");  
  4. _logger.LogInformation( " {RequestName} {Duration} " , " MyRequest " ,  
  5. requestDuration); 


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

51CTO读书频道二维码


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

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

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

读 书 +更多

系统分析师考试辅导(2007版)

《系统分析师考试辅导(2007版)》内容涵盖了最新的系统分析师考试大纲信息系统综合知识的所有知识点,分析了近3年信息系统分析与设计案例...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊