QuickDownload: https://github.com/thekevinholman/IBMMQMP
This is a Management Pack that will discover and monitor IBM MQ / IBM WebSphere MQ servers on Windows.
Discovers and monitors:
- MQ Server (Service Running)
- Queue Managers (Status)
- Queues (Status, Queue Depth, Queue Percent Used, IPROCS, OPROCS)
- Listeners (Status, Sessions)
- Channels (Status)
This is loosely based on a previous community MP, but is a complete re-write. Changes include:
- Streamlined class and monitor structure
- Changed all VBScript workflows to PowerShell
- Re-wrote all monitoring workflows to support cookdown.
Discovery is based on the existence of the MQ_Installation1 service (registry).
Queue Managers are then discovered. Once the queue mangers are discovered, we discover the Channels, Listeners, and Queues from there.
Events logged: Discoveries: (7100 – 7104) Monitoring workflows: (17000 – 17004)
This is a good sample MP to demonstrate multi-role applications, relationships, dependency monitors, and multi-instance objects needing cookdown.
Notes:
- The IBM MQ Server role discovery looks for existence of HKLM\SYSTEM\CurrentControlSet\Services\MQ_Installation1. You might need to change this logic for multiple installations or non-default installations. I welcome feedback here.
- The IPPROCS monitor is disabled by default because it can be noisy for default SYSTEM queues.
- You can disable discovery of all SYSTEM.* queues, by a simple edit in the Queue Discovery script. Change the line with:
- [bool]$DiscoverSystemQueues = $true
- to:
- [bool]$DiscoverSystemQueues = $false
- [bool]$DiscoverSystemQueues = $true
Most wanted one.., good work Kelvin.. awaiting your next update on the same to support UNIX/Linux servers..
Hi Kelvin, does the statement “Discovery is based on the existence of the MQ_Installation1 service (registry)” mean that it can only discover one installation of MQ, and only if it is named “Installation1” (the default name for the first installation)? Looking at the XML in your GitHub repository I fear it does.
Forgive me – I am not an MQ expert by any means.
Is it common to install multiple installations of MQ on a box?
Would you need to monitor those separately?
Would you have any conflict between queue manager names, queue names, listener names, channel names, on the same computer with two installations?
Sorry – didn’t get notification of your reply. Yes, it is certainly common to see a couple of installations, if nothing else to take advantage of short outage times for queue manager upgrades. You don’t have to monitor them separately – an MQ application can connect to two queue managers which are not in the same installation. There would not be a conflict of queue manager names, but there would almost certainly be a conflict of all other objects – for example the SYSTEM objects on each queue manager would be identical. If you key these objects by QMgrName+ObjectName though, you’d be all good.
Hi Kevin, can this also be used when MQ is running on a linux server?
No. It is for Windows only. I don’t have customers asking for this on Linux or I’d write it.
Hi Kevin, It would be great if you create a MP for IBM MQ running on Linux server
Hi, is there still not an option for when MQ is running on a Unix/linux server?
Hi,
Yes, by default installation of MQ is on MQ_Installation1 If your installation name has changed you have to modify the discovery to target proper registry settings, it will works
Regards
Hi Kevin,
Thanks a lot for the Management Pack, much needed. Wanted to check with you on the Queue depth value can be modified to percentage value in place of Integer value.
Regards,
Suri
Let me look into that.
I have added a new monitor for Queue Percent Used, and a Performance Collection rule for this as well. Also – this helped me come up with a faster way to monitor the queue properties, so it completes faster now as well. My Queue monitoring script (event 17000) was taking 20 seconds to complete, now it completes in 10 seconds. I assume you will see the same impact.
Thank you for adding the Queue Percent Monitor. Shall remove the existing MP, download the updated MP and import.
Glad to hear on the performance improvement on the script execution.
Regards,
Suri
Thank you Kevin for the update. Also wanted to update you on System Queue discovery disabling, I did modify the Queue Discovery script as per your instructions and set the value of – [bool]$DiscoverSystemQueues = $false. Management Pack is still discovering all the Queues including the System Queues.
And this MP, each IBM MQ as individual server and not as clustered Servers, Hope this is by design. Currently I am working on the IBM MQ servers installed on top of Windows Servers cluster with the Active / Passive configuration.
Once again thanks a lot for all your support.
– Suri
Hi Suri –
I re-tested [bool]$DiscoverSystemQueues = $false and it works just fine. Make sure you are using “$false” and not “false” on that line. I had planned to make this an overridable property, but had some trouble. I might work on that more later, but this does indeed work.
On the Cluster – this MP is not cluster aware. So it will detect the service on each node, and attempt to monitor it from each node. I was not aware using Windows Failover Clusters was popular for IBMMQ. Forgive me, I am not an expert in IBMMQ. Is this pretty typical?
Also – are there any other default settings that would make more sense for this MP? What do you change in this MP from what I set as default?
What would be a good default Queue Percent threshold? I chose 50% for warning and 75% for critical out of the box.
Hi Kevin,
Thanks for the update, I did modify the SystemDiscoveryQueue with “$false”, Shall try once again.
On the IBMMQ over Windows cluster is the most preferred and typical way, also depends on the solution design. Is there any way that you would suggest to incorporate to enable this MP as Cluster aware.
As I am in process of testing the MP, the main parameter which I came across is the percentage as the Queue configuration shall vary. I shall get back to you with the update once the tests are completed.
Thank you for all your support.
Regards,
Suri
Hi Kevin,
I have an update and [bool]$DiscoverSystemQueues = $false is working, thanks for your inputs.
Also I tested the Queue percentage and got the desired results, also performance details are also showing correctly.
As per the inputs received from my IBM MQ Solution’s team the value set for the out of the box thresholds are fine.
Regards,
Suri
I would interject that a using the percentage set in the queue attribute for QueueHighEvents would be a useful thing to do.
Hi Morag,
Thank you for sharing your inputs. If you can share more details and also how to handle the Clustered scenario, that would really helpful.
Regards,
Suri
Hi Kevin,
I need to edit the “IBM MQ Server Discovery” to look for SYSTEM\CurrentControlSet\Services\MQ_LabMQV92 instead of SYSTEM\CurrentControlSet\Services\MQ_Installation1, but I can’t as the MP is sealed.
Is there an easy way around this or how would you suggest to implement the MP in this scenario?
maybe via a future update include an override parameter for the installation name which alters the registry lookup value to the override value
Hi Niels,
I offer the sealed and unsealed versions in the Github. You can choose “Code” > “Download Zip” on the main page and get both files. Then you can make changes and reseal yourself, or run this unsealed.
That’s a fair request, I should be able to make that happen in a future update.
Thanks Kevin!
I will try the unsealed version
Hi Kevin,
Something strange is happening with this mp in one of my scom environments.
In my production scom environment this mp is working as expected, Server, QueueManager, Channels, Listeners and Queues are detected.
In my lab environment the same is true, except de Queues they are not registrering in scom. I see the events for the queues, but the Queues do not appear in scom. Does you have an idea what could cause this?
The first step in discovery is the “IBM MQ Server” class discovery. This looks for HKLM:SYSTEM\CurrentControlSet\Services\MQ_Installation1. Is this class discovered?
The second step in discovery is the “Queue Manager” class discovery. This uses a command “dspmq” and parses the output to discover the queue managers, and logs event 7101. Is this class discovered?
Lastly, the remaining discoveries target the Queue Manager class, and discover the Channel, Listener, and Queue instances.
Queue discovery script logs event 7104, for troubleshooting. This discovery runs command: “echo Display QL(*) | runmqsc $QueueManagerName” It parses the output of this command and looks for any line that contains: ‘QUEUE\(‘ Then it gathers queue properties using command: “echo Display Queue (‘$QueueName’) TYPE DESCR MAXDEPTH MAXMSGL | runmqsc $QueueManagerName” and parses that output.
Its possible different versions output the data differently and my parsing design isn’t handling that. I found that once with a customer. The trick is to run the PowerShell scripts manually on the MQ servers and you should be able to detect where something is breaking down. I am not a fan of parsing echo output from a command line as that can have inconsistent results, but since IBM does not give us a really good API or PowerShell module, we have limited capability to interact with IBM MQ.
In my lab and production environment all of the events appear in de Operations Manager logs. I have the 7101, the 7102, the 7103 and the 7104 events. Only in lab the events do not result in Queues in SCOM. I get QueueManager, the Channels and the Listeners in SCOM, but the Queues remain elusive.
In production I get the same events, and I get the Queues in SCOM. What could be the cause for the Queues not appearing?
It’s the same mp, it should respond in the same way.
I see where someone else is asking for the same for MQ running on Linux as our company runs IBM MQ and MBR on Linux systems.
I don’t have any plans on writing one for Linux. That would be a from scratch effort and significant work.
Hi Kevin,
My organization has more than 2000 + MQ servers which are in Linux platform. We are looking to monitor these servers in SCOM 2019. If you could create a MP to monitor the Queue managers in Linux platform it would be really helpful and much appreciated. Awaiting for your response.
Regards,
Vinoth
Hi Kevin,
Great piece of work! One question in the channel state monitor the healthy and unhealthy expressions are exactly the same. Is this on purpoe?
Regards,
Coen
I just checked the channel status monitortype, and the expressions are very different. Can you be more specific?
I’m curious, how does this handle Multi-Instance Queue Managers? Can this detect if one instances is not running? For instance, if I had a network issue and my standby instance shut down, how does the tool report that? Will it tell me that on Server-a QueueManager QM1 running, but on Server-b QM1 is ‘stopped/running elsewhere’ or “running as standby’?
Excellent work Kevin, for a SCOM newbie this has been a lifesaver. Thanks! Just a question, has anyone gotten it updated to work on clustered MQ instances running in an active/passive setup? Thanks
I have the same question as Richard B. I have set up IBM MQ 9.3 on WSFC in a 2-node active/passive configuration. Are there any details on an update to the MP to monitor clustered queue managers?
Hi Kevin,, i have an issue with this MP, in the code you consider the status inactive for the channel as Healthy, however inactive might be a warning or critical state if the channel should be running all the time. don’t know if this is possible, i tried to change it myself, but it’s not working yet
Will it be a big work making a management pack for Linux and AIX ?
It could be most useful.
Also, we need to make sure it is prepared for MQ multiinstance setup’s.
Yes. Big work.
How MQ monitoring to be configured for linux servers? All the above discussions for IBM MQ management pack is of windows.
Kevin, I’m sure you did a great job.
I have an issue with multiple MQ installation path. Do you know is it possible change this value:”Installation1″ dynamically, depends on override? We have a multiple instances in company. Thanks.
Sure! Do you need to discover multiple instances on the SAME computer – or you just have single computer instances not named that way?
I need to discover only one instance on the computer. I think about change your discovery FilteredRegistryDiscoveryProvider to powershell, hmm?
Hi Kevin,
I have an issue with this, we do have 2 SCOM environment for DTA & PRD. In DTA, Test server queue manager is reporting not ACC one. We do have couple of server where MQ is installed but showing only one queue manager per SCOM console. so in DTA only test queue manager is reporting not the ACC one. how can we solve the issue?
In DTA , I can see 7104 event generated in event viewer in test server but not in acc, only 7101 event is present in operation manager event viewer(ACC). can you please help here how can I discover queue manager of ACC server in DTA SCOM console though the servers with MQ installed is already discovered.
Hi Kevin,
I was wondering if this MP is going to be compatible with SCOM 2022?
We currently have a 2019 UR5 environment but will be migrating early on this year to 2022.
I can see the dependencies are looking at system center libraries and also system (no reference to OS etc.) but they are v7; is this OK for being read in 22 when its v10 / or would the MP need to be updated to include the SCOM 2022 dependencies?
Many thanks,
Yes. Pretty much ANY MP that works in SCOM 2012 will continue to work in newer versions of SCOM. The dependencies are MINIMUM version requirements.
Hi Kevin. Thanks for all the good articles you have/are writing about SCOM.
My company also wants to monitor IBM MQ, so of course I have taken your MP and tested it in our test environment. And I also used [bool]$DiscoverSystemQueues = $false. Which works fine.
After some time in testing and after a few threshold changes, I moved your MP to our production. Everything was fine.
But we have a single application which does not allow any files in 2 of the queues. When a file is delivered to the queue, it is processed immediately.
I therefore changed the thresholds for these queues to:
Critical Threshold = 0
Warning Threshold = 0
At the same time, I had below overrides:
IntervalSeconds = 300
TimeOuSeconds = 60
The problem now is that there is actually a file in both queues which is not being processed. But I don’t get any alerts in SCOM.
Am I looking at this problem the wrong way? Or is it simply not possible to raise an alarm if there is a single file in the queue? So more than 0 files.
Many thanks.
Just a follow up on the above problem. The error/solution has been found. Kevin’s MP worked fine of course, but I had TimeoutSeconds set to 60 (seconds). Default was 300 (seconds). When I removed my 60 second override, it all worked again. So there was no problem in having a CriticalThreshold of “0” and a WarningThreshold of “1”.
Maybe TimeoutSeconds was set too low for our environment.