| 1 | # IBM MQ Monitoring Solutions: DevOps Evaluation Guide |
| 2 | |
| 3 | This guide evaluates IBM MQ monitoring capabilities across major monitoring platforms from a DevOps perspective. The analysis focuses on operational requirements, technology choices, and practical deployment considerations. |
| 4 | |
| 5 | ## Monitoring Solutions Evaluated |
| 6 | |
| 7 | 1. **Netdata** - Real-time performance monitoring |
| 8 | 2. **Datadog** - Cloud-based infrastructure monitoring |
| 9 | 3. **Dynatrace** - Application performance management |
| 10 | 4. **Splunk** - Data platform with monitoring capabilities |
| 11 | 5. **Grafana** - Visualization platform (using Prometheus exporter) |
| 12 | 6. **Zabbix** - Open source enterprise monitoring |
| 13 | 7. **Nagios** - Infrastructure monitoring and alerting system |
| 14 | 8. **CheckMK** - Infrastructure monitoring and alerting platform |
| 15 | |
| 16 | ### Solution Abbreviations |
| 17 | For table readability, the following abbreviations are used: |
| 18 | - **ND** = Netdata |
| 19 | - **DD** = Datadog |
| 20 | - **DT** = Dynatrace |
| 21 | - **SP** = Splunk |
| 22 | - **GR** = Grafana |
| 23 | - **ZB** = Zabbix |
| 24 | - **NG** = Nagios |
| 25 | - **CM** = CheckMK |
| 26 | |
| 27 | ## Queue Manager Level Monitoring |
| 28 | |
| 29 | ### Basic Operational Status |
| 30 | **Cardinality**: 1 metric set per queue manager |
| 31 | **Technology**: PCF MQCMD_INQUIRE_Q_MGR or process monitoring |
| 32 | **Authority Required**: +connect +inq on queue manager |
| 33 | **Configuration**: None |
| 34 | **Value**: Fundamental availability monitoring |
| 35 | |
| 36 | | Metric | ND | DD | DT | SP | GR | ZB | NG | CM | PCF Constant | |
| 37 | |--------|---------|---------|-----------|--------|---------|--------|--------|---------|--------------| |
| 38 | | Status | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | MQIA_Q_MGR_STATUS | |
| 39 | | Connection count | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | MQIA_CONNECTION_COUNT | |
| 40 | | Command level | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | MQIA_COMMAND_LEVEL | |
| 41 | | Platform | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | MQIA_PLATFORM | |
| 42 | | Uptime | ✅ | ❌ | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ | Calculated | |
| 43 | | Active channels | ❌ | ✅¹ | ✅ | ✅ | ❌ | ❌ | ✅ | ❌ | From channel count | |
| 44 | | Active listeners | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | MQIA_ACTIVE_LISTENERS | |
| 45 | | Publish to sub msgs | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | $SYS topics | |
| 46 | | Expired msg count | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | $SYS topics | |
| 47 | |
| 48 | ¹Via channel.channels metric |
| 49 | |
| 50 | ### Resource Utilization |
| 51 | **Cardinality**: 1 metric set per queue manager |
| 52 | **Technology**: $SYS topic subscriptions (Grafana/Prometheus) or REST API |
| 53 | **Authority Required**: +sub on $SYS topics or REST API access |
| 54 | **Configuration**: Monitor topics must be enabled (MONINT > 0) |
| 55 | **Value**: Capacity planning, performance troubleshooting |
| 56 | |
| 57 | | Metric | ND | DD | DT | SP | GR | ZB | NG | CM | Collection Method | |
| 58 | |--------|---------|---------|-----------|--------|---------|--------|--------|---------|-------------------| |
| 59 | | CPU usage | ✅* | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | $SYS topics | |
| 60 | | Memory usage | ✅* | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | $SYS topics | |
| 61 | | Log write latency | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | $SYS topics | |
| 62 | | File system usage | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | $SYS topics | |
| 63 | | Log bytes used | ✅* | ❌ | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ | See log utilization | |
| 64 | | Transaction counts | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | $SYS topics | |
| 65 | |
| 66 | *Framework implemented, requires MQ 9.0+ with MONINT configured and attribute ID mapping |
| 67 | |
| 68 | ### Queue Manager Log Utilization |
| 69 | **Cardinality**: 1 metric set per queue manager |
| 70 | **Technology**: PCF commands |
| 71 | **Authority Required**: +inq on queue manager |
| 72 | **Configuration**: None |
| 73 | **Value**: Log space monitoring and capacity planning |
| 74 | |
| 75 | | Metric | ND | DD | DT | SP | GR | ZB | NG | CM | Description | |
| 76 | |--------|---------|---------|-----------|--------|---------|--------|--------|---------|-------------| |
| 77 | | Log utilization % | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | 6 metrics for log usage | |
| 78 | |
| 79 | ### Advanced Queue Manager Attributes |
| 80 | **Cardinality**: 1 metric set per queue manager |
| 81 | **Technology**: PCF MQCMD_INQUIRE_Q_MGR |
| 82 | **Authority Required**: +connect +inq on queue manager |
| 83 | **Configuration**: None |
| 84 | **Value**: Configuration tracking and compliance |
| 85 | |
| 86 | | Metric | ND | DD | DT | SP | GR | ZB | NG | CM | PCF Constant | |
| 87 | |--------|---------|---------|-----------|--------|---------|--------|--------|---------|--------------| |
| 88 | | Distribution lists | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | MQIA_DIST_LISTS | |
| 89 | | Max message length | ❌ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | MQIA_MAX_MSG_LENGTH | |
| 90 | | Max channels | ❌ | ❌ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | MQIA_MAX_CHANNELS | |
| 91 | | Active channels | ❌ | ❌ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | MQIA_ACTIVE_CHANNELS | |
| 92 | |
| 93 | ## Queue Level Monitoring |
| 94 | |
| 95 | ### Queue Configuration Attributes |
| 96 | **Cardinality**: 1 metric set per queue (potentially thousands) |
| 97 | **Technology**: PCF MQCMD_INQUIRE_Q |
| 98 | **Authority Required**: +inq on queues |
| 99 | **Configuration**: None |
| 100 | **Value**: Configuration compliance, capacity planning |
| 101 | |
| 102 | | Metric | ND | DD | DT | SP | GR | ZB | NG | CM | PCF Constant | |
| 103 | |--------|---------|---------|-----------|--------|---------|--------|--------|---------|--------------| |
| 104 | | Max depth | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | MQIA_MAX_Q_DEPTH | |
| 105 | | Inhibit get/put | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | MQIA_INHIBIT_GET/PUT | |
| 106 | | Backout threshold | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | MQIA_BACKOUT_THRESHOLD | |
| 107 | | Trigger settings | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | MQIA_TRIGGER_* | |
| 108 | | Service interval | ✅ | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | MQIA_Q_SERVICE_INTERVAL | |
| 109 | | Input open option | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | MQIA_DEF_INPUT_OPEN_OPTION | |
| 110 | | Depth event config | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | MQIA_Q_DEPTH_*_EVENT | |
| 111 | |
| 112 | ### Queue Runtime Status |
| 113 | **Cardinality**: 1 metric set per queue |
| 114 | **Technology**: PCF MQCMD_INQUIRE_Q_STATUS |
| 115 | **Authority Required**: +inq on queues |
| 116 | **Configuration**: None |
| 117 | **Value**: Real-time operational monitoring |
| 118 | |
| 119 | | Metric | ND | DD | DT | SP | GR | ZB | NG | CM | PCF Constant | |
| 120 | |--------|---------|---------|-----------|--------|---------|--------|--------|---------|--------------| |
| 121 | | Current depth | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | MQIA_CURRENT_Q_DEPTH | |
| 122 | | Depth percentage | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | Calculated | |
| 123 | | Open input count | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | MQIA_OPEN_INPUT_COUNT | |
| 124 | | Open output count | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | MQIA_OPEN_OUTPUT_COUNT | |
| 125 | | Oldest message age | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | MQIACF_OLDEST_MSG_AGE | |
| 126 | | Queue file size | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | MQIACF_CUR_Q_FILE_SIZE² | |
| 127 | | Uncommitted msgs | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | MQIACF_UNCOMMITTED_MSGS | |
| 128 | | Last GET time | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | Time since last GET | |
| 129 | | Last PUT time | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | Time since last PUT | |
| 130 | |
| 131 | ²Requires MQ 9.1.5+ |
| 132 | |
| 133 | ### Queue Activity Rates (Destructive Operation) |
| 134 | **Cardinality**: 1 metric set per queue |
| 135 | **Technology**: PCF MQCMD_RESET_Q_STATS |
| 136 | **Authority Required**: +chg on queues |
| 137 | **Configuration**: MONQ(MEDIUM) or MONQ(HIGH) |
| 138 | **Value**: Throughput monitoring |
| 139 | **Warning**: Resets counters after reading |
| 140 | |
| 141 | | Metric | ND | DD | DT | SP | GR | ZB | NG | CM | PCF Constant | |
| 142 | |--------|---------|---------|-----------|--------|---------|--------|--------|---------|--------------| |
| 143 | | Enqueue rate | ✅³ | ✅³ | ❌ | ✅ | ✅ | ❌ | ❌ | ❌ | MQIA_MSG_ENQ_COUNT | |
| 144 | | Dequeue rate | ✅³ | ✅³ | ❌ | ✅ | ✅ | ❌ | ❌ | ❌ | MQIA_MSG_DEQ_COUNT | |
| 145 | | High depth | ✅³ | ✅³ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | MQIA_HIGH_Q_DEPTH | |
| 146 | |
| 147 | ³Disabled by default due to destructive nature |
| 148 | |
| 149 | ### Queue MQI Statistics (Non-Intrusive) |
| 150 | **Cardinality**: 1 metric set per queue |
| 151 | **Technology**: SYSTEM.ADMIN.STATISTICS.QUEUE subscription |
| 152 | **Authority Required**: +get on SYSTEM.ADMIN.STATISTICS.QUEUE |
| 153 | **Configuration**: STATQ(ON) on queue manager |
| 154 | **Value**: Detailed application behavior analysis |
| 155 | |
| 156 | | Metric | ND | DD | DT | SP | GR | ZB | NG | CM | Description | |
| 157 | |--------|---------|---------|-----------|--------|---------|--------|--------|---------|-------------| |
| 158 | | Get operations | ✅ | ✅⁴ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | MQGET count/bytes | |
| 159 | | Put operations | ✅ | ✅⁴ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | MQPUT count/bytes | |
| 160 | | Put1 operations | ✅ | ✅⁴ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | MQPUT1 count | |
| 161 | | Get/Put failures | ✅ | ✅⁴ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | Failed operations | |
| 162 | | Browse operations | ✅ | ✅⁴ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | Browse count/bytes | |
| 163 | | Open/Close ops | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | MQOPEN/MQCLOSE | |
| 164 | | Expired messages | ✅ | ✅⁴ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | Expiration count | |
| 165 | | Purged messages | ✅ | ✅⁴ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | Purge count | |
| 166 | | Non-queued msgs | ✅ | ✅⁴ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | Direct transfers | |
| 167 | | Min/Max depth | ✅ | ✅⁴ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | Queue depth range | |
| 168 | | Avg queue time | ✅ | ✅⁴ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | Message latency | |
| 169 | |
| 170 | ⁴Optional feature, disabled by default (collect_statistics_metrics) |
| 171 | |
| 172 | ### Dead Letter Queue Handling |
| 173 | **Cardinality**: Backout attributes per queue |
| 174 | **Technology**: MQCMD_INQUIRE_Q (configuration attributes) |
| 175 | **Authority Required**: +inq on queues |
| 176 | **Configuration**: Backout requeue name must be configured |
| 177 | **Value**: Message poison prevention and failure handling |
| 178 | **Note**: No solution provides special DLQ monitoring beyond standard queue metrics |
| 179 | |
| 180 | | Metric | ND | DD | DT | SP | GR | ZB | NG | CM | PCF Constant | |
| 181 | |--------|----|----|----|----|----|----|----|----|--------------| |
| 182 | | Backout threshold | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | MQIA_BACKOUT_THRESHOLD | |
| 183 | | Harden get backout | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | MQIA_HARDEN_GET_BACKOUT | |
| 184 | | MQDLH parsing | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | Reason code extraction | |
| 185 | | DLQ auto-detection | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | Special queue handling | |
| 186 | | Source queue tracking | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | From MQDLH header | |
| 187 | |
| 188 | ## Channel Level Monitoring |
| 189 | |
| 190 | ### Channel Configuration |
| 191 | **Cardinality**: 1 metric set per channel (tens to hundreds) |
| 192 | **Technology**: PCF MQCMD_INQUIRE_CHANNEL |
| 193 | **Authority Required**: +inq on channels |
| 194 | **Configuration**: None |
| 195 | **Value**: Configuration compliance and tuning |
| 196 | |
| 197 | | Metric | ND | DD | DT | SP | GR | ZB | NG | CM | PCF Constant | |
| 198 | |--------|---------|---------|-----------|--------|---------|--------|--------|---------|--------------| |
| 199 | | Batch size | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | MQIACH_BATCH_SIZE | |
| 200 | | Batch interval | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | MQIACH_BATCH_INTERVAL | |
| 201 | | Heartbeat interval | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | MQIACH_HB_INTERVAL | |
| 202 | | Max message length | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | MQIACH_MAX_MSG_LENGTH | |
| 203 | | Retry settings | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | MQIACH_*_RETRY | |
| 204 | | NPM speed | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | MQIACH_NPM_SPEED | |
| 205 | | Sharing conversations | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | MQIACH_SHARING_CONVERSATIONS | |
| 206 | |
| 207 | ### Channel Runtime Status |
| 208 | **Cardinality**: 1 metric set per running channel |
| 209 | **Technology**: PCF MQCMD_INQUIRE_CHANNEL_STATUS |
| 210 | **Authority Required**: +inq on channels |
| 211 | **Configuration**: None for basic; MONCHL(MEDIUM/HIGH) for detailed |
| 212 | **Value**: Connection health and performance monitoring |
| 213 | |
| 214 | | Metric | ND | DD | DT | SP | GR | ZB | NG | CM | PCF Constant | |
| 215 | |--------|---------|---------|-----------|--------|---------|--------|--------|---------|--------------| |
| 216 | | Status | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | MQIACH_CHANNEL_STATUS | |
| 217 | | Status summary | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | Aggregated by status | |
| 218 | | Messages | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | MQIACH_MSGS | |
| 219 | | Bytes sent/rcvd | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | MQIACH_BYTES_* | |
| 220 | | Batches | ✅ | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | MQIACH_BATCHES | |
| 221 | | Current convs | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | Sharing conversations | |
| 222 | | SSL key resets | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | MQIACH_SSL_KEY_RESETS | |
| 223 | | Connection status | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | MQIACH_CONNS | |
| 224 | | Active connections | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | Channel instances | |
| 225 | | Channel instances | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | 3 instance metrics | |
| 226 | | In-doubt status | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | MQIACH_INDOUBT_STATUS | |
| 227 | | XMITQ time short | ✅ | ❌ | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ | MQIACH_XMITQ_TIME_SHORT | |
| 228 | | XMITQ time long | ✅ | ❌ | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ | MQIACH_XMITQ_TIME_LONG | |
| 229 | | Network time | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | Channel timing metrics | |
| 230 | | Exit time | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | Channel timing metrics | |
| 231 | | Total time | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | Channel timing metrics | |
| 232 | |
| 233 | ### Channel Statistics (Non-Intrusive) |
| 234 | **Cardinality**: 1 metric set per channel |
| 235 | **Technology**: SYSTEM.ADMIN.STATISTICS.QUEUE subscription |
| 236 | **Authority Required**: +get on SYSTEM.ADMIN.STATISTICS.QUEUE |
| 237 | **Configuration**: STATQ(ON) and STATCHL(MEDIUM/HIGH) |
| 238 | **Value**: Detailed performance analysis |
| 239 | |
| 240 | | Metric | ND | DD | DT | SP | GR | ZB | NG | CM | Description | |
| 241 | |--------|---------|---------|-----------|--------|---------|--------|--------|---------|-------------| |
| 242 | | Messages/Bytes | ✅ | ✅⁴ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | Transfer metrics | |
| 243 | | Put retries | ✅ | ✅⁴ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | Retry counts | |
| 244 | | Batch metrics | ✅ | ✅⁴ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | Full/partial batches | |
| 245 | |
| 246 | ⁴Optional feature, disabled by default |
| 247 | |
| 248 | ## Topic and Subscription Monitoring |
| 249 | |
| 250 | ### Topic Status |
| 251 | **Cardinality**: 1 metric set per topic |
| 252 | **Technology**: PCF MQCMD_INQUIRE_TOPIC_STATUS |
| 253 | **Authority Required**: +inq on topics |
| 254 | **Configuration**: Pub/Sub enabled |
| 255 | **Value**: Pub/Sub health monitoring |
| 256 | |
| 257 | | Metric | ND | DD | DT | SP | GR | ZB | NG | CM | PCF Constant | |
| 258 | |--------|---------|---------|-----------|--------|---------|--------|--------|---------|--------------| |
| 259 | | Publisher count | ✅ | ⚠️ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | MQIA_PUB_COUNT | |
| 260 | | Subscriber count | ✅ | ⚠️ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | MQIA_SUB_COUNT | |
| 261 | | Published msgs | ✅ | ⚠️ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | Via status | |
| 262 | |
| 263 | ⚠️ Documentation claims support but no implementation found |
| 264 | |
| 265 | ### Subscription Status |
| 266 | **Cardinality**: 1 metric set per subscription (can be very high) |
| 267 | **Technology**: PCF MQCMD_INQUIRE_SUB_STATUS |
| 268 | **Authority Required**: +inq on subscriptions |
| 269 | **Configuration**: Pub/Sub enabled |
| 270 | **Value**: Subscription health and message backlog monitoring |
| 271 | |
| 272 | | Metric | ND | DD | DT | SP | GR | ZB | NG | CM | PCF Constant | |
| 273 | |--------|---------|---------|-----------|--------|---------|--------|--------|---------|--------------| |
| 274 | | Message count | ✅ | ⚠️ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | MQIACF_MESSAGE_COUNT | |
| 275 | | Last message time | ✅ | ⚠️ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | MQCACF_LAST_MSG_TIME | |
| 276 | |
| 277 | ⚠️ Documentation claims support but no implementation found |
| 278 | |
| 279 | ## Event Monitoring |
| 280 | |
| 281 | ### Event Queue Subscriptions |
| 282 | **Cardinality**: Events as they occur |
| 283 | **Technology**: Subscribe to SYSTEM.ADMIN.*.EVENT queues |
| 284 | **Authority Required**: +get on event queues |
| 285 | **Configuration**: Enable specific event types on queue manager |
| 286 | **Value**: Real-time alerting for security and operational events |
| 287 | |
| 288 | | Event Type | ND | DD | DT | SP | GR | ZB | NG | CM | Event Queue | |
| 289 | |------------|---------|---------|-----------|--------|---------|--------|--------|---------|-------------| |
| 290 | | Authority failures | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | QMGR.EVENT | |
| 291 | | Queue depth events | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | QMGR.EVENT | |
| 292 | | Channel events | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | CHANNEL.EVENT | |
| 293 | | Performance events | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | PERFM.EVENT | |
| 294 | |
| 295 | ## Listener Monitoring |
| 296 | |
| 297 | ### Listener Status |
| 298 | **Cardinality**: 1 metric set per listener (typically 1-5) |
| 299 | **Technology**: PCF MQCMD_INQUIRE_LISTENER_STATUS |
| 300 | **Authority Required**: +inq on listeners |
| 301 | **Configuration**: None |
| 302 | **Value**: Network endpoint availability |
| 303 | |
| 304 | | Metric | ND | DD | DT | SP | GR | ZB | NG | CM | |
| 305 | |--------|---------|---------|-----------|--------|---------|--------|--------|---------| |
| 306 | | Status | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | |
| 307 | | Port/IP | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | |
| 308 | | Backlog | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | |
| 309 | |
| 310 | ## z/OS Specific Monitoring |
| 311 | |
| 312 | ### z/OS Usage Metrics |
| 313 | **Cardinality**: 1 metric set per queue manager |
| 314 | **Technology**: z/OS specific PCF commands |
| 315 | **Authority Required**: +inq on queue manager |
| 316 | **Configuration**: z/OS platform only |
| 317 | **Value**: z/OS resource usage and performance |
| 318 | |
| 319 | | Metric | ND | DD | DT | SP | GR | ZB | NG | CM | Description | |
| 320 | |--------|---------|---------|-----------|--------|---------|--------|--------|---------|-------------| |
| 321 | | z/OS CPU usage | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | 8 z/OS metrics | |
| 322 | | z/OS memory usage | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | z/OS specific | |
| 323 | | z/OS paging | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | z/OS specific | |
| 324 | |
| 325 | ## Cluster Monitoring |
| 326 | |
| 327 | ### Cluster Queue Manager Status |
| 328 | **Cardinality**: 1 metric set per cluster queue manager |
| 329 | **Technology**: PCF MQCMD_INQUIRE_CLUSTER_Q_MGR |
| 330 | **Authority Required**: +inq on cluster |
| 331 | **Configuration**: Cluster must be configured |
| 332 | **Value**: Cluster health and topology monitoring |
| 333 | |
| 334 | | Metric | ND | DD | DT | SP | GR | ZB | NG | CM | |
| 335 | |--------|---------|---------|-----------|--------|---------|--------|--------|---------| |
| 336 | | Cluster suspend state | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | |
| 337 | | Cluster QM status | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | |
| 338 | | Cluster QM availability | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | |
| 339 | |
| 340 | ## Auto-Discovery and Configuration Management |
| 341 | |
| 342 | ### MQ Server Discovery and Instance Management |
| 343 | **Technology**: Various (network discovery, configuration files, API calls) |
| 344 | **Value**: Automated setup and dynamic environment adaptation |
| 345 | |
| 346 | | Capability | ND | DD | DT | SP | GR | ZB | NG | CM | Description | |
| 347 | |------------|----|----|----|----|----|----|----|----|-------------| |
| 348 | | Auto-discover MQ servers | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | Network discovery of MQ installations | |
| 349 | | Monitor all auto-discovered Queue Managers | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | Monitor all QMs found via discovery | |
| 350 | | Monitor specific Queue Managers | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | Target specific QM instances | |
| 351 | | Monitor all auto-discovered Queues | ✅ | ✅⁶ | ❌ | ✅ | ✅ | ✅⁷ | ❌ | ✅ | Auto-discover and monitor all queues | |
| 352 | | Monitor specific Queues | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | Target specific queue instances | |
| 353 | | Monitor all auto-discovered Channels | ✅ | ✅⁶ | ❌ | ✅ | ✅ | ✅⁷ | ❌ | ✅ | Auto-discover and monitor all channels | |
| 354 | | Monitor specific Channels | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | Target specific channel instances | |
| 355 | | Monitor all auto-discovered Listeners | ✅ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | Auto-discover and monitor all listeners | |
| 356 | | Monitor specific Listeners | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | Target specific listener instances | |
| 357 | | Monitor all auto-discovered Topics | ✅ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | Auto-discover and monitor all topics | |
| 358 | | Monitor specific Topics | ✅ | ⚠️ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | Target specific topic instances | |
| 359 | | Monitor all auto-discovered Subscriptions | ✅ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | Auto-discover and monitor all subscriptions | |
| 360 | | Monitor specific Subscriptions | ✅ | ⚠️ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | Target specific subscription instances | |
| 361 | |
| 362 | ⁶Datadog: `auto_discover_queues` with `queue_patterns`/`queue_regex` filtering |
| 363 | ⁷Zabbix: Custom auto-discovery templates (e.g., spectroman/ibm-mq-monitoring) |
| 364 | |
| 365 | ### Configuration Management Approaches |
| 366 | |
| 367 | **Netdata**: Network discovery of MQ servers, but requires explicit configuration per queue manager. Supports regex-based filtering for all object types within configured queue managers. |
| 368 | |
| 369 | **Datadog**: Manual server configuration, automatic queue/channel discovery with `auto_discover_queues`, `queue_patterns`, and `queue_regex` for performance optimization. No topic/subscription auto-discovery. |
| 370 | |
| 371 | **Dynatrace**: Automatic IBM MQ process detection via OneAgent, bulk inquiry options, regex-based queue manager filtering. Manual configuration for queue/channel specifics. |
| 372 | |
| 373 | **Splunk**: Manual configuration with IBM WebSphere MQ Modular Input. Supports multiple queues/channels per data input with regex filtering. |
| 374 | |
| 375 | **Grafana/Prometheus**: Manual server configuration, regex-based filtering for `<queues>`, `<channels>`, `<topics>`, `<subscriptions>` in mq_prometheus exporter configuration. |
| 376 | |
| 377 | **Zabbix**: Manual setup with third-party auto-discovery templates (spectroman/ibm-mq-monitoring) that dynamically create templates for discovered queue managers and objects. |
| 378 | |
| 379 | **Nagios**: Manual configuration per check, supports multiple queues per check with configuration files. Advanced plugins support regex filtering for queue discovery. |
| 380 | |
| 381 | **CheckMK**: Uses `dspmq` command output for queue manager discovery. Manual configuration for queue-specific monitoring. Limited auto-discovery capabilities. |
| 382 | |
| 383 | ## Collection Characteristics |
| 384 | |
| 385 | ### Update Frequency |
| 386 | | Solution | Minimum | Typical | Maximum | Architecture | |
| 387 | |----------|---------|---------|---------|--------------| |
| 388 | | ND | 1s | 1s | 60s | Edge (per-node) | |
| 389 | | DD | 15s | 15-30s | 300s | Centralized agent | |
| 390 | | DT | 60s | 60s | 300s | Centralized agent | |
| 391 | | SP | 10s | 60s | 300s | Centralized | |
| 392 | | GR | 15s | 30-60s | 300s | Pull-based | |
| 393 | | ZB | 30s | 60-300s | 3600s | Centralized | |
| 394 | | NG | 60s | 300s | 3600s | Centralized | |
| 395 | | CM | 60s | 60-300s | 3600s | Centralized | |
| 396 | |
| 397 | ### Platform Support |
| 398 | | Solution | Collector Platform | Remote Support | Architecture | |
| 399 | |----------|-------------------|----------------|--------------| |
| 400 | | ND | Linux, Windows, macOS | ✅ Client mode | CGO-based | |
| 401 | | DD | Linux, Windows, macOS | ✅ Client mode | Python pymqi | |
| 402 | | DT | Cross-platform | ✅ OneAgent | Proprietary | |
| 403 | | SP | Cross-platform | ✅ Client mode | Java-based | |
| 404 | | GR | Linux, Windows, AIX | ✅ Client mode | Go client | |
| 405 | | ZB | Linux only | ❌ Local only | Shell scripts | |
| 406 | | NG | Linux, Unix, Windows | ✅ Client mode | Shell/Perl scripts | |
| 407 | | CM | Linux, Solaris, AIX, HPUX | ✅ Client mode | password-less root ssh | |
| 408 | |
| 409 | ## Key Technical Differentiators |
| 410 | |
| 411 | **Netdata**: Highest resolution (1s), complete MQI statistics implementation, Linux-only collector |
| 412 | |
| 413 | **Datadog**: Python-based flexibility, endianness handling for AIX/IBM i, significant gap between documentation and implementation |
| 414 | |
| 415 | **Dynatrace**: Commercial APM integration, z/OS specific metrics, channel timing analysis, topology mapping for transaction tracing |
| 416 | |
| 417 | **Splunk**: Event queue monitoring capability, Java-based cross-platform support |
| 418 | |
| 419 | **Grafana/Prometheus**: $SYS topic subscriptions for resource metrics, multiple export formats, comprehensive z/OS support, cluster monitoring |
| 420 | |
| 421 | **Zabbix**: Local monitoring only, requires sudo access, minimal metric coverage |
| 422 | |
| 423 | **Nagios**: Basic health checks focused on availability monitoring, simple alerting model with command-based checks. Supports queue manager status (qmmon), queue depth (qdmon), channel status (chlmon), message age (mamon), port monitoring (portmon/portcon), process monitoring (brkmon/cmdmon), and log monitoring (fdcmon/refmon) functions |
| 424 | |
| 425 | **CheckMK**: Command-line tool based monitoring using native MQ utilities (dspmq, runmqsc). Supports queue manager availability monitoring, basic queue metrics (depth, message age, last GET/PUT times, open counts, queue time), and channel status monitoring with CRITICAL alerts for STOPPED channels. Limited to metrics available through standard MQ command-line tools. |
| 426 | |
| 427 | ## Service Health Checks |
| 428 | |
| 429 | **Technology**: Various (connection tests, PCF queries, process checks) |
| 430 | **Value**: Proactive alerting and availability monitoring |
| 431 | |
| 432 | | Check Type | ND | DD | DT | SP | GR | ZB | NG | CM | Description | |
| 433 | |------------|---------|---------|-----------|--------|---------|--------|--------|---------|-------------| |
| 434 | | Connection check | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | Can connect to QM | |
| 435 | | Queue manager check | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | QM responding | |
| 436 | | Queue availability | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | Queue accessible | |
| 437 | | Channel health | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | Channel status check | |
| 438 | | Channel status alerts | ❌ | ✅⁵ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | Status-based alerts | |
| 439 | |
| 440 | ⁵Datadog provides specific service checks with WARNING/CRITICAL based on channel state |
| 441 | |
| 442 | ## Operational Considerations |
| 443 | |
| 444 | 1. **Authority Requirements**: All solutions require similar MQ authorities. Event monitoring requires additional permissions. Datadog requires +chg for reset statistics. |
| 445 | |
| 446 | 2. **Configuration Impact**: Statistics collection (STATQ) has minimal performance impact. Reset operations are destructive. |
| 447 | |
| 448 | 3. **Cardinality Management**: Queue and subscription metrics can create high cardinality. Plan retention accordingly. |
| 449 | |
| 450 | 4. **Platform Limitations**: Only Dynatrace, Splunk, and Grafana offer true cross-platform collectors. |
| 451 | |
| 452 | 5. **Resolution vs Volume**: Higher resolution (Netdata) provides better anomaly detection but increases storage requirements. |
| 453 | |
| 454 | 6. **Endianness**: Datadog provides convert_endianness option for AIX/IBM i platforms. |
| 455 | |
| 456 | 7. **$SYS Topics**: Grafana/Prometheus requires MONINT > 0 on queue manager to enable $SYS topic publications for resource metrics. |