I have a requirement to write a shell script to check queue depth of few queues in remote Queue manager. Version of remote queue manager IBM websphere Mq v8. Can anyone advise on this?
You can do the following:
1) Create an mqsc file, say curdepth.mqsc containing the following:
DIS QL(*) CURDEPTH
The above will display curdepth of all queues. If you need for a specific queue, then
DIS QL(<queue name>) CURDEPTH
You can also wildcard in the name.
DIS QL(SW*) CURDEPTH
2) Setup MQSERVER environment variable to point to remote queue manager. For example:
SET MQSERVER=MQ_CHN/TCP/remotehost(1414)
3) Through your shell script
runmqsc -c <qmgr> < curdepth.mqsc
The output would look something like
AMQ8409I: Display Queue details.
QUEUE(SWIFTQ) TYPE(QLOCAL)
CURDEPTH(0)
4) Then parse the output of the command.
Well, I think it would be better to write an MQ/PCF in Java (or C) rather than do it by a shell script. But if you must, here's one I used back in the early 2000's that I called 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
The script requires 6 input parameters:
You can run the script manually but it is far better to setup it so that a scheduler runs it, say every 5 minutes. Most people on Unix / Linux will use CRON, so here's a crontab entry:
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
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.