跳转到主要内容

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

当您初次登录到 developerWorks 时,将会为您创建一份概要信息。您在 developerWorks 概要信息中选择公开的信息将公开显示给其他人,但您可以随时修改这些信息的显示状态。您的姓名(除非选择隐藏)和昵称将和您在 developerWorks 发布的内容一同显示。

所有提交的信息确保安全。

  • 关闭 [x]

当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

所有提交的信息确保安全。

  • 关闭 [x]

在 WebSphere Message Broker 中生成用于事务监控和审计的事件

Shenfu (Mike) Fan, 认证 IT 架构师和 IT 专家, WSO2 Inc
Shenfu (Mike) Fan 是 IBM Software Services for WebSphere 团队的一名高级顾问,拥有超过 8 年的从业经验。他致力于企业应用程序集成解决方案的架构设计、开发和实现,主要借助各种 WebSphere 产品,包括 WebSphere Service Registry and Repository、WebSphere Message Broker、WebSphere MQ 和 WebSphere ESB 等。

简介: 本文将向您展示如何在 WebSphere Message Broker 消息流中配置和生成监控事件。事件监控对于事务监控和审计是非常有用的内置特性,本文将详细讨论这一特性。

发布日期: 2010 年 2 月 25 日
级别: 中级 其他语言版本: 英文
访问情况 : 1417 次浏览
评论: 


简介

监控事件是 IBM® WebSphere® Message Broker V6.1.0.3 或更新版本(此后称作 Message Broker)中的新特性。此特性允许您配置消息流以生成监控事件,而不需要编写任何代码。当经过配置的事件出现在消息流中之后,托管消息流的代理会生成 XML 文档并将其作为预定义的主题发布。这些事件可以由 WebSphere Business Monitor 等应用程序读取和使用,用于跟踪和报告消息流的事务级性能数据,以及支持事务监控、事务审计和业务流程监控,如图 1 所示:


图 1. 监控事件的概念视图
图 1. 监控事件的概念视图

读者应该具备一定的 Message Broker 经验,并且知道如何创建和部署消息流。

什么是监控事件?

可以在节点级配置消息流以生成监控事件。监控事件的表示形式是符合 监控事件模式 的 XML 文档。每个事件都包含以下信息:

  • 事件源 (eventSourceAddress)
  • 事件名称 (eventName)
  • 创建时间 (creationTime)
  • 相同事务或工作单元生成的事件的关联 ID (localTransactionId、parentTransactionId 和 globalTransactionId)
  • 消息流的详细信息 (messageFlowData)

或者,监控事件还可以包含以下信息:

  • 从消息中提取的应用程序数据 (applicationData)
  • 消息比特流的部分或全部 (bitstream)

Message Broker 事件模式

预定义的 Message Broker 事件模式 WMBEvent.xsd 用于定义监控事件的结构。要检索 WMBEvent.xsd 文件:

  1. 在 Message Broker Toolkit 的 Application Development 透视图中,右键单击消息集项目下的消息集(如果没有,可以创建一个新的消息集),并选择 New => Message Definition File From => IBM Supplied Message
  2. 在打开的窗口中,向下滚动 IBM 提供的消息列表并选择 Message Broker Monitoring Event,然后单击 Finish。您应该可以在 com.ibm.www.xmlns.prod.websphere.messagebroker._610.monitoring.event 包下看到 WMBEvent.mxsd 文件。
  3. 再次右键单击消息集并选择 Generate => XML Schemas
  4. 在 Generate XML Schemas 窗口中,选择希望将模式文件导出到其中的外部目录。
  5. 单击 Finish。该目录中将创建一个包含 WMBEvent.xsd 文件的 zip 文件。

事件类型

您可以配置消息流来生成两种事件:事务事件和终端事件。共有三种类型的事件:start、end 和 rollback。事务事件仅由输入节点生成,比如说 MQInput 和 HTTPInput。终端事件可由任意节点的任意终端生成。

事件输出

监控事件特性将利用 Message Broker 的发布/订阅 (pub/sub) 机制。事件消息将被发布到特定的主题,可以通过订阅应用程序来注册它。主题名称的形式如下:

$SYS/Broker/<brokerName>/Monitoring/<executionGroupName>/<flowName>

主题层次结构支持通过订阅应用程序来过滤事件。举例来说,一个应用程序可以从部署在代理中的所有执行分组中的所有消息流接收事件,而另一个应用程序只能接收单个执行分组中的所有消息流的事件。

配置消息流以生成事件

如前所述,您可以进行配置,使监控事件的生成不需要编写任何代码。本节将通过一个示例来演示如何配置和监控消息流中的事件,以及如何使用这些事件。要运行此示例,您需要部署消息流 Message Broker V6.1.0.3 或更新版本。在本文中,所有命令都使用代理名 BRK1 和执行组名 default。本节中的高级步骤如下:

  1. 创建消息流
  2. 设置监控属性
  3. 部署消息流
  4. 启用事件源
  5. 激活事件
  6. 订阅事件

1. 创建消息流

图 2 显示了 Message Broker Project Interchange 文件 MonitoringEvents_PI.zip 所提供的预建消息流,您可以 从此处下载该文件,其中还包括其他一些工件,比如消息集、BAR 文件、监控事件模式和测试消息。这个简单的消息流并未包含错误处理例程,用于演示如何配置和生成监控事件。它将在一个输入队列中接收 XML 消息,用于请求温度换算服务。该服务提供在 Web 上: Visual DataFlex 温度换算 Web 服务。它会根据输入消息的内容使用 HTTP Request 节点 HTTP_Request_C2F 调用从 Celsius 到 Fahrenheit 的换算服务,或者使用节点 HTTP_Request_F2C 调用从 Fahrenheit 到 Celsius 的换算服务。服务请求的响应将返回在一个输出队列中。有关更多信息,请参阅 Message Broker 信息中心中的 创建消息流


图 2. 消息流 MonitoringEvents_MF
图 2. 消息流 MonitoringEvents_MF

表 1 描述了节点连接:


表 1. 消息流上的节点连接的详细信息
NodeNameNodeTypeTerminalToNodeNameNodeTypeTerminal
QINMQInputOut=>Build_HTTP_Request_MsgComputeIn
Build_HTTP_Request_MsgComputeOut=>HTTP_Request_C2FHTTPRequestIn
Build_HTTP_Request_MsgComputeOut1=>HTTP_Request_F2CHTTPRequestIn
HTTP_Request_C2FHTTPRequestOut=>Build_MQ_Response_MsgComputeIn
HTTP_Request_F2CHTTPRequestOut=>Build_MQ_Response_MsgComputeIn
Build_MQ_Response_MsgComputeOut=>QOUTMQOutputIn

2. 设置监控事件

您可以使用监控属性或监控配置文件来设置监控事件。在本节中,您将使用监控属性来配置消息流的监控事件,如下所示。使用监控配置文件配置事件源 小节详细讨论了监控配置文件。要配置的监控事件包括所有事务事件,MQInput 节点 QIN 上的 Start、End 和 Rollback,以及各个 HTTP Request 节点上的终端事件 In 和 Out。

  1. 在 Message Broker Toolkit 的 Broker Application Development 透视图中,使用 Message Flow Editor 打开 MonitoringEvents_MF 消息流。
  2. 在 MQInput 节点 QIN 的属性的 Monitoring 选项卡中,单击 Add 配置事件流,如图 3 所示:

    图 3. 监控 MQInput 节点 QIN 的属性
    图 3. 监控 MQInput 节点 QIN 的属性

  3. 从事件源列表中选择 Transaction Start。当消息经过流的输入节点时会触发此事件。将事件的字面名称从默认的 QIN.TransactionStart 更改为 FlowStart,如图 4 所示。当然,可以选择消息集合中的消息树中的字符字段作为事件名称。

    图 4. 在 MQInput 节点 QIN 上添加一个事务事件
    图 4. 在 MQInput 节点 QIN 上添加一个事务事件

  4. 对于 Event Payload,单击 Add 从输入消息树的简单或复杂字段中选择性地获取数据。如下面的图 5 所示,对数据位置单击 Edit 之后将打开 XPath Expression Builder 页面,您可以向输入消息添加数据类型。为了能够在 Data Type Viewer 中看到它,本例中的输入消息 TemperatureConversion 必须内置在消息集 (MRM) 中。如果不是这样,则需要手动将值键入到 XPath Expression 中。

    图 5. 向输入消息添加数据类型
    图 5. 向输入消息添加数据类型

  5. 如下面的图所示,为便于演示,我们使用 XPath 表达式同时选择了消息主体中的复杂字段 TemperatureConversion 以及 MQMD 头部中的简单字段 MsgID。有效负荷比特流数据还包含在监控事件中。请记住,添加较大的有效负荷和比特流会降低性能。

    图 6. 事务事件 FlowStart 的事件有效负荷数据
    图 6. 事务事件 FlowStart 的事件有效负荷数据

  6. 选择 Correlation 选项卡定义关联器,监控应用程序将使用它匹配流事务中生成的多个事件。本地事务关联器将链接单一消息流调用生成的事件。父事务关联器将消息流中的事件链接到父消息流或外部应用程序。全局事务关联器将消息流中的事务链接到一个或多个相关消息流或外部应用程序。为所有关联器接受默认值 Automatic,这会让 Message Broker 生成一个惟一的 36 字符长的关联器(各级别事务中的事件均与此相同)。

    图 7. 事件关联
    图 7. 事件关联

  7. 选择 Sequence 选项卡。监控应用程序将使用事件序列重新对事件消息排序,因为事件将以不可预测的顺序发布。在 Message Broker V6.1.0.3 中,使用创建时间以 yyyy-mm-ddThh:mm:ss.fff 格式设置事件序列。

    图 8. 事件序列
    图 8. 事件序列

  8. 重复上面的步骤 3 到步骤 7,添加事务事件 Transaction 结束和 Transaction 回滚,并为 HTTP_Request_C2F 和 HTTP_Request_F2C 节点添加 in 和 out 终端事件。仅 MQMD 头部中的 MsgID 被添加到这些事件的有效负荷数据中。事件设置的汇总如下表所示:

    NodeNameEventNameEventSourcePayloadBitstreamTransactionCorrelatorSequence
    QINFlowStartTransaction.start$Root/MQMD/MsgId $Body/Temperature ConversionAll(base64Binary)Local - AutomaticParent - AutomaticGlobal - AutomaticCreation time
    QINFlowEndTransaction.end$Root/MQMD/MsgId-Local - AutomaticParent - AutomaticGlobal - AutomaticCreation time
    QINFlowRollbackTransaction.rollback$Root/MQMD/MsgId-Local - AutomaticParent - AutomaticGlobal - AutomaticCreation time
    HTTP_Request_C2FIn_C2FIn.terminal$Root/MQMD/MsgId-Local - AutomaticParent - AutomaticGlobal - AutomaticCreation time
    HTTP_Request_C2FOut_C2FOut.terminal$Root/MQMD/MsgId-Local - AutomaticParent - AutomaticGlobal - AutomaticCreation time
    HTTP_Request_F2CIn_F2CIn.terminal$Root/MQMD/MsgId-Local - AutomaticParent - AutomaticGlobal - AutomaticCreation time
    HTTP_Request_F2COut_F2COut.terminal$Root/MQMD/MsgId-Local - AutomaticParent - AutomaticGlobal - AutomaticCreation time


  9. 在 Message Flow Editor 的 Message Flow 属性窗口中单击监控选项卡。所有配置的事件都将被列出,如下面的图 9 所示。这些事件全部默认为启用:

    图 9. 已配置的监控事件列表
    图 9. 已配置的监控事件列表

3. 部署消息流

使用代理存档 (BAR) 文件将消息流默认部署到代理 BRK1 上的执行分组。在此代理上运行下节描述的所有命令。如果您 下载了下面的示例解决方案,并将它部署到了具有不同执行分组和代理名称的环境中,则需要做一些更改。有关更多信息,请阅读 Message Broker 信息中心上的 将消息流部署到代理上的执行分组

4. 启用事件源

如上所述,默认情况下,消息流中所有经过配置的事件都将启用。您可以在 Message Flow Editor 中使用 Message Broker Toolkit 启用或禁用这些事件。如果消息流已经被部署到某执行分组中,则必须重新部署流以便让监控事件更改生效。您可以使用命令 mqsichangeflowmonitoring 来启用或禁用事件,而不需要重新部署消息流。更改将在运行时立即生效。比如,

mqsichangeflowmonitoring BRK1 -e default -f MonitoringEvents_MF -s 
"QIN.transaction.start,QIN.transaction.end,QIN.transaction.rollback" -i enable

mqsichangeflowmonitoring BRK1 -e default -f MonitoringEvents_MF -s 
"HTTP_Request_C2F.terminal.in,HTTP_Request_C2F.terminal.out" -i disable

5. 激活事件

配置了事件源之后,运行以下命令以便激活监控引擎并生成事件消息:

mqsichangeflowmonitoring BRK1 -e default -f MonitoringEvents_MF -c active

相反,要禁用消息流监控流程,使用参数 -c inactive 运行相同的命令。

停止并重新启动代理之后,事件激活状态不会更改。要检查监控的状态,包括节点启用状态,可以使用以下命令:

mqsireportflowmonitoring BRK1 -e default -f MonitoringEvents_MF -a

6. 订阅事件

当所配置的监控事件发生时,会发布采用以下主题格式的事件消息:

$SYS/Broker/<BrokerName>/Monitoring/<ExecutionGroupName>/<MessageFlowName>

在本例中为

$SYS/Broker/BRK1/Monitoring/default/MonitoringEvents_MF

主题是区分大小写的。在接收事件消息之前,需要订阅主题,这可以通过使用 rfhutil 工具和消息流来实现。

使用 rfhutil 工具

您可以从 IBM Message Broker SupportPac 站点下载免费的 Message Broker 显示、测试和性能工具 rfhutil,并使用它订阅事件。要使用该工具订阅主题:

  1. 打开 rfhutil 工具并单击 Pub/Sub 选项卡。
  2. 为 Request Type 选择 Sub
  3. 在 Topic(s) 字段中键入 $SYS/Broker/BRK1/Monitoring/default/MonitoringEvents_MF
  4. 在 Subscription Queue Manager 字段中键入 WMBQM
  5. 在 Subscription Queue 字段中键入 QSUB
  6. 单击 Write Msg

    图 10. 使用 rfhutil 工具订阅事件主题
    图 10. 使用 rfhutil 工具订阅事件主题

通过与订阅相似的流程,您可以使用 rfhutil 工具取消对主题的订阅,惟一的不同是在上面的第 2 步中需要为 Type 选择 Unsub,而不是 Sub

使用消息流

您可以创建一个简单的消息流,如图 11 所示,用于通过编程的方式订阅或取消订阅主题:


图 11. 用于订阅主题的消息流
图 11. 用于订阅主题的消息流

一条包含如下所示的订阅和取消订阅数据的输入 XML 消息将被发送给队列 QSUB。使用 Compute 节点根据输入消息在 MQRFH2 头部下建立一个 pub/sub 命令。该命令将发送给系统队列 SYSTEM.BROKER.CONTROL.QUEUE,而 Message Broker pub/sub 引擎将处理该列表中的命令消息来生成主题订阅。


清单 1. 订阅消息
				
<SubMsg>
<Command>RegSub</Command>
<Topic>$SYS/Broker/BRK1/Monitoring/default/MonitoringEvents_MF</Topic>
<QMgrName>WMBQM</QMgrName>
<QName>QEVENT</QName>
</SubMsg>

要取消订阅一个主题,将以上 XML 消息的 Command 元素从 RegSub 更改为 DeregSub。要检查主题订阅,在 Message Broker Toolkit 的 Broker Administration 透视图左下角的 Domains 面板中单击 Subscriptions。单击 Query 显示主题列表,其中包括所订阅的主题:


图 12. 订阅主题列表
图 12. 订阅主题列表

生成监控事件

以下场景用于生成消息流上配置的监控事件。要运行测试,应确保 Message Broker 服务器所在的机器具备 internet 连接,并且可以使用 用于温度换算的 Visual DataFlex Web 服务

  • 使用正确输入消息的成功事务如下面的清单 2 或 3 所示。
  • 清单 4 显示了一个未完成的事务,无效输入消息造成了一个异常。

清单 2. 测试消息 C2F.xml
				
<?xml version="1.0" encoding="UTF-8"?>
<TemperatureConversion>
  <Input>
  <Unit>Celsius</Unit>
  <Degree>28.5</Degree>
  </Input>
  <Output>
  <Unit></Unit>
  <Degree></Degree>
  </Output>
</TemperatureConversion>


清单 3. 测试消息 F2C.xml
				
<?xml version="1.0" encoding="UTF-8"?>
<TemperatureConversion>
  <Input>
  <Unit>Fahrenheit</Unit>
  <Degree>80</Degree>
  </Input>
  <Output>
  <Unit></Unit>
  <Degree></Degree>
  </Output>
</TemperatureConversion>


清单 4. 测试消息 Invalid.xml
				
<?xml version="1.0" encoding="UTF-8"?>
<TemperatureConversion>
  <Input>
  <Unit>Wrong</Unit>
  <Degree>80</Degree>
  </Input>
  <Output>
  <Unit></Unit>
  <Degree></Degree>
  </Output>
</TemperatureConversion>

使用 rfhutil 工具发送一条消息到输入队列 QIN 中。

  • 打开 rfhutil 并选择队列管理器,比如 WMBQM,以及队列 QIN
  • 单击 Open File 导入测试消息文件,比如 C2F.xml。在选择 Data 选项卡时应该可以看到测试消息。
  • 选择 Main 选项卡并选择 Write Q。测试消息将发送给队列 QIN,以调用消息流。
  • 在生成的 QEVENT 中检查用于监控事件的消息。

通过成功的事务生成监控事件

将用于从 Celsius 到 Fahrenheit 的温度换算的测试消息发送给输入 QIN。和预期一样,事务生成了 FlowStart 和 FlowEnd 两个事务事件,以及 In_C2F 和 Out_C2F 两个终端事件。订阅队列 QEVENT 将接收这些事件消息。各消息的本地事务 ID 相同,父事务及全局事务的 ID 也是如此。有效负荷数据及其比特流包含在事务 FlowStart 的 XML 消息中,如清单 5 所示:


清单 5. FlowStart 的事件消息
				
<wmb:event xmlns:wmb="http://www.ibm.com/xmlns/prod/websphere/
  messagebroker/6.1.0/monitoring/event">
  <wmb:eventPointData>
    <wmb:eventData wmb:productVersion="6103" wmb:eventSchemaVersion="6.1.0.3" 
      wmb:eventSourceAddress="QIN.transaction.Start">
      <wmb:eventIdentity wmb:eventName="FlowStart"/>
      <wmb:eventSequence wmb:creationTime="2009-10-08T02:16:14.500"/>
      <wmb:eventCorrelation wmb:localTransactionId="ae3f4f63-1ad6-45e7-b84d-0fc9f2f35454" 
        wmb:parentTransactionId="6bf33d39-0e92-4a7f-872e-96c01ea6c65d" 
        wmb:globalTransactionId="4fabdaba-0964-4b94-93f2-14cd5f4a62b8"/>
    <wmb:eventData/>
    <wmb:messageFlowData>
      <wmb:broker wmb:name="BRK1" wmb:UUID="2d750f67-2301-0000-0080-96dbba41cd3f"/>
      <wmb:executionGroup wmb:name="default" 
        wmb:UUID="12feee26-2401-0000-0080-9bc38c4d3910"/>
      <wmb:messageFlow wmb:uniqueFlowName="BRK1.default.MonitoringEvents_MF" 
        wmb:name="MonitoringEvents_MF" wmb:UUID="8c284827-2401-0000-0080-c826dabb2ad0" 
        wmb:threadId="9316"/>
      <wmb:node wmb:nodeLabel="QIN" wmb:nodeType="ComIbmMQInputNode" wmb:detail="QIN"/>  
    <wmb:messageFlowData/>   
  </wmb:eventPointData>
  <wmb:applicationData>
    <wmb:simpleContent wmb:name="MsgId" 
      wmb:value="414d5120574d42514d20202020202020be56ca4a202fe112" 
      wmb:dataType="hexBinary"/>
  </wmb:applicationData>
  <wmb:bitstreamData>
    <wmb:bitstream wmb:encoding="base64Binary">TUQgIAIAAAAAAAAACAAAAP////8AAAAAIgIAALUBAAA
      gICAgICAgIAAAAAAAAAAAQU1RIFdNQlFNICAgICAgIL5WykogL+ESAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
      AAAAAACAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdNQlFNICAgICA
      gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNmYW4gICAgICAgIBYBBRUAAACEYU++63/
      PV2Bwonj0AQAAAAAAAAAAAAALICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICALAAAAQzpcTXlCaW5
      ccmZodXRpbFxyZmh1dGlsLmV4ZTIwMDkxMDA4MDIxNjE0NTEgICAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
      AAQAAAAAAAAAAAAAA/////zw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQo8VGVtcGV
      yYXR1cmVDb252ZXJzaW9uPg0KICA8SW5wdXQ+DQogICAgPFVuaXQ+Q2Vsc2l1czwvVW5pdD4NCiAgICA8RGV
      ncmVlPjI4LjU8L0RlZ3JlZT4NCiAgPC9JbnB1dD4NCiAgPE91dHB1dD4NCiAgICA8VW5pdD48L1VuaXQ+DQo
      gICAgPERlZ3JlZT48L0RlZ3JlZT4NCiAgPC9PdXRwdXQ+DQogIDxFcnJvcj4NCiAgICA8Q29kZT48L0NvZGU
      +DQogICAgPERlc2M+PC9EZXNjPg0KICA8L0Vycm9yPg0KPC9UZW1wZXJhdHVyZUNvbnZlcnNpb24+DQo=/>
  </wmb:bitstreamData>
</wmb:event>


清单 6. FlowEnd 的事件消息
				
<wmb:event xmlns:wmb="http://www.ibm.com/xmlns/prod/websphere/
  messagebroker/6.1.0/monitoring/event">
  <wmb:eventPointData>
    <wmb:eventData wmb:productVersion="6103" wmb:eventSchemaVersion="6.1.0.3" 
      wmb:eventSourceAddress="QIN.transaction.End">
      <wmb:eventIdentity wmb:eventName="FlowEnd"/>
      <wmb:eventSequence wmb:creationTime="2009-10-08T02:16:15.237"/>
      <wmb:eventCorrelation wmb:localTransactionId="ae3f4f63-1ad6-45e7-b84d-0fc9f2f35454" 
        wmb:parentTransactionId="6bf33d39-0e92-4a7f-872e-96c01ea6c65d" 
        wmb:globalTransactionId="4fabdaba-0964-4b94-93f2-14cd5f4a62b8"/>
    <wmb:eventData/>
    <wmb:messageFlowData>
      <wmb:broker wmb:name="BRK1" wmb:UUID="2d750f67-2301-0000-0080-96dbba41cd3f"/>
      <wmb:executionGroup wmb:name="default" 
        wmb:UUID="12feee26-2401-0000-0080-9bc38c4d3910"/>
      <wmb:messageFlow wmb:uniqueFlowName="BRK1.default.MonitoringEvents_MF" 
        wmb:name="MonitoringEvents_MF" wmb:UUID="8c284827-2401-0000-0080-c826dabb2ad0" 
        wmb:threadId="8152"/>
      <wmb:node wmb:nodeLabel="QIN" wmb:nodeType="ComIbmMQInputNode" wmb:detail="QIN"/>  
    <wmb:messageFlowData/>   
  </wmb:eventPointData>
  <wmb:applicationData>
    <wmb:simpleContent wmb:name="MsgId" 
      wmb:value="414d5120574d42514d20202020202020be56ca4a202fe112" 
      wmb:dataType="hexBinary"/>
  </wmb:applicationData>
</wmb:event>


清单 7. In_C2F 的事件消息
				
<wmb:event xmlns:wmb="http://www.ibm.com/xmlns/prod/websphere/
  messagebroker/6.1.0/monitoring/event">
  <wmb:eventPointData>
    <wmb:eventData wmb:productVersion="6103" wmb:eventSchemaVersion="6.1.0.3" 
      wmb:eventSourceAddress="HTTP_Request_C2F.terminal.in">
      <wmb:eventIdentity wmb:eventName="In_C2F"/>
      <wmb:eventSequence wmb:creationTime="2009-10-08T02:16:14.609"/>
      <wmb:eventCorrelation wmb:localTransactionId="ae3f4f63-1ad6-45e7-b84d-0fc9f2f35454" 
        wmb:parentTransactionId="6bf33d39-0e92-4a7f-872e-96c01ea6c65d" 
        wmb:globalTransactionId="4fabdaba-0964-4b94-93f2-14cd5f4a62b8"/>
    <wmb:eventData/>
    <wmb:messageFlowData>
      <wmb:broker wmb:name="BRK1" wmb:UUID="2d750f67-2301-0000-0080-96dbba41cd3f"/>
      <wmb:executionGroup wmb:name="default" 
        wmb:UUID="12feee26-2401-0000-0080-9bc38c4d3910"/>
      <wmb:messageFlow wmb:uniqueFlowName="BRK1.default.MonitoringEvents_MF" 
        wmb:name="MonitoringEvents_MF" wmb:UUID="8c284827-2401-0000-0080-c826dabb2ad0" 
        wmb:threadId="10024"/>
      <wmb:node wmb:nodeLabel="HTTP_Request_C2F" wmb:nodeType="ComIbmWSRequestNode" 
        wmb:terminal="in"/>  
    <wmb:messageFlowData/> 
    <wmb:applicationData>
      <wmb:simpleContent wmb:name="MsgId" 
        wmb:value="414d5120574d42514d20202020202020be56ca4a202fe112" 
        wmb:dataType="hexBinary"/>
    </wmb:applicationData>  
  </wmb:eventPointData>
</wmb:event>


清单 8. Out_C2F 的事件消息
				
<wmb:event xmlns:wmb="http://www.ibm.com/xmlns/prod/websphere/
  messagebroker/6.1.0/monitoring/event">
  <wmb:eventPointData>
    <wmb:eventData wmb:productVersion="6103" wmb:eventSchemaVersion="6.1.0.3" 
      wmb:eventSourceAddress="HTTP_Request_C2F.terminal.out">
      <wmb:eventIdentity wmb:eventName="Out_C2F"/>
      <wmb:eventSequence wmb:creationTime="2009-10-08T02:16:15.235"/>
      <wmb:eventCorrelation wmb:localTransactionId="ae3f4f63-1ad6-45e7-b84d-0fc9f2f35454" 
        wmb:parentTransactionId="6bf33d39-0e92-4a7f-872e-96c01ea6c65d" 
        wmb:globalTransactionId="4fabdaba-0964-4b94-93f2-14cd5f4a62b8"/>
    <wmb:eventData/>
    <wmb:messageFlowData>
      <wmb:broker wmb:name="BRK1" wmb:UUID="2d750f67-2301-0000-0080-96dbba41cd3f"/>
      <wmb:executionGroup wmb:name="default" 
        wmb:UUID="12feee26-2401-0000-0080-9bc38c4d3910"/>
      <wmb:messageFlow wmb:uniqueFlowName="BRK1.default.MonitoringEvents_MF" 
        wmb:name="MonitoringEvents_MF" wmb:UUID="8c284827-2401-0000-0080-c826dabb2ad0" 
        wmb:threadId="5864"/>
      <wmb:node wmb:nodeLabel="HTTP_Request_C2F" wmb:nodeType="ComIbmWSRequestNode" 
        wmb:terminal="out"/>  
    <wmb:messageFlowData/>
    <wmb:applicationData>
      <wmb:simpleContent wmb:name="MsgId" 
        wmb:value="414d5120574d42514d20202020202020be56ca4a202fe112" 
        wmb:dataType="hexBinary"/>
    </wmb:applicationData>    
  </wmb:eventPointData>
</wmb:event>

将从 Fahrenheit 到 Celsius 的温度换算的测试消息发送给输入队列 QIN。事务将生成 FlowStart 和 FlowEnd 两个事务事件以及 In_F2C 和 Out_F2C 两个终端事件,该事务将在订阅队列 QEVENT 中生成四条消息。

生成监控事件,并生成一个异常

向流的输入队列 QIN 发送无效测试消息,以便生成一个异常,让事务无法成功运行。只生成事务事件 FlowStart、FlowRollback 和 FlowEnd,而 QEVENT 队列也只接收到三条相应的 XML 消息。由于异常是在 HTTPRequest 之前的 Compute 节点 Build_HTTP_Request_Msgare 中抛出的,因此并未调用终端事件。事件并未参与到事务中 —— 换句话说,如果消息流中发生了事务回滚,则生成的事件不会回滚,且仍然保留为发布状态。这正是 QEVENT 队列接收到事务事件 FlowStart 和 FlowEnd 的原因。FlowRollback 的事件消息如清单 9 所示:


清单 9. FlowRollback 的事件消息
				
<wmb:event xmlns:wmb="http://www.ibm.com/xmlns/prod/websphere/
  messagebroker/6.1.0/monitoring/event">
  <wmb:eventPointData>
    <wmb:eventData wmb:productVersion="6103" wmb:eventSchemaVersion="6.1.0.3" 
      wmb:eventSourceAddress="QIN.transaction.Rollback">
      <wmb:eventIdentity wmb:eventName="FlowRollback"/>
      <wmb:eventSequence wmb:creationTime="2009-10-08T02:57:16.653"/>
      <wmb:eventCorrelation wmb:localTransactionId="45efc2e9-a166-43d8-8a27-f0c201f442b6" 
        wmb:parentTransactionId="e5095bf9-ae05-4ca2-89b6-547b9bd9d0e8" 
        wmb:globalTransactionId="ab206c81-13a3-499e-9fa3-87ac236c3c96"/>
    </wmb:eventData>
    <wmb:messageFlowData>
      <wmb:broker wmb:name="BRK1" wmb:UUID="2d750f67-2301-0000-0080-96dbba41cd3f"/>
      <wmb:executionGroup wmb:name="default" 
        wmb:UUID="12feee26-2401-0000-0080-9bc38c4d3910"/>
      <wmb:messageFlow wmb:uniqueFlowName="BRK1.default.MonitoringEvents_MF" 
        wmb:name="MonitoringEvents_MF" wmb:UUID="8c284827-2401-0000-0080-c826dabb2ad0" 
        wmb:threadId="24096"/>
      <wmb:node wmb:nodeLabel="QIN" wmb:nodeType="ComIbmMQInputNode" wmb:detail="QIN"/>
    </wmb:messageFlowData>
  </wmb:eventPointData>
  <wmb:applicationData>
    <wmb:simpleContent wmb:name="MsgId" 
      wmb:value="414d5120574d42514d20202020202020be56ca4a2039df0b" 
      wmb:dataType="hexBinary"/>
  </wmb:applicationData>
</wmb:event>

还可以使用输入消息 C2F.xml 或 F2C.xml 在流调用 Web 服务时生成回滚事件,而且托管 Message Broker 服务器的机器不需要具备 Internet 连接。

动态禁用事件

当不需要事件时,可以动态禁用所配置的事件,而不需要重新部署消息流。举例来说,要禁用所有终端事件,可以运行以下命令:

mqsichangeflowmonitoring BRK1 -e default -f MonitoringEvents_MF -s
"HTTP_Request_C2F.terminal.in,HTTP_Request_C2F.terminal.out,HTTP_Request_F2C.terminal.in,
HTTP_Request_F2C.terminal.out" -i disable

在命令中使用事件源地址在节点级禁用各事件,假定已经为消息流激活了监控功能。当然,您还可以为消息流禁用监控,从而防止消息流生成任何事件。

使用监控配置文件配置事件源

如果需要更改消息流中各事件的启用状态或有效负荷数据,可以使用 Message Flow 编辑器中的监控属性来配置它们。在本例中,您需要重新部署流以便覆盖事件属性的设置。

您还可以使用监控配置文件来配置事件源。这样做的优势在于可以在运行时动态配置事件源及其相关属性,而不需要重新部署流。监控配置文件是一个符合 XML 模式文件 MonitoringProfile.xsd 的 XML 文档,用于指定将生成事件的消息流中的事件源和相关属性。使用以下命令为消息流创建配置了以下属性的监控配置 XML 文件。此监控配置文件可用作创建新监控配置文件的起始点。输出文件 MyEventMonitoringProfile.xml 如上面的清单 8 所示。

mqsireportflowmonitoring BRK1 -e default -f MonitoringEvents_MF 
-x -p C:/MyEventMonitoringProfile.xml


清单 10. MyEventMonitoringProfile.xm 的监控配置文件
				
<profile:monitoringProfile xmlns:profile="http://www.ibm.com/xmlns/prod/websphere/
  messagebroker/6.1.0.3/monitoring/profile" profile:version="2.0">
  <profile:eventSource profile:eventSourceAddress="QIN.transaction.start"
    profile:enabled="true">
    <profile:eventPointDataQuery>
      <profile:eventIdentity>
        <profile:eventName profile:literal="FlowStart"/>
      </profile:eventIdentity>
      <profile:eventCorrelation>
        <profile:localTransactionId profile:sourceOfId="automatic"/>
        <profile:parentTransactionId profile:sourceOfId="automatic"/>
        <profile:globalTransactionId profile:sourceOfId="automatic"/>
      </profile:eventCorrelation>
      <profile:eventSequence profile:name="creationTime"/>
    </profile:eventPointDataQuery>   
    <profile:applicationDataQuery>
      <profile:complexContent>
        <profile:payloadQuery profile:queryText="$Root/MQMD/MsgId"/>
      </profile:complexContent>
      <profile:complexContent>
        <profile:payloadQuery profile:queryText="$Body/TemperatureConversion"/>
      </profile:complexContent>
    </profile:applicationDataQuery>
    <profile:bitstreamDataQuery profile:bitstreamContent="all" 
      profile:encoding="base64Binary"/>
  <profile:eventSource>
  <profile:eventSource profile:eventSourceAddress="QIN.transaction.end" 
    profile:enabled="true">
    ......
  </profile:eventSource>
  <profile:eventSource profile:eventSourceAddress="QIN.transaction.rollback" 
    profile:enabled="true">
    ......
  </profile:eventSource> 
  <profile:eventSource profile:eventSourceAddress="HTTP_Request_C2F.terminal.in"
    profile:enabled="true">
    <profile:eventPointDataQuery>
      <profile:eventIdentity>
        <profile:eventName profile:literal="In_C2F"/>
      </profile:eventIdentity>
      <profile:eventCorrelation>
        <profile:localTransactionId profile:sourceOfId="automatic"/>
        <profile:parentTransactionId profile:sourceOfId="automatic"/>
        <profile:globalTransactionId profile:sourceOfId="automatic"/>
      </profile:eventCorrelation>
      <profile:eventSequence profile:name="creationTime"/>
    </profile:eventPointDataQuery>
    <profile:applicationDataQuery>
      <profile:complexContent>
        <profile:payloadQuery profile:queryText="$Root/MQMD/MsgId"/>
      </profile:complexContent>
    </profile:applicationDataQuery>
    <profile:bitstreamDataQuery profile:bitstreamContent="none"
      profile:encoding="none"/> 
  </profile:eventSource>
  <profile:eventSource profile:eventSourceAddress="HTTP_Request_C2F.terminal.out" 
    profile:enabled="true">
    ......
  </profile:eventSource>
  <profile:eventSource profile:eventSourceAddress="HTTP_Request_F2C.terminal.in" 
    profile:enabled="true">
    ......
  </profile:eventSource>
  <profile:eventSource profile:eventSourceAddress="HTTP_Request_F2C.terminal.out" 
    profile:enabled="true">
    ......
  </profile:eventSource>  
</profile:monitoringProfile> 

重新创建新监控配置文件或者在已有基础上修改都相当简单。监控配置文件必须为可以发出事件的消息流定义事件源,以及各事件的属性。换句话说,监控配置文件仅适用于具备可添加相应事件的节点和终端的消息流。举例来说,对于 eventSourceAddress QIN.transaction.start,消息流必须有一个名称为 QIN 的输入节点。

您可以使用 Broker Archive Editor 来应用监控配置文件:

  1. 打开 Message Broker Toolkit 中的 Broker Application Development 透视图。
  2. 使用 Broker Archive Editor 打开一个 BAR 文件。
  3. 单击 Manage 选项卡。
  4. 单击希望设置监控配置文件可配置服务的消息流。
  5. 在 Monitoring Profile Name 字段中输入监控配置文件的名称。

    图 13. 使用 BAR 文件应用监控配置文件
    图 13. 使用 BAR 文件应用监控配置文件

  6. Save and deploy the BAR file.

您还可以使用以下命令应用监控配置文件

  1. 创建一个可配置服务:
    mqsicreateconfigurableservice BRK1 -c MonitoringProfiles -o MyMonitoringEventProfile

  2. 关联监控配置文件与可配置服务:
    mqsichangeproperties BRK1 -c MonitoringProfiles -o MyMonitoringEventProfile 
    -n profileProperties -p C:/MyEventMonitoringProfile.xml

  3. 将监控配置文件可配置服务应用于一个消息流。举例来说,应用于执行分组 default 上的 MonitoringEvents_MF 流:
    mqsichangeflowmonitoring BRK1 -e default -f MonitoringEvents_MF 
    -m MyMonitoringEventProfile

使用监控事件

订阅后的监控事件消息可以被其他应用程序用于

  • 生成 PKI 数据
  • 提供统计和结算报告
  • 捕获任何回滚事务
  • 存储用于审计的有效负荷

举例来说,可以根据特定时间时隔生成的 FlowEnd 事件的总数来计算成功经过消息流的事务的数量。可以根据 In_C2F 和 Out_C2F 事件的 creationTime 差值来计算温度换算 Web 服务请求调用完成所用的时间。要了解关于如何分析监控事件消息中的数据的更多信息,请参见 Message Broker Samples Gallery 中的示例,它展示了如何通过 WebSphere Business Monitor 来监控这类事件。

其他相关工具

如上所述,您可以使用监控事件来生成关于事务属性和统计报告的有用数据。Message Broker 还提供了其他工具,比如说代理级的统计和 pub/sub 报告,以及消息流级的统计和核算报告,用于捕捉运行时信息。

Broker 统计报告

您可以生成 XML 格式的 代理统计报告,提供关于代理网络的性能以及代理和与之相连的客户机之间的吞吐量的信息。举例来说,要在代理 BRK1 的默认执行分组上以每分钟为间隔启用代理统计报告,可以在 Message Broker Command Console 上运行以下命令。更改将立即生效 —— 您不需要重新启动代理:

mqsichangeproperties BRK1 -e default -o DynamicSubscriptionEngine 
-n statsInterval -v 60000

要禁用报告,可以使用相同命令,但需要将 statsInterval 属性设置为 0。启用后,代理每分钟将发布一次如清单 11 所示的统计报告。统计报告将通过以下主题发布给所有订阅者:

$SYS/Broker/<broker name>/ExecutionGroup/<execution group>/Statistics

In this case:

$SYS/Broker/BRK1/ExecutionGroup/default/Statistics


清单 11. 代理统计报告的示例
				
<Broker uuid="2d750f67-2301-0000-0080-96dbba41cd3f" label="BRK1" version="1">
  <ExecutionGroup uuid="12feee26-2401-0000-0080-9bc38c4d3910" label="default">
    <DynamicSubscriptionEngine>
      <ReportResponse>
      <ExecutionGroupWideStatistics clientCount="0" neighbourCount="0"
        subscriptionCount="9" timeStamp="2009-10-05 09:18:53"/>
        <ClientStatistics bytesQueued="0" msgsSent="0" bytesSent="0" bytesCutThru="0"
          msgsReceived="0" bytesReceived="0" msgsDropped="0" bytesDropped="0" 
          disconnectMsgsDropped="0" disconnectBytesDropped="0"/>
        <NeighbourStatistics bytesQueued="0" msgsSent="0" bytesSent="0" bytesCutThru="0" 
          msgsReceived="0" bytesReceived="0" msgsDropped="0" bytesDropped="0"
          disconnectMsgsDropped="0" disconnectBytesDropped="0"/>
      </ReportResponse>
    <DynamicSubscriptionEngine>
  </ExecutionGroup>
