如何使用脚本检查远程队列管理器的队列深度?

时间:2019-08-29 05:31:11

标签: ibm-mq

我需要编写一个Shell脚本来检查远程队列管理器中几个队列的队列深度。 远程队列管理器IBM Websphere Mq v8的版本。 有人可以建议吗?

2 个答案:

答案 0 :(得分:3)

您可以执行以下操作:

1)创建一个mqsc文件,例如curdepth.mqsc,其中包含以下内容:

  DIS QL(*) CURDEPTH 

上面将显示所有队列的当前深度。如果您需要特定的队列,那么

 DIS QL(<queue name>) CURDEPTH 

您也可以在名称中使用通配符。

 DIS QL(SW*) CURDEPTH 

2)设置MQSERVER环境变量以指向远程队列管理器。例如:

SET MQSERVER=MQ_CHN/TCP/remotehost(1414)

3)通过您的Shell脚本

   runmqsc -c <qmgr> < curdepth.mqsc

输出看起来像

AMQ8409I: Display Queue details.
   QUEUE(SWIFTQ)                           TYPE(QLOCAL)
   CURDEPTH(0)

4)然后解析命令的输出。

答案 1 :(得分:1)

嗯,我认为用Java(或C)编写MQ / PCF胜过使用Shell脚本来编写它更好。但是,如果必须的话,这是我早在2000年代就使用的一种,我称之为 chkQdepth.sh

#!/bin/sh
#
# A shell script to check the queue depth and alert 
# the user via email if it is too high.
#
# Parameters:
#  $1=Queue manager
#  $2=Queue name
#  $3=alert threshold
#  $4=mailing list
#  $5=mail subject
#  $6=mail message
#

if [ $# -ne 6 ] ; then exit; fi

QMGR="$1"
QUEUE="$2"
WARNING="$3"
MAILLIST="$4"
MAILSUB="$5"
MAILMSG="$6"

CURDEPTH=`/opt/mqm/bin/runmqsc $QMGR << EOF |sed -n '/CURDEPTH([0-9]*)/ {
s/.*CURDEPTH(\([0-9]*\))/\1/
p
}'
DISPLAY QUEUE($QUEUE) CURDEPTH
end
EOF`

if [ "x$CURDEPTH" != "x" ] ; then
    if [ $CURDEPTH -gt $WARNING ] ; then
        echo "Queue has more than $WARNING message(s)"
        mail -t $MAILLIST << EOF
Subject: $5

$6


Queue Manager: $QMGR

Queue Name: $QUEUE

Current queue depth is $CURDEPTH messages

Alerting Threshold is $WARNING

EOF
    else
        echo "Queue depth is equal to or less than $WARNING. (Current queue depth is $CURDEPTH messages)"
    fi
else
    echo "Queue depth not available"
fi

exit 0

该脚本需要6个输入参数:

  • 队列管理器的名称
  • 要检查的队列的名称
  • 警报阈值量(一个数字)
  • 将接收电子邮件的用户的邮件列表
  • 邮件主题
  • 邮件消息

您可以手动运行脚本,但是最好进行设置以使调度程序运行该脚本,例如每5分钟运行一次。 Unix / Linux上的大多数人都将使用CRON,因此这是crontab条目:

0-59/5 *  * * * /some/path/mqtools/chkQdepth.sh MQA1 TEST.Q1 50 roger@acme.com  "Alert: Test.Q1 has too many messages." "Please check application XYZ as queue TEST.Q1 has too many messages in it." >/dev/null 2>&1