websphere mq_使用WebSphere MQ应用程序活动跟踪提高消息的可见性

websphere mq

本文使用场景来演示IBM®WebSphere®MQ应用程序活动跟踪的潜在用途,包括问题确定和维护WebSphere MQ消息的审计跟踪。 这些方案中将使用两种工具来格式化“应用程序活动跟踪”记录以进行分析:

  • 命令行工具amqsact(作为示例与WebSphere MQ一起提供)。
  • SupportPac MS0P中包含的事件和统计信息查看器:WebSphere MQ Explorer –扩展管理插件。 下载SupportPac MS0P

打开应用程序活动跟踪

应用程序活动跟踪的激活由称为ACTVTRC的队列管理器属性控制。 要打开跟踪,请使用runmqsc命令ALTER QMGR ACTVTRC(ON) 。 要关闭跟踪,请使用runmqsc命令ALTER QMGR ACTVTRC(OFF) 。 您无需重新启动队列管理器即可启动或停止应用程序活动跟踪。

您还可以在队列管理器属性的在线监视部分的WebSphere MQ Explorer中打开和关闭“应用程序活动跟踪”,如图1所示:

图1.使用WebSphere MQ资源管理器启用应用程序活动跟踪
使用WebSphere MQ资源管理器启用应用程序活动跟踪

您还可以在MQCONNX调用中打开“应用程序活动跟踪”。 有关更多信息,请参阅WebSphere MQ信息中心中的MQCONNX选项

配置应用程序活动跟踪

使用配置文件mqat.ini可以控制“应用程序活动跟踪”中详细信息的频率和级别。 mqat.ini文件位于队列管理器数据目录中:

  • 在Linux®和UNIX®上:/ var / mqm / qmgrs / <qm_name>
  • 在Microsoft®Windows®上:C:\ Program Files \ IBM \ WebSphere MQ \ qmgrs \ <qm_name>

其中<qm_name>是队列管理器的名称。

无需重新启动队列管理器即可动态更改ini文件。 您只需要关闭然后重新打开“应用程序活动跟踪”,即可获取更改。

选择应用程序活动跟踪级别

您可以使用许多选项来配置“应用程序活动跟踪”输出中的详细程度。 mqat.ini文件中的可配置选项包括:

  • 限制运行跟踪的应用程序的能力。 例如,您可以通过在ApplicationTrace节中指定ApplName来指定要跟踪的应用程序。 由于WebSphere MQ V7.5 Java客户端现在包含真实的应用程序名称,而不是Java的通用WebSphere MQ客户端,因此您现在在跟踪Java应用程序方面也具有更大的灵活性。
  • 在应用程序活动跟踪消息中包括消息数据的选项。
  • 配置跟踪消息之间的时间间隔以及将多个跟踪记录批处理为一条消息的能力。 使用此功能,可以在优先考虑性能的情况下修改由应用程序活动跟踪生成的消息数。 默认设置是为对队列管理器进行的每个消息队列接口(MQI)调用生成一个应用程序活动跟踪记录。 每个“应用程序活动跟踪”消息均包含100条跟踪记录。
  • 可以配置“应用程序活动跟踪”消息中包括的详细程度,如下一节所述。

根据所需的粒度,可以通过“应用程序活动跟踪”配置文件mqat.ini中的TraceLevel参数将跟踪级别设置为LOW,MEDIUM或HIGH。 例如,以下来自mqat.ini的摘录显示TraceLevel设置为MEDIUM(这是默认设置):

AllActivityTrace:           # Global settings stanza
  ActivityInterval=1        # Time interval between trace messages
                            #   Values: 0-99999999 (0=off)
                            #   Default: 0
  ActivityCount=100         # Number of operations between trace msgs
                            #   Values: 0-99999999 (0=off)
                            #   Default: 0
  TraceLevel=MEDIUM      # Amount of data traced for each operation
                            #   Values: LOW | MEDIUM | HIGH
                            #   Default: MEDIUM
  TraceMessageData=0        # Amount of message data traced
                            #   Values: 0-104857600
                            #   Default: 0
  StopOnGetTraceMsg=ON      # Stop trace on get of activity trace message
                            #   Values: ON | OFF
                            #   Default: ON

作为使用不同跟踪级别生成的输出的示例,下面的图2显示了MQPUT调用的输出参数。 此数据取自连接到队列管理器并将消息放在本地队列上的WebSphere MQ客户端应用程序的应用程序活动跟踪(amqsputc示例)。

图2.用不同的跟踪级别记录的MQPut参数
使用不同跟踪级别记录的MQPut参数

适当的跟踪级别取决于您打开“应用程序活动跟踪”的原因。 如果要解决代码页转换问题,并且需要检查消息的CCSID,则至少需要将跟踪详细信息的级别设置为MEDIUM。 另一方面,如果您只想找出队列中成功的MQPUT的数量,那么低的详细程度可能就足够了。 要确定适合您需求的跟踪详细信息级别,请在短时间内打开“应用程序活动跟踪”,然后尝试不同级别的跟踪详细信息,以确定哪个级别可以提供所需的详细信息量。

应用程序活动跟踪的性能影响

应用程序活动跟踪对性能的影响取决于您指定的详细程度,所跟踪的应用程序数量以及生成活动消息的频率。 选择最低级别的细节和频率,即可为您提供所需的信息,尤其是在性能至关重要的情况下。 确保读取活动跟踪消息的监视应用程序可以跟上跟踪的产生,以便活动跟踪消息的排队不会造成瓶颈。 有关活动跟踪对性能的影响以及减少这种影响的方法的更多信息,请参阅WebSphere MQ信息中心中的应用程序活动跟踪性能的影响

格式化应用程序活动跟踪输出

您可以编写自己的应用程序以读取和格式化“应用程序活动跟踪”消息。 有关更多信息,请参阅WebSphere MQ信息中心中的“ 应用程序活动跟踪”消息参考

本文中的场景使用amqsact示例程序和WebSphere MQ Explorer中的Application Activity Trace查看器来格式化跟踪消息。

amqsact示例程序

amqsact会为您格式化“应用程序活动跟踪”消息,并且WebSphere MQ附带提供了该消息。 还提供了源代码,因此您可以轻松查看其工作方式,并可以扩展和修改行为以满足您的要求。 编译后的程序位于samples目录中:

  • 在Linux和UNIX上:MQ_INSTALLATION_PATH?samp?bin
  • 在Windows上:MQ_INSTALLATION_PATH \ tools \ c \ Samples \ Bin;

amqsact选项

amqsact [-m QMgrName]
               [-q QName]        # Override default queue name
               [-t TopicString]  # Subscribe to event topic
               [-b]              # Only browse records
               [-v]          # Verbose output
               [-d <depth>]      # Number of records to display
               [-w <timeout>]    # Time to wait (in seconds)
               [-s <startTime>]  # Start time of record to process
               [-e <endTime>]    # End time of record to process

输出示例

这是使用以下命令格式化后的MQCONN API调用的输出示例: amqsact –m TESTQM -v

MonitoringType: MQI Activity Trace
Correl_id:
00000000:  414D 5143 5445 5354 514D 2020 2020 2020  'AMQCTESTQM      '
00000010:  B5F6 4251 2000 E601                      '.öBQ .æ.        '
QueueManager: 'TESTQM'
Host Name: 'ADMINIB-1VTJ6N1'
IntervalStartDate: '2013-03-15'
IntervalStartTime: '12:08:10'
IntervalEndDate: '2013-03-15'
IntervalEndTime: '12:08:10'
CommandLevel: 710
SeqNumber: 0
ApplicationName: 'WebSphere MQ_1\bin\amqsput.exe'
Application Type: MQAT_WINDOWS_NT
ApplicationPid: 14076
UserId: 'Emma_Bushby'
API Caller Type: MQXACT_EXTERNAL
API Environment: MQXE_OTHER
Application Function: ''
Appl Function Type: MQFUN_TYPE_UNKNOWN
Trace Detail Level: 2
Trace Data Length: 0
Pointer size: 4
Platform: MQPL_WINDOWS_NT
MQI Operation: 0
   Operation Id: MQXF_CONN
   ApplicationTid: 1
   OperationDate: '2013-03-15'
   OperationTime: '12:08:10'
   ConnectionId:
   00000000:  414D 5143 5445 5354 514D 2020 2020 2020  'AMQCTESTQM      '
   00000010:  FFFFFFB5FFFFFFF6 4251 2000 FFFFFFE601    '.öBQ .æ.        '
   QueueManager: 'TESTQM'
   Completion Code: MQCC_OK
   Reason Code: 0
   Connect Options: 256

WebSphere MQ资源管理器应用程序活动跟踪查看器

SupportPac MSOP:WebSphere MQ资源管理器–扩展管理插件提供了“应用程序活动跟踪”查看器,该查看器可格式化“应用程序活动跟踪”消息并按应用程序对跟踪消息进行排序,这使您可以轻松地按应用程序查看消息流。

