Variation on a theme: an MQI mistake

Theme

One of the common mistakes that people make when they first start programming with the MQI can be seen in this pseudo-code example:

MQMD md = {MQMD_DEFAULT}
MQGMO gmo = {MQGMO_DEFAULT}
int bufsize = 128
PMQCHAR buf = malloc(bufsize)
do {
  MQGET(&md,&gmo,buf,bufsize))
} while (rc != MQRC_NO_MSG_AVAILABLE)

They complain that despite pre-loading the queue, only a single message is returned. Anyone reading this is likely to recognise immediately the problem: the MsgId of the first message is returned in the md variable. The next iteration of the loop tries to match that MsgID and doesn’t find any more messages.

There are aspects of the MQI that try to minimise your chances of getting this wrong, like the MatchOptions flag in the MQGMO structure. But that in turn requires you know a) to set it and b) override the default version of the structure.

Having worked with MQ for so many years, I am hopefully not going to make that kind of mistake. But I still got caught out recently by a very similar problem.

Continue reading “Variation on a theme: an MQI mistake”

This post was last updated on September 20th, 2021 at 08:17 am

New features with the MQ Go metric collectors

The mq-metric-samples collectors that send IBM MQ metrics and status data to a range of databases, ready to be viewed in Grafana, have just been enhanced to collect additional information. The Prometheus collector has also been extended so that it can continue providing limited status even when the queue manager is down.

The new metrics have all been suggested by users of the package either directly or via issues raised in the GitHub repository. Many previous articles on here show more about the collectors.

The InfluxDB collector is also refreshed for a new version of the database.

Continue reading “New features with the MQ Go metric collectors”

This post was last updated on November 27th, 2021 at 02:59 pm

How many screens is too many?

Doing a web seminar session yesterday I knew I wanted a second machine available. Partly as an HA failover backup (just in case), and partly to act as a view of what the other participants were seeing – which I can’t see on the system I’m driving a presentation from. Though as I cabled everything together, it did start to look a little silly. Or like a set from a bad TV show.

Five screens
Five screens, one desk

But I did actually find a use for just about all of the panels.

The secondary system had the live seminar contents, along with the text-based chat screen so I could see when people raised questions. And I had some written notes associated with the presentations that I could scroll through as the event progressed.

The primary system had one panel with the full-screen presentation, another panel with a preview of the next slide, and a further panel with all my other activities including a chat window where I could type private notes to my co-presenter if necessary.

Could I have managed with fewer screens? Probably, but having all that space did make it easy to manage and have the windows and fonts expanded large enough so I didn’t have to peer hard at small text.

I’ve now moved the 2nd laptop next to the big TV so I can use it to show the county championship cricket games available only via live streaming services. But it can brought back to the desk if needed for another web conference.

This post was last updated on April 30th, 2021 at 02:41 pm

What did Spring do to my queue manager

If you’ve done any work with the Spring frameworks for Java programs, then you will know that one of the good things about Spring is that it hides a lot of the underlying operations from you. But equally, one of the bad things about Spring is that it hides a lot of the underlying operations from you. I noticed that I was getting several questions about what was happening under the covers from people using the MQ Spring Boot starter. This post shows how you can see what Spring is doing to a queue manager.

Continue reading “What did Spring do to my queue manager”

This post was last updated on May 4th, 2021 at 08:50 pm

Using Loki and Grafana with MQ logs

It is odd how often similar questions come at the same time from unrelated places. Because of the projects and articles I’ve written about visualising MQ’s metrics in Grafana, I recently had a couple of people asking about using that same front-end but able to work with log-file data. Specifically would it be possible to use Loki and Grafana together with MQ. My immediate reaction was that I didn’t know what Loki was in this context, but clearly they couldn’t be asking about a Norse god or Marvel character. Instead after a very short search and a few minutes reading, I guessed that it ought to be possible to use it. Which was my reply.

But of course, I’m not likely to leave it there when I learn about a new tool. Especially when I have a reasonable starting point like a working local Grafana setup. And so I have done some very quick experiments to prove that the approach really can work. On the way I’ll also take a brief digression into using logrotate.

Continue reading “Using Loki and Grafana with MQ logs”

This post was last updated on February 9th, 2021 at 02:37 pm

Formatting SMF records

One tool I created a few years ago deals with formatting SMF records from z/OS. I designed it to take MQ’s 115 and 116 records and generate output that users could import to spreadsheets and SQL databases. I made a video about the original version of the tool here, and I wrote about more enhancements to that tool in this post.

If you want to know more about how to use the data after formatting, then Lyn has a lot of posts at her blog site talking about analyses she has run and lessons she has learned.

Most recently I’ve added (with help) some formatting options to deal with a couple of additional record types. That work showed how non-standardised SMF records are, and how much manual work is needed to create formatters. This post will talk about how something that supposedly has a common format does not really.

Continue reading “Formatting SMF records”

This post was last updated on October 29th, 2020 at 10:19 am

Updates for MQ metric exporters

The MQ metric exporters are a set of Go programs that deliver queue manager statistics and status to databases such as Prometheus and Influx. They have recently been updated, giving more consistent function and a much easier configuration. This post will explore and explain these changes.

For an introduction to these exporters, see some of my earlier posts in this blog.

Continue reading “Updates for MQ metric exporters”

This post was last updated on November 27th, 2021 at 02:59 pm

A “major” update to the MQ Go package version

The Go language and toolchain did not have a good version control system when created. Systems built on Go could not easily define the levels of the dependencies underpinning the system. Various tools were developed to help with that such as dep and glide. But more recently, the Go compiler environment has defined modules as the way forward. The MQ Go packages are now available in a format that works with modules, with a major number version update to match. This post describes what has been done in the core MQ packages.

A separate post talks about changes in the mq-metric-samples repository that exploits these packages and enables monitoring in tools like Prometheus and Influx.

Continue reading “A “major” update to the MQ Go package version”

This post was last updated on June 4th, 2020 at 09:44 am