66

再谈服务链监控-跨系统(8.11)

 5 years ago
source link: http://blog.sina.com.cn/s/blog_493a84550102xnp3.html?amp%3Butm_medium=referral
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

由于所有跨系统的接口服务都通过ESB服务总线进行封装代理后接入,因此理论上说从实际业务服务调用实例数据和日志中是可以反推出来端到端的业务流程的,也就是可以通过服务实例和服务链的监控来间接的监控跨系统的业务流转是否正常。简单来说,比如一个采购订单,基于一个采购订单号,我们实际上可以通过服务监控数据来分析到该订单是否已经从采购系统导入到ERP,是否已经进行了报账申请,是否已经进行了付款等,实际上这些信息从服务实例日志中都可以提取出来。

要完成这件事情,我在去年的一篇服务链监控实现思路的文章中已经分析过,今天再次总结实际上有两个关键点要做,即首先要对服务链本身进行进行服务链流程建模,其次是能够对采集的日志的输入输出中能够抓取出结构化的关键业务字段信息。只要做到这两点,我们就很容易实现可视化的跨系统服务链监控功能。

服务链流程建模的功能实现

在前面我们做ESB服务设计器的时候,已经已经剥离了原流程引擎中进行服务编排或可视化流程建模的能力。实际上这里的设计本身也就是一个多个服务编排设计的过程,将多个服务编排设计到一起。注意在这个过程中还需要允许有分支,也允许并行。服务链监控最终形成的也是一个完整的服务链监控树。只是这个监控树的形成是通过可视化的服务组合编排工具来实现的而已。

针对不同的跨系统业务监控,都需要针对不同场景设计不同的服务监控模型。比如现在设计一个采购订单服务链监控模型,我们建设对该模型进行简化,具体如下通过建模工具形成如下模型树。


即在这些服务组合编排好后,我们需要维护对于每个服务对于的业务关键字提取字段,即可以根据XPath方式来说明是从XML结构里面哪里去提取关键的业务字段值,如采购订单号。那么我们在查找实例的时候主要就是用这个来解析业务报文里面的内容进行匹配。一个服务本身运行涉及到成功和失败,在流程实例查看的时候,最好方式是成功类服务和失败类服务单独进行显示,以方便区分,同时如果该服务运行成功,未运行或运行失败都能够有明确的背景色分开展示。

注意,在上面这个服务链里面本身是存在1对多映射关系的。这种映射关系全部在点击流程活动节点的时候再去显示明细。对于两个活动节点之间本身是1对1映射还是1对多,也可以在监控模板设置的时候进行维护。

业务日志采集和查询

在前面有篇文章我们专门谈到过基于Solr进行业务关键字查询和报文日志全文检索。而这个功能本身刚好用到服务链监控里面。即我们不再需要对服务运行报文数据全部进行结构化数据,而只需要对这些数据建立元数据索引信息,有了索引后Solr基本就可以快速的检索和定位到具体的服务。

对于当前的服务日志,我们已经完成了将Blob结构的数据准实时的采集并提取索引信息,进入到Solr库,实现了基于业务关键字的服务实例查询能力,而原来我们只能基于服务实例号进行服务日志的查询。基于Solr查询速度相当快,基本都是10多毫秒就能快速的完成服务日志的检索能力。在Solr实现了索引数据的创建,基于业务关键字的查询能力后,接下来分析如何和服务链监控进行整合。

举例来说,对于采购订单服务链监控,进入该功能后我们直接输入采购订单号,然后基于订单号我们做如下事情。

1. 首先找到采购订单服务链监控流程模板,然后基于流程模板知道涉及哪些服务。

2. 找到流程模板中维护的Xpath检索项

3. 基于Xpath检索项找的信息,拼装Solr查询关键字,然后进行Solr查询查找到对应服务日志记录。

4. 将服务日志记录提取出来对应到流程实例具体的活动节点上面。形成关联,并区分成功失败,当前状态。

5. 完成流程实例图的显示。

最终完成的服务链监控效果图参考如下:

zAFBzun.jpg!web


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK