监控模型调试器(不推荐)

IBM® Business Monitor 开发工具箱 随附的调试器支持调试使用公共事件基础结构 (CEI) 的监控模型的运行时行为。对于监控模型中每个入站事件定义或基于时间的触发器,该调试器会显示在收到入站事件时或在出发基于时间的触发器时发生的处理步骤。 该调试器还会显示用于更新 KPI 和度量的处理步骤。 使用该调试器,您可以在收到入站事件时检查入站事件的内容,在创建或更新度量值、计数器、秒表和 KPI 时检查这些项,并在填充和发出出站事件时检查这些出站事件。

限制: 只支持将基于 CEI 的监控模型用于调试器。作为替代方法,请将监控模型部署到测试业务监控服务器,并生成测试事件来测试监控模型的处理。

下图显示“调试”透视图中的一个监控模型。 屏幕下方的“调试源”视图是监控模型编辑器中的一个页面。 这种排列可使您切换到“监控详细信息模型”页面,以便于您使用一种更加熟悉的格式来查看模型并在发现问题时对其进行修改。 然后可以使用调试器来验证您的修订,而无需切换到其他透视图。

该截屏显示“调试”透视图的各个区域,如下表所述。

在“调试”透视图中,您可以在调试过程中使用其中的 7 个区域,这 7 个区域在上面的图中已经用数字标注出来,并在下表中有所描述。
编号 名称 Description
1 调试

该视图显示调试配置、服务器、监控上下文实例、KPI 上下文或当前正在更新的多维数据集。 嵌套的监控上下文依照嵌套顺序显示,其中当前的监控上下文位于列表的顶部,父级和祖父级监控上下文在其下。

在发送事件前,监控模型一直在等待接收入站事件,而且禁用了分步。 但是,您仍可以探究“高级步骤”列表中每个元素的详细步骤,如以下部分中所述。

2 调试源”视图中的高级步骤

“高级步骤”列表显示您所调试的监控模型中的所有入站事件定义和基于时间的触发器定义(按照监控上下文定义进行分组)。 它还显示监控模型中的所有 KPI 上下文和多维数据集定义。 甚至在发送事件前,您也可以打开每个监控上下文定义,单击“高级步骤”列表中的每个步骤并探究“详细步骤”列表中的处理详细信息。 在许多情况下,该探究将提供有关监控模型逻辑的有用信息,并可以在模型开发周期之初帮助您识别问题。

为入站事件定义或基于时间的触发器定义生成的处理步骤代表了监控上下文(或 KPI 上下文)中的这些模型元素的影响。 将列出入站事件定义和基于时间的触发器定义,因为它们是可在正在运行的监控模型中启动一系列步骤的元素。 当匹配事件到达时或触发基于时间的触发器时,就会执行这些步骤。 针对 KPI 上下文生成的步骤中包含用于更新每个 KPI 值的步骤。 更新受当前事件影响的所有监控上下文实例之后,会处理这些步骤,以便于将任何度量值更改都反映到新的 KPI 值中。

无论采用任何维过滤,针对度量生成的步骤会包含计算所有底层度量值的整体汇总。 “高级步骤”列表显示用于更新 KPI 上下文中所定义的所有 KPI 以及多维数据集中定义的所有度量的单个步骤,而相应的“详细步骤”列表包含针对每个 KPI 或度量的步骤。

在生产服务器中,以模型定义的时间间隔,定期评估基于时间的触发器。 在调试器中,您负责控制何时评估基于时间的触发器。

事件定义会按其在监控模型中的出现顺序进行显示和处理。 高级监控上下文中的事件定义先于低级监控上下文中的事件定义出现,并且同一个监控上下文中的事件定义按照 XML 文档顺序进行显示。

确保按顺序完成处理并且逐个处理各个事件定义,这一点很重要。 处理从第一个事件定义的过滤条件开始,然后进行到第二个事件定义,以此类推。 针对所有事件定义,检查每个入站事件,并按零个或更多个定义为一组,接受每个入站事件以进行处理。 对于接受该事件的每个事件定义,都会执行“详细步骤”列表中的处理步骤。

3 调试源”视图中的详细步骤

“详细步骤”列表显示每个入站事件定义、基于时间的触发器定义、KPI 上下文定义和多维数据集定义的处理步骤。 单击某个步骤以查看更多详细信息(如果可用),如入站事件定义的过滤条件或用于更新度量值的表达式。

每个入站事件定义的第一步是查看入站事件是否与过滤条件相匹配,这是根据事件内容评估结果为 true 或 false 的一个表达式。 例如,要仅在订单总额大于 500 美元且/或日期落在某个时间段内时才选择用于报告传入订单的事件,需要定义一个过滤条件来测试这些标准。 如果入站事件不满足该条件,那么将由“高级步骤”列表中的下一个事件定义对其进行处理。

如果事件符合过滤条件,那么接下来会对相关表达式求值。 相关表达式会尝试将入站事件与一个或多个监控上下文实例进行匹配。 根据找到的匹配实例的数量(0 个、1 个或 1 个以上),将执行监控模型中定义的操作。 典型操作是将事件提供给匹配实例或者在未找到实例时创建新实例。 如果未将事件提供给任何新的或现有的实例,将转为处理“高级步骤”列表中的下一个事件定义。

其余详细步骤会在监控上下文、KPI 上下文或将事件提供给的多维数据集实例中运行,并会显示对每个度量值、计数器、KPI、度量等的影响。 针对 KPI 上下文(或多维数据集)生成的步骤中包含更新每个 KPI(或度量)的值。 更新受当前事件影响的所有监控上下文实例之后,会处理这些步骤,以便于将任何度量值更改都反映在新的 KPI(或度量)值中。 要搜索一次处理一个步骤的事件,您必须在步骤中设置断点来暂停事件处理,然后从这一断点开始以单步方式进行处理。

4 断点

断点”视图显示设置的所有断点。 在该视图中,您可以除去、禁用或启用各个断点。 您也可以除去或跳过所有断点。

在调度监视模型期间,已经为工作空间中其他可执行文件(如 Java™ 程序)设置的断点也会显示在此视图中,但不会有任何影响。

5 实例

“实例”视图显示所有监控上下文实例(不仅仅是活动的实例)和相关数据。 它提供对正在运行的监控模型中的所有度量值、计数器、秒表等的值的系统范围视图。

只有在接收到事件和创建上下文实例之后,“实例”视图才会成为活动视图。 您无法更改该视图中的值。

要 刷新“实例”视图以查看最新数据,请单击 刷新 补充信息

有关“实例”视图的更多信息,请参阅“调试时查看数据”。

6 事件队列
事件队列”视图包含三个选项卡。
  • 输入队列”选项卡显示在处理完当前事件之后将要发送到调试器的事件序列。 输入队列不会显示调试器当前处理的事件(这可以在“变量”选项卡中查看)。
  • 重试队列”选项卡显示失败的事件,因为计算入站事件的相关表达式未返回匹配的实例,并且“无相关匹配项”的事件提供选项指定了“重试”。 您可以从重试队列将事件发送至输入队列以进行重新提交。 (通常,只有在第一次处理用于创建或更新某些监控上下文的其他事件之后,才可重新提交事件,以便于成功重试该事件。)
  • 错误队列”选项卡显示失败的事件,因为计算入站事件的相关表达式未返回匹配的实例、一个匹配的实例或多个匹配的实例,并且该结果的事件提供选项指定了“视为错误”。 错误队列还显示在处理期间因其他原因而失败的事件。

每一队列中事件的数量显示在队列名称旁边的选项卡上。

要过滤事件,请在过滤文本框中输入文本。

要刷新“事件队列”视图以查看最新事件,请单击 刷新 补充信息

要显示与每个事件相匹配的入站事件定义,请单击对事件分类 补充信息

您无法更改该视图中的值。有关“事件队列”视图的更多信息,请参阅“使用事件队列”。

7 变量

当您正在调试时,“变量”视图显示作用域内的上下文数据。 该上下文数据包括入站事件和监控上下文实例、KPI 上下文或当前正在更新的多维数据集。 当在调试器中单步执行模型时,“变量”视图显示上下文内的值。 当您在调试会话期间移动到另一个上下文时,“变量”视图会变为反映新的上下文。

只有在处理入站事件时,“变量”视图才会成为活动视图。 在事件到达之后,您可以在“变量”视图中检查入站事件的内容。 从调试器创建和发出出站事件时,也可以检查这些出站事件。 您无法在此视图中更改值。

有关“变量”视图的更多信息,请参阅“调试时查看数据”。

工具栏图标

在事件到达并且其处理暂停在某个断点处之后,您可以通过单击“调试”视图工具栏上的图标来执行操作。 下表中描述了这些图标。
图标 名称 操作
补充信息 (F5) 开始步骤 前进到“详细步骤”序列中的下一步
补充信息 (F6) 结束步骤 前进到同一个级别的“详细步骤”序列中的下一步,并不间断地处理所有分步。 例如,如果您正处于实例的第一个处理步(在相关步骤之后),那么请单击该图标以继续下一步。 不间断地处理所有分步(例如,依赖于触发器的步骤)。
补充信息 (F7) 返回步骤 不间断地处理完当前级别的所有剩余步骤之后,前进到父级别中的下一步。 例如,如果您正处于实例的第一个处理步骤(在相关步骤之后),那么请单击该图标以处理完当前实例的步骤序列并在相关表达式所选的下一个实例的第一个处理步骤处停止,或者,如果没有其他实例要进行处理,那么就在下一个入站事件定义的第一个步骤处停止。 又例如,如果您正处于入站事件定义的第一个处理步骤,请单击该图标以完成该入站事件定义的所有处理,并在下一个入站事件定义的第一个处理步骤处停止。
补充信息 (F8) 继续 运行到下一个可用断点。如果没有断点,请运行事件(以及输入队列中的所有后续事件)的处理直到完成。
补充信息 使用单步执行过滤器 无论何时调试器到达相关步骤,都要暂挂处理流。
补充信息 终止 结束调试会话。“调试源”视图将会关闭,您可以切换回“业务监控”透视图。 终止的会话仍然出现在左上角的“调试”视图中。 您可以通过单击除去所有终止的启动 补充信息 来清除该视图。
补充信息 除去所有终止的启动 通过除去所有终止的调试会话来清除“调试”视图。
为了更好地了解要按下哪些键,考虑使用树状结构中的步骤可能会有帮助,如以下示例所示(不包含 KPI 或度量)。
1.  InboundEventDefinition_1
1.1  |--------评估过滤条件
1.2  |--------评估相关表达式
1.3  |--------(针对接收到事件的所有监控上下文实例)
1.3.1    |------------- 重置秒表
1.3.2    |------------- 递增计数器 counterName
1.3.3    |------------- 更新度量值 metricName
1.3.4    |------------- 评估触发器 lowThreshold
1.3.4.1      |-------------- 为出站事件 lowThresholdAlert 指定值
1.3.4.2      |-------------- 发出出站事件 lowThresholdAlert
2.  InboundEventDefinition_2
2.1  |--------评估过滤条件
2.2  |--------评估相关表达式
2.3  |--------(针对接收到事件的所有监控上下文实例)
2.3.1    |------------- 递增计数器 counterName
2.3.2    |------------- 更新度量值 metricName
3.  TimeBasedTrigger_1
3.1  |-------评估过滤条件
3.2  |-------评估相关表达式
3.3  |-------(针对接收到事件的所有监控上下文实例)
3.3.1    |------------ 评估触发器 refreshAlert
3.3.1.1      |------------ 为出站事件 refreshAlert 指定值
3.3.1.2      |------------ 发出出站事件 refreshAlert 
下表中的数字基于该示例中的树状结构,并且还显示当您使用“开始步骤”、“结束步骤”和“返回步骤”时产生的处理序列(从整个步骤序列中的各点开始)。
单步跳入 (F5) 补充信息 单步跳过 (F6) 补充信息 返回步骤 (F7) 补充信息
前进到下一步。 前进到同一个级别的序列中的下一步,并不间断地处理所有分步。 不间断地处理完当前级别的所有剩余步骤之后,前进到父级别中的下一步。

1.1 > 1.2 > 1.3.1 > 1.3.2 > 1.3.3 > 1.3.4 > 1.3.4.1 > 1.3.4.2 > 2.1(或 1.3.1,前提是在序列中还有其他要处理的实例)

1.1 > 1.2 > 1.3.1 > 1.3.2 > 1.3.3 > 1.3.4 > 2.1 (或 1.3.1,前提是在序列中还有其他要处理的实例)

1.1 > 2.1 > 3.1

另一个示例: 1.3.3 > 2.1 (或 1.3.1,前提是在序列中还有其他要处理的实例)