BMC Middleware Administration is designed to improve the lives of MQ Administrators and to provide access to MQ for other staff on a controlled basis, often referred to as Self-Service. This capability does not require agents or any files to be on the MQ Servers. MQ objects can be filtered by name masks and assigned to “Projects” that staff are then assigned to via Groups with specific permissions. This approach to MQ access is popular and gaining traction.
Today’s discussion is about going beyond traditional MQ Administration into some challenging areas on integrity review. Imagine having to go back and check every queue manager for a setting to ensure they are all the same. How about validating that listener control for every listener is set to queue manager control? What about the ones that aren’t? Perhaps the challenge is to identify object changes within a specific time period regardless of what product, script or utility was used to make the change. Performing this function on an object by object basis is tedious, error prone and takes a lot of time. What if Administrators had a reusable query they could use to search for various objects, attribute values, settings, use cases, etc and do this on a mass level? Interested? I hope so. Please read on.
Standards, Exceptions and the unforeseen…
BMC Middleware Administration has an “Advanced search” capability. I call it the intelligent search. It can provide you with visibility into MQ at a level never before thought possible. Sure, MQ Administrators can query queue managers for attributes and multiple queue managers at the same time on a server by server basis. What if you have 50 MQ Servers? Maybe 100 MQ Servers? How about more than 150 queue managers across multiple operating systems with unique nuances and interfaces? This becomes more challenging. This search function provides three basic levels of query: Simple, Complex (think compound Boolean logic), and free form. Simple is a basic find command while following syntax. Compound uses at least two attributes in the query. Free form can be fairly extensive. You also have an option on the results: Match All (all criteria in search are satisfied), match any, where any of the attributes searched for on object type satisfies the results. Let’s take a look at a few use cases.
Use case1: Locate queue managers that have Queue Monitoring (MQMON) set to none or off.
This setting will prevent most if not all MQ Monitoring solutions from identifying the oldest message age on a queue. Monitoring will also be unable to obtain the last message put\get date\time stamps. With BMM Administration, you can easily and quickly (in seconds) locate these exceptions and then you can use the “Manage MQ” function to render the change(s).
Use Case 2: Locate Queue Managers that have Listeners NOT set to Queue Manager Control.
One would expect this situation not to arise. It generally manifests itself in a channel retry alert or listener stopped alert if your MQ Monitoring solution has such capabilities. BMM does. Every time the queue manager is restarted, that listener would not start thereby causing a self inflicted MQ channel issue.
Use Case 3: MQ Object (You pick which type) Alteration Date is within some range in time. Many MQ Administrators rely on scripting to make mass changes. Maybe the change concern is only for a specific application with object filtering in place across multiple OS’s and queue managers. Ideally these changes are made to targeted objects for a specific reason. Sometimes the change is inadvertent. Sometimes it is made by someone else who managed to gain access to objects and make changes.
How do you know??
Use Case 4: Quick Queue integrity check for specific queues in a project with queue depth within a range. Say for illustration 5 to 50 messages ( or 50 to 100 and so forth) currently on the queue. This query will provide you a specific list of every queue meeting that criteria and\or by Project (Think application).
Create your own queries and you can save them in seconds for reuse in a library of “intelligent queries.”
Here are some to consider although you may have you own in mind. I would love to hear from you.
Queue manager queue monitoring is set to NONE or Off
Listeners NOT set to Queue Manager Control
Alteration Date is within some range in time and\or by application or object mask
Queue integrity check for specific queues in a project with queue depth within a range
Trigger Control: off
Queue Get Inhibited
Queue Put Inhibited
All queues that belong to a specific CLUSTER name
All topics that belong to a CLUSTER
All topics using a specific model queue name assignment
All topics that are local by queue manager name
All subscriptions with a specific topic string. E.g. neworders*
All subscriptions with a specific Destination E.g. stock_trade*
All subscriptions with a user id equal to “weborder.”
All subscriptions with SubscriberName:order* and TopicString:neworders and Destination:processorders)
All queues where usage is transmission within a specific application
All channels participating in a specific cluster
All channels sharing (connecting) to the same connection name
All channels use a transmission queue beginning with CICS*
StorageClass of a group of queues on z/OS
Finally a way to search MQ intelligently!