Skip to content

Commit 6b0cef0

Browse files
committed
Update for MQ 9.4.3.
See CHANGELOG for detailed info
1 parent 723c1a1 commit 6b0cef0

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

64 files changed

+2142
-320
lines changed

CHANGELOG.md

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,33 @@
11
# Changelog
22
Newest updates are at the top of this file.
33

4+
### Jun 18 2025 (v5.6.4)
5+
* Update to MQ 9.4.3
6+
* Add MQTT channel metrics, similar to AMQP
7+
* Changes from underlying mq-golang mqmetric package:
8+
* Add security_protocol metric for channels
9+
* Add sslciph label/tag for channels
10+
* Fail connection in preference to warning when unexpected error
11+
* Some versions don't support MQINQ(MQCA_VERSION) (#395)
12+
* Add startTime (epoch, milliseconds) for all channel types
13+
* Add active_service metric for qmgr
14+
* Increase recommended max qdepth on replyQ as there are now more potential queue subscriptions
15+
416
### Unreleased
517
* Fix boolean logic for `isFirstCollection` in `mq_prometheus (#385)`
618
* Ensure proper collection on the first poll and at regular intervals thereafter
719

820
### Feb 28 2025 (v5.6.2)
921
* Update to MQ 9.4.2
1022
* The "nhainstance" tag is renamed to "nha" to handle both instances and CRR groups
11-
* Any dashboards related to NativeHA metrics may need to be updated
23+
* Any dashboards related to NativeHA metrics may need to be updated
1224
* Prometheus Logging.json example dashboard includes Cross-region replication metrics
1325
* Add amqsevtg sample
1426

1527
### Nov 01 2024 (no new version)
1628
* Move all sample container builds to use UBI base images
1729
* And ensure appropriate level of Go compiler is available
18-
* Main "Dockerfile" has RDURL_ARG build-arg option to pull Redist client
30+
* Main "Dockerfile" has RDURL_ARG build-arg option to pull Redist client
1931
from an alternative location
2032

2133
### Oct 24 2024 (v5.6.1)

Dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ ARG EXPORTER
2222
ENV EXPORTER=${EXPORTER} \
2323
ORG="github.com/ibm-messaging" \
2424
REPO="mq-metric-samples" \
25-
VRMF=9.4.2.0 \
25+
VRMF=9.4.3.0 \
2626
CGO_CFLAGS="-I/opt/mqm/inc/" \
2727
CGO_LDFLAGS_ALLOW="-Wl,-rpath.*" \
2828
genmqpkg_incnls=1 \

Dockerfile.build

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ RUN mkdir -p $GOPATH/src $GOPATH/bin $GOPATH/pkg $GOPATH/out \
4545
# Location of the downloadable MQ client package \
4646
ENV RDURL="https://public.dhe.ibm.com/ibmdl/export/pub/software/websphere/messaging/mqdev/redist" \
4747
RDTAR="IBM-MQC-Redist-Linux${MQARCH}.tar.gz" \
48-
VRMF=9.4.2.0
48+
VRMF=9.4.3.0
4949

5050
# Install the MQ client from the Redistributable package. This also contains the
5151
# header files we need to compile against. Setup the subset of the package

Dockerfile.run

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ RUN microdnf install -y --disableplugin=subscription-manager curl tar gzip
3131
# Location of the downloadable MQ client package \
3232
ENV RDURL="https://public.dhe.ibm.com/ibmdl/export/pub/software/websphere/messaging/mqdev/redist" \
3333
RDTAR="IBM-MQC-Redist-Linux${MQARCH}.tar.gz" \
34-
VRMF=9.4.2.0
34+
VRMF=9.4.3.0
3535

3636
# Install the MQ client from the Redistributable package. This also contains the
3737
# header files we need to compile against. Setup the subset of the package

amqsevtg/go.mod

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
module github.com/ibm-messaging/mq-golang/samples/amqsevtg
22

3-
go 1.22.7
3+
go 1.23.0
4+
45
toolchain go1.24.1
56

