Drools 5.1.1_DOC (57)
第13章 业务活动监控
- 你需要积极地监控你的流程,确保你能够侦测到任何异常,并尽可能快地应对突发事件。业务活动监控(Business Activity Monitoring——BAM)关注你的流程的实时监控和直接干预配件,甚至可能自动地以这些事件的分析为基础。
- Drools流允许用户根据流程引擎产生的事件定义报告,并且在特殊情况下,可以使用复杂事件处理规则(Drools Fusion)直接干预,如后面的第二部分所述。未来的Droos平台版本将包括对所有需要的业务活动监控的支持,包括一个基于网页的应用程序,可以用它来与一个运行流程的引擎轻松交互,检查它的状态,产生报告,等等。
13.1 报告
通 过添加一个历史日志器到流程引擎,所有关联事件被存储在数据库中。这个历史日志可被用于监控和分析你的流程的执行。我们使用 Eclipse BIRT (Business Intelligence Reporting Tool——业务智能报告工具)来创建显示主要性能指标的
报告。使用包含所有流程的历史信息的
预定义
数据集,可以轻松地自己定义自己的报告, 并且你可以自己添加你想要的
任何
其他地数据源。
Eclipse BIRT框架允许你定义数据集,创建报告,包含图表,预览你的报告,以及在网页上报告它们(有关如何定义自己的报告,请参看
Eclipse BIRT文档
)。下面的截屏显示了一个例子,如何创建这样一个图表。
图13.1 使用
Eclipse BIRT
创建一个报告下图根据一些历史数据显示了一个简单的报告,显示了每小时的请求数,以及那个小时期间请求的平均完成次数。这个图表用于检查意外下降或上升的请求,增长率,等等。这些图表能够在情况直正失控之前显示可能的问题。
图 13.2 事件报告
13.2. 直接干预
报告可以被用来可视化你的流程的当前状态的一个概貌,但是它们依赖一个人类参与者根据在这些图表中的信息采取动作。然而,我们允许用户为特殊环境定义自动响应。
Drools Fusion提供了大量功能,让处理大量事件集变得容易。它也可以用于流程引擎本身的监控。这可以通过为引擎添加一个侦听器来实现,该引擎为转发所有相关 的流程事件,诸如一个流程实例的启动和完成,或者一个特定节点的触发,到一个负责处理这些事件的会话。它可能是一个执行流程的同一个会话,或者一个独立的 会话也一样的。然后,复杂事件处理( Complex Event Processing—— CEP)规则 可以被用来指定如何处理这些事件。例如,这些规则能够根据一个特定出现的低级流程事件产生高级业务事件。该规则也可以指定如何响应特殊情况。
下 面部分展示了一个样本规则,使用“滑动窗口”支持,累积在最后一个小时内所有启动一个特殊订单流程的流程事件,如果在最后一个小时启动了超过1000流程 实例,这个规则打印输出一个错误消息(例如,检测到服务器可能超载)。注意,在现实环境下,这可能是用发电子邮件替换,或者负责通知的其他形式,而不是简 单的记录。
declare ProcessStartedEvent
@role( event )
end
dialect "mvel"
rule "Number of process instances above threshold"
when
Number( nbProcesses : intValue > 1000 )
from accumulate(
e: ProcessStartedEvent( processInstance.processId == "com.sample.order.OrderProcess" )
over window:size(1h),
count(e) )
then
System.err.println( "WARNING: Number of order processes in the last hour above 1000: " +
nbProcesses );
end
这 些规则根据引擎产生的事件,甚至被用于自动改变在运行时的一个流程的行为。例如,只要检测到特殊情况,附加规则能够被添加知识库(Knowledge Base),从而修改流程的行为。例如,每当在一个特定时间帧内侦测到有大量用户请求,一个附加的验证可以被添加到流程,强制某些流量控制,减少输入请求 的频率。作为侦测问题的结果,也可以部署附加的日志规则。