</Broker>

消息流核算和统计报告

消息流核算和统计报告包含关于消息流运行时行为的动态信息,并且代理可以收集这些信息以便记录消息流的执行性能和运作详情,包括处理的消息数量、消息的大小、处理器利用率以及占用的处理时间。有关更多信息,请参见 Message Broker 信息中心的 消息流核算和统计数据

可以在消息流或执行分组的级别上收集核算和统计数据(屏幕快照、存档或同时使用两者)。如果需要,您还可以收集线程和节点级统计数据。发起以下命令,针对 MonitoringEvents_MF 流上的 XML 格式的发布消息生成屏幕快照数据:

mqsichangeflowstats BRK1 -s -e default -f MonitoringEvents_MF -c active -o xml

报告可以被放到主题中:

$SYS/Broker/BRK1/StatisticsAccounting/SnapShot/default/MonitoringEvents_MF


清单 12. 流统计数据报告的示例
				
<WMQIStatisticsAccounting RecordType="SnapShot" RecordCode="SnapShot">
  <MessageFlow BrokerLabel="BRK1" BrokerUUID="2d750f67-2301-0000-0080-96dbba41cd3f" 
   ExecutionGroupName="default" ExecutionGroupUUID="12feee26-2401-0000-0080-9bc38c4d3910" 
   MessageFlowName="MonitoringEvents_MF" StartDate="2009-10-14" StartTime="23:58:57.288" 
   EndDate="2009-10-14" EndTime="23:59:16.706" TotalElapsedTime="18127000" 
   MaximumElapsedTime="1168000" MinimumElapsedTime="552000" TotalCPUTime="46875" 
   MaximumCPUTime="15625" MinimumCPUTime="15625" CPUTimeWaitingForInputMessage="0" 
   ElapsedTimeWaitingForInputMessage="1288000" TotalInputMessages="28" 
   TotalSizeOfInputMessages="18452" MaximumSizeOfInputMessages="659" 
   MinimumSizeOfInputMessages="659" NumberOfThreadsInPool="1" 
   TimesMaximumNumberOfThreadsReached="28" TotalNumberOfMQErrors="0" 
   TotalNumberOfMessagesWithErrors="0" TotalNumberOfErrorsProcessingMessages="0" 
   TotalNumberOfTimeOutsWaitingForRepliesToAggregateMessages="0" 
   TotalNumberOfCommits="28" TotalNumberOfBackouts="0" AccountingOrigin="Anonymous"/>
  <Threads Number="0"/>
  <Nodes Number="0"/>
</WMQIStatisticsAccounting>

结束语

本文向您展示了如何在 WebSphere Message Broker V6.1 或更新版本中轻松地配置内置监控事件,以 XML 格式发布事件消息。事件文档可以被订阅到预定义的主题,并由其他应用程序,比如 WebSphere Business Monitor,用于监控流事务数据、存储审计数据、跟踪消息流使用情况、报告指标以及提供性能 KIP。本文还展示了如何在运行时随需应变地更新监控事件配置。最后,本文讨论了代理统计数据、消息流统计数据和核算报告,您可以将它们与监控事件结合使用。

致谢

作者要感谢来自 IBM Software Services for WebSphere (ISSW) 团队的 Neal Mulvenna,以及来自 IBM Global Business Services (GBS) 团队的 Sudhakar Bodapati 为完善本文所做出的审校工作。



下载

描述名字大小下载方法
项目交换文件MonitoringEvents_PI.zip10 KBHTTP

关于下载方法的信息


参考资料

学习

获得产品和技术

讨论

关于作者

Shenfu (Mike) Fan 是 IBM Software Services for WebSphere 团队的一名高级顾问,拥有超过 8 年的从业经验。他致力于企业应用程序集成解决方案的架构设计、开发和实现,主要借助各种 WebSphere 产品,包括 WebSphere Service Registry and Repository、WebSphere Message Broker、WebSphere MQ 和 WebSphere ESB 等。

关于报告滥用的帮助

报告滥用

谢谢! 此内容已经标识给管理员注意。


关于报告滥用的帮助

报告滥用

报告滥用提交失败。 请稍后重试。


developerWorks:登录


需要一个 IBM ID?
忘记 IBM ID?


忘记密码?
更改您的密码

单击提交则表示您同意developerWorks 的条款和条件。 使用条款

 


当您初次登录到 developerWorks 时,将会为您创建一份概要信息。您在 developerWorks 概要信息中选择公开的信息将公开显示给其他人,但您可以随时修改这些信息的显示状态。您的姓名(除非选择隐藏)和昵称将和您在 developerWorks 发布的内容一同显示。

请选择您的昵称:

当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

(长度在 3 至 31 个字符之间)


单击提交则表示您同意developerWorks 的条款和条件。 使用条款.

 


为本文评分

评论

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=WebSphere
ArticleID=469689
ArticleTitle=在 WebSphere Message Broker 中生成用于事务监控和审计的事件
publish-date=02252010
author1-email=sfan_cnnew1@us.ibm.com
author1-email-cc=

标签

Help
使用 搜索 文本框在 My developerWorks 中查找包含该标签的所有内容。

使用 滑动条 调节标签的数量。

热门标签 显示了特定专区最受欢迎的标签(例如 Java technology,Linux,WebSphere)。

我的标签 显示了特定专区您标记的标签(例如 Java technology,Linux,WebSphere)。

使用搜索文本框在 My developerWorks 中查找包含该标签的所有内容。热门标签 显示了特定专区最受欢迎的标签(例如 Java technology,Linux,WebSphere)。我的标签 显示了特定专区您标记的标签(例如 Java technology,Linux,WebSphere)。