67
require (
7-
github.com/ibm-messaging/mq-golang/v5 v5.6.2
8+
github.com/ibm-messaging/mq-golang/v5 v5.6.4
89
go.opentelemetry.io/contrib/bridges/otelslog v0.8.0
910
go.opentelemetry.io/otel v1.33.0
1011
go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.9.0

amqsevtg/go.sum

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@ github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
1515
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
1616
github.com/grpc-ecosystem/grpc-gateway/v2 v2.24.0 h1:TmHmbvxPmaegwhDubVz0lICL0J5Ka2vwTzhoePEXsGE=
1717
github.com/grpc-ecosystem/grpc-gateway/v2 v2.24.0/go.mod h1:qztMSjm835F2bXf+5HKAPIS5qsmQDqZna/PgVt4rWtI=
18-
github.com/ibm-messaging/mq-golang/v5 v5.6.2 h1:QYTyfmjwMCqQDbyee7ms8VthxvNNRkfq1xIp1epEYpo=
19-
github.com/ibm-messaging/mq-golang/v5 v5.6.2/go.mod h1:xCV0vl1+ik3VyWZnwAj++2J89vSTzhXP1gXhG0X3IYE=
18+
github.com/ibm-messaging/mq-golang/v5 v5.6.4 h1:C7b0xUCXc+urjeoFfPmMn5Dq7J/yD5Hanqx2xacsQd8=
19+
github.com/ibm-messaging/mq-golang/v5 v5.6.4/go.mod h1:xCV0vl1+ik3VyWZnwAj++2J89vSTzhXP1gXhG0X3IYE=
2020
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
2121
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
2222
github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA=

amqsevtg/go.work

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,6 @@ go 1.22.7
22

33
toolchain go1.22.10
44

5-
use ../amqsevtg
5+
use (
6+
../amqsevtg
7+
)

cmd/mq_aws/exporter.go

Lines changed: 51 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -191,6 +191,16 @@ func Collect() error {
191191
}
192192
}
193193

194+
if config.cf.MonitoredMQTTChannels != "" {
195+
err = mqmetric.CollectMQTTChannelStatus(config.cf.MonitoredMQTTChannels)
196+
if err != nil {
197+
log.Errorf("Error collecting MQTT status: %v", err)
198+
pollError = err
199+
} else {
200+
log.Debugf("Collected all MQTT status")
201+
}
202+
}
203+
194204
err = pollError
195205
}
196206

