Monitor clusters
Within a cluster we can monitor application messages, control messages, and logs. There are special monitoring considerations when the cluster load balances between two or more instances of a queue.
Monitor application messages in the cluster
Typically, all cluster messages that leave the queue manager pass through the SYSTEM.CLUSTER.TRANSMIT.QUEUE, irrespective of which cluster sender channel is being used to transmit the message. Each channel is draining messages targeted for that channel in parallel with all other cluster sender channels. A growing build-up of messages on this queue can indicate a problem with one or more channels and must be investigated:
- The depth of the queue must be monitored appropriately for the cluster design.
- The following command returns all channels that have more than one message that is waiting on the transmit queue:
DIS CHSTATUS(*) WHERE(XQMSGSA GT 1)
With all cluster messages on a single queue, it is not always easy to see which channel has problems when it begins to fill up. Using this command is an easy way to see which channel is responsible.
We can configure a cluster queue manager to have multiple transmission queues. If we change the queue manager attribute DEFCLXQ to CHANNEL, every cluster-sender channel is associated with a different cluster transmit queue. Alternatively we can configure separate transmission queues manually. To display all the cluster transmit queues that are associated with cluster-sender channels, run the command:
DISPLAY CLUSQMGR (qmgrName) XMITQDefine cluster transmission queues so that they follow the pattern of having the fixed stem of the queue name on the left. We can then query the depth of all the cluster transmission queues returned by the DISPLAY CLUSMGR command, by using a generic queue name:
DISPLAY QUEUE (qname *) CURDEPTH
Monitor control messages in the cluster
The SYSTEM.CLUSTER.COMMAND.QUEUE queue is used for processing all cluster control messages for a queue manager, either generated by the local queue manager or sent to this queue manager from other queue managers in the cluster. When a queue manager is correctly maintaining its cluster state, this queue tends toward zero. There are situations where the depth of messages on this queue can temporarily grow however:- Having lots of messages on the queue indicates churn in the cluster state.
- When making significant changes, allow the queue to settle in between those changes. For example, when moving repositories, allow the queue to reach zero before moving the second repository.
While a backlog of messages exists on this queue, updates to the cluster state or cluster-related commands are not processed. If messages are not being removed from this queue for a long time, further investigation is required, initially through inspection of the queue manager error logs (or CHINIT logs on z/OS ) which might explain the process that is causing this situation.
The SYSTEM.CLUSTER.REPOSITORY.QUEUE holds the cluster repository cache information as a number of messages. It is usual for messages to always exist on this queue, and more for larger clusters. Therefore, the depth of messages on this queue is not an issue for concern.
Monitor logs
Problems that occur in the cluster might not show external symptoms to applications for many days (and even months) after the problem originally occurs due to the caching of information and the distributed nature of clustering. However, the original problem is often reported in the IBM MQ error logs (and CHINIT logs on z/OS). For this reason, it is vital to actively monitor these logs for any messages written that relate to clustering. These messages must be read and understood, with any action taken where necessary.
For example: A break in communications with a queue manager in a cluster can result in knowledge of certain cluster resources that are being deleted due to the way that clusters regularly revalidate the cluster resources by republishing the information. A warning of such an event potentially occurring is reported by the message AMQ9465 or CSQX465I on z/OS systems. This message indicates that the problem needs to be investigated.
Special considerations for load balancing
When the cluster load balances between two or more instances of a queue, consuming applications must be processing messages on each of the instances. If one or more of those consuming applications terminates or stops processing messages, it is possible that clustering might continue to send messages to those instances of the queue. In this situation, those messages are not processed until the applications are functioning correctly again. For this reason the monitoring of the applications is an important part of the solution and action must be taken to reroute messages in that situation. An example of a mechanism to automate such monitoring can be found in this sample: The Cluster Queue Monitoring sample program (AMQSCLM).
Parent topic: Monitor the IBM MQ networkRelated concepts
- Tuning distributed publish/subscribe networks
- Balancing producers and consumers in publish/subscribe networks