在安装了用于MQ Explorer的扩展管理插件之后,您可以通过右键单击内容窗格中的SYSTEM.ADMIN.TRACE.ACTIVITY.QUEUE并单击“ 格式化活动记录”来格式化“应用程序活动跟踪”消息的格式 。 打开下面显示的窗口,您可以指定多个选项来格式化“应用程序活动跟踪”消息:

图3.显示应用程序活动跟踪的选项
显示应用程序活动跟踪的选项

合并活动选项指定尝试将报告消息链关联为同一应用程序的一部分。 本文中的方案都使用此选项。 格式化的消息显示在事件和统计信息查看器中,如下所示:

图4.事件和统计信息查看器
事件和统计查看器

使用应用程序活动跟踪对应用程序行为进行故障排除

应用程序活动跟踪可以帮助您解决WebSphere MQ应用程序行为问题,因为它为您提供了应用程序进行的MQI调用的详细视图。 本节中的三个方案向您展示了如何使用“应用程序活动跟踪”对应用程序行为的问题进行故障排除。 本节中的场景基于X公司的简单WebSphere MQ环境,如下面的图5所示。 许多WebSphere MQ客户端应用程序连接到队列管理器CLUSQM_1,该队列管理器是WebSphere MQ集群TESTSCLUSTER的成员,并且该集群包含另外两个队列管理器CLUSQM_2和CLUSQM_3。

图5. X公司的WebSphere MQ环境
X公司的WebSphere MQ环境

方案1.群集队列之间的消息没有达到工作负载平衡

在场景1中,公司X的WebSphere MQ管理员注意到发往其集群队列之一的消息并未在集群中队列的所有实例之间平均分配。 在这种情况下,消息流源自WebSphere MQ Cluster外部的许多客户机应用程序。 消息从应用程序通过队列管理器CLUSQM_1发送到队列CLUS_Q,该队列位于群集中的两个队列管理器CLUSQM_2和CLUSQM_3上。

X公司的开发标准指定在放入集群队列时应使用MQOPEN选项MQOO_BIND_NOT_FIXED,以实现集群队列所有实例之间消息的工作负载平衡。 管理员没有访问应用程序代码的权限,无法使用MQOO_BIND_ON_OPEN选项验证MQOPEN选项是否正确或应用程序之一是否错误,从而导致消息向CLUS_Q的分配不均。

为了验证所有连接的应用程序是否正在使用MQ_BIND_NOT_FIXED,管理员打开了CLUSQM_1上的“应用程序活动跟踪”,并以MQ Explorer格式使用事件和统计信息查看器格式化消息。 图6是事件和统计信息查看器的摘录,清楚地显示了其中一个应用程序正在使用MQOO_BIND_ON_OPEN选项,从而使管理员能够快速识别引起意外行为的应用程序。

图6.使用BIND_ON_OPEN的应用程序
使用BIND_ON_OPEN的应用程序

方案2.队列管理器达到最大通道数限制

X公司的管理员已将队列管理器CLUSQM_1配置为maxchannels值为500,这意味着一次最多只能将500个通道连接到队列管理器。 此设置已经存在多年了,没有问题,但是最近几周,管理员收到警报,提示已达到maxchannels值,并且管理员临时增加了队列管理器的maxchannels值,以便容纳所有连接。

为了确定连接数是否合法增加,或者应用程序是否在处理完成后未能与队列管理器断开连接,从而使应用程序通过队列管理器保持打开状态,因此管理员在CLUSQM_1上打开了应用程序活动跟踪。 当Activity Trace Viewer将每个应用程序的记录合并在一起时,它可以清楚地显示出哪些应用程序正在与队列管理器断开连接,哪些正在保持连接打开。

下面的事件和统计信息查看器中的图7显示了一个应用程序,该应用程序为其与队列管理器的每个连接发出了断开连接,而图8显示了未发出断开连接的应用程序。 长时间运行“应用程序活动跟踪”将使管理员能够确认是否发出了断开连接。

图7.关闭队列后,应用程序与队列管理器断开连接
关闭队列后,应用程序与队列管理器断开连接
图8.应用程序无法从队列管理器断开连接
应用程序无法从队列管理器断开连接

方案3.使用应用程序活动跟踪来保留消息的审核跟踪

应用程序活动跟踪的另一个用途是保留对关键消息的审核跟踪。 由于审核跟踪要求永久性地打开“应用程序活动跟踪”,因此,请尽可能将跟踪级别设置为“低”,以最大程度地降低性能影响。 您可以通过调整mqat.ini文件中的ActivityInterval和ActivityCount参数来减少通过网络发送的“应用程序活动跟踪”消息的数量。 每个MQI操作都会生成一个活动记录,这些参数使您可以根据时间或记录计数阈值配置将这些记录中的多少捆绑到活动跟踪消息中。

在方案3中,X公司的管理员正在使用应用程序活动跟踪来维护跨WebSphere MQ集群TESTCLUSTER中的三个队列管理器的消息传输的审计跟踪。 为了集中WebSphere MQ集群中所有队列管理器的“应用程序活动跟踪”消息的收集,您可以通过重新定义SYSTEM,将所有消息从SYSTEM.ADMIN.ACTIVITY.TRACE.QUEUE重新路由到发布/订阅主题。 ADMIN.ACTIVITY.TRACE.QUEUE作为集群主题对象。 然后,所有“应用程序活动跟踪”记录将被重新路由到新定义的主题,然后您可以配置格式应用程序以订阅该主题,以便可以对其进行集中监视。 以下是重新路由活动跟踪记录的步骤:

  1. 在CLUSQM_1上,定义一个集群主题以发送“应用程序活动跟踪”消息,如本示例runmqsc命令所示:
    DEFINE TOPIC(TRACETOPIC)+ TOPICSTR('/Application/Activity/Trace')+
    CLUSTER(TESTCLUSTER)
  2. 删除SYSTEM.ADMIN.TRACE.ACTIVITY.QUEUE队列,并将其重新定义为别名队列,以解决步骤1中定义的新主题,如本示例runmqsc所示:
    DELETE QLOCAL(SYSTEM.ADMIN.TRACE.ACTIVITY.QUEUE) 
    DEFINE QALIAS(SYSTEM.ADMIN.TRACE.ACTIVITY.QUEUE)+ TARGTYPE(TOPIC) TARGET(TRACETOPIC)
  3. 在CLUSQM_2和CLUSQM_3上,删除SYSTEM.ADMIN.TRACE.ACTIVITY.QUEUE队列,并将其重新定义为别名队列,以解决步骤1中定义的新主题,如本示例中的runmqsc所示:
    DELETE QLOCAL(SYSTEM.ADMIN.TRACE.ACTIVITY.QUEUE
    DEFINE QALIAS(SYSTEM.ADMIN.TRACE.ACTIVITY.QUEUE)+ TARGTYPE(TOPIC) TARGET(TRACETOPIC)

另一种选择是通过在主题字符串中包含队列管理器名称来对主题树进行分区,然后使用通配符订阅事件。 例如,您可以分别在CLUSQM_1,CLUSQM_2和CLUSQM_3上发布以下主题字符串:

/Application/Activity/Trace/CLUSQM_1
/Application/Activity/Trace/CLUSQM_2
/Application/Activity/Trace/CLUSQM_3

然后,订阅的应用程序可以订阅/ A​​pplication / Activity / Trace / *以获取所有队列管理器的应用程序活动跟踪消息,或者可以订阅/ A​​pplication / Activity / Trace / CLUSQM_1以仅获取CLUSQM_1的消息。 由于您已将所有“应用程序活动跟踪”消息发布到中央位置,因此在整个环境中跟踪消息更加容易。 例如,应用程序团队通过CLUSQM_1将具有以下消息ID的消息发送到CLUS_Q:

00000000:  414D 5120 434C 5553 514D 5F31 2020 2020  'AMQ CLUSQM_1    '
00000010:  FFFFFFE5FFFFFFD7 FFFFFF9951 2006 1303    'å.™Q ...        '

他们要求确认消息已发送到哪个队列管理器,以及是否已成功将其放入队列CLUS_Q。 使用amqsact格式化“应用程序活动跟踪”输出,管理员可以通过在输出中搜索消息ID来验证此信息。 要收集主题/ Application / Activity / Trace的消息并设置其格式,可以使用以下命令:

amqsact –m CLUSQM_1 –t /Application/Activity/Trace –w 30 > output_file.txt

首先,管理员可以使用以下MQPUT记录确认消息已成功发送到CLUSQM_1:

MQI Operation: 1
   Operation Id: MQXF_PUT
   ApplicationTid: 28
   OperationDate: '2013-05-21'
   OperationTime: '17:05:14'
   High Res Time: 1369152314903178
   Completion Code: MQCC_OK
   Reason Code: 0
   Hobj: 13676096
   Put Options: 8260
   Msg length: 1
   Known_dest_count: 0
   Unknown_dest_count: 1
   Invalid_dest_count: 0
   Object_type: MQOT_Q
   Object_name: 'CLUS_Q'
   Object_Q_mgr_name: ''
   Resolved_Q_Name: 'CLUS_Q'
   Resolved_Q_mgr: 'CLUSQM_3'
   Resolved_local_Q_name: 'CLUS_Q'
   Resolved_local_Q_mgr: 'CLUSQM_1'
   Resolved_type: MQOT_Q
   Report Options: 0
   Msg_type: MQMT_DATAGRAM
   Expiry: -1
   Format_name: 'MQSTR'
   Priority: -1
   Persistence: 2
   Msg_id:
   00000000:  414D 5120 434C 5553 514D 5F31 2020 2020  'AMQ CLUSQM_1    '
   00000010:  FFFFFFE5FFFFFFD7 FFFFFF9951 2006 1303    'å.™Q ...        '
   Correl_id:
   00000000:  0000 0000 0000 0000 0000 0000 0000 0000  '................'
   00000010:  0000 0000 0000 0000                      '........        '
   Reply_to_Q : ''
   Reply_to_Q_Mgr: ''
   Coded_char_set_id: 437
   Encoding: 546
   Put_date: '20130521'
   Put_time: '16051491'

您可以看到解析的队列管理器是CLUSQM_3,因此管理员检查消息是否已到达CLUSQM_3上的CLUS_Q。 以下跟踪记录确认它具有:

MQI Operation: 1
   Operation Id: MQXF_PUT
   ApplicationTid: 6
   OperationDate: '2013-05-21'
   OperationTime: '17:05:14'
   High Res Time: 1369152314985842
   Completion Code: MQCC_OK
   Reason Code: 0
   Hobj: 14459304
   Put Options: 272388
   Msg length: 1
   Recs_present: 0
   Known_dest_count: 1
   Unknown_dest_count: 0
   Invalid_dest_count: 0
   Object_type: MQOT_Q
   Object_name: 'CLUS_Q'
   Object_Q_mgr_name: 'CLUSQM_3'
   Resolved_Q_Name: 'CLUS_Q'
   Resolved_Q_mgr: 'CLUSQM_3'
   Resolved_local_Q_name: 'CLUS_Q'
   Resolved_local_Q_mgr: 'CLUSQM_3'
   Resolved_type: MQOT_Q
   Report Options: 0
   Msg_type: MQMT_DATAGRAM
   Expiry: -1
   Format_name: 'MQSTR'
   Priority: 0
   Persistence: 0
   Msg_id:
   00000000:  414D 5120 434C 5553 514D 5F31 2020 2020  'AMQ CLUSQM_1    '
   00000010:  FFFFFFE5FFFFFFD7 FFFFFF9951 2006 1303    'å.™Q ...        '
   Correl_id:
   00000000:  0000 0000 0000 0000 0000 0000 0000 0000  '................'
   00000010:  0000 0000 0000 0000                      '........        '
   Reply_to_Q : '                                                '
   Reply_to_Q_Mgr: 'CLUSQM_1'
   Coded_char_set_id: 437
   Encoding: 546
   Put_date: '20130521'
   Put_time: '16051491'

这次,解析的队列管理器和解析的本地队列管理器是相同的,这意味着这是消息的预期最终目标。 如果将消息作为工作单元的一部分放置,则在提交工作单元之前,该消息将不可用于检索应用程序。 应用程序活动跟踪还将为操作的分别为MQXF_CMIT或MQXF_BACK的操作ID写入提交或退出消息。 若要确认放置在同步点下的消息是否到达最终目的地,请使用“应用程序活动跟踪”输出来确认消息是否已落实或撤消。

结论

应用程序活动跟踪功能为您提供了在队列管理器上进行的MQI调用的详细视图。 本文展示了其一些用法和可配置选项,以及一些有关如何格式化和解释应用程序活动跟踪输出的示例。

致谢

作者感谢IBM同事Jonathan Rumsey(WebSphere MQ开发的高级软件工程师)和Mark E.Taylor(WebSphere MQ技术战略的软件开发人员)在撰写本文时提供的帮助和指导。


翻译自: https://www.ibm.com/developerworks/websphere/library/techarticles/1306_bushby/1306_bushby.html

websphere mq

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值