






















2010-12-20 11:11 拖鞋不脱 阅读(1880) 评论() 收藏 举报
对于 StreamInsight 系统,由于对事件的处理查询都是异步进行的,输入输出很难进行时序上的对应监测,所以普通的基于代码的 Debug 和 Watch 显得不那么有意义。于是微软随 StreamInsight 系统提供了一个好用的图形化调试工具 StreamInsight Event Flow Debugger。
这一工具的主要特点在于:
另,关于事件流调试和常见的控制流调试的区别,参见 MSDN : http://technet.microsoft.com/zh-cn/library/ff518532.aspx
调试分为实时跟踪和日志跟踪两种模式。其中实时跟踪需要运行 StreamInsight 的客户端通过 Server.Connect 方式连接到 StreamInsight 服务器(需要运行账户属于 StreamInsight 用户组的成员),同时将 Debugger 也连接到服务器上。具体连接方式参见 MSDN http://technet.microsoft.com/zh-cn/library/ff518532.aspx。使用这种方式的好处是可以实时跟踪最新的数据,对于长时间连续性的应用来说比较方便,并且能同时监控服务器上的资源情况。而缺点是一方面需要调试器和程序都连到 StreamInsight 服务器上,另一方面由于每次调试的都是“开始记录”到“停止”这一段时间的数据,不一定能跟踪到事件的完整流程。
另一种方式就是日志式的跟踪:
将生成的跟踪文件加载到调试器中,同样展开了和实时跟踪类似的图像界面。这里会看到对象资源管理器中的对象并不包含服务器相关的对象。相对于实时跟踪,使用日志式跟踪的好处是不需要连接到服务器,而且比较方便跟踪事件的完整流程,同时因为可以加载多个日志文件,也方便进行对比。
这里还是以官方提供的 StreamInsight 的 样例 TrafficJoinQuery 为例。
这是未展开的流程图,可以清晰的看到整个查询的步骤。其中由于有两个 Input (sensorInput,locationInput),所以有两个起点,并在 Join 处连接在一起,最终到达输出端 OutputAdapter。
展开其中的一项,会看到所有的事件内容,包括事件的类型(Insert,CTI),以及事件的起止时间还有事件负载的各个字段,除此之外,还有事件的排队时间、延迟等信息。注意这里的排队事件是程序执行时的即时时间,和事件的起止时间没有直接的关系:
选中其中的任意一条时间,可以进行两个方向的跟踪:寻根(Root Cause Analysis),演化(Event Propagation Analysis)。前者是对中间阶段的事件,找出其之前的事件源,而后者则是对较前阶段的事件,跟踪其之后的所有演变。此外,重播按钮(Start Replay)可以像过程调试中的单步模式一样从头开始一步一步的演变事件流的变化,也可以直接前进后退到下一个断点。
另外,在每个模块中都有一个过滤区域,可以通过一些表达式对展现的事件进行过滤。比如 EndTime > "2009-6-25 08:10" && EventKind == "Cti" 表示过滤所有结束时间在 2009-6-25 8:10 之后的 CTI 事件。这里注意要对非 Int 类型的值添加双引号。
利用调试器调试事件流,其实和控制流调试有些类似,都是先跟踪定位到与预期不符的数据处,然后根据上下文排查原因。但事件流的调试比控制流调试麻烦的一点是,由于调试工具和编译的程序是分离的,所以即使找到了异常的事件数据,也需要花费一些功夫,进行多遍的推演才能找到导致这些异常的原因。这其中,经验是最重要的。
而其实笔者本人也暂时没有总结出比较靠谱的经验,只能简单提供以下的一些小Tips,希望能让大家少走些弯路。
这样,关于 StreamInsight 的一些入门知识就介绍到这里。可以看到很多是概念上的介绍和操作上的指导,真正关系到事件流的、算法的设计的部分很少很少。还是那句话,需要多尝试,多实际运用,才能找到感觉。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。