@@ -205,7 +215,10 @@ func Collect() error {
205215
lastQueueDiscovery = thisDiscovery
206216
//if err == nil {
207217
_ = mqmetric.RediscoverAttributes(ibmmq.MQOT_CHANNEL, config.cf.MonitoredChannels)
208-
err = mqmetric.RediscoverAttributes(mqmetric.OT_CHANNEL_AMQP, config.cf.MonitoredAMQPChannels)
218+
if mqmetric.GetPlatform() != ibmmq.MQPL_ZOS {
219+
err = mqmetric.RediscoverAttributes(mqmetric.OT_CHANNEL_AMQP, config.cf.MonitoredAMQPChannels)
220+
err = mqmetric.RediscoverAttributes(mqmetric.OT_CHANNEL_MQTT, config.cf.MonitoredMQTTChannels)
221+
}
209222

210223
//}
211224
}
@@ -306,6 +319,11 @@ func Collect() error {
306319
connName := mqmetric.GetObjectStatus("", mqmetric.OT_CHANNEL).Attributes[mqmetric.ATTR_CHL_CONNNAME].Values[key].ValueString
307320
jobName := mqmetric.GetObjectStatus("", mqmetric.OT_CHANNEL).Attributes[mqmetric.ATTR_CHL_JOBNAME].Values[key].ValueString
308321

322+
cipherSpec := mqmetric.DUMMY_STRING
323+
if cipherSpecAttr, ok := mqmetric.GetObjectStatus("", mqmetric.OT_CHANNEL).Attributes[mqmetric.ATTR_CHL_SSLCIPH].Values[key]; ok {
324+
cipherSpec = cipherSpecAttr.ValueString
325+
}
326+
309327
tags := map[string]string{
310328
"qmgr": config.cf.QMgrName,
311329
}
@@ -315,6 +333,8 @@ func Collect() error {
315333
tags[mqmetric.ATTR_CHL_RQMNAME] = strings.TrimSpace(rqmName)
316334
tags[mqmetric.ATTR_CHL_CONNNAME] = strings.TrimSpace(connName)
317335
tags[mqmetric.ATTR_CHL_JOBNAME] = strings.TrimSpace(jobName)
336+
tags[mqmetric.ATTR_CHL_SSLCIPH] = strings.TrimSpace(cipherSpec)
337+
318338
addMetaLabels(tags)
319339

320340
f := mqmetric.ChannelNormalise(attr, value.ValueInt64)
@@ -577,6 +597,36 @@ func Collect() error {
577597
}
578598
}
579599
}
600+
601+
series = "mqtt"
602+
for _, attr := range mqmetric.GetObjectStatus("", mqmetric.OT_CHANNEL_MQTT).Attributes {
603+
qMgrName := strings.TrimSpace(config.cf.QMgrName)
604+
605+
for key, value := range attr.Values {
606+
chlName := mqmetric.GetObjectStatus("", mqmetric.OT_CHANNEL_MQTT).Attributes[mqmetric.ATTR_CHL_NAME].Values[key].ValueString
607+
clientId := mqmetric.GetObjectStatus("", mqmetric.OT_CHANNEL_MQTT).Attributes[mqmetric.ATTR_CHL_MQTT_CLIENT_ID].Values[key].ValueString
608+
connName := mqmetric.GetObjectStatus("", mqmetric.OT_CHANNEL_MQTT).Attributes[mqmetric.ATTR_CHL_CONNNAME].Values[key].ValueString
609+
if value.IsInt64 && !attr.Pseudo {
610+
tags := map[string]string{
611+
"qmgr": qMgrName,
612+
"platform": platformString,
613+
}
614+
tags["channel"] = chlName
615+
tags["description"] = mqmetric.GetObjectDescription(chlName, mqmetric.OT_CHANNEL_MQTT)
616+
tags[mqmetric.ATTR_CHL_CONNNAME] = strings.TrimSpace(connName)
617+
tags[mqmetric.ATTR_CHL_MQTT_CLIENT_ID] = clientId
618+
addMetaLabels(tags)
619+
620+
f := mqmetric.ChannelNormalise(attr, value.ValueInt64)
621+
622+
pt, _ := newPoint(series+"."+attr.MetricName, t, float64(f), tags)
623+
bp.addPoint(pt)
624+
bp = c.Flush(bp)
625+
log.Debugf("Adding MQTT point %v", pt)
626+
627+
}
628+
}
629+
}
580630
}
581631

582632
forceFlush = true

cmd/mq_coll/exporter.go

Lines changed: 43 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,16 @@ func Collect() error {
153153
log.Debugf("Collected all AMQP status")
154154
}
155155
}
156+
157+
if config.cf.MonitoredMQTTChannels != "" {
158+
err = mqmetric.CollectMQTTChannelStatus(config.cf.MonitoredMQTTChannels)
159+
if err != nil {
160+
log.Errorf("Error collecting MQTT status: %v", err)
161+
pollError = err
162+
} else {
163+
log.Debugf("Collected all MQTT status")
164+
}
165+
}
156166
}
157167
err = pollError
158168
}
@@ -166,7 +176,8 @@ func Collect() error {
166176
_ = mqmetric.RediscoverAndSubscribe(discoverConfig)
167177
lastQueueDiscovery = thisDiscovery
168178
_ = mqmetric.RediscoverAttributes(ibmmq.MQOT_CHANNEL, config.cf.MonitoredChannels)
169-
err = mqmetric.RediscoverAttributes(mqmetric.OT_CHANNEL_AMQP, config.cf.MonitoredAMQPChannels)
179+
_ = mqmetric.RediscoverAttributes(mqmetric.OT_CHANNEL_AMQP, config.cf.MonitoredAMQPChannels)
180+
_ = mqmetric.RediscoverAttributes(mqmetric.OT_CHANNEL_MQTT, config.cf.MonitoredMQTTChannels)
170181

171182
}
172183
}
@@ -248,7 +259,10 @@ func Collect() error {
248259
chlName := mqmetric.GetObjectStatus("", mqmetric.OT_CHANNEL).Attributes[mqmetric.ATTR_CHL_NAME].Values[key].ValueString
249260
connName := mqmetric.GetObjectStatus("", mqmetric.OT_CHANNEL).Attributes[mqmetric.ATTR_CHL_CONNNAME].Values[key].ValueString
250261
jobName := mqmetric.GetObjectStatus("", mqmetric.OT_CHANNEL).Attributes[mqmetric.ATTR_CHL_JOBNAME].Values[key].ValueString
251-
262+
cipherSpec := mqmetric.DUMMY_STRING
263+
if cipherSpecAttr, ok := mqmetric.GetObjectStatus("", mqmetric.OT_CHANNEL).Attributes[mqmetric.ATTR_CHL_SSLCIPH].Values[key]; ok {
264+
cipherSpec = cipherSpecAttr.ValueString
265+
}
252266
tags := map[string]string{
253267
"qmgr": config.cf.QMgrName,
254268
}
@@ -258,6 +272,8 @@ func Collect() error {
258272
tags[mqmetric.ATTR_CHL_RQMNAME] = strings.TrimSpace(rqmName)
259273
tags[mqmetric.ATTR_CHL_CONNNAME] = strings.TrimSpace(connName)
260274
tags[mqmetric.ATTR_CHL_JOBNAME] = strings.TrimSpace(jobName)
275+
tags[mqmetric.ATTR_CHL_SSLCIPH] = strings.TrimSpace(cipherSpec)
276+
261277
addMetaLabels(tags)
262278

263279
f := mqmetric.ChannelNormalise(attr, value.ValueInt64)
@@ -467,6 +483,31 @@ func Collect() error {
467483
}
468484
}
469485
}
486+
487+
series = "mqtt"
488+
for _, attr := range mqmetric.GetObjectStatus("", mqmetric.OT_CHANNEL_MQTT).Attributes {
489+
qMgrName := strings.TrimSpace(config.cf.QMgrName)
490+
491+
for key, value := range attr.Values {
492+
chlName := mqmetric.GetObjectStatus("", mqmetric.OT_CHANNEL_MQTT).Attributes[mqmetric.ATTR_CHL_NAME].Values[key].ValueString
493+
clientId := mqmetric.GetObjectStatus("", mqmetric.OT_CHANNEL_MQTT).Attributes[mqmetric.ATTR_CHL_MQTT_CLIENT_ID].Values[key].ValueString
494+
connName := mqmetric.GetObjectStatus("", mqmetric.OT_CHANNEL_MQTT).Attributes[mqmetric.ATTR_CHL_CONNNAME].Values[key].ValueString
495+
if value.IsInt64 && !attr.Pseudo {
496+
tags := map[string]string{
497+
"qmgr": qMgrName,
498+
"platform": platformString,
499+
}
500+
tags["channel"] = chlName
501+
tags["description"] = mqmetric.GetObjectDescription(chlName, mqmetric.OT_CHANNEL_MQTT)
502+
tags[mqmetric.ATTR_CHL_CONNNAME] = strings.TrimSpace(connName)
503+
tags[mqmetric.ATTR_CHL_MQTT_CLIENT_ID] = clientId
504+
addMetaLabels(tags)
505+
506+
f := mqmetric.ChannelNormalise(attr, value.ValueInt64)
507+
printPoint(series, attr.MetricName, float32(f), tags)
508+
}
509+
}
510+
}
470511
}
471512
}
472513

cmd/mq_influx/exporter.go

Lines changed: 48 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,16 @@ func Collect(c client.Client) error {
158158
log.Debugf("Collected all AMQP status")
159159
}
160160
}
161+
162+
if config.cf.MonitoredMQTTChannels != "" {
163+
err = mqmetric.CollectMQTTChannelStatus(config.cf.MonitoredMQTTChannels)
164+
if err != nil {
165+
log.Errorf("Error collecting MQTT status: %v", err)
166+
pollError = err
167+
} else {
168+
log.Debugf("Collected all MQTT status")
169+
}
170+
}
161171
}
162172

163173
err = mqmetric.CollectQueueManagerStatus()
@@ -180,7 +190,8 @@ func Collect(c client.Client) error {
180190
_ = mqmetric.RediscoverAndSubscribe(discoverConfig)
181191
lastQueueDiscovery = thisDiscovery
182192
_ = mqmetric.RediscoverAttributes(ibmmq.MQOT_CHANNEL, config.cf.MonitoredChannels)
183-
err = mqmetric.RediscoverAttributes(mqmetric.OT_CHANNEL_AMQP, config.cf.MonitoredAMQPChannels)
193+
_ = mqmetric.RediscoverAttributes(mqmetric.OT_CHANNEL_AMQP, config.cf.MonitoredAMQPChannels)
194+
_ = mqmetric.RediscoverAttributes(mqmetric.OT_CHANNEL_MQTT, config.cf.MonitoredMQTTChannels)
184195

185196
}
186197
}
@@ -283,6 +294,10 @@ func Collect(c client.Client) error {
283294
connName := mqmetric.GetObjectStatus("", mqmetric.OT_CHANNEL).Attributes[mqmetric.ATTR_CHL_CONNNAME].Values[key].ValueString
284295
jobName := mqmetric.GetObjectStatus("", mqmetric.OT_CHANNEL).Attributes[mqmetric.ATTR_CHL_JOBNAME].Values[key].ValueString
285296

297+
cipherSpec := mqmetric.DUMMY_STRING
298+
if cipherSpecAttr, ok := mqmetric.GetObjectStatus("", mqmetric.OT_CHANNEL).Attributes[mqmetric.ATTR_CHL_SSLCIPH].Values[key]; ok {
299+
cipherSpec = cipherSpecAttr.ValueString
300+
}
286301
tags := map[string]string{
287302
"qmgr": config.cf.QMgrName,
288303
}
@@ -292,6 +307,8 @@ func Collect(c client.Client) error {
292307
tags[mqmetric.ATTR_CHL_RQMNAME] = strings.TrimSpace(rqmName)
293308
tags[mqmetric.ATTR_CHL_CONNNAME] = strings.TrimSpace(connName)
294309
tags[mqmetric.ATTR_CHL_JOBNAME] = strings.TrimSpace(jobName)
310+
tags[mqmetric.ATTR_CHL_SSLCIPH] = strings.TrimSpace(cipherSpec)
311+
295312
addMetaLabels(tags)
296313

297314
f := mqmetric.ChannelNormalise(attr, value.ValueInt64)
@@ -545,6 +562,36 @@ func Collect(c client.Client) error {
545562
}
546563
}
547564
}
565+
566+
series = "mqtt"
567+
for _, attr := range mqmetric.GetObjectStatus("", mqmetric.OT_CHANNEL_MQTT).Attributes {
568+
qMgrName := strings.TrimSpace(config.cf.QMgrName)
569+
570+
for key, value := range attr.Values {
571+
chlName := mqmetric.GetObjectStatus("", mqmetric.OT_CHANNEL_MQTT).Attributes[mqmetric.ATTR_CHL_NAME].Values[key].ValueString
572+
clientId := mqmetric.GetObjectStatus("", mqmetric.OT_CHANNEL_MQTT).Attributes[mqmetric.ATTR_CHL_MQTT_CLIENT_ID].Values[key].ValueString
573+
connName := mqmetric.GetObjectStatus("", mqmetric.OT_CHANNEL_MQTT).Attributes[mqmetric.ATTR_CHL_CONNNAME].Values[key].ValueString
574+
if value.IsInt64 && !attr.Pseudo {
575+
tags := map[string]string{
576+
"qmgr": qMgrName,
577+
"platform": platformString,
578+
}
579+
tags["channel"] = chlName
580+
tags["description"] = mqmetric.GetObjectDescription(chlName, mqmetric.OT_CHANNEL_MQTT)
581+
tags[mqmetric.ATTR_CHL_CONNNAME] = strings.TrimSpace(connName)
582+
tags[mqmetric.ATTR_CHL_MQTT_CLIENT_ID] = clientId
583+
addMetaLabels(tags)
584+
585+
f := mqmetric.ChannelNormalise(attr, value.ValueInt64)
586+
587+
fields := map[string]interface{}{attr.MetricName: f}
588+
589+
pt := client.NewPoint(series, tags, fields, t)
590+
bp.WritePoint(pt)
591+
log.Debugf("Adding pageset point %v", pt)
592+
}
593+
}
594+
}
548595
}
549596

550597
}

0 commit comments

Comments
 (0)