diff --git a/.gitignore b/.gitignore index d68c86c04..1a57d51f0 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ vendor jsonnetfile.lock.json *.zip +.worktrees diff --git a/ibm-mq-mixin/.lint b/ibm-mq-mixin/.lint index be5483574..3e3da4c7e 100644 --- a/ibm-mq-mixin/.lint +++ b/ibm-mq-mixin/.lint @@ -20,6 +20,8 @@ exclusions: - panel: "Queue operations" - panel: "Operations" - panel: "Depth" + panel-datasource-rule: + reason: "Panels using signal-based targets with multiple queries may show '-- Mixed --' datasource, which is expected for panels with multi-datasource support" template-datasource-rule: reason: "Based on new convention we are using variable names prometheus_datasource and loki_datasource where as linter expects 'datasource'" template-instance-rule: diff --git a/ibm-mq-mixin/alerts.libsonnet b/ibm-mq-mixin/alerts.libsonnet new file mode 100644 index 000000000..2369396a1 --- /dev/null +++ b/ibm-mq-mixin/alerts.libsonnet @@ -0,0 +1,79 @@ +{ + new(this): { + groups: [ + { + name: this.config.uid + '-alerts', + rules: [ + { + alert: 'IBMMQExpiredMessages', + expr: ||| + sum without (description,hostname,instance,job,platform) (ibmmq_qmgr_expired_message_count) > %(alertsExpiredMessages)s + ||| % this.config, + 'for': '5m', + labels: { + severity: 'critical', + }, + annotations: { + summary: 'There are expired messages, which imply that application resilience is failing.', + description: + ( + 'The number of expired messages in the {{$labels.qmgr}} is {{$value}} which is above the threshold of %(alertsExpiredMessages)s.' + ) % this.config, + }, + }, + { + alert: 'IBMMQStaleMessages', + expr: ||| + sum without (description,instance,job,platform) (ibmmq_queue_oldest_message_age) >= %(alertsStaleMessagesSeconds)s + ||| % this.config, + 'for': '5m', + labels: { + severity: 'warning', + }, + annotations: { + summary: 'Stale messages have been detected.', + description: + ( + 'A stale message with an age of {{$value}} has been sitting in the {{$labels.queue}} which is above the threshold of %(alertsStaleMessagesSeconds)s seconds.' + ) % this.config, + }, + }, + { + alert: 'IBMMQLowDiskSpace', + expr: ||| + sum without (description,hostname,instance,job,platform) (ibmmq_qmgr_queue_manager_file_system_free_space_percentage) <= %(alertsLowDiskSpace)s + ||| % this.config, + 'for': '5m', + labels: { + severity: 'critical', + }, + annotations: { + summary: 'There is limited disk available for a queue manager.', + description: + ( + 'The amount of disk space available for {{$labels.qmgr}} is at {{$value}}%% which is below the threshold of %(alertsLowDiskSpace)s%%.' + ) % this.config, + }, + }, + { + alert: 'IBMMQHighQMgrCpuUsage', + expr: ||| + sum without (description,hostname,instance,job,platform) (ibmmq_qmgr_user_cpu_time_estimate_for_queue_manager_percentage) >= %(alertsHighQueueManagerCpuUsage)s + ||| % this.config, + 'for': '5m', + labels: { + severity: 'critical', + }, + annotations: { + summary: 'There is a high CPU usage estimate for a queue manager.', + description: + ( + 'The amount of CPU usage for the queue manager {{$labels.qmgr}} is at {{$value}}%% which is above the threshold of %(alertsHighQueueManagerCpuUsage)s%%.' + ) % this.config, + }, + }, + ], + }, + ], + }, +} diff --git a/ibm-mq-mixin/config.libsonnet b/ibm-mq-mixin/config.libsonnet index 5df979e07..a790b5395 100644 --- a/ibm-mq-mixin/config.libsonnet +++ b/ibm-mq-mixin/config.libsonnet @@ -1,20 +1,46 @@ { - _config+:: { - enableMultiCluster: false, - ibmmqSelector: if self.enableMultiCluster then 'job=~"$job", cluster=~"$cluster"' else 'job=~"$job"', - dashboardTags: ['ibm-mq-mixin'], - dashboardPeriod: 'now-1h', - dashboardTimezone: 'default', - dashboardRefresh: '1m', - logExpression: if self.enableMultiCluster then 'job=~"$job", cluster=~"$cluster", qmgr=~"$qmgr"' - else 'job=~"$job", qmgr=~"$qmgr"', + local this = self, - //alerts thresholds - alertsExpiredMessages: 2, //count - alertsStaleMessagesSeconds: 300, //seconds - alertsLowDiskSpace: 5, //percentage: 0-100 - alertsHighQueueManagerCpuUsage: 85, //percentage: 0-100 + // Enable multi-cluster support + enableMultiCluster: false, - enableLokiLogs: true, + // Basic filtering and labeling + filteringSelector: '', + groupLabels: if self.enableMultiCluster then ['job', 'cluster'] else ['job'], + instanceLabels: ['qmgr'], + + // Dashboard settings + dashboardTags: ['ibm-mq-mixin'], + dashboardPeriod: 'now-1h', + dashboardTimezone: 'default', + dashboardRefresh: '1m', + dashboardNamePrefix: 'IBM MQ', + uid: 'ibm-mq', + + // Log settings + enableLokiLogs: true, + logLabels: ['job', 'qmgr', 'filename'], + extraLogLabels: if self.enableMultiCluster then ['cluster'] else [], + logsVolumeGroupBy: 'level', + showLogsVolume: true, + logExpression: if self.enableMultiCluster then 'job=~"$job", cluster=~"$cluster", qmgr=~"$qmgr"' else 'job=~"$job", qmgr=~"$qmgr"', + + // Alert thresholds + alertsExpiredMessages: 2, // count + alertsStaleMessagesSeconds: 300, // seconds + alertsLowDiskSpace: 5, // % + alertsHighQueueManagerCpuUsage: 85, // % + + // Metrics source + metricsSource: 'prometheus', + + // Signal definitions + signals: { + cluster: (import './signals/cluster.libsonnet')(this), + qmgr: (import './signals/qmgr.libsonnet')(this), + queue: (import './signals/queue.libsonnet')(this), + topic: (import './signals/topic.libsonnet')(this), + subscription: (import './signals/subscription.libsonnet')(this), + channel: (import './signals/channel.libsonnet')(this), }, } diff --git a/ibm-mq-mixin/dashboards.libsonnet b/ibm-mq-mixin/dashboards.libsonnet new file mode 100644 index 000000000..3e45a0772 --- /dev/null +++ b/ibm-mq-mixin/dashboards.libsonnet @@ -0,0 +1,138 @@ +local g = import './g.libsonnet'; +local commonlib = import 'common-lib/common/main.libsonnet'; + +{ + local root = self, + new(this): { + local prefix = this.config.dashboardNamePrefix, + local links = this.grafana.links, + local tags = this.config.dashboardTags, + local uid = this.config.uid, + local vars = this.grafana.variables, + local annotations = this.grafana.annotations, + local refresh = this.config.dashboardRefresh, + local period = this.config.dashboardPeriod, + local timezone = this.config.dashboardTimezone, + local rows = this.grafana.rows, + + clusterOverview: + g.dashboard.new(prefix + ' - cluster overview') + + g.dashboard.withPanels( + g.util.grid.wrapPanels( + [ + rows.clusterOverviewStats, + rows.clusterStatus, + rows.clusterChannels, + ], panelHeight=1, startY=0 + ) + ) + + root.applyCommon( + vars.multiInstance, + uid + '-cluster-overview', + tags, + links, + annotations, + timezone, + refresh, + period + ), + + queueManagerOverview: + g.dashboard.new(prefix + ' - queue manager overview') + + g.dashboard.withPanels( + g.util.grid.wrapPanels( + [ + rows.queueManagerOverviewStats, + rows.queueManagerStatus, + rows.queueManagerPerformance, + rows.queueManagerLogs, + ], panelHeight=1, startY=0 + ) + ) + + root.applyCommon( + vars.multiInstance, + uid + '-queue-manager-overview', + tags, + links, + annotations, + timezone, + refresh, + period + ), + + queueOverview: + local queueVar = g.dashboard.variable.query.new('queue') + + g.dashboard.variable.query.withDatasourceFromVariable(vars.datasources.prometheus) + + g.dashboard.variable.query.queryTypes.withLabelValues('queue', 'ibmmq_queue_depth{%(filteringSelector)s,queue!~"SYSTEM.*|AMQ.*"}' % this.config) + + g.dashboard.variable.query.withRegex('') + + g.dashboard.variable.query.selectionOptions.withIncludeAll(true, '.+') + + g.dashboard.variable.query.generalOptions.withLabel('Queue') + + g.dashboard.variable.query.refresh.onTime() + + g.dashboard.variable.query.withSort(type='alphabetical'); + g.dashboard.new(prefix + ' - queue overview') + + g.dashboard.withPanels( + g.util.grid.wrapPanels( + [ + rows.queueMetrics, + ], panelHeight=1, startY=0 + ) + ) + + root.applyCommon( + vars.multiInstance + [queueVar], + uid + '-queue-overview', + tags, + links, + annotations, + timezone, + refresh, + period + ), + + topicsOverview: + local topicVar = g.dashboard.variable.query.new('topic') + + g.dashboard.variable.query.withDatasourceFromVariable(vars.datasources.prometheus) + + g.dashboard.variable.query.queryTypes.withLabelValues('topic', 'ibmmq_topic_subscriber_count{%(filteringSelector)s,topic!~"SYSTEM.*|\\\\$SYS.*|"}' % this.config) + + g.dashboard.variable.query.withRegex('') + + g.dashboard.variable.query.selectionOptions.withIncludeAll(true, '.+') + + g.dashboard.variable.query.generalOptions.withLabel('Topic') + + g.dashboard.variable.query.refresh.onTime() + + g.dashboard.variable.query.withSort(type='alphabetical'); + local subscriptionVar = g.dashboard.variable.query.new('subscription') + + g.dashboard.variable.query.withDatasourceFromVariable(vars.datasources.prometheus) + + g.dashboard.variable.query.queryTypes.withLabelValues('subscription', 'ibmmq_subscription_messsages_received{%(filteringSelector)s,subscription!~"SYSTEM.*|"}' % this.config) + + g.dashboard.variable.query.withRegex('') + + g.dashboard.variable.query.selectionOptions.withIncludeAll(true, '.+') + + g.dashboard.variable.query.generalOptions.withLabel('Subscription') + + g.dashboard.variable.query.refresh.onTime() + + g.dashboard.variable.query.withSort(type='alphabetical'); + g.dashboard.new(prefix + ' - topics overview') + + g.dashboard.withPanels( + g.util.grid.wrapPanels( + [ + rows.topics, + rows.subscriptions, + ], panelHeight=1, startY=0 + ) + ) + + root.applyCommon( + vars.multiInstance + [topicVar, subscriptionVar], + uid + '-topics-overview', + tags, + links, + annotations, + timezone, + refresh, + period + ), + }, + + applyCommon(vars, uid, tags, links, annotations, timezone, refresh, period): + g.dashboard.withTags(tags) + + g.dashboard.withUid(uid) + + g.dashboard.withLinks(std.objectValues(links)) + + g.dashboard.withTimezone(timezone) + + g.dashboard.withRefresh(refresh) + + g.dashboard.time.withFrom(period) + + g.dashboard.withVariables(vars) + + g.dashboard.withAnnotations(std.objectValues(annotations)), +} diff --git a/ibm-mq-mixin/dashboards_out/clusterOverview.json b/ibm-mq-mixin/dashboards_out/clusterOverview.json new file mode 100644 index 000000000..28290e139 --- /dev/null +++ b/ibm-mq-mixin/dashboards_out/clusterOverview.json @@ -0,0 +1,806 @@ +{ + "annotations": { + "list": [ ] + }, + "links": [ + { + "keepTime": true, + "title": "IBM MQ cluster overview", + "type": "link", + "url": "/d/ibm-mq-cluster-overview" + }, + { + "keepTime": true, + "title": "IBM MQ queue manager overview", + "type": "link", + "url": "/d/ibm-mq-queue-manager-overview" + }, + { + "keepTime": true, + "title": "IBM MQ queue overview", + "type": "link", + "url": "/d/ibm-mq-queue-overview" + }, + { + "keepTime": true, + "title": "IBM MQ topics overview", + "type": "link", + "url": "/d/ibm-mq-topics-overview" + } + ], + "panels": [ + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 0, + "x": 0, + "y": 0 + }, + "id": 1, + "panels": [ + { + "datasource": { + "type": "datasource", + "uid": "-- Mixed --" + }, + "description": "The unique number of clusters being reported.", + "fieldConfig": { + "defaults": { + "decimals": 0, + "thresholds": { + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 0 + } + ] + } + } + }, + "gridPos": { + "h": 7, + "w": 4, + "x": 0, + "y": 1 + }, + "id": 2, + "options": { + "colorMode": "value", + "graphMode": "none", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ] + }, + "textMode": "auto" + }, + "pluginVersion": "v11.0.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "expr": "count(count(ibmmq_qmgr_commit_count{}) by (mq_cluster))", + "intervalFactor": 2, + "legendFormat": "{{job}} - {{mq_cluster}}" + } + ], + "title": "Clusters", + "type": "stat" + }, + { + "datasource": { + "type": "datasource", + "uid": "-- Mixed --" + }, + "description": "The unique number of queue managers in the cluster being reported.", + "fieldConfig": { + "defaults": { + "decimals": 0, + "thresholds": { + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 0 + } + ] + } + } + }, + "gridPos": { + "h": 7, + "w": 4, + "x": 4, + "y": 1 + }, + "id": 3, + "options": { + "colorMode": "value", + "graphMode": "none", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ] + }, + "textMode": "auto" + }, + "pluginVersion": "v11.0.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "expr": "count(count(ibmmq_qmgr_commit_count{}) by (qmgr, mq_cluster))", + "intervalFactor": 2, + "legendFormat": "" + } + ], + "title": "Queue managers", + "type": "stat" + }, + { + "datasource": { + "type": "datasource", + "uid": "-- Mixed --" + }, + "description": "The unique number of topics in the cluster.", + "fieldConfig": { + "defaults": { + "decimals": 0, + "thresholds": { + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 0 + } + ] + } + } + }, + "gridPos": { + "h": 7, + "w": 4, + "x": 8, + "y": 1 + }, + "id": 4, + "options": { + "colorMode": "value", + "graphMode": "none", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ] + }, + "textMode": "auto" + }, + "pluginVersion": "v11.0.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "expr": "count(count(ibmmq_topic_messages_received{}) by (topic, qmgr))", + "intervalFactor": 2, + "legendFormat": "" + } + ], + "title": "Topics", + "type": "stat" + }, + { + "datasource": { + "type": "datasource", + "uid": "-- Mixed --" + }, + "description": "The unique number of queues in the cluster.", + "fieldConfig": { + "defaults": { + "decimals": 0, + "thresholds": { + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 0 + } + ] + } + } + }, + "gridPos": { + "h": 7, + "w": 4, + "x": 12, + "y": 1 + }, + "id": 5, + "options": { + "colorMode": "value", + "graphMode": "none", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ] + }, + "textMode": "auto" + }, + "pluginVersion": "v11.0.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "expr": "count(count(ibmmq_queue_depth{}) by (queue, mq_cluster, qmgr))", + "intervalFactor": 2, + "legendFormat": "" + } + ], + "title": "Queues", + "type": "stat" + }, + { + "datasource": { + "type": "datasource", + "uid": "-- Mixed --" + }, + "description": "The number of queue operations of the cluster. ", + "fieldConfig": { + "defaults": { + "unit": "operations" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "MQINQ" + }, + "properties": [ + { + "id": "custom.hideFrom", + "value": { + "legend": false, + "tooltip": false, + "viz": false + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "MQGET" + }, + "properties": [ + { + "id": "custom.hideFrom", + "value": { + "legend": false, + "tooltip": false, + "viz": false + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "MQOPEN" + }, + "properties": [ + { + "id": "custom.hideFrom", + "value": { + "legend": false, + "tooltip": false, + "viz": false + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "MQPUT/MQPUT1" + }, + "properties": [ + { + "id": "custom.hideFrom", + "value": { + "legend": false, + "tooltip": false, + "viz": false + } + } + ] + } + ] + }, + "gridPos": { + "h": 15, + "w": 8, + "x": 16, + "y": 1 + }, + "id": 6, + "options": { + "legend": { + "displayMode": "list", + "placement": "bottom" + } + }, + "pluginVersion": "v11.0.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "avg by (job,qmgr) (\n rate(ibmmq_queue_mqinq_count{job=~\"$job\",qmgr=~\"$qmgr\"}[$__rate_interval])\n)", + "format": "time_series", + "instant": false, + "intervalFactor": 2, + "legendFormat": "{{queue}} - MQINQ", + "refId": "MQINQ count" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "avg by (job,qmgr) (\n rate(ibmmq_queue_mqget_count{job=~\"$job\",qmgr=~\"$qmgr\"}[$__rate_interval])\n)", + "format": "time_series", + "instant": false, + "intervalFactor": 2, + "legendFormat": "{{queue}} - MQGET", + "refId": "MQGET count" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "avg by (job,qmgr) (\n rate(ibmmq_queue_mqopen_count{job=~\"$job\",qmgr=~\"$qmgr\"}[$__rate_interval])\n)", + "format": "time_series", + "instant": false, + "intervalFactor": 2, + "legendFormat": "{{queue}} - MQOPEN", + "refId": "MQOPEN count" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "avg by (job,qmgr) (\n rate(ibmmq_queue_mqput_mqput1_count{job=~\"$job\",qmgr=~\"$qmgr\"}[$__rate_interval])\n)", + "format": "time_series", + "instant": false, + "intervalFactor": 2, + "legendFormat": "{{queue}} - MQPUT/MQPUT1", + "refId": "MQPUT/MQPUT1 count" + } + ], + "title": "Queue operations", + "type": "piechart" + } + ], + "title": "Cluster overview", + "type": "row" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 0, + "x": 0, + "y": 16 + }, + "id": 7, + "panels": [ + { + "datasource": { + "type": "datasource", + "uid": "-- Mixed --" + }, + "description": "The status of the cluster.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "fixed" + }, + "mappings": [ + { + "options": { + "0": { + "color": "green", + "index": 0, + "text": "Not suspended" + }, + "1": { + "color": "red", + "index": 1, + "text": "Suspended" + } + }, + "type": "value" + } + ] + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Status" + }, + "properties": [ + { + "id": "unit", + "value": "short" + }, + { + "id": "custom.align", + "value": "center" + }, + { + "id": "custom.cellOptions", + "value": { + "type": "color-text" + } + } + ] + } + ] + }, + "gridPos": { + "h": 4, + "w": 16, + "x": 0, + "y": 17 + }, + "id": 8, + "options": { + "footer": { + "enablePagination": false + }, + "showHeader": true + }, + "pluginVersion": "v11.0.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "sum by (job) (\n ibmmq_cluster_suspend{job=~\"$job\",qmgr=~\"$qmgr\"}\n)", + "format": "time_series", + "instant": false, + "intervalFactor": 2, + "legendFormat": "{{mq_cluster}}", + "refId": "Cluster suspend status" + } + ], + "title": "Cluster status", + "transformations": [ + { + "id": "joinByLabels", + "options": { + "join": [ + "cluster", + "mq_cluster", + "qmgr" + ], + "value": "__name__" + } + }, + { + "id": "organize", + "options": { + "renameByName": { + "ibmmq_cluster_suspend{job=\"integrations/ibmmq\", mq_cluster=\"cluster0\"}": "Status", + "job": "Job", + "mq_cluster": "Cluster" + } + } + } + ], + "type": "table" + }, + { + "datasource": { + "type": "datasource", + "uid": "-- Mixed --" + }, + "description": "The status of the queue manager (-1=N/A, 0=Stopped, 1=Starting, 2=Running, 3=Quiescing, 4=Stopping, 5=Standby).", + "fieldConfig": { + "defaults": { + "color": { + "mode": "fixed" + }, + "mappings": [ + { + "options": { + "-1": { + "color": "text", + "index": 0, + "text": "N/A" + }, + "0": { + "color": "red", + "index": 1, + "text": "Stopped" + }, + "1": { + "color": "yellow", + "index": 2, + "text": "Starting" + }, + "2": { + "color": "green", + "index": 3, + "text": "Running" + }, + "3": { + "color": "yellow", + "index": 4, + "text": "Quiescing" + }, + "4": { + "color": "yellow", + "index": 5, + "text": "Stopping" + }, + "5": { + "color": "blue", + "index": 6, + "text": "Standby" + } + }, + "type": "value" + } + ] + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Status" + }, + "properties": [ + { + "id": "unit", + "value": "short" + }, + { + "id": "custom.align", + "value": "center" + }, + { + "id": "custom.cellOptions", + "value": { + "type": "color-text" + } + } + ] + } + ] + }, + "gridPos": { + "h": 4, + "w": 16, + "x": 0, + "y": 21 + }, + "id": 9, + "options": { + "footer": { + "enablePagination": false + }, + "showHeader": true + }, + "pluginVersion": "v11.0.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "avg by (job,qmgr) (\n ibmmq_qmgr_status{job=~\"$job\",qmgr=~\"$qmgr\"}\n)", + "format": "time_series", + "instant": false, + "intervalFactor": 2, + "legendFormat": "{{qmgr}}", + "refId": "Queue manager status" + } + ], + "title": "Queue manager status", + "transformations": [ + { + "id": "joinByLabels", + "options": { + "join": [ + "cluster", + "mq_cluster", + "qmgr" + ], + "value": "__name__" + } + }, + { + "id": "organize", + "options": { + "renameByName": { + "ibmmq_qmgr_status{job=\"integrations/ibmmq\", mq_cluster=\"cluster0\", qmgr=\"qm0\"}": "Status", + "job": "Job", + "mq_cluster": "Cluster", + "qmgr": "Queue manager" + } + } + } + ], + "type": "table" + } + ], + "title": "Status", + "type": "row" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 0, + "x": 0, + "y": 25 + }, + "id": 10, + "panels": [ + { + "datasource": { + "type": "datasource", + "uid": "-- Mixed --" + }, + "description": "The time taken for messages to be transmitted over sender channels.", + "fieldConfig": { + "defaults": { + "custom": { + "fillOpacity": 10 + }, + "decimals": 2, + "unit": "µs" + } + }, + "gridPos": { + "h": 8, + "w": 24, + "x": 0, + "y": 26 + }, + "id": 11, + "options": { + "legend": { + "calcs": [ + "last", + "mean", + "max" + ], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "v11.0.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "avg by (job,qmgr) (\n ibmmq_channel_xmitq_time_short{type=\"SENDER\",job=~\"$job\",qmgr=~\"$qmgr\"}\n)", + "format": "time_series", + "instant": false, + "intervalFactor": 2, + "legendFormat": "{{channel}} - short", + "refId": "Transmission queue time short" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "avg by (job,qmgr) (\n ibmmq_channel_xmitq_time_long{type=~\"SENDER\",job=~\"$job\",qmgr=~\"$qmgr\"}\n)", + "format": "time_series", + "instant": false, + "intervalFactor": 2, + "legendFormat": "{{channel}} - long", + "refId": "Transmission queue time long" + } + ], + "title": "Transmission queue time", + "type": "timeseries" + } + ], + "title": "Channels", + "type": "row" + } + ], + "refresh": "1m", + "schemaVersion": 39, + "tags": [ + "ibm-mq-mixin" + ], + "templating": { + "list": [ + { + "label": "Prometheus data source", + "name": "prometheus_datasource", + "query": "prometheus", + "regex": "", + "type": "datasource" + }, + { + "allValue": ".+", + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "includeAll": true, + "label": "Job", + "multi": true, + "name": "job", + "query": "label_values(ibmmq_qmgr_commit_count{}, job)", + "refresh": 2, + "sort": 1, + "type": "query" + }, + { + "allValue": ".+", + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "includeAll": true, + "label": "Qmgr", + "multi": true, + "name": "qmgr", + "query": "label_values(ibmmq_qmgr_commit_count{job=~\"$job\"}, qmgr)", + "refresh": 2, + "sort": 1, + "type": "query" + }, + { + "hide": 2, + "label": "Loki data source", + "name": "loki_datasource", + "query": "loki", + "regex": "", + "type": "datasource" + } + ] + }, + "time": { + "from": "now-1h", + "to": "now" + }, + "timezone": "default", + "title": "IBM MQ - cluster overview", + "uid": "ibm-mq-cluster-overview" + } \ No newline at end of file diff --git a/ibm-mq-mixin/dashboards_out/ibm-mq-cluster-overview.json b/ibm-mq-mixin/dashboards_out/ibm-mq-cluster-overview.json deleted file mode 100644 index 4f075e6bf..000000000 --- a/ibm-mq-mixin/dashboards_out/ibm-mq-cluster-overview.json +++ /dev/null @@ -1,902 +0,0 @@ -{ - "__inputs": [ ], - "__requires": [ ], - "annotations": { - "list": [ ] - }, - "description": "", - "editable": false, - "gnetId": null, - "graphTooltip": 0, - "hideControls": false, - "id": null, - "links": [ - { - "asDropdown": false, - "icon": "external link", - "includeVars": true, - "keepTime": true, - "tags": [ - "ibm-mq-mixin" - ], - "targetBlank": false, - "title": "Other IBM MQ dashboards", - "type": "dashboards", - "url": "" - } - ], - "panels": [ - { - "datasource": { - "uid": "${prometheus_datasource}" - }, - "description": "The unique number of clusters being reported.", - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "mappings": [ ], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 0 - } - ] - } - }, - "overrides": [ ] - }, - "gridPos": { - "h": 7, - "w": 4, - "x": 0, - "y": 0 - }, - "id": 2, - "options": { - "colorMode": "value", - "graphMode": "none", - "justifyMode": "auto", - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "textMode": "auto" - }, - "targets": [ - { - "datasource": { - "uid": "${prometheus_datasource}" - }, - "expr": "count(count(ibmmq_qmgr_commit_count{job=~\"$job\"}) by (mq_cluster))", - "format": "time_series", - "intervalFactor": 2, - "legendFormat": "{{job}} - {{mq_cluster}}" - } - ], - "title": "Clusters", - "type": "stat" - }, - { - "datasource": { - "uid": "${prometheus_datasource}" - }, - "description": "The unique number of queue managers in the cluster being reported.", - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "mappings": [ ], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 0 - } - ] - } - }, - "overrides": [ ] - }, - "gridPos": { - "h": 7, - "w": 4, - "x": 4, - "y": 0 - }, - "id": 3, - "options": { - "colorMode": "value", - "graphMode": "none", - "justifyMode": "auto", - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "textMode": "auto" - }, - "targets": [ - { - "datasource": { - "uid": "${prometheus_datasource}" - }, - "expr": "count(count(ibmmq_qmgr_commit_count{job=~\"$job\"}) by (qmgr, mq_cluster))", - "format": "time_series", - "intervalFactor": 2, - "legendFormat": "" - } - ], - "title": "Queue managers", - "type": "stat" - }, - { - "datasource": { - "uid": "${prometheus_datasource}" - }, - "description": "The unique number of topics in the cluster.", - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "mappings": [ ], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 0 - } - ] - } - }, - "overrides": [ ] - }, - "gridPos": { - "h": 7, - "w": 4, - "x": 8, - "y": 0 - }, - "id": 4, - "options": { - "colorMode": "value", - "graphMode": "none", - "justifyMode": "auto", - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "textMode": "auto" - }, - "targets": [ - { - "datasource": { - "uid": "${prometheus_datasource}" - }, - "expr": "count(count(ibmmq_topic_messages_received{job=~\"$job\"}) by (topic, mq_cluster))", - "format": "time_series", - "intervalFactor": 2, - "legendFormat": "{{job}} - {{mq_cluster}}" - } - ], - "title": "Topics", - "type": "stat" - }, - { - "datasource": { - "uid": "${prometheus_datasource}" - }, - "description": "The unique number of queues in the cluster.", - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "mappings": [ ], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 0 - } - ] - } - }, - "overrides": [ ] - }, - "gridPos": { - "h": 7, - "w": 4, - "x": 12, - "y": 0 - }, - "id": 5, - "options": { - "colorMode": "value", - "graphMode": "none", - "justifyMode": "auto", - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "textMode": "auto" - }, - "targets": [ - { - "datasource": { - "uid": "${prometheus_datasource}" - }, - "expr": "count(count(ibmmq_queue_depth{job=~\"$job\"}) by (queue, mq_cluster))", - "format": "time_series", - "intervalFactor": 2, - "legendFormat": "" - } - ], - "title": "Queues", - "type": "stat" - }, - { - "datasource": { - "uid": "${prometheus_datasource}" - }, - "description": "The number of queue operations of the cluster. ", - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - } - }, - "mappings": [ ], - "unit": "operations" - }, - "overrides": [ - { - "__systemRef": "hideSeriesFrom", - "matcher": { - "id": "byNames", - "options": { - "mode": "exclude", - "names": [ - "MQINQ", - "MQGET", - "MQOPEN", - "MQPUT/MQPUT1" - ], - "prefix": "All except:", - "readOnly": true - } - }, - "properties": [ - { - "id": "custom.hideFrom", - "value": { - "legend": false, - "tooltip": false, - "viz": true - } - } - ] - } - ] - }, - "gridPos": { - "h": 15, - "w": 8, - "x": 16, - "y": 0 - }, - "id": 6, - "options": { - "legend": { - "displayMode": "list", - "placement": "bottom", - "showLegend": true - }, - "pieType": "pie", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "tooltip": { - "mode": "multi", - "sort": "none" - } - }, - "targets": [ - { - "datasource": { - "uid": "${prometheus_datasource}" - }, - "expr": "sum by (mq_cluster) (ibmmq_queue_mqset_count{job=~\"$job\", mq_cluster=~\"$mq_cluster\"})", - "format": "time_series", - "intervalFactor": 2, - "legendFormat": "MQSET" - }, - { - "datasource": { - "uid": "${prometheus_datasource}" - }, - "expr": "sum by (mq_cluster) (ibmmq_queue_mqinq_count{job=~\"$job\", mq_cluster=~\"$mq_cluster\"})", - "format": "time_series", - "intervalFactor": 2, - "legendFormat": "MQINQ" - }, - { - "datasource": { - "uid": "${prometheus_datasource}" - }, - "expr": "sum by (mq_cluster) (ibmmq_queue_mqget_count{job=~\"$job\", mq_cluster=~\"$mq_cluster\"})", - "format": "time_series", - "intervalFactor": 2, - "legendFormat": "MQGET" - }, - { - "datasource": { - "uid": "${prometheus_datasource}" - }, - "expr": "sum by (mq_cluster) (ibmmq_queue_mqopen_count{job=~\"$job\", mq_cluster=~\"$mq_cluster\"})", - "format": "time_series", - "intervalFactor": 2, - "legendFormat": "MQOPEN" - }, - { - "datasource": { - "uid": "${prometheus_datasource}" - }, - "expr": "sum by (mq_cluster) (ibmmq_queue_mqclose_count{job=~\"$job\", mq_cluster=~\"$mq_cluster\"})", - "format": "time_series", - "intervalFactor": 2, - "legendFormat": "MQCLOSE" - }, - { - "datasource": { - "uid": "${prometheus_datasource}" - }, - "expr": "sum by (mq_cluster) (ibmmq_queue_mqput_mqput1_count{job=~\"$job\", mq_cluster=~\"$mq_cluster\"})", - "format": "time_series", - "intervalFactor": 2, - "legendFormat": "MQPUT/MQPUT1" - } - ], - "title": "Queue operations", - "type": "piechart" - }, - { - "datasource": { - "uid": "${prometheus_datasource}" - }, - "description": "The status of the cluster.", - "fieldConfig": { - "defaults": { - "color": { - "mode": "fixed" - }, - "custom": { - "align": "center", - "cellOptions": { - "type": "color-text" - }, - "inspect": false - }, - "mappings": [ - { - "options": { - "0": { - "color": "green", - "index": 0, - "text": "Not suspended" - }, - "1": { - "color": "red", - "index": 1, - "text": "Suspended" - } - }, - "type": "value" - } - ], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - } - }, - "overrides": [ ] - }, - "gridPos": { - "h": 4, - "w": 16, - "x": 0, - "y": 7 - }, - "id": 7, - "options": { - "cellHeight": "sm", - "footer": { - "countRows": false, - "enablePagination": false, - "fields": "", - "reducer": [ - "sum" - ], - "show": false - }, - "showHeader": true - }, - "targets": [ - { - "datasource": { - "uid": "${prometheus_datasource}" - }, - "expr": "ibmmq_cluster_suspend{job=~\"$job\", mq_cluster=~\"$mq_cluster\"}", - "format": "time_series", - "intervalFactor": 2, - "legendFormat": "{{job}} - {{mq_cluster}}" - } - ], - "title": "Cluster status", - "transformations": [ - { - "id": "joinByLabels", - "options": { - "join": [ - "cluster", - "mq_cluster", - "qmgr" - ], - "value": "__name__" - } - }, - { - "id": "organize", - "options": { - "excludeByName": { }, - "indexByName": { }, - "renameByName": { - "cluster": "Cluster", - "ibmmq_cluster_suspend": "Status", - "mq_cluster": "MQ cluster", - "qmgr": "Queue manager" - } - } - }, - { - "id": "reduce", - "options": { - "includeTimeField": false, - "mode": "reduceFields", - "reducers": [ - "last" - ] - } - } - ], - "type": "table" - }, - { - "datasource": { - "uid": "${prometheus_datasource}" - }, - "description": "The queue managers of the cluster displayed in a table.", - "fieldConfig": { - "defaults": { - "color": { - "mode": "fixed" - }, - "custom": { - "align": "center", - "cellOptions": { - "type": "color-text" - }, - "inspect": false - }, - "mappings": [ - { - "options": { - "-1": { - "color": "dark-red", - "index": 0, - "text": "N/A" - }, - "0": { - "color": "red", - "index": 1, - "text": "Stopped" - }, - "1": { - "color": "light-green", - "index": 2, - "text": "Starting" - }, - "2": { - "color": "green", - "index": 3, - "text": "Running" - }, - "3": { - "index": 4, - "text": "Quiescing" - }, - "4": { - "color": "light-red", - "index": 5, - "text": "Stopping" - }, - "5": { - "index": 6, - "text": "Standby" - } - }, - "type": "value" - } - ], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - } - }, - "overrides": [ ] - }, - "gridPos": { - "h": 4, - "w": 16, - "x": 0, - "y": 11 - }, - "id": 8, - "options": { - "cellHeight": "sm", - "footer": { - "countRows": false, - "fields": "", - "reducer": [ - "sum" - ], - "show": false - }, - "showHeader": true, - "sortBy": [ - { - "desc": false, - "displayName": "ibmmq_qmgr_status{description=\"-\", hostname=\"keith-ibm-mq-1804-2-test\", instance=\"localhost:9157\", job=\"integrations/ibm_mq\", mq_cluster=\"\", platform=\"UNIX\", qmgr=\"QM1\"}" - } - ] - }, - "targets": [ - { - "datasource": { - "uid": "${prometheus_datasource}" - }, - "expr": "ibmmq_qmgr_status{job=~\"$job\", mq_cluster=~\"$mq_cluster\"}", - "format": "time_series", - "intervalFactor": 2, - "legendFormat": "" - } - ], - "title": "Queue manager status", - "transformations": [ - { - "id": "joinByLabels", - "options": { - "join": [ - "mq_cluster", - "qmgr", - "instance" - ], - "value": "__name__" - } - }, - { - "id": "organize", - "options": { - "excludeByName": { }, - "indexByName": { }, - "renameByName": { - "ibmmq_qmgr_status": "Status", - "instance": "Instance", - "mq_cluster": "MQ cluster", - "qmgr": "Queue manager" - } - } - }, - { - "id": "reduce", - "options": { - "includeTimeField": false, - "mode": "reduceFields", - "reducers": [ - "last" - ] - } - } - ], - "type": "table" - }, - { - "datasource": { - "uid": "${prometheus_datasource}" - }, - "description": "The time it takes for the messages to get through the transmission queue. (Long) - total time taken for messages to be transmitted over the channel, (Short) - an average, minimum, or maximum time taken to transmit messages over the channel in recent intervals. ", - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 10, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [ ], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "µs" - }, - "overrides": [ ] - }, - "gridPos": { - "h": 8, - "w": 24, - "x": 0, - "y": 15 - }, - "id": 9, - "options": { - "legend": { - "calcs": [ ], - "displayMode": "list", - "placement": "bottom", - "showLegend": true - }, - "tooltip": { - "mode": "multi", - "sort": "desc" - } - }, - "targets": [ - { - "datasource": { - "uid": "${prometheus_datasource}" - }, - "expr": "ibmmq_channel_xmitq_time_short{type=\"SENDER\", job=~\"$job\", mq_cluster=~\"$mq_cluster\"}", - "format": "time_series", - "intervalFactor": 2, - "legendFormat": "{{channel}} - short" - }, - { - "datasource": { - "uid": "${prometheus_datasource}" - }, - "expr": "ibmmq_channel_xmitq_time_long{type=~\"SENDER\", job=~\"$job\", mq_cluster=~\"$mq_cluster\"}", - "format": "time_series", - "intervalFactor": 2, - "legendFormat": "{{channel}} - long" - } - ], - "title": "Transmission queue time", - "type": "timeseries" - } - ], - "refresh": "1m", - "rows": [ ], - "schemaVersion": 14, - "style": "dark", - "tags": [ - "ibm-mq-mixin" - ], - "templating": { - "list": [ - { - "current": { }, - "hide": 0, - "label": "Data Source", - "name": "prometheus_datasource", - "options": [ ], - "query": "prometheus", - "refresh": 1, - "regex": "", - "type": "datasource" - }, - { - "allValue": ".+", - "current": { }, - "datasource": { - "uid": "${prometheus_datasource}" - }, - "hide": 0, - "includeAll": true, - "label": "Job", - "multi": true, - "name": "job", - "options": [ ], - "query": "label_values(ibmmq_qmgr_commit_count,job)", - "refresh": 1, - "regex": "", - "sort": 0, - "tagValuesQuery": "", - "tags": [ ], - "tagsQuery": "", - "type": "query", - "useTags": false - }, - { - "allValue": "", - "current": { }, - "datasource": { - "uid": "${prometheus_datasource}" - }, - "hide": 0, - "includeAll": false, - "label": "MQ cluster", - "multi": false, - "name": "mq_cluster", - "options": [ ], - "query": "label_values(ibmmq_qmgr_commit_count,mq_cluster)", - "refresh": 2, - "regex": "", - "sort": 0, - "tagValuesQuery": "", - "tags": [ ], - "tagsQuery": "", - "type": "query", - "useTags": false - }, - { - "allValue": "", - "current": { }, - "datasource": { - "uid": "${prometheus_datasource}" - }, - "hide": 2, - "includeAll": true, - "label": "Cluster", - "multi": true, - "name": "cluster", - "options": [ ], - "query": "label_values(ibmmq_qmgr_commit_count{job=~\"$job\"}, cluster)", - "refresh": 2, - "regex": "", - "sort": 0, - "tagValuesQuery": "", - "tags": [ ], - "tagsQuery": "", - "type": "query", - "useTags": false - } - ] - }, - "time": { - "from": "now-1h", - "to": "now" - }, - "timepicker": { - "refresh_intervals": [ - "5s", - "10s", - "30s", - "1m", - "5m", - "15m", - "30m", - "1h", - "2h", - "1d" - ], - "time_options": [ - "5m", - "15m", - "1h", - "6h", - "12h", - "24h", - "2d", - "7d", - "30d" - ] - }, - "timezone": "default", - "title": "IBM MQ cluster overview", - "uid": "ibm-mq-cluster-overview", - "version": 0 - } \ No newline at end of file diff --git a/ibm-mq-mixin/dashboards_out/ibm-mq-queue-manager-overview.json b/ibm-mq-mixin/dashboards_out/ibm-mq-queue-manager-overview.json deleted file mode 100644 index 8fa5a9ece..000000000 --- a/ibm-mq-mixin/dashboards_out/ibm-mq-queue-manager-overview.json +++ /dev/null @@ -1,1611 +0,0 @@ -{ - "__inputs": [ ], - "__requires": [ ], - "annotations": { - "list": [ ] - }, - "description": "", - "editable": false, - "gnetId": null, - "graphTooltip": 0, - "hideControls": false, - "id": null, - "links": [ - { - "asDropdown": false, - "icon": "external link", - "includeVars": true, - "keepTime": true, - "tags": [ - "ibm-mq-mixin" - ], - "targetBlank": false, - "title": "Other IBM MQ dashboards", - "type": "dashboards", - "url": "" - } - ], - "panels": [ - { - "datasource": { - "uid": "${prometheus_datasource}" - }, - "description": "The number of active listeners for the queue manager.", - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [ ], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "red", - "value": null - }, - { - "color": "green", - "value": 1 - } - ] - } - }, - "overrides": [ ] - }, - "gridPos": { - "h": 7, - "w": 4, - "x": 0, - "y": 0 - }, - "id": 2, - "options": { - "colorMode": "value", - "graphMode": "none", - "justifyMode": "auto", - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "textMode": "auto" - }, - "targets": [ - { - "datasource": { - "uid": "${prometheus_datasource}" - }, - "expr": "ibmmq_qmgr_active_listeners{job=~\"$job\", mq_cluster=~\"$mq_cluster\", qmgr=~\"$qmgr\"}", - "format": "time_series", - "intervalFactor": 2, - "legendFormat": "" - } - ], - "title": "Active listeners", - "type": "stat" - }, - { - "datasource": { - "uid": "${prometheus_datasource}" - }, - "description": "The number of active connections for the queue manager.", - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [ ], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "red", - "value": null - }, - { - "color": "green", - "value": 1 - } - ] - } - }, - "overrides": [ ] - }, - "gridPos": { - "h": 7, - "w": 4, - "x": 4, - "y": 0 - }, - "id": 3, - "options": { - "colorMode": "value", - "graphMode": "none", - "justifyMode": "auto", - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "textMode": "auto" - }, - "targets": [ - { - "datasource": { - "uid": "${prometheus_datasource}" - }, - "expr": "ibmmq_qmgr_connection_count{job=~\"$job\", mq_cluster=~\"$mq_cluster\", qmgr=~\"$qmgr\"}", - "format": "time_series", - "intervalFactor": 2, - "legendFormat": "" - } - ], - "title": "Active connections", - "type": "stat" - }, - { - "datasource": { - "uid": "${prometheus_datasource}" - }, - "description": "The unique number of queues being managed by the queue manager.", - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [ ], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "red", - "value": null - }, - { - "color": "green", - "value": 1 - } - ] - } - }, - "overrides": [ ] - }, - "gridPos": { - "h": 7, - "w": 4, - "x": 8, - "y": 0 - }, - "id": 4, - "options": { - "colorMode": "value", - "graphMode": "none", - "justifyMode": "auto", - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "textMode": "auto" - }, - "targets": [ - { - "datasource": { - "uid": "${prometheus_datasource}" - }, - "expr": "count(count(ibmmq_queue_depth{job=~\"$job\"}) by (queue, mq_cluster, qmgr))", - "format": "time_series", - "intervalFactor": 2, - "legendFormat": "" - } - ], - "title": "Queues", - "type": "stat" - }, - { - "datasource": { - "uid": "${prometheus_datasource}" - }, - "description": "The estimated memory usage of the queue managers.", - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 10, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [ ], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "percentunit" - }, - "overrides": [ ] - }, - "gridPos": { - "h": 7, - "w": 12, - "x": 12, - "y": 0 - }, - "id": 5, - "options": { - "legend": { - "calcs": [ ], - "displayMode": "list", - "placement": "bottom", - "showLegend": true - }, - "tooltip": { - "mode": "multi", - "sort": "desc" - } - }, - "targets": [ - { - "datasource": { - "uid": "${prometheus_datasource}" - }, - "expr": "(ibmmq_qmgr_ram_total_estimate_for_queue_manager_bytes{job=~\"$job\", mq_cluster=~\"$mq_cluster\", qmgr=~\"$qmgr\"}/ibmmq_qmgr_ram_total_bytes{job=~\"$job\", mq_cluster=~\"$mq_cluster\", qmgr=~\"$qmgr\"})", - "format": "time_series", - "intervalFactor": 2, - "legendFormat": "{{mq_cluster}} - {{qmgr}}" - } - ], - "title": "Estimated memory utilization", - "type": "timeseries" - }, - { - "datasource": { - "uid": "${prometheus_datasource}" - }, - "description": "A table showing the status and uptime of the queue manager.", - "fieldConfig": { - "defaults": { - "color": { - "mode": "fixed" - }, - "custom": { - "align": "left", - "cellOptions": { - "type": "color-text" - }, - "filterable": false, - "inspect": false - }, - "mappings": [ - { - "options": { - "-1": { - "color": "dark-red", - "index": 0, - "text": "N/A" - }, - "0": { - "color": "red", - "index": 1, - "text": "Stopped" - }, - "1": { - "color": "light-green", - "index": 2, - "text": "Starting" - }, - "2": { - "color": "green", - "index": 3, - "text": "Running" - }, - "3": { - "index": 4, - "text": "Quiescing" - }, - "4": { - "color": "light-red", - "index": 5, - "text": "Stopping" - }, - "5": { - "color": "yellow", - "index": 6, - "text": "Standby" - } - }, - "type": "value" - } - ], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - } - ] - } - }, - "overrides": [ - { - "matcher": { - "id": "byName", - "options": "Uptime" - }, - "properties": [ - { - "id": "custom.width", - "value": 149 - }, - { - "id": "unit", - "value": "s" - } - ] - }, - { - "matcher": { - "id": "byName", - "options": "__name__" - }, - "properties": [ - { - "id": "custom.width", - "value": 318 - } - ] - }, - { - "matcher": { - "id": "byName", - "options": "Queue manager" - }, - "properties": [ - { - "id": "custom.width", - "value": 168 - } - ] - }, - { - "matcher": { - "id": "byName", - "options": "MQ cluster" - }, - "properties": [ - { - "id": "custom.width", - "value": 129 - } - ] - } - ] - }, - "gridPos": { - "h": 7, - "w": 8, - "x": 0, - "y": 7 - }, - "id": 6, - "options": { - "cellHeight": "sm", - "footer": { - "countRows": false, - "enablePagination": false, - "fields": "", - "reducer": [ - "sum" - ], - "show": false - }, - "frameIndex": 1, - "showHeader": true, - "sortBy": [ ] - }, - "targets": [ - { - "datasource": { - "uid": "${prometheus_datasource}" - }, - "expr": "ibmmq_qmgr_uptime{job=~\"$job\", mq_cluster=~\"$mq_cluster\", qmgr=~\"$qmgr\"}", - "format": "table", - "intervalFactor": 2, - "legendFormat": "Uptime" - }, - { - "datasource": { - "uid": "${prometheus_datasource}" - }, - "expr": "ibmmq_qmgr_status{job=~\"$job\", mq_cluster=~\"$mq_cluster\", qmgr=~\"$qmgr\"}", - "format": "time_series", - "intervalFactor": 2, - "legendFormat": "Status" - } - ], - "title": "Queue manager status", - "transformations": [ - { - "id": "joinByField", - "options": { - "byField": "Time", - "mode": "inner" - } - }, - { - "id": "organize", - "options": { - "excludeByName": { - "Time": true, - "__name__": true, - "description": true, - "hostname": true, - "instance": true, - "job": true, - "platform": true - }, - "indexByName": { - "Time": 0, - "Value": 10, - "__name__": 1, - "description": 2, - "hostname": 3, - "ibmmq_qmgr_status{job=\"$job\", mq_cluster=~\"$mq_cluster\", qmgr=\"$qmgr\"}": 9, - "instance": 4, - "job": 5, - "mq_cluster": 6, - "platform": 7, - "qmgr": 8 - }, - "renameByName": { - "Time": "", - "Value": "Uptime", - "ibmmq_qmgr_status{job=\"$job\", mq_cluster=~\"$mq_cluster\", qmgr=\"$qmgr\"}": "Status", - "mq_cluster": "MQ cluster", - "qmgr": "Queue manager" - } - } - }, - { - "id": "reduce", - "options": { - "includeTimeField": false, - "mode": "reduceFields", - "reducers": [ - "lastNotNull" - ] - } - } - ], - "type": "table" - }, - { - "datasource": { - "uid": "${prometheus_datasource}" - }, - "description": "The system/user CPU usage of the queue manager.", - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 10, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "normal" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [ ], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "percent" - }, - "overrides": [ ] - }, - "gridPos": { - "h": 7, - "w": 8, - "x": 8, - "y": 7 - }, - "id": 7, - "options": { - "legend": { - "calcs": [ ], - "displayMode": "list", - "placement": "bottom", - "showLegend": true - }, - "tooltip": { - "mode": "multi", - "sort": "desc" - } - }, - "targets": [ - { - "datasource": { - "uid": "${prometheus_datasource}" - }, - "expr": "ibmmq_qmgr_user_cpu_time_percentage{job=~\"$job\", mq_cluster=~\"$mq_cluster\", qmgr=~\"$qmgr\"}", - "format": "time_series", - "intervalFactor": 2, - "legendFormat": "{{mq_cluster}} - {{qmgr}} - user" - }, - { - "datasource": { - "uid": "${prometheus_datasource}" - }, - "expr": "ibmmq_qmgr_system_cpu_time_percentage{job=~\"$job\", mq_cluster=~\"$mq_cluster\", qmgr=~\"$qmgr\"}", - "format": "time_series", - "intervalFactor": 2, - "legendFormat": "{{mq_cluster}} - {{qmgr}} - system" - } - ], - "title": "CPU usage", - "type": "timeseries" - }, - { - "datasource": { - "uid": "${prometheus_datasource}" - }, - "description": "The disk allocated to the queue manager that is being used.", - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 10, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "normal" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [ ], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "decbytes" - }, - "overrides": [ ] - }, - "gridPos": { - "h": 7, - "w": 8, - "x": 16, - "y": 7 - }, - "id": 8, - "options": { - "legend": { - "calcs": [ ], - "displayMode": "list", - "placement": "bottom", - "showLegend": true - }, - "tooltip": { - "mode": "multi", - "sort": "desc" - } - }, - "targets": [ - { - "datasource": { - "uid": "${prometheus_datasource}" - }, - "expr": "ibmmq_qmgr_queue_manager_file_system_in_use_bytes{job=~\"$job\", mq_cluster=~\"$mq_cluster\", qmgr=~\"$qmgr\"}", - "format": "time_series", - "intervalFactor": 2, - "legendFormat": "{{mq_cluster}} - {{qmgr}}" - } - ], - "title": "Disk usage", - "type": "timeseries" - }, - { - "datasource": { - "uid": "${prometheus_datasource}" - }, - "description": "The commits of the queue manager.", - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 10, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "normal" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [ ], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - } - }, - "overrides": [ ] - }, - "gridPos": { - "h": 7, - "w": 8, - "x": 0, - "y": 14 - }, - "id": 9, - "options": { - "legend": { - "calcs": [ ], - "displayMode": "list", - "placement": "bottom", - "showLegend": true - }, - "tooltip": { - "mode": "multi", - "sort": "desc" - } - }, - "targets": [ - { - "datasource": { - "uid": "${prometheus_datasource}" - }, - "expr": "ibmmq_qmgr_commit_count{job=~\"$job\", mq_cluster=~\"$mq_cluster\", qmgr=~\"$qmgr\"}", - "format": "time_series", - "intervalFactor": 2, - "legendFormat": "{{mq_cluster}} - {{qmgr}}" - } - ], - "title": "Commits", - "type": "timeseries" - }, - { - "datasource": { - "uid": "${prometheus_datasource}" - }, - "description": "The amount of data being pushed from the queue manager to subscribers.", - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 10, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [ ], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "decbytes" - }, - "overrides": [ ] - }, - "gridPos": { - "h": 7, - "w": 8, - "x": 8, - "y": 14 - }, - "id": 10, - "options": { - "legend": { - "calcs": [ ], - "displayMode": "list", - "placement": "bottom", - "showLegend": true - }, - "tooltip": { - "mode": "multi", - "sort": "desc" - } - }, - "targets": [ - { - "datasource": { - "uid": "${prometheus_datasource}" - }, - "expr": "ibmmq_qmgr_published_to_subscribers_bytes{job=~\"$job\", mq_cluster=~\"$mq_cluster\", qmgr=~\"$qmgr\"}", - "format": "time_series", - "intervalFactor": 2, - "legendFormat": "{{mq_cluster}} - {{qmgr}}" - } - ], - "title": "Publish throughput", - "type": "timeseries" - }, - { - "datasource": { - "uid": "${prometheus_datasource}" - }, - "description": "The number of messages being published by the queue manager.", - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 10, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "normal" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [ ], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - } - ] - } - }, - "overrides": [ ] - }, - "gridPos": { - "h": 7, - "w": 8, - "x": 16, - "y": 14 - }, - "id": 11, - "options": { - "legend": { - "calcs": [ ], - "displayMode": "list", - "placement": "bottom", - "showLegend": true - }, - "tooltip": { - "mode": "multi", - "sort": "desc" - } - }, - "targets": [ - { - "datasource": { - "uid": "${prometheus_datasource}" - }, - "expr": "ibmmq_qmgr_published_to_subscribers_message_count{job=~\"$job\", mq_cluster=~\"$mq_cluster\", qmgr=~\"$qmgr\"}", - "format": "time_series", - "intervalFactor": 2, - "legendFormat": "{{mq_cluster}} - {{qmgr}}" - } - ], - "title": "Published messages", - "type": "timeseries" - }, - { - "datasource": { - "uid": "${prometheus_datasource}" - }, - "description": "The expired messages of the queue manager.", - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 10, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "normal" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [ ], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - } - }, - "overrides": [ ] - }, - "gridPos": { - "h": 7, - "w": 8, - "x": 0, - "y": 21 - }, - "id": 12, - "options": { - "legend": { - "calcs": [ ], - "displayMode": "list", - "placement": "bottom", - "showLegend": true - }, - "tooltip": { - "mode": "multi", - "sort": "desc" - } - }, - "targets": [ - { - "datasource": { - "uid": "${prometheus_datasource}" - }, - "expr": "ibmmq_qmgr_expired_message_count{job=~\"$job\", mq_cluster=~\"$mq_cluster\", qmgr=~\"$qmgr\"}", - "format": "time_series", - "intervalFactor": 2, - "legendFormat": "{{mq_cluster}} - {{qmgr}}" - } - ], - "title": "Expired messages", - "type": "timeseries" - }, - { - "datasource": { - "uid": "${prometheus_datasource}" - }, - "description": "The number of queue operations of the queue manager. ", - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 10, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "normal" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [ ], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "operations" - }, - "overrides": [ ] - }, - "gridPos": { - "h": 7, - "w": 16, - "x": 8, - "y": 21 - }, - "id": 13, - "options": { - "legend": { - "calcs": [ ], - "displayMode": "table", - "placement": "right", - "showLegend": true - }, - "tooltip": { - "mode": "multi", - "sort": "desc" - } - }, - "targets": [ - { - "datasource": { - "uid": "${prometheus_datasource}" - }, - "expr": "sum by (mq_cluster, qmgr, job) (ibmmq_queue_mqset_count{job=~\"$job\", mq_cluster=~\"$mq_cluster\", qmgr=~\"$qmgr\"})", - "format": "time_series", - "intervalFactor": 2, - "legendFormat": "{{mq_cluster}} - {{qmgr}} - MQSET" - }, - { - "datasource": { - "uid": "${prometheus_datasource}" - }, - "expr": "sum by (mq_cluster, qmgr, job) (ibmmq_queue_mqinq_count{job=~\"$job\", mq_cluster=~\"$mq_cluster\", qmgr=~\"$qmgr\"})", - "format": "time_series", - "intervalFactor": 2, - "legendFormat": "{{mq_cluster}} - {{qmgr}} - MQINQ" - }, - { - "datasource": { - "uid": "${prometheus_datasource}" - }, - "expr": "sum by (mq_cluster, qmgr, job) (ibmmq_queue_mqget_count{job=~\"$job\", mq_cluster=~\"$mq_cluster\", qmgr=~\"$qmgr\"})", - "format": "time_series", - "intervalFactor": 2, - "legendFormat": "{{mq_cluster}} - {{qmgr}} - MQGET" - }, - { - "datasource": { - "uid": "${prometheus_datasource}" - }, - "expr": "sum by (mq_cluster, qmgr, job) (ibmmq_queue_mqopen_count{job=~\"$job\", mq_cluster=~\"$mq_cluster\", qmgr=~\"$qmgr\"})", - "format": "time_series", - "intervalFactor": 2, - "legendFormat": "{{mq_cluster}} - {{qmgr}} - MQOPEN" - }, - { - "datasource": { - "uid": "${prometheus_datasource}" - }, - "expr": "sum by (mq_cluster, qmgr, job) (ibmmq_queue_mqclose_count{job=~\"$job\", mq_cluster=~\"$mq_cluster\", qmgr=~\"$qmgr\"})", - "format": "time_series", - "intervalFactor": 2, - "legendFormat": "{{mq_cluster}} - {{qmgr}} - MQCLOSE" - }, - { - "datasource": { - "uid": "${prometheus_datasource}" - }, - "expr": "sum by (mq_cluster, qmgr, job) (ibmmq_queue_mqput_mqput1_count{job=~\"$job\", mq_cluster=~\"$mq_cluster\", qmgr=~\"$qmgr\"})", - "format": "time_series", - "intervalFactor": 2, - "legendFormat": "{{mq_cluster}} - {{qmgr}} - MQPUT/MQPUT1" - } - ], - "title": "Queue operations", - "type": "timeseries" - }, - { - "collapsed": false, - "datasource": { - "uid": "${prometheus_datasource}" - }, - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 28 - }, - "id": 14, - "targets": [ - { - "datasource": { - "uid": "${prometheus_datasource}" - }, - "expr": "", - "format": "time_series", - "intervalFactor": 2, - "legendFormat": "" - } - ], - "title": "Logs", - "type": "row" - }, - { - "datasource": { - "uid": "${prometheus_datasource}" - }, - "description": "The recent latency of log writes.", - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 10, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "normal" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [ ], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "s" - }, - "overrides": [ ] - }, - "gridPos": { - "h": 7, - "w": 12, - "x": 0, - "y": 29 - }, - "id": 15, - "options": { - "legend": { - "calcs": [ ], - "displayMode": "list", - "placement": "bottom", - "showLegend": true - }, - "tooltip": { - "mode": "multi", - "sort": "desc" - } - }, - "targets": [ - { - "datasource": { - "uid": "${prometheus_datasource}" - }, - "expr": "ibmmq_qmgr_log_write_latency_seconds{job=~\"$job\", mq_cluster=~\"$mq_cluster\", qmgr=~\"$qmgr\"}", - "format": "time_series", - "intervalFactor": 2, - "legendFormat": "{{mq_cluster}} - {{qmgr}}" - } - ], - "title": "Log latency", - "type": "timeseries" - }, - { - "datasource": { - "uid": "${prometheus_datasource}" - }, - "description": "The amount of data on the filesystem occupied by queue manager logs.", - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 10, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "normal" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [ ], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "decbytes" - }, - "overrides": [ ] - }, - "gridPos": { - "h": 7, - "w": 12, - "x": 12, - "y": 29 - }, - "id": 16, - "options": { - "legend": { - "calcs": [ ], - "displayMode": "list", - "placement": "bottom", - "showLegend": true - }, - "tooltip": { - "mode": "multi", - "sort": "desc" - } - }, - "targets": [ - { - "datasource": { - "uid": "${prometheus_datasource}" - }, - "expr": "ibmmq_qmgr_log_in_use_bytes{job=~\"$job\", mq_cluster=~\"$mq_cluster\", qmgr=~\"$qmgr\"}", - "format": "time_series", - "intervalFactor": 2, - "legendFormat": "{{mq_cluster}} - {{qmgr}}" - } - ], - "title": "Log usage", - "type": "timeseries" - }, - { - "datasource": { - "uid": "${loki_datasource}" - }, - "description": "Recent error logs from the queue manager.", - "gridPos": { - "h": 8, - "w": 24, - "x": 0, - "y": 36 - }, - "id": 17, - "options": { - "dedupStrategy": "none", - "enableLogDetails": true, - "prettifyLogMessage": false, - "showCommonLabels": false, - "showLabels": false, - "showTime": false, - "sortOrder": "Descending", - "wrapLogMessage": false - }, - "targets": [ - { - "datasource": { - "uid": "${loki_datasource}" - }, - "editorMode": "code", - "expr": "{job=~\"$job\", qmgr=~\"$qmgr\"} |= `` | (filename=~\"/var/mqm/qmgrs/.*/errors/.*LOG\" or log_type=\"mq-qmgr-error\")", - "queryType": "range", - "refId": "A" - } - ], - "title": "Error logs", - "type": "logs" - } - ], - "refresh": "1m", - "rows": [ ], - "schemaVersion": 14, - "style": "dark", - "tags": [ - "ibm-mq-mixin" - ], - "templating": { - "list": [ - { - "current": { }, - "hide": 0, - "label": "Data Source", - "name": "prometheus_datasource", - "options": [ ], - "query": "prometheus", - "refresh": 1, - "regex": "", - "type": "datasource" - }, - { - "current": { }, - "hide": 0, - "label": "Loki Datasource", - "name": "loki_datasource", - "options": [ ], - "query": "loki", - "refresh": 1, - "regex": "", - "type": "datasource" - }, - { - "allValue": ".+", - "current": { }, - "datasource": { - "uid": "${prometheus_datasource}" - }, - "hide": 0, - "includeAll": true, - "label": "Job", - "multi": true, - "name": "job", - "options": [ ], - "query": "label_values(ibmmq_topic_messages_received,job)", - "refresh": 2, - "regex": "", - "sort": 0, - "tagValuesQuery": "", - "tags": [ ], - "tagsQuery": "", - "type": "query", - "useTags": false - }, - { - "allValue": ".+", - "current": { }, - "datasource": { - "uid": "${prometheus_datasource}" - }, - "hide": 0, - "includeAll": true, - "label": "MQ cluster", - "multi": true, - "name": "mq_cluster", - "options": [ ], - "query": "label_values(ibmmq_topic_messages_received,mq_cluster)", - "refresh": 1, - "regex": "", - "sort": 0, - "tagValuesQuery": "", - "tags": [ ], - "tagsQuery": "", - "type": "query", - "useTags": false - }, - { - "allValue": "", - "current": { }, - "datasource": { - "uid": "${prometheus_datasource}" - }, - "hide": 0, - "includeAll": true, - "label": "Queue manager", - "multi": true, - "name": "qmgr", - "options": [ ], - "query": "label_values(ibmmq_topic_messages_received{mq_cluster=~\"$mq_cluster\"},qmgr)", - "refresh": 1, - "regex": "", - "sort": 0, - "tagValuesQuery": "", - "tags": [ ], - "tagsQuery": "", - "type": "query", - "useTags": false - }, - { - "allValue": "", - "current": { }, - "datasource": { - "uid": "${prometheus_datasource}" - }, - "hide": 2, - "includeAll": true, - "label": "Cluster", - "multi": true, - "name": "cluster", - "options": [ ], - "query": "label_values(ibmmq_qmgr_commit_count{job=~\"$job\"}, cluster)", - "refresh": 2, - "regex": "", - "sort": 0, - "tagValuesQuery": "", - "tags": [ ], - "tagsQuery": "", - "type": "query", - "useTags": false - } - ] - }, - "time": { - "from": "now-1h", - "to": "now" - }, - "timepicker": { - "refresh_intervals": [ - "5s", - "10s", - "30s", - "1m", - "5m", - "15m", - "30m", - "1h", - "2h", - "1d" - ], - "time_options": [ - "5m", - "15m", - "1h", - "6h", - "12h", - "24h", - "2d", - "7d", - "30d" - ] - }, - "timezone": "default", - "title": "IBM MQ queue manager overview", - "uid": "ibm-mq-queue-manager-overview", - "version": 0 - } \ No newline at end of file diff --git a/ibm-mq-mixin/dashboards_out/ibm-mq-queue-overview.json b/ibm-mq-mixin/dashboards_out/ibm-mq-queue-overview.json deleted file mode 100644 index cf12920fe..000000000 --- a/ibm-mq-mixin/dashboards_out/ibm-mq-queue-overview.json +++ /dev/null @@ -1,702 +0,0 @@ -{ - "__inputs": [ ], - "__requires": [ ], - "annotations": { - "list": [ ] - }, - "description": "", - "editable": false, - "gnetId": null, - "graphTooltip": 0, - "hideControls": false, - "id": null, - "links": [ - { - "asDropdown": false, - "icon": "external link", - "includeVars": true, - "keepTime": true, - "tags": [ - "ibm-mq-mixin" - ], - "targetBlank": false, - "title": "Other IBM MQ dashboards", - "type": "dashboards", - "url": "" - } - ], - "panels": [ - { - "datasource": { - "uid": "${prometheus_datasource}" - }, - "description": "The average amount of time a message spends in the queue.", - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 10, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [ ], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - } - ] - }, - "unit": "s" - }, - "overrides": [ ] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 0 - }, - "id": 2, - "options": { - "legend": { - "calcs": [ ], - "displayMode": "list", - "placement": "bottom", - "showLegend": true - }, - "tooltip": { - "mode": "multi", - "sort": "desc" - } - }, - "targets": [ - { - "datasource": { - "uid": "${prometheus_datasource}" - }, - "expr": "ibmmq_queue_average_queue_time_seconds{job=~\"$job\", mq_cluster=~\"$mq_cluster\", qmgr=~\"$qmgr\", queue=~\"$queue\"}", - "format": "time_series", - "intervalFactor": 2, - "legendFormat": "{{mq_cluster}} - {{qmgr}} - {{queue}}" - } - ], - "title": "Average queue time", - "type": "timeseries" - }, - { - "datasource": { - "uid": "${prometheus_datasource}" - }, - "description": "The amount of expired messages in the queue.", - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 10, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "normal" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [ ], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - } - }, - "overrides": [ ] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 0 - }, - "id": 3, - "options": { - "legend": { - "calcs": [ ], - "displayMode": "list", - "placement": "right", - "showLegend": true - }, - "tooltip": { - "mode": "multi", - "sort": "desc" - } - }, - "targets": [ - { - "datasource": { - "uid": "${prometheus_datasource}" - }, - "expr": "ibmmq_queue_expired_messages{job=~\"$job\", mq_cluster=~\"$mq_cluster\", qmgr=~\"$qmgr\", queue=~\"$queue\"}", - "format": "time_series", - "intervalFactor": 2, - "legendFormat": "{{mq_cluster}} - {{qmgr}} - {{queue}}" - } - ], - "title": "Expired messages", - "type": "timeseries" - }, - { - "datasource": { - "uid": "${prometheus_datasource}" - }, - "description": "The number of active messages in the queue.", - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 10, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [ ], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - } - }, - "overrides": [ ] - }, - "gridPos": { - "h": 8, - "w": 24, - "x": 0, - "y": 8 - }, - "id": 4, - "options": { - "legend": { - "calcs": [ ], - "displayMode": "list", - "placement": "bottom", - "showLegend": true - }, - "tooltip": { - "mode": "multi", - "sort": "desc" - } - }, - "targets": [ - { - "datasource": { - "uid": "${prometheus_datasource}" - }, - "expr": "ibmmq_queue_depth{job=~\"$job\", mq_cluster=~\"$mq_cluster\", qmgr=~\"$qmgr\", queue=~\"$queue\"}", - "format": "time_series", - "intervalFactor": 2, - "legendFormat": "{{mq_cluster}} - {{qmgr}} - {{queue}}" - } - ], - "title": "Depth", - "type": "timeseries" - }, - { - "datasource": { - "uid": "${prometheus_datasource}" - }, - "description": "The amount of throughput going through the queue via MQGETs and MQPUTs.", - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 10, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "normal" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [ ], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "decbytes" - }, - "overrides": [ ] - }, - "gridPos": { - "h": 8, - "w": 9, - "x": 0, - "y": 16 - }, - "id": 5, - "options": { - "legend": { - "calcs": [ ], - "displayMode": "list", - "placement": "right", - "showLegend": true - }, - "tooltip": { - "mode": "multi", - "sort": "desc" - } - }, - "targets": [ - { - "datasource": { - "uid": "${prometheus_datasource}" - }, - "expr": "ibmmq_queue_mqget_bytes{job=~\"$job\", mq_cluster=~\"$mq_cluster\", qmgr=~\"$qmgr\", queue=~\"$queue\"}", - "format": "time_series", - "intervalFactor": 2, - "legendFormat": "{{qmgr}} - {{queue}} - MQGET" - }, - { - "datasource": { - "uid": "${prometheus_datasource}" - }, - "expr": "ibmmq_queue_mqput_bytes{job=~\"$job\", mq_cluster=~\"$mq_cluster\", qmgr=~\"$qmgr\", queue=~\"$queue\"}", - "format": "time_series", - "intervalFactor": 2, - "legendFormat": "{{qmgr}} - {{queue}} - MQPUT" - } - ], - "title": "Operation throughput", - "type": "timeseries" - }, - { - "datasource": { - "uid": "${prometheus_datasource}" - }, - "description": "The number of queue operations of the queue manager.", - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 10, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "normal" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [ ], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "operations" - }, - "overrides": [ ] - }, - "gridPos": { - "h": 8, - "w": 15, - "x": 9, - "y": 16 - }, - "id": 6, - "options": { - "legend": { - "calcs": [ - "min", - "max", - "mean" - ], - "displayMode": "table", - "placement": "right", - "showLegend": true - }, - "tooltip": { - "mode": "multi", - "sort": "desc" - } - }, - "targets": [ - { - "datasource": { - "uid": "${prometheus_datasource}" - }, - "expr": "ibmmq_queue_mqset_count{job=~\"$job\", mq_cluster=~\"$mq_cluster\", qmgr=~\"$qmgr\", queue=~\"$queue\"}", - "format": "time_series", - "intervalFactor": 2, - "legendFormat": "{{qmgr}} - {{queue}} - MQSET" - }, - { - "datasource": { - "uid": "${prometheus_datasource}" - }, - "expr": "ibmmq_queue_mqinq_count{job=~\"$job\", mq_cluster=~\"$mq_cluster\", qmgr=~\"$qmgr\", queue=~\"$queue\"}", - "format": "time_series", - "intervalFactor": 2, - "legendFormat": "{{qmgr}} - {{queue}} - MQINQ" - }, - { - "datasource": { - "uid": "${prometheus_datasource}" - }, - "expr": "ibmmq_queue_mqget_count{job=~\"$job\", mq_cluster=~\"$mq_cluster\", qmgr=~\"$qmgr\", queue=~\"$queue\"}", - "format": "time_series", - "intervalFactor": 2, - "legendFormat": "{{qmgr}} - {{queue}} - MQGET" - }, - { - "datasource": { - "uid": "${prometheus_datasource}" - }, - "expr": "ibmmq_queue_mqopen_count{job=~\"$job\", mq_cluster=~\"$mq_cluster\", qmgr=~\"$qmgr\", queue=~\"$queue\"}", - "format": "time_series", - "intervalFactor": 2, - "legendFormat": "{{qmgr}} - {{queue}} - MQOPEN" - }, - { - "datasource": { - "uid": "${prometheus_datasource}" - }, - "expr": "ibmmq_queue_mqclose_count{job=~\"$job\", mq_cluster=~\"$mq_cluster\", qmgr=~\"$qmgr\", queue=~\"$queue\"}", - "format": "time_series", - "intervalFactor": 2, - "legendFormat": "{{qmgr}} - {{queue}} - MQCLOSE" - }, - { - "datasource": { - "uid": "${prometheus_datasource}" - }, - "expr": "ibmmq_queue_mqput_mqput1_count{job=~\"$job\", mq_cluster=~\"$mq_cluster\", qmgr=~\"$qmgr\", queue=~\"$queue\"}", - "format": "time_series", - "intervalFactor": 2, - "legendFormat": "{{qmgr}} - {{queue}} - MQPUT/MQPUT1" - } - ], - "title": "Operations", - "type": "timeseries" - } - ], - "refresh": "1m", - "rows": [ ], - "schemaVersion": 14, - "style": "dark", - "tags": [ - "ibm-mq-mixin" - ], - "templating": { - "list": [ - { - "current": { }, - "hide": 0, - "label": "Data Source", - "name": "prometheus_datasource", - "options": [ ], - "query": "prometheus", - "refresh": 1, - "regex": "", - "type": "datasource" - }, - { - "allValue": ".+", - "current": { }, - "datasource": { - "uid": "${prometheus_datasource}" - }, - "hide": 0, - "includeAll": true, - "label": "Job", - "multi": true, - "name": "job", - "options": [ ], - "query": "label_values(ibmmq_queue_average_queue_time_seconds,job)", - "refresh": 2, - "regex": "", - "sort": 0, - "tagValuesQuery": "", - "tags": [ ], - "tagsQuery": "", - "type": "query", - "useTags": false - }, - { - "allValue": "", - "current": { }, - "datasource": { - "uid": "${prometheus_datasource}" - }, - "hide": 0, - "includeAll": true, - "label": "MQ cluster", - "multi": true, - "name": "mq_cluster", - "options": [ ], - "query": "label_values(ibmmq_queue_average_queue_time_seconds{job=~\"$job\"},mq_cluster)", - "refresh": 2, - "regex": "", - "sort": 0, - "tagValuesQuery": "", - "tags": [ ], - "tagsQuery": "", - "type": "query", - "useTags": false - }, - { - "allValue": "", - "current": { }, - "datasource": { - "uid": "${prometheus_datasource}" - }, - "hide": 0, - "includeAll": true, - "label": "Queue manager", - "multi": true, - "name": "qmgr", - "options": [ ], - "query": "label_values(ibmmq_queue_average_queue_time_seconds{mq_cluster=~\"$mq_cluster\"},qmgr)", - "refresh": 2, - "regex": "", - "sort": 0, - "tagValuesQuery": "", - "tags": [ ], - "tagsQuery": "", - "type": "query", - "useTags": false - }, - { - "allValue": "", - "current": { }, - "datasource": { - "uid": "${prometheus_datasource}" - }, - "hide": 0, - "includeAll": true, - "label": "Queue", - "multi": true, - "name": "queue", - "options": [ ], - "query": "label_values(ibmmq_queue_average_queue_time_seconds{qmgr=~\"$qmgr\"},queue)", - "refresh": 2, - "regex": "", - "sort": 0, - "tagValuesQuery": "", - "tags": [ ], - "tagsQuery": "", - "type": "query", - "useTags": false - }, - { - "allValue": "", - "current": { }, - "datasource": { - "uid": "${prometheus_datasource}" - }, - "hide": 2, - "includeAll": true, - "label": "Cluster", - "multi": true, - "name": "cluster", - "options": [ ], - "query": "label_values(ibmmq_qmgr_commit_count{job=~\"$job\"}, cluster)", - "refresh": 2, - "regex": "", - "sort": 0, - "tagValuesQuery": "", - "tags": [ ], - "tagsQuery": "", - "type": "query", - "useTags": false - } - ] - }, - "time": { - "from": "now-1h", - "to": "now" - }, - "timepicker": { - "refresh_intervals": [ - "5s", - "10s", - "30s", - "1m", - "5m", - "15m", - "30m", - "1h", - "2h", - "1d" - ], - "time_options": [ - "5m", - "15m", - "1h", - "6h", - "12h", - "24h", - "2d", - "7d", - "30d" - ] - }, - "timezone": "default", - "title": "IBM MQ queue overview", - "uid": "ibm-mq-queue-overview", - "version": 0 - } \ No newline at end of file diff --git a/ibm-mq-mixin/dashboards_out/ibm-mq-topics-overview.json b/ibm-mq-mixin/dashboards_out/ibm-mq-topics-overview.json deleted file mode 100644 index 9f4ae17a9..000000000 --- a/ibm-mq-mixin/dashboards_out/ibm-mq-topics-overview.json +++ /dev/null @@ -1,832 +0,0 @@ -{ - "__inputs": [ ], - "__requires": [ ], - "annotations": { - "list": [ ] - }, - "description": "", - "editable": false, - "gnetId": null, - "graphTooltip": 0, - "hideControls": false, - "id": null, - "links": [ - { - "asDropdown": false, - "icon": "external link", - "includeVars": true, - "keepTime": true, - "tags": [ - "ibm-mq-mixin" - ], - "targetBlank": false, - "title": "Other IBM MQ dashboards", - "type": "dashboards", - "url": "" - } - ], - "panels": [ - { - "datasource": { - "uid": "${prometheus_datasource}" - }, - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 0 - }, - "id": 2, - "targets": [ - { - "datasource": { - "uid": "${prometheus_datasource}" - }, - "expr": "", - "format": "time_series", - "intervalFactor": 2, - "legendFormat": "" - } - ], - "title": "Topics", - "type": "row" - }, - { - "datasource": { - "uid": "${prometheus_datasource}" - }, - "description": "Received messages per topic.", - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 10, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "normal" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "decimals": 0, - "mappings": [ ], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - } - ] - }, - "unit": "none" - }, - "overrides": [ ] - }, - "gridPos": { - "h": 6, - "w": 16, - "x": 0, - "y": 1 - }, - "id": 3, - "options": { - "legend": { - "calcs": [ ], - "displayMode": "list", - "placement": "right", - "showLegend": true - }, - "tooltip": { - "mode": "multi", - "sort": "desc" - } - }, - "targets": [ - { - "datasource": { - "uid": "${prometheus_datasource}" - }, - "expr": "ibmmq_topic_messages_received{job=~\"$job\",mq_cluster=~\"$mq_cluster\",qmgr=~\"$qmgr\",topic=~\"$topic\"}", - "format": "time_series", - "intervalFactor": 2, - "legendFormat": "{{mq_cluster}} - {{qmgr}} - {{topic}}" - } - ], - "title": "Topic messages received", - "type": "timeseries" - }, - { - "datasource": { - "uid": "${prometheus_datasource}" - }, - "description": "The time since the topic last received a message.", - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [ ], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - } - ] - }, - "unit": "s" - }, - "overrides": [ ] - }, - "gridPos": { - "h": 6, - "w": 8, - "x": 16, - "y": 1 - }, - "id": 4, - "options": { - "displayMode": "basic", - "minVizHeight": 10, - "minVizWidth": 0, - "orientation": "horizontal", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "showUnfilled": true, - "valueMode": "color" - }, - "targets": [ - { - "datasource": { - "uid": "${prometheus_datasource}" - }, - "expr": "ibmmq_topic_time_since_msg_received{job=~\"$job\",mq_cluster=~\"$mq_cluster\",qmgr=~\"$qmgr\",topic=~\"$topic\"}", - "format": "time_series", - "intervalFactor": 2, - "legendFormat": "{{mq_cluster}} - {{qmgr}} - {{topic}}" - } - ], - "title": "Time since last message", - "type": "bargauge" - }, - { - "datasource": { - "uid": "${prometheus_datasource}" - }, - "description": "The number of subscribers per topic.", - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 10, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "decimals": 0, - "mappings": [ ], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - } - ] - }, - "unit": "none" - }, - "overrides": [ ] - }, - "gridPos": { - "h": 6, - "w": 12, - "x": 0, - "y": 7 - }, - "id": 5, - "options": { - "legend": { - "calcs": [ ], - "displayMode": "list", - "placement": "bottom", - "showLegend": true - }, - "tooltip": { - "mode": "multi", - "sort": "desc" - } - }, - "targets": [ - { - "datasource": { - "uid": "${prometheus_datasource}" - }, - "expr": "ibmmq_topic_subscriber_count{job=~\"$job\",mq_cluster=~\"$mq_cluster\",qmgr=~\"$qmgr\",topic=~\"$topic\"}", - "format": "time_series", - "intervalFactor": 2, - "legendFormat": "{{mq_cluster}} - {{qmgr}} - {{topic}}" - } - ], - "title": "Topic subscribers", - "type": "timeseries" - }, - { - "datasource": { - "uid": "${prometheus_datasource}" - }, - "description": "The number of publishers per topic.", - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 10, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "decimals": 0, - "mappings": [ ], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - } - ] - }, - "unit": "none" - }, - "overrides": [ ] - }, - "gridPos": { - "h": 6, - "w": 12, - "x": 12, - "y": 7 - }, - "id": 6, - "options": { - "legend": { - "calcs": [ ], - "displayMode": "list", - "placement": "bottom", - "showLegend": true - }, - "tooltip": { - "mode": "multi", - "sort": "desc" - } - }, - "targets": [ - { - "datasource": { - "uid": "${prometheus_datasource}" - }, - "expr": "ibmmq_topic_publisher_count{job=~\"$job\",mq_cluster=~\"$mq_cluster\",qmgr=~\"$qmgr\",topic=~\"$topic\"}", - "format": "time_series", - "intervalFactor": 2, - "legendFormat": "{{mq_cluster}} - {{qmgr}} - {{topic}}" - } - ], - "title": "Topic publishers", - "type": "timeseries" - }, - { - "collapsed": false, - "datasource": { - "uid": "${prometheus_datasource}" - }, - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 13 - }, - "id": 7, - "targets": [ - { - "datasource": { - "uid": "${prometheus_datasource}" - }, - "expr": "", - "format": "time_series", - "intervalFactor": 2, - "legendFormat": "" - } - ], - "title": "Subscriptions", - "type": "row" - }, - { - "datasource": { - "uid": "${prometheus_datasource}" - }, - "description": "The number of messages a subscription receives.", - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 10, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "normal" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "decimals": 0, - "mappings": [ ], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - } - ] - }, - "unit": "none" - }, - "overrides": [ ] - }, - "gridPos": { - "h": 6, - "w": 24, - "x": 0, - "y": 14 - }, - "id": 8, - "options": { - "legend": { - "calcs": [ ], - "displayMode": "list", - "placement": "right", - "showLegend": true - }, - "tooltip": { - "mode": "multi", - "sort": "desc" - } - }, - "targets": [ - { - "datasource": { - "uid": "${prometheus_datasource}" - }, - "expr": "ibmmq_subscription_messsages_received{job=~\"$job\",mq_cluster=~\"$mq_cluster\",qmgr=~\"$qmgr\",subscription=~\"$subscription\"}", - "format": "time_series", - "intervalFactor": 2, - "legendFormat": "{{mq_cluster}} - {{qmgr}} - {{subscription}}" - } - ], - "title": "Subscription messages received", - "transformations": [ ], - "type": "timeseries" - }, - { - "datasource": { - "uid": "${prometheus_datasource}" - }, - "description": "A table for at a glance information about a subscription.", - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "custom": { - "align": "center", - "cellOptions": { - "type": "auto" - }, - "filterable": false, - "inspect": false - }, - "mappings": [ ], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "s" - }, - "overrides": [ ] - }, - "gridPos": { - "h": 10, - "w": 24, - "x": 0, - "y": 20 - }, - "id": 9, - "options": { - "cellHeight": "sm", - "footer": { - "countRows": false, - "enablePagination": false, - "fields": "", - "reducer": [ - "sum" - ], - "show": false - }, - "showHeader": true, - "sortBy": [ - { - "desc": false, - "displayName": "subid" - } - ] - }, - "targets": [ - { - "datasource": { - "uid": "${prometheus_datasource}" - }, - "expr": "ibmmq_subscription_time_since_message_published{job=~\"$job\",mq_cluster=~\"$mq_cluster\",qmgr=~\"$qmgr\",subscription=~\"$subscription\"}", - "format": "table", - "intervalFactor": 2, - "legendFormat": "{{label_name}}" - } - ], - "title": "Subscription status", - "transformations": [ - { - "id": "organize", - "options": { - "excludeByName": { - "Time": true, - "__name__": true, - "instance": true, - "job": true, - "platform": true, - "subid": true, - "type": false - }, - "indexByName": { - "Time": 6, - "Value": 5, - "__name__": 7, - "instance": 8, - "job": 9, - "mq_cluster": 1, - "platform": 10, - "qmgr": 0, - "subid": 11, - "subscription": 2, - "topic": 4, - "type": 3 - }, - "renameByName": { } - } - }, - { - "id": "groupBy", - "options": { - "fields": { - "Value": { - "aggregations": [ - "last" - ], - "operation": "aggregate" - }, - "mq_cluster": { - "aggregations": [ ], - "operation": "groupby" - }, - "qmgr": { - "aggregations": [ ], - "operation": "groupby" - }, - "subscription": { - "aggregations": [ ], - "operation": "groupby" - }, - "topic": { - "aggregations": [ ], - "operation": "groupby" - }, - "type": { - "aggregations": [ ], - "operation": "groupby" - } - } - } - }, - { - "id": "organize", - "options": { - "excludeByName": { }, - "indexByName": { }, - "renameByName": { - "Value (last)": "Time since last subscription message", - "Value (lastNotNull)": "Time since last subscription message" - } - } - } - ], - "type": "table" - } - ], - "refresh": "1m", - "rows": [ ], - "schemaVersion": 14, - "style": "dark", - "tags": [ - "ibm-mq-mixin" - ], - "templating": { - "list": [ - { - "current": { }, - "hide": 0, - "label": "Data Source", - "name": "prometheus_datasource", - "options": [ ], - "query": "prometheus", - "refresh": 1, - "regex": "", - "type": "datasource" - }, - { - "allValue": "", - "current": { }, - "datasource": { - "uid": "${prometheus_datasource}" - }, - "hide": 0, - "includeAll": false, - "label": "Job", - "multi": false, - "name": "job", - "options": [ ], - "query": "label_values(ibmmq_topic_messages_received,job)", - "refresh": 2, - "regex": "", - "sort": 0, - "tagValuesQuery": "", - "tags": [ ], - "tagsQuery": "", - "type": "query", - "useTags": false - }, - { - "allValue": ".+", - "current": { }, - "datasource": { - "uid": "${prometheus_datasource}" - }, - "hide": 0, - "includeAll": true, - "label": "MQ cluster", - "multi": true, - "name": "mq_cluster", - "options": [ ], - "query": "label_values(ibmmq_topic_messages_received{job=~\"$job\"},mq_cluster)", - "refresh": 2, - "regex": "", - "sort": 0, - "tagValuesQuery": "", - "tags": [ ], - "tagsQuery": "", - "type": "query", - "useTags": false - }, - { - "allValue": "", - "current": { }, - "datasource": { - "uid": "${prometheus_datasource}" - }, - "hide": 0, - "includeAll": false, - "label": "Queue manager", - "multi": false, - "name": "qmgr", - "options": [ ], - "query": "label_values(ibmmq_topic_messages_received{mq_cluster=~\"$mq_cluster\"},qmgr)", - "refresh": 2, - "regex": "", - "sort": 0, - "tagValuesQuery": "", - "tags": [ ], - "tagsQuery": "", - "type": "query", - "useTags": false - }, - { - "allValue": "", - "current": { }, - "datasource": { - "uid": "${prometheus_datasource}" - }, - "hide": 0, - "includeAll": true, - "label": "Topic", - "multi": true, - "name": "topic", - "options": [ ], - "query": "label_values(ibmmq_topic_subscriber_count{qmgr=~\"$qmgr\",topic!~\"SYSTEM.*|\\\\$SYS.*|\"},topic)", - "refresh": 2, - "regex": "", - "sort": 0, - "tagValuesQuery": "", - "tags": [ ], - "tagsQuery": "", - "type": "query", - "useTags": false - }, - { - "allValue": "", - "current": { }, - "datasource": { - "uid": "${prometheus_datasource}" - }, - "hide": 0, - "includeAll": true, - "label": "Subscription", - "multi": true, - "name": "subscription", - "options": [ ], - "query": "label_values(ibmmq_subscription_messsages_received{qmgr=~\"$qmgr\",subscription!~\"SYSTEM.*|\"},subscription)", - "refresh": 2, - "regex": "", - "sort": 0, - "tagValuesQuery": "", - "tags": [ ], - "tagsQuery": "", - "type": "query", - "useTags": false - }, - { - "allValue": "", - "current": { }, - "datasource": { - "uid": "${prometheus_datasource}" - }, - "hide": 2, - "includeAll": true, - "label": "Cluster", - "multi": true, - "name": "cluster", - "options": [ ], - "query": "label_values(ibmmq_qmgr_commit_count{job=~\"$job\"}, cluster)", - "refresh": 2, - "regex": "", - "sort": 0, - "tagValuesQuery": "", - "tags": [ ], - "tagsQuery": "", - "type": "query", - "useTags": false - } - ] - }, - "time": { - "from": "now-1h", - "to": "now" - }, - "timepicker": { - "refresh_intervals": [ - "5s", - "10s", - "30s", - "1m", - "5m", - "15m", - "30m", - "1h", - "2h", - "1d" - ], - "time_options": [ - "5m", - "15m", - "1h", - "6h", - "12h", - "24h", - "2d", - "7d", - "30d" - ] - }, - "timezone": "default", - "title": "IBM MQ topics overview", - "uid": "ibm-mq-topics-overview", - "version": 0 - } \ No newline at end of file diff --git a/ibm-mq-mixin/dashboards_out/queueManagerOverview.json b/ibm-mq-mixin/dashboards_out/queueManagerOverview.json new file mode 100644 index 000000000..e789ce654 --- /dev/null +++ b/ibm-mq-mixin/dashboards_out/queueManagerOverview.json @@ -0,0 +1,1026 @@ +{ + "annotations": { + "list": [ ] + }, + "links": [ + { + "keepTime": true, + "title": "IBM MQ cluster overview", + "type": "link", + "url": "/d/ibm-mq-cluster-overview" + }, + { + "keepTime": true, + "title": "IBM MQ queue manager overview", + "type": "link", + "url": "/d/ibm-mq-queue-manager-overview" + }, + { + "keepTime": true, + "title": "IBM MQ queue overview", + "type": "link", + "url": "/d/ibm-mq-queue-overview" + }, + { + "keepTime": true, + "title": "IBM MQ topics overview", + "type": "link", + "url": "/d/ibm-mq-topics-overview" + } + ], + "panels": [ + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 0, + "x": 0, + "y": 0 + }, + "id": 1, + "panels": [ + { + "datasource": { + "type": "datasource", + "uid": "-- Mixed --" + }, + "description": "The number of active listeners for the queue manager.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "thresholds": { + "steps": [ + { + "color": "red" + }, + { + "color": "green", + "value": 1 + } + ] + } + } + }, + "gridPos": { + "h": 7, + "w": 4, + "x": 0, + "y": 1 + }, + "id": 2, + "options": { + "colorMode": "value", + "graphMode": "none", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ] + }, + "textMode": "auto" + }, + "pluginVersion": "v11.0.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "avg by (job,qmgr) (\n ibmmq_qmgr_active_listeners{job=~\"$job\",qmgr=~\"$qmgr\"}\n)", + "format": "time_series", + "instant": false, + "intervalFactor": 2, + "legendFormat": "{{qmgr}}", + "refId": "Active listeners" + } + ], + "title": "Active listeners", + "type": "stat" + }, + { + "datasource": { + "type": "datasource", + "uid": "-- Mixed --" + }, + "description": "The number of active connections for the queue manager.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "thresholds": { + "steps": [ + { + "color": "red" + }, + { + "color": "green", + "value": 1 + } + ] + } + } + }, + "gridPos": { + "h": 7, + "w": 4, + "x": 4, + "y": 1 + }, + "id": 3, + "options": { + "colorMode": "value", + "graphMode": "none", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ] + }, + "textMode": "auto" + }, + "pluginVersion": "v11.0.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "avg by (job,qmgr) (\n ibmmq_qmgr_connection_count{job=~\"$job\",qmgr=~\"$qmgr\"}\n)", + "format": "time_series", + "instant": false, + "intervalFactor": 2, + "legendFormat": "{{qmgr}}", + "refId": "Connection count" + } + ], + "title": "Active connections", + "type": "stat" + }, + { + "datasource": { + "type": "datasource", + "uid": "-- Mixed --" + }, + "description": "The unique number of queues being managed by the queue manager.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "thresholds": { + "steps": [ + { + "color": "red" + }, + { + "color": "green", + "value": 1 + } + ] + } + } + }, + "gridPos": { + "h": 7, + "w": 4, + "x": 8, + "y": 1 + }, + "id": 4, + "options": { + "colorMode": "value", + "graphMode": "none", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ] + }, + "textMode": "auto" + }, + "pluginVersion": "v11.0.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "expr": "count(count(ibmmq_queue_depth{}) by (queue, mq_cluster, qmgr))", + "intervalFactor": 2, + "legendFormat": "" + } + ], + "title": "Queues", + "type": "stat" + }, + { + "datasource": { + "type": "datasource", + "uid": "-- Mixed --" + }, + "description": "The estimated memory usage of the queue managers.", + "fieldConfig": { + "defaults": { + "custom": { + "fillOpacity": 10 + }, + "max": 1, + "min": 0, + "unit": "percentunit" + } + }, + "gridPos": { + "h": 7, + "w": 12, + "x": 12, + "y": 1 + }, + "id": 5, + "options": { + "legend": { + "calcs": [ + "last", + "mean", + "max" + ], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "v11.0.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "(ibmmq_qmgr_ram_total_estimate_for_queue_manager_bytes{job=~\"$job\",qmgr=~\"$qmgr\"}/ibmmq_qmgr_ram_total_bytes{job=~\"$job\",qmgr=~\"$qmgr\"})", + "format": "time_series", + "instant": false, + "intervalFactor": 2, + "legendFormat": "{{qmgr}}", + "refId": "Memory utilization" + } + ], + "title": "Estimated memory utilization", + "type": "timeseries" + } + ], + "title": "Overview", + "type": "row" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 0, + "x": 0, + "y": 8 + }, + "id": 6, + "panels": [ + { + "datasource": { + "type": "datasource", + "uid": "-- Mixed --" + }, + "description": "The status of the queue manager (-1=N/A, 0=Stopped, 1=Starting, 2=Running, 3=Quiescing, 4=Stopping, 5=Standby).", + "fieldConfig": { + "defaults": { + "color": { + "mode": "fixed" + }, + "mappings": [ + { + "options": { + "-1": { + "color": "text", + "index": 0, + "text": "N/A" + }, + "0": { + "color": "red", + "index": 1, + "text": "Stopped" + }, + "1": { + "color": "yellow", + "index": 2, + "text": "Starting" + }, + "2": { + "color": "green", + "index": 3, + "text": "Running" + }, + "3": { + "color": "yellow", + "index": 4, + "text": "Quiescing" + }, + "4": { + "color": "yellow", + "index": 5, + "text": "Stopping" + }, + "5": { + "color": "blue", + "index": 6, + "text": "Standby" + } + }, + "type": "value" + } + ] + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Status" + }, + "properties": [ + { + "id": "unit", + "value": "short" + }, + { + "id": "custom.align", + "value": "center" + }, + { + "id": "custom.cellOptions", + "value": { + "type": "color-text" + } + } + ] + } + ] + }, + "gridPos": { + "h": 7, + "w": 8, + "x": 0, + "y": 9 + }, + "id": 7, + "options": { + "footer": { + "enablePagination": false + }, + "showHeader": true + }, + "pluginVersion": "v11.0.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "avg by (job,qmgr) (\n ibmmq_qmgr_status{job=~\"$job\",qmgr=~\"$qmgr\"}\n)", + "format": "time_series", + "instant": false, + "intervalFactor": 2, + "legendFormat": "{{qmgr}}", + "refId": "Queue manager status" + } + ], + "title": "Queue manager status", + "transformations": [ + { + "id": "joinByLabels", + "options": { + "join": [ + "cluster", + "mq_cluster", + "qmgr" + ], + "value": "__name__" + } + }, + { + "id": "organize", + "options": { + "renameByName": { + "ibmmq_qmgr_status{job=\"integrations/ibmmq\", mq_cluster=\"cluster0\", qmgr=\"qm0\"}": "Status", + "job": "Job", + "mq_cluster": "Cluster", + "qmgr": "Queue manager" + } + } + } + ], + "type": "table" + }, + { + "datasource": { + "type": "datasource", + "uid": "-- Mixed --" + }, + "description": "The CPU usage of the queue managers.", + "fieldConfig": { + "defaults": { + "custom": { + "fillOpacity": 10 + }, + "max": 100, + "min": 0, + "unit": "percent" + } + }, + "gridPos": { + "h": 7, + "w": 8, + "x": 8, + "y": 9 + }, + "id": 8, + "options": { + "legend": { + "calcs": [ + "last", + "mean", + "max" + ], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "v11.0.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "avg by (job,qmgr) (\n ibmmq_qmgr_user_cpu_time_percentage{job=~\"$job\",qmgr=~\"$qmgr\"}\n)", + "format": "time_series", + "instant": false, + "intervalFactor": 2, + "legendFormat": "{{qmgr}} - user", + "refId": "User CPU time percentage" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "avg by (job,qmgr) (\n ibmmq_qmgr_system_cpu_time_percentage{job=~\"$job\",qmgr=~\"$qmgr\"}\n)", + "format": "time_series", + "instant": false, + "intervalFactor": 2, + "legendFormat": "{{qmgr}} - system", + "refId": "System CPU time percentage" + } + ], + "title": "CPU usage", + "type": "timeseries" + }, + { + "datasource": { + "type": "datasource", + "uid": "-- Mixed --" + }, + "description": "The disk allocated to the queue manager that is being used.", + "fieldConfig": { + "defaults": { + "custom": { + "fillOpacity": 10 + }, + "unit": "decbytes" + } + }, + "gridPos": { + "h": 7, + "w": 8, + "x": 16, + "y": 9 + }, + "id": 9, + "options": { + "legend": { + "calcs": [ + "last", + "mean", + "max" + ], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "v11.0.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "avg by (job,qmgr) (\n ibmmq_qmgr_queue_manager_file_system_in_use_bytes{job=~\"$job\",qmgr=~\"$qmgr\"}\n)", + "format": "time_series", + "instant": false, + "intervalFactor": 2, + "legendFormat": "{{qmgr}}", + "refId": "Queue manager file system in use bytes" + } + ], + "title": "Disk usage", + "type": "timeseries" + } + ], + "title": "Status", + "type": "row" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 0, + "x": 0, + "y": 16 + }, + "id": 10, + "panels": [ + { + "datasource": { + "type": "datasource", + "uid": "-- Mixed --" + }, + "description": "The percentage of free disk space available for the queue manager.", + "fieldConfig": { + "defaults": { + "custom": { + "fillOpacity": 10 + }, + "max": 100, + "min": 0, + "unit": "percent" + } + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 17 + }, + "id": 11, + "options": { + "legend": { + "calcs": [ + "last", + "mean", + "max" + ], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "v11.0.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "avg by (job,qmgr) (\n ibmmq_qmgr_queue_manager_file_system_free_space_percentage{job=~\"$job\",qmgr=~\"$qmgr\"}\n)", + "format": "time_series", + "instant": false, + "intervalFactor": 2, + "legendFormat": "{{qmgr}}", + "refId": "Queue manager file system free space percentage" + } + ], + "title": "Free disk space", + "type": "timeseries" + }, + { + "datasource": { + "type": "datasource", + "uid": "-- Mixed --" + }, + "description": "The rate of commits by the queue manager.", + "fieldConfig": { + "defaults": { + "custom": { + "fillOpacity": 10 + }, + "unit": "short" + } + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 17 + }, + "id": 12, + "options": { + "legend": { + "calcs": [ + "last", + "mean", + "max" + ], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "v11.0.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "avg by (job,qmgr) (\n rate(ibmmq_qmgr_commit_count{job=~\"$job\",qmgr=~\"$qmgr\"}[$__rate_interval])\n)", + "format": "time_series", + "instant": false, + "intervalFactor": 2, + "legendFormat": "{{qmgr}}", + "refId": "Commit count" + } + ], + "title": "Commit rate", + "type": "timeseries" + }, + { + "datasource": { + "type": "datasource", + "uid": "-- Mixed --" + }, + "description": "The rate of data being pushed from the queue manager to subscribers.", + "fieldConfig": { + "defaults": { + "custom": { + "fillOpacity": 10 + }, + "unit": "decbytes" + } + }, + "gridPos": { + "h": 8, + "w": 8, + "x": 0, + "y": 25 + }, + "id": 13, + "options": { + "legend": { + "calcs": [ + "last", + "mean", + "max" + ], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "v11.0.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "avg by (job,qmgr) (\n rate(ibmmq_qmgr_published_to_subscribers_bytes{job=~\"$job\",qmgr=~\"$qmgr\"}[$__rate_interval])\n)", + "format": "time_series", + "instant": false, + "intervalFactor": 2, + "legendFormat": "{{qmgr}}", + "refId": "Published to subscribers bytes" + } + ], + "title": "Published bytes", + "type": "timeseries" + }, + { + "datasource": { + "type": "datasource", + "uid": "-- Mixed --" + }, + "description": "The rate of messages being published by the queue manager.", + "fieldConfig": { + "defaults": { + "custom": { + "fillOpacity": 10 + }, + "unit": "short" + } + }, + "gridPos": { + "h": 8, + "w": 8, + "x": 8, + "y": 25 + }, + "id": 14, + "options": { + "legend": { + "calcs": [ + "last", + "mean", + "max" + ], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "v11.0.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "avg by (job,qmgr) (\n rate(ibmmq_qmgr_published_to_subscribers_message_count{job=~\"$job\",qmgr=~\"$qmgr\"}[$__rate_interval])\n)", + "format": "time_series", + "instant": false, + "intervalFactor": 2, + "legendFormat": "{{qmgr}}", + "refId": "Published to subscribers message count" + } + ], + "title": "Published messages", + "type": "timeseries" + }, + { + "datasource": { + "type": "datasource", + "uid": "-- Mixed --" + }, + "description": "The rate of expired messages for the queue manager.", + "fieldConfig": { + "defaults": { + "custom": { + "fillOpacity": 10 + }, + "unit": "short" + } + }, + "gridPos": { + "h": 8, + "w": 8, + "x": 16, + "y": 25 + }, + "id": 15, + "options": { + "legend": { + "calcs": [ + "last", + "mean", + "max" + ], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "v11.0.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "avg by (job,qmgr) (\n rate(ibmmq_qmgr_expired_message_count{job=~\"$job\",qmgr=~\"$qmgr\"}[$__rate_interval])\n)", + "format": "time_series", + "instant": false, + "intervalFactor": 2, + "legendFormat": "{{qmgr}}", + "refId": "Expired message count" + } + ], + "title": "Expired messages", + "type": "timeseries" + } + ], + "title": "Performance", + "type": "row" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 0, + "x": 0, + "y": 33 + }, + "id": 16, + "panels": [ + { + "datasource": { + "type": "datasource", + "uid": "-- Mixed --" + }, + "description": "The recent latency of log writes.", + "fieldConfig": { + "defaults": { + "custom": { + "fillOpacity": 10 + }, + "unit": "s" + } + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 34 + }, + "id": 17, + "options": { + "legend": { + "calcs": [ + "last", + "mean", + "max" + ], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "v11.0.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "avg by (job,qmgr) (\n ibmmq_qmgr_log_write_latency_seconds{job=~\"$job\",qmgr=~\"$qmgr\"}\n)", + "format": "time_series", + "instant": false, + "intervalFactor": 2, + "legendFormat": "{{qmgr}}", + "refId": "Log write latency seconds" + } + ], + "title": "Log write latency", + "type": "timeseries" + }, + { + "datasource": { + "type": "datasource", + "uid": "-- Mixed --" + }, + "description": "The amount of data on the filesystem occupied by queue manager logs.", + "fieldConfig": { + "defaults": { + "custom": { + "fillOpacity": 10 + }, + "unit": "decbytes" + } + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 34 + }, + "id": 18, + "options": { + "legend": { + "calcs": [ + "last", + "mean", + "max" + ], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "v11.0.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "avg by (job,qmgr) (\n ibmmq_qmgr_log_in_use_bytes{job=~\"$job\",qmgr=~\"$qmgr\"}\n)", + "format": "time_series", + "instant": false, + "intervalFactor": 2, + "legendFormat": "{{qmgr}}", + "refId": "Log in use bytes" + } + ], + "title": "Log usage", + "type": "timeseries" + } + ], + "title": "Logs", + "type": "row" + } + ], + "refresh": "1m", + "schemaVersion": 39, + "tags": [ + "ibm-mq-mixin" + ], + "templating": { + "list": [ + { + "label": "Prometheus data source", + "name": "prometheus_datasource", + "query": "prometheus", + "regex": "", + "type": "datasource" + }, + { + "allValue": ".+", + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "includeAll": true, + "label": "Job", + "multi": true, + "name": "job", + "query": "label_values(ibmmq_qmgr_commit_count{}, job)", + "refresh": 2, + "sort": 1, + "type": "query" + }, + { + "allValue": ".+", + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "includeAll": true, + "label": "Qmgr", + "multi": true, + "name": "qmgr", + "query": "label_values(ibmmq_qmgr_commit_count{job=~\"$job\"}, qmgr)", + "refresh": 2, + "sort": 1, + "type": "query" + }, + { + "hide": 2, + "label": "Loki data source", + "name": "loki_datasource", + "query": "loki", + "regex": "", + "type": "datasource" + } + ] + }, + "time": { + "from": "now-1h", + "to": "now" + }, + "timezone": "default", + "title": "IBM MQ - queue manager overview", + "uid": "ibm-mq-queue-manager-overview" + } \ No newline at end of file diff --git a/ibm-mq-mixin/dashboards_out/queueOverview.json b/ibm-mq-mixin/dashboards_out/queueOverview.json new file mode 100644 index 000000000..58df8d21c --- /dev/null +++ b/ibm-mq-mixin/dashboards_out/queueOverview.json @@ -0,0 +1,470 @@ +{ + "annotations": { + "list": [ ] + }, + "links": [ + { + "keepTime": true, + "title": "IBM MQ cluster overview", + "type": "link", + "url": "/d/ibm-mq-cluster-overview" + }, + { + "keepTime": true, + "title": "IBM MQ queue manager overview", + "type": "link", + "url": "/d/ibm-mq-queue-manager-overview" + }, + { + "keepTime": true, + "title": "IBM MQ queue overview", + "type": "link", + "url": "/d/ibm-mq-queue-overview" + }, + { + "keepTime": true, + "title": "IBM MQ topics overview", + "type": "link", + "url": "/d/ibm-mq-topics-overview" + } + ], + "panels": [ + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 0, + "x": 0, + "y": 0 + }, + "id": 1, + "panels": [ + { + "datasource": { + "type": "datasource", + "uid": "-- Mixed --" + }, + "description": "The average amount of time a message spends in the queue.", + "fieldConfig": { + "defaults": { + "custom": { + "fillOpacity": 10 + }, + "unit": "s" + } + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 1 + }, + "id": 2, + "options": { + "legend": { + "calcs": [ + "last", + "mean", + "max" + ], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "v11.0.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "avg by (job,qmgr) (\n ibmmq_queue_average_queue_time_seconds{job=~\"$job\",qmgr=~\"$qmgr\"}\n)", + "format": "time_series", + "instant": false, + "intervalFactor": 2, + "legendFormat": "{{queue}}", + "refId": "Average queue time seconds" + } + ], + "title": "Average queue time", + "type": "timeseries" + }, + { + "datasource": { + "type": "datasource", + "uid": "-- Mixed --" + }, + "description": "The rate of expired messages in the queue.", + "fieldConfig": { + "defaults": { + "custom": { + "fillOpacity": 10 + }, + "unit": "short" + } + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 1 + }, + "id": 3, + "options": { + "legend": { + "calcs": [ + "last", + "mean", + "max" + ], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "v11.0.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "avg by (job,qmgr) (\n rate(ibmmq_queue_expired_messages{job=~\"$job\",qmgr=~\"$qmgr\"}[$__rate_interval])\n)", + "format": "time_series", + "instant": false, + "intervalFactor": 2, + "legendFormat": "{{queue}}", + "refId": "Expired messages" + } + ], + "title": "Expired messages", + "type": "timeseries" + }, + { + "datasource": { + "type": "datasource", + "uid": "-- Mixed --" + }, + "description": "The number of active messages in the queue.", + "fieldConfig": { + "defaults": { + "custom": { + "fillOpacity": 10 + }, + "unit": "short" + } + }, + "gridPos": { + "h": 8, + "w": 24, + "x": 0, + "y": 9 + }, + "id": 4, + "options": { + "legend": { + "calcs": [ + "last", + "mean", + "max" + ], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "v11.0.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "avg by (job,qmgr) (\n ibmmq_queue_depth{job=~\"$job\",qmgr=~\"$qmgr\"}\n)", + "format": "time_series", + "instant": false, + "intervalFactor": 2, + "legendFormat": "{{queue}}", + "refId": "Queue depth" + } + ], + "title": "Depth", + "type": "timeseries" + }, + { + "datasource": { + "type": "datasource", + "uid": "-- Mixed --" + }, + "description": "The throughput of operations on the queue.", + "fieldConfig": { + "defaults": { + "custom": { + "fillOpacity": 10 + }, + "unit": "decbytes" + } + }, + "gridPos": { + "h": 8, + "w": 9, + "x": 0, + "y": 17 + }, + "id": 5, + "options": { + "legend": { + "calcs": [ + "last", + "mean", + "max" + ], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "v11.0.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "avg by (job,qmgr) (\n rate(ibmmq_queue_mqget_bytes{job=~\"$job\",qmgr=~\"$qmgr\"}[$__rate_interval])\n)", + "format": "time_series", + "instant": false, + "intervalFactor": 2, + "legendFormat": "{{queue}} - MQGET", + "refId": "MQGET bytes" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "avg by (job,qmgr) (\n rate(ibmmq_queue_mqput_bytes{job=~\"$job\",qmgr=~\"$qmgr\"}[$__rate_interval])\n)", + "format": "time_series", + "instant": false, + "intervalFactor": 2, + "legendFormat": "{{queue}} - MQPUT", + "refId": "MQPUT bytes" + } + ], + "title": "Operation throughput", + "type": "timeseries" + }, + { + "datasource": { + "type": "datasource", + "uid": "-- Mixed --" + }, + "description": "The rate of operations on the queue.", + "fieldConfig": { + "defaults": { + "custom": { + "fillOpacity": 10 + }, + "unit": "operations" + } + }, + "gridPos": { + "h": 8, + "w": 15, + "x": 9, + "y": 17 + }, + "id": 6, + "options": { + "legend": { + "calcs": [ + "last", + "mean", + "max" + ], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "v11.0.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "avg by (job,qmgr) (\n rate(ibmmq_queue_mqset_count{job=~\"$job\",qmgr=~\"$qmgr\"}[$__rate_interval])\n)", + "format": "time_series", + "instant": false, + "intervalFactor": 2, + "legendFormat": "{{queue}} - MQSET", + "refId": "MQSET count" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "avg by (job,qmgr) (\n rate(ibmmq_queue_mqinq_count{job=~\"$job\",qmgr=~\"$qmgr\"}[$__rate_interval])\n)", + "format": "time_series", + "instant": false, + "intervalFactor": 2, + "legendFormat": "{{queue}} - MQINQ", + "refId": "MQINQ count" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "avg by (job,qmgr) (\n rate(ibmmq_queue_mqget_count{job=~\"$job\",qmgr=~\"$qmgr\"}[$__rate_interval])\n)", + "format": "time_series", + "instant": false, + "intervalFactor": 2, + "legendFormat": "{{queue}} - MQGET", + "refId": "MQGET count" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "avg by (job,qmgr) (\n rate(ibmmq_queue_mqopen_count{job=~\"$job\",qmgr=~\"$qmgr\"}[$__rate_interval])\n)", + "format": "time_series", + "instant": false, + "intervalFactor": 2, + "legendFormat": "{{queue}} - MQOPEN", + "refId": "MQOPEN count" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "avg by (job,qmgr) (\n rate(ibmmq_queue_mqclose_count{job=~\"$job\",qmgr=~\"$qmgr\"}[$__rate_interval])\n)", + "format": "time_series", + "instant": false, + "intervalFactor": 2, + "legendFormat": "{{queue}} - MQCLOSE", + "refId": "MQCLOSE count" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "avg by (job,qmgr) (\n rate(ibmmq_queue_mqput_mqput1_count{job=~\"$job\",qmgr=~\"$qmgr\"}[$__rate_interval])\n)", + "format": "time_series", + "instant": false, + "intervalFactor": 2, + "legendFormat": "{{queue}} - MQPUT/MQPUT1", + "refId": "MQPUT/MQPUT1 count" + } + ], + "title": "Operations", + "type": "timeseries" + } + ], + "title": "Queue metrics", + "type": "row" + } + ], + "refresh": "1m", + "schemaVersion": 39, + "tags": [ + "ibm-mq-mixin" + ], + "templating": { + "list": [ + { + "label": "Prometheus data source", + "name": "prometheus_datasource", + "query": "prometheus", + "regex": "", + "type": "datasource" + }, + { + "allValue": ".+", + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "includeAll": true, + "label": "Job", + "multi": true, + "name": "job", + "query": "label_values(ibmmq_qmgr_commit_count{}, job)", + "refresh": 2, + "sort": 1, + "type": "query" + }, + { + "allValue": ".+", + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "includeAll": true, + "label": "Qmgr", + "multi": true, + "name": "qmgr", + "query": "label_values(ibmmq_qmgr_commit_count{job=~\"$job\"}, qmgr)", + "refresh": 2, + "sort": 1, + "type": "query" + }, + { + "hide": 2, + "label": "Loki data source", + "name": "loki_datasource", + "query": "loki", + "regex": "", + "type": "datasource" + }, + { + "allValue": ".+", + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "includeAll": true, + "label": "Queue", + "name": "queue", + "query": "label_values(ibmmq_queue_depth{,queue!~\"SYSTEM.*|AMQ.*\"}, queue)", + "refresh": 2, + "regex": "", + "sort": 1, + "type": "query" + } + ] + }, + "time": { + "from": "now-1h", + "to": "now" + }, + "timezone": "default", + "title": "IBM MQ - queue overview", + "uid": "ibm-mq-queue-overview" + } \ No newline at end of file diff --git a/ibm-mq-mixin/dashboards_out/topicsOverview.json b/ibm-mq-mixin/dashboards_out/topicsOverview.json new file mode 100644 index 000000000..8c64f35cf --- /dev/null +++ b/ibm-mq-mixin/dashboards_out/topicsOverview.json @@ -0,0 +1,502 @@ +{ + "annotations": { + "list": [ ] + }, + "links": [ + { + "keepTime": true, + "title": "IBM MQ cluster overview", + "type": "link", + "url": "/d/ibm-mq-cluster-overview" + }, + { + "keepTime": true, + "title": "IBM MQ queue manager overview", + "type": "link", + "url": "/d/ibm-mq-queue-manager-overview" + }, + { + "keepTime": true, + "title": "IBM MQ queue overview", + "type": "link", + "url": "/d/ibm-mq-queue-overview" + }, + { + "keepTime": true, + "title": "IBM MQ topics overview", + "type": "link", + "url": "/d/ibm-mq-topics-overview" + } + ], + "panels": [ + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 0, + "x": 0, + "y": 0 + }, + "id": 1, + "panels": [ + { + "datasource": { + "type": "datasource", + "uid": "-- Mixed --" + }, + "description": "Received messages per topic.", + "fieldConfig": { + "defaults": { + "custom": { + "fillOpacity": 10 + }, + "unit": "short" + } + }, + "gridPos": { + "h": 6, + "w": 16, + "x": 0, + "y": 1 + }, + "id": 2, + "options": { + "legend": { + "calcs": [ + "last", + "mean", + "max" + ], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "v11.0.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "avg by (job,qmgr) (\n rate(ibmmq_topic_messages_received{job=~\"$job\",qmgr=~\"$qmgr\"}[$__rate_interval])\n)", + "format": "time_series", + "instant": false, + "intervalFactor": 2, + "legendFormat": "{{topic}}", + "refId": "Topic messages received" + } + ], + "title": "Topic messages received", + "type": "timeseries" + }, + { + "datasource": { + "type": "datasource", + "uid": "-- Mixed --" + }, + "description": "The time since the topic last received a message.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "unit": "s" + } + }, + "gridPos": { + "h": 6, + "w": 8, + "x": 16, + "y": 1 + }, + "id": 3, + "options": { + "displayMode": "basic", + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ] + }, + "showUnfilled": true, + "valueMode": "color" + }, + "pluginVersion": "v11.0.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "avg by (job,qmgr) (\n ibmmq_topic_time_since_msg_received{job=~\"$job\",qmgr=~\"$qmgr\"}\n)", + "format": "time_series", + "instant": false, + "intervalFactor": 2, + "legendFormat": "{{topic}}", + "refId": "Time since message received" + } + ], + "title": "Time since last message", + "type": "bargauge" + }, + { + "datasource": { + "type": "datasource", + "uid": "-- Mixed --" + }, + "description": "The number of subscribers per topic.", + "fieldConfig": { + "defaults": { + "custom": { + "fillOpacity": 10 + }, + "unit": "short" + } + }, + "gridPos": { + "h": 6, + "w": 12, + "x": 0, + "y": 7 + }, + "id": 4, + "options": { + "legend": { + "calcs": [ + "last", + "mean", + "max" + ], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "v11.0.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "avg by (job,qmgr) (\n ibmmq_topic_subscriber_count{job=~\"$job\",qmgr=~\"$qmgr\"}\n)", + "format": "time_series", + "instant": false, + "intervalFactor": 2, + "legendFormat": "{{topic}}", + "refId": "Topic subscriber count" + } + ], + "title": "Topic subscribers", + "type": "timeseries" + }, + { + "datasource": { + "type": "datasource", + "uid": "-- Mixed --" + }, + "description": "The number of publishers per topic.", + "fieldConfig": { + "defaults": { + "custom": { + "fillOpacity": 10 + }, + "unit": "short" + } + }, + "gridPos": { + "h": 6, + "w": 12, + "x": 12, + "y": 7 + }, + "id": 5, + "options": { + "legend": { + "calcs": [ + "last", + "mean", + "max" + ], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "v11.0.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "avg by (job,qmgr) (\n ibmmq_topic_publisher_count{job=~\"$job\",qmgr=~\"$qmgr\"}\n)", + "format": "time_series", + "instant": false, + "intervalFactor": 2, + "legendFormat": "{{topic}}", + "refId": "Topic publisher count" + } + ], + "title": "Topic publishers", + "type": "timeseries" + } + ], + "title": "Topics", + "type": "row" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 0, + "x": 0, + "y": 13 + }, + "id": 6, + "panels": [ + { + "datasource": { + "type": "datasource", + "uid": "-- Mixed --" + }, + "description": "The rate of messages a subscription receives.", + "fieldConfig": { + "defaults": { + "custom": { + "fillOpacity": 10 + }, + "unit": "short" + } + }, + "gridPos": { + "h": 6, + "w": 24, + "x": 0, + "y": 14 + }, + "id": 7, + "options": { + "legend": { + "calcs": [ + "last", + "mean", + "max" + ], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "v11.0.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "avg by (job,qmgr) (\n rate(ibmmq_subscription_messsages_received{job=~\"$job\",qmgr=~\"$qmgr\"}[$__rate_interval])\n)", + "format": "time_series", + "instant": false, + "intervalFactor": 2, + "legendFormat": "{{subscription}}", + "refId": "Subscription messages received" + } + ], + "title": "Subscription messages received", + "type": "timeseries" + }, + { + "datasource": { + "type": "datasource", + "uid": "-- Mixed --" + }, + "description": "The time since a message was published to the subscription.", + "fieldConfig": { + "defaults": { + "unit": "s" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Time since message published" + }, + "properties": [ + { + "id": "unit", + "value": "s" + }, + { + "id": "custom.align", + "value": "center" + } + ] + } + ] + }, + "gridPos": { + "h": 10, + "w": 24, + "x": 0, + "y": 24 + }, + "id": 8, + "options": { + "footer": { + "enablePagination": false + }, + "showHeader": true + }, + "pluginVersion": "v11.0.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "expr": "avg by (job,qmgr) (\n ibmmq_subscription_time_since_message_published{job=~\"$job\",qmgr=~\"$qmgr\"}\n)", + "format": "time_series", + "instant": false, + "intervalFactor": 2, + "legendFormat": "{{subscription}}", + "refId": "Time since message published" + } + ], + "title": "Subscription status", + "transformations": [ + { + "id": "joinByLabels", + "options": { + "value": "__name__" + } + }, + { + "id": "organize", + "options": { + "renameByName": { + "ibmmq_subscription_time_since_message_published{job=\"integrations/ibmmq\", mq_cluster=\"cluster0\", qmgr=\"qm0\", subscription=\"sub0\"}": "Time since message published", + "job": "Job", + "mq_cluster": "Cluster", + "qmgr": "Queue manager", + "subscription": "Subscription" + } + } + } + ], + "type": "table" + } + ], + "title": "Subscriptions", + "type": "row" + } + ], + "refresh": "1m", + "schemaVersion": 39, + "tags": [ + "ibm-mq-mixin" + ], + "templating": { + "list": [ + { + "label": "Prometheus data source", + "name": "prometheus_datasource", + "query": "prometheus", + "regex": "", + "type": "datasource" + }, + { + "allValue": ".+", + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "includeAll": true, + "label": "Job", + "multi": true, + "name": "job", + "query": "label_values(ibmmq_qmgr_commit_count{}, job)", + "refresh": 2, + "sort": 1, + "type": "query" + }, + { + "allValue": ".+", + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "includeAll": true, + "label": "Qmgr", + "multi": true, + "name": "qmgr", + "query": "label_values(ibmmq_qmgr_commit_count{job=~\"$job\"}, qmgr)", + "refresh": 2, + "sort": 1, + "type": "query" + }, + { + "hide": 2, + "label": "Loki data source", + "name": "loki_datasource", + "query": "loki", + "regex": "", + "type": "datasource" + }, + { + "allValue": ".+", + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "includeAll": true, + "label": "Topic", + "name": "topic", + "query": "label_values(ibmmq_topic_subscriber_count{,topic!~\"SYSTEM.*|\\\\$SYS.*|\"}, topic)", + "refresh": 2, + "regex": "", + "sort": 1, + "type": "query" + }, + { + "allValue": ".+", + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "includeAll": true, + "label": "Subscription", + "name": "subscription", + "query": "label_values(ibmmq_subscription_messsages_received{,subscription!~\"SYSTEM.*|\"}, subscription)", + "refresh": 2, + "regex": "", + "sort": 1, + "type": "query" + } + ] + }, + "time": { + "from": "now-1h", + "to": "now" + }, + "timezone": "default", + "title": "IBM MQ - topics overview", + "uid": "ibm-mq-topics-overview" + } \ No newline at end of file diff --git a/ibm-mq-mixin/g.libsonnet b/ibm-mq-mixin/g.libsonnet new file mode 100644 index 000000000..ba90fd9b0 --- /dev/null +++ b/ibm-mq-mixin/g.libsonnet @@ -0,0 +1,3 @@ +// grafonnet must be imported with "g" alias +local g = import './vendor/grafonnet-v11.0.0/main.libsonnet'; +g diff --git a/ibm-mq-mixin/jsonnetfile.json b/ibm-mq-mixin/jsonnetfile.json index 93f3316ec..46d5af011 100644 --- a/ibm-mq-mixin/jsonnetfile.json +++ b/ibm-mq-mixin/jsonnetfile.json @@ -4,8 +4,17 @@ { "source": { "git": { - "remote": "https://github.com/grafana/grafonnet-lib.git", - "subdir": "grafonnet" + "remote": "https://github.com/grafana/grafonnet", + "subdir": "gen/grafonnet-v11.0.0" + } + }, + "version": "main" + }, + { + "source": { + "git": { + "remote": "https://github.com/grafana/jsonnet-libs.git", + "subdir": "common-lib" } }, "version": "master" diff --git a/ibm-mq-mixin/links.libsonnet b/ibm-mq-mixin/links.libsonnet new file mode 100644 index 000000000..5c9076d1b --- /dev/null +++ b/ibm-mq-mixin/links.libsonnet @@ -0,0 +1,19 @@ +local g = import './g.libsonnet'; + +{ + new(this): { + local link = g.dashboard.link, + clusterOverview: + link.link.new('IBM MQ cluster overview', '/d/' + this.config.uid + '-cluster-overview') + + link.link.options.withKeepTime(true), + queueManagerOverview: + link.link.new('IBM MQ queue manager overview', '/d/' + this.config.uid + '-queue-manager-overview') + + link.link.options.withKeepTime(true), + queueOverview: + link.link.new('IBM MQ queue overview', '/d/' + this.config.uid + '-queue-overview') + + link.link.options.withKeepTime(true), + topicsOverview: + link.link.new('IBM MQ topics overview', '/d/' + this.config.uid + '-topics-overview') + + link.link.options.withKeepTime(true), + }, +} diff --git a/ibm-mq-mixin/main.libsonnet b/ibm-mq-mixin/main.libsonnet new file mode 100644 index 000000000..ffaad3861 --- /dev/null +++ b/ibm-mq-mixin/main.libsonnet @@ -0,0 +1,57 @@ +local alerts = import './alerts.libsonnet'; +local config = import './config.libsonnet'; +local dashboards = import './dashboards.libsonnet'; +local g = import './g.libsonnet'; +local commonlib = import 'common-lib/common/main.libsonnet'; + +{ + new(): { + local this = self, + config: config, + + signals: + { + [sig]: commonlib.signals.unmarshallJsonMulti( + this.config.signals[sig], + type=this.config.metricsSource + ) + for sig in std.objectFields(this.config.signals) + }, + + grafana: { + variables: commonlib.variables.new( + filteringSelector=this.config.filteringSelector, + groupLabels=this.config.groupLabels, + instanceLabels=this.config.instanceLabels, + varMetric='ibmmq_qmgr_commit_count', + customAllValue='.+', + enableLokiLogs=this.config.enableLokiLogs, + ), + annotations: {}, + links: (import './links.libsonnet').new(this), + panels: (import './panels.libsonnet').new(this), + rows: (import './rows.libsonnet').new(this), + dashboards: dashboards.new(this), + }, + + prometheus: { + alerts: alerts.new(this), + recordingRules: {}, + }, + + asMonitoringMixin():: { + grafanaDashboards+:: { + [name + '.json']: this.grafana.dashboards[name] + for name in std.objectFields(this.grafana.dashboards) + }, + + prometheusAlerts+:: this.prometheus.alerts, + + prometheusRules+:: this.prometheus.recordingRules, + }, + }, + + withConfigMixin(config): { + config+: config, + }, +} diff --git a/ibm-mq-mixin/mixin.libsonnet b/ibm-mq-mixin/mixin.libsonnet index 4d987cf31..bcbd6fa8f 100644 --- a/ibm-mq-mixin/mixin.libsonnet +++ b/ibm-mq-mixin/mixin.libsonnet @@ -1,3 +1,3 @@ -(import 'dashboards/dashboards.libsonnet') + -(import 'alerts/alerts.libsonnet') + -(import 'config.libsonnet') +local main = import './main.libsonnet'; + +main.new().asMonitoringMixin() diff --git a/ibm-mq-mixin/panels.libsonnet b/ibm-mq-mixin/panels.libsonnet new file mode 100644 index 000000000..c0c1a3d16 --- /dev/null +++ b/ibm-mq-mixin/panels.libsonnet @@ -0,0 +1,591 @@ +local g = import './g.libsonnet'; +local commonlib = import 'common-lib/common/main.libsonnet'; + +{ + new(this): { + local signals = this.signals, + + // Cluster overview panels + clusterCount: + g.panel.stat.new('Clusters') + + g.panel.stat.queryOptions.withTargets([ + g.query.prometheus.new('${prometheus_datasource}', 'count(count(ibmmq_qmgr_commit_count{%(filteringSelector)s}) by (mq_cluster))' % this.config) + + g.query.prometheus.withIntervalFactor(2) + + g.query.prometheus.withLegendFormat('{{job}} - {{mq_cluster}}'), + ]) + + g.panel.stat.options.reduceOptions.withCalcs(['lastNotNull']) + + g.panel.stat.standardOptions.withDecimals(0) + + g.panel.stat.standardOptions.thresholds.withSteps([ + g.panel.stat.thresholdStep.withColor('green'), + g.panel.stat.thresholdStep.withColor('red') + g.panel.stat.thresholdStep.withValue(0), + ]) + + g.panel.stat.options.withColorMode('value') + + g.panel.stat.options.withGraphMode('none') + + g.panel.stat.options.withTextMode('auto') + + g.panel.stat.panelOptions.withDescription('The unique number of clusters being reported.'), + + queueManagerCount: + g.panel.stat.new('Queue managers') + + g.panel.stat.queryOptions.withTargets([ + g.query.prometheus.new('${prometheus_datasource}', 'count(count(ibmmq_qmgr_commit_count{%(filteringSelector)s}) by (qmgr, mq_cluster))' % this.config) + + g.query.prometheus.withIntervalFactor(2) + + g.query.prometheus.withLegendFormat(''), + ]) + + g.panel.stat.options.reduceOptions.withCalcs(['lastNotNull']) + + g.panel.stat.standardOptions.withDecimals(0) + + g.panel.stat.standardOptions.thresholds.withSteps([ + g.panel.stat.thresholdStep.withColor('green'), + g.panel.stat.thresholdStep.withColor('red') + g.panel.stat.thresholdStep.withValue(0), + ]) + + g.panel.stat.options.withColorMode('value') + + g.panel.stat.options.withGraphMode('none') + + g.panel.stat.options.withTextMode('auto') + + g.panel.stat.panelOptions.withDescription('The unique number of queue managers in the cluster being reported.'), + + topicCount: + g.panel.stat.new('Topics') + + g.panel.stat.queryOptions.withTargets([ + g.query.prometheus.new('${prometheus_datasource}', 'count(count(ibmmq_topic_messages_received{%(filteringSelector)s}) by (topic, qmgr))' % this.config) + + g.query.prometheus.withIntervalFactor(2) + + g.query.prometheus.withLegendFormat(''), + ]) + + g.panel.stat.options.reduceOptions.withCalcs(['lastNotNull']) + + g.panel.stat.standardOptions.withDecimals(0) + + g.panel.stat.standardOptions.thresholds.withSteps([ + g.panel.stat.thresholdStep.withColor('green'), + g.panel.stat.thresholdStep.withColor('red') + g.panel.stat.thresholdStep.withValue(0), + ]) + + g.panel.stat.options.withColorMode('value') + + g.panel.stat.options.withGraphMode('none') + + g.panel.stat.options.withTextMode('auto') + + g.panel.stat.panelOptions.withDescription('The unique number of topics in the cluster.'), + + queueCount: + g.panel.stat.new('Queues') + + g.panel.stat.queryOptions.withTargets([ + g.query.prometheus.new('${prometheus_datasource}', 'count(count(ibmmq_queue_depth{%(filteringSelector)s}) by (queue, mq_cluster, qmgr))' % this.config) + + g.query.prometheus.withIntervalFactor(2) + + g.query.prometheus.withLegendFormat(''), + ]) + + g.panel.stat.options.reduceOptions.withCalcs(['lastNotNull']) + + g.panel.stat.standardOptions.withDecimals(0) + + g.panel.stat.standardOptions.thresholds.withSteps([ + g.panel.stat.thresholdStep.withColor('green'), + g.panel.stat.thresholdStep.withColor('red') + g.panel.stat.thresholdStep.withValue(0), + ]) + + g.panel.stat.options.withColorMode('value') + + g.panel.stat.options.withGraphMode('none') + + g.panel.stat.options.withTextMode('auto') + + g.panel.stat.panelOptions.withDescription('The unique number of queues in the cluster.'), + + clusterQueueOperations: + g.panel.pieChart.new('Queue operations') + + g.panel.pieChart.queryOptions.withTargets([ + signals.queue.mqinqCount.asTarget() + g.query.prometheus.withIntervalFactor(2), + signals.queue.mqgetCount.asTarget() + g.query.prometheus.withIntervalFactor(2), + signals.queue.mqopenCount.asTarget() + g.query.prometheus.withIntervalFactor(2), + signals.queue.mqputMqput1Count.asTarget() + g.query.prometheus.withIntervalFactor(2), + ]) + + g.panel.pieChart.standardOptions.withUnit('operations') + + g.panel.pieChart.standardOptions.withOverrides([ + g.panel.pieChart.fieldOverride.byName.new('MQINQ') + + g.panel.pieChart.fieldOverride.byName.withProperty('custom.hideFrom', { legend: false, tooltip: false, viz: false }), + g.panel.pieChart.fieldOverride.byName.new('MQGET') + + g.panel.pieChart.fieldOverride.byName.withProperty('custom.hideFrom', { legend: false, tooltip: false, viz: false }), + g.panel.pieChart.fieldOverride.byName.new('MQOPEN') + + g.panel.pieChart.fieldOverride.byName.withProperty('custom.hideFrom', { legend: false, tooltip: false, viz: false }), + g.panel.pieChart.fieldOverride.byName.new('MQPUT/MQPUT1') + + g.panel.pieChart.fieldOverride.byName.withProperty('custom.hideFrom', { legend: false, tooltip: false, viz: false }), + ]) + + g.panel.pieChart.options.legend.withDisplayMode('list') + + g.panel.pieChart.options.legend.withPlacement('bottom') + + g.panel.pieChart.panelOptions.withDescription('The number of queue operations of the cluster. '), + + clusterStatus: + g.panel.table.new('Cluster status') + + g.panel.table.queryOptions.withTargets([ + signals.cluster.suspend.asTarget() + g.query.prometheus.withIntervalFactor(2), + ]) + + g.panel.table.queryOptions.withTransformations([ + g.panel.table.transformation.withId('joinByLabels') + + g.panel.table.transformation.withOptions({ join: ['cluster', 'mq_cluster', 'qmgr'], value: '__name__' }), + g.panel.table.transformation.withId('organize') + + g.panel.table.transformation.withOptions({ + renameByName: { + job: 'Job', + mq_cluster: 'Cluster', + 'ibmmq_cluster_suspend{job="integrations/ibmmq", mq_cluster="cluster0"}': 'Status', + }, + }), + ]) + + g.panel.table.standardOptions.withMappings([ + g.panel.table.standardOptions.mapping.ValueMap.withType() + + g.panel.table.standardOptions.mapping.ValueMap.withOptions({ + '0': { color: 'green', index: 0, text: 'Not suspended' }, + '1': { color: 'red', index: 1, text: 'Suspended' }, + }), + ]) + + g.panel.table.standardOptions.color.withMode('fixed') + + g.panel.table.options.withShowHeader(true) + + g.panel.table.options.footer.withEnablePagination(false) + + g.panel.table.standardOptions.withOverrides([ + g.panel.table.fieldOverride.byName.new('Status') + + g.panel.table.fieldOverride.byName.withProperty('unit', 'short') + + g.panel.table.fieldOverride.byName.withProperty('custom.align', 'center') + + g.panel.table.fieldOverride.byName.withProperty('custom.cellOptions', { type: 'color-text' }), + ]) + + g.panel.table.panelOptions.withDescription('The status of the cluster.'), + + queueManagerStatus: + g.panel.table.new('Queue manager status') + + g.panel.table.queryOptions.withTargets([ + signals.qmgr.status.asTarget() + g.query.prometheus.withIntervalFactor(2), + ]) + + g.panel.table.queryOptions.withTransformations([ + g.panel.table.transformation.withId('joinByLabels') + + g.panel.table.transformation.withOptions({ join: ['cluster', 'mq_cluster', 'qmgr'], value: '__name__' }), + g.panel.table.transformation.withId('organize') + + g.panel.table.transformation.withOptions({ + renameByName: { + job: 'Job', + mq_cluster: 'Cluster', + qmgr: 'Queue manager', + 'ibmmq_qmgr_status{job="integrations/ibmmq", mq_cluster="cluster0", qmgr="qm0"}': 'Status', + }, + }), + ]) + + g.panel.table.standardOptions.withMappings([ + g.panel.table.standardOptions.mapping.ValueMap.withType() + + g.panel.table.standardOptions.mapping.ValueMap.withOptions({ + '-1': { color: 'text', index: 0, text: 'N/A' }, + '0': { color: 'red', index: 1, text: 'Stopped' }, + '1': { color: 'yellow', index: 2, text: 'Starting' }, + '2': { color: 'green', index: 3, text: 'Running' }, + '3': { color: 'yellow', index: 4, text: 'Quiescing' }, + '4': { color: 'yellow', index: 5, text: 'Stopping' }, + '5': { color: 'blue', index: 6, text: 'Standby' }, + }), + ]) + + g.panel.table.standardOptions.color.withMode('fixed') + + g.panel.table.options.withShowHeader(true) + + g.panel.table.options.footer.withEnablePagination(false) + + g.panel.table.standardOptions.withOverrides([ + g.panel.table.fieldOverride.byName.new('Status') + + g.panel.table.fieldOverride.byName.withProperty('unit', 'short') + + g.panel.table.fieldOverride.byName.withProperty('custom.align', 'center') + + g.panel.table.fieldOverride.byName.withProperty('custom.cellOptions', { type: 'color-text' }), + ]) + + g.panel.table.panelOptions.withDescription('The status of the queue manager (-1=N/A, 0=Stopped, 1=Starting, 2=Running, 3=Quiescing, 4=Stopping, 5=Standby).'), + + transmissionQueueTime: + g.panel.timeSeries.new('Transmission queue time') + + g.panel.timeSeries.queryOptions.withTargets([ + signals.channel.xmitqTimeShort.asTarget() + g.query.prometheus.withIntervalFactor(2), + signals.channel.xmitqTimeLong.asTarget() + g.query.prometheus.withIntervalFactor(2), + ]) + + g.panel.timeSeries.standardOptions.withUnit('µs') + + g.panel.timeSeries.standardOptions.withDecimals(2) + + g.panel.timeSeries.options.legend.withDisplayMode('table') + + g.panel.timeSeries.options.legend.withPlacement('right') + + g.panel.timeSeries.options.legend.withShowLegend(true) + + g.panel.timeSeries.options.legend.withCalcs(['last', 'mean', 'max']) + + g.panel.timeSeries.options.tooltip.withMode('multi') + + g.panel.timeSeries.options.tooltip.withSort('desc') + + g.panel.timeSeries.fieldConfig.defaults.custom.withFillOpacity(10) + + g.panel.timeSeries.panelOptions.withDescription('The time taken for messages to be transmitted over sender channels.'), + + // Queue manager overview panels + activeListeners: + g.panel.stat.new('Active listeners') + + g.panel.stat.queryOptions.withTargets([ + signals.qmgr.activeListeners.asTarget() + g.query.prometheus.withIntervalFactor(2), + ]) + + g.panel.stat.options.reduceOptions.withCalcs(['lastNotNull']) + + g.panel.stat.standardOptions.thresholds.withSteps([ + g.panel.stat.thresholdStep.withColor('red'), + g.panel.stat.thresholdStep.withColor('green') + g.panel.stat.thresholdStep.withValue(1), + ]) + + g.panel.stat.standardOptions.color.withMode('thresholds') + + g.panel.stat.options.withColorMode('value') + + g.panel.stat.options.withGraphMode('none') + + g.panel.stat.options.withTextMode('auto') + + g.panel.stat.panelOptions.withDescription('The number of active listeners for the queue manager.'), + + activeConnections: + g.panel.stat.new('Active connections') + + g.panel.stat.queryOptions.withTargets([ + signals.qmgr.connectionCount.asTarget() + g.query.prometheus.withIntervalFactor(2), + ]) + + g.panel.stat.options.reduceOptions.withCalcs(['lastNotNull']) + + g.panel.stat.standardOptions.thresholds.withSteps([ + g.panel.stat.thresholdStep.withColor('red'), + g.panel.stat.thresholdStep.withColor('green') + g.panel.stat.thresholdStep.withValue(1), + ]) + + g.panel.stat.standardOptions.color.withMode('thresholds') + + g.panel.stat.options.withColorMode('value') + + g.panel.stat.options.withGraphMode('none') + + g.panel.stat.options.withTextMode('auto') + + g.panel.stat.panelOptions.withDescription('The number of active connections for the queue manager.'), + + queuesManaged: + g.panel.stat.new('Queues') + + g.panel.stat.queryOptions.withTargets([ + g.query.prometheus.new('${prometheus_datasource}', 'count(count(ibmmq_queue_depth{%(filteringSelector)s}) by (queue, mq_cluster, qmgr))' % this.config) + + g.query.prometheus.withIntervalFactor(2) + + g.query.prometheus.withLegendFormat(''), + ]) + + g.panel.stat.options.reduceOptions.withCalcs(['lastNotNull']) + + g.panel.stat.standardOptions.thresholds.withSteps([ + g.panel.stat.thresholdStep.withColor('red'), + g.panel.stat.thresholdStep.withColor('green') + g.panel.stat.thresholdStep.withValue(1), + ]) + + g.panel.stat.standardOptions.color.withMode('thresholds') + + g.panel.stat.options.withColorMode('value') + + g.panel.stat.options.withGraphMode('none') + + g.panel.stat.options.withTextMode('auto') + + g.panel.stat.panelOptions.withDescription('The unique number of queues being managed by the queue manager.'), + + memoryUtilization: + g.panel.timeSeries.new('Estimated memory utilization') + + g.panel.timeSeries.queryOptions.withTargets([ + signals.qmgr.memoryUtilization.asTarget() + g.query.prometheus.withIntervalFactor(2), + ]) + + g.panel.timeSeries.standardOptions.withUnit('percentunit') + + g.panel.timeSeries.standardOptions.withMin(0) + + g.panel.timeSeries.standardOptions.withMax(1) + + g.panel.timeSeries.options.legend.withDisplayMode('table') + + g.panel.timeSeries.options.legend.withPlacement('right') + + g.panel.timeSeries.options.legend.withShowLegend(true) + + g.panel.timeSeries.options.legend.withCalcs(['last', 'mean', 'max']) + + g.panel.timeSeries.options.tooltip.withMode('multi') + + g.panel.timeSeries.options.tooltip.withSort('desc') + + g.panel.timeSeries.fieldConfig.defaults.custom.withFillOpacity(10) + + g.panel.timeSeries.panelOptions.withDescription('The estimated memory usage of the queue managers.'), + + cpuUsage: + g.panel.timeSeries.new('CPU usage') + + g.panel.timeSeries.queryOptions.withTargets([ + signals.qmgr.userCpuTimePercentage.asTarget() + g.query.prometheus.withIntervalFactor(2), + signals.qmgr.systemCpuTimePercentage.asTarget() + g.query.prometheus.withIntervalFactor(2), + ]) + + g.panel.timeSeries.standardOptions.withUnit('percent') + + g.panel.timeSeries.standardOptions.withMin(0) + + g.panel.timeSeries.standardOptions.withMax(100) + + g.panel.timeSeries.options.legend.withDisplayMode('table') + + g.panel.timeSeries.options.legend.withPlacement('right') + + g.panel.timeSeries.options.legend.withShowLegend(true) + + g.panel.timeSeries.options.legend.withCalcs(['last', 'mean', 'max']) + + g.panel.timeSeries.options.tooltip.withMode('multi') + + g.panel.timeSeries.options.tooltip.withSort('desc') + + g.panel.timeSeries.fieldConfig.defaults.custom.withFillOpacity(10) + + g.panel.timeSeries.panelOptions.withDescription('The CPU usage of the queue managers.'), + + diskUsage: + g.panel.timeSeries.new('Disk usage') + + g.panel.timeSeries.queryOptions.withTargets([ + signals.qmgr.queueManagerFileSystemInUseBytes.asTarget() + g.query.prometheus.withIntervalFactor(2), + ]) + + g.panel.timeSeries.standardOptions.withUnit('decbytes') + + g.panel.timeSeries.options.legend.withDisplayMode('table') + + g.panel.timeSeries.options.legend.withPlacement('right') + + g.panel.timeSeries.options.legend.withShowLegend(true) + + g.panel.timeSeries.options.legend.withCalcs(['last', 'mean', 'max']) + + g.panel.timeSeries.options.tooltip.withMode('multi') + + g.panel.timeSeries.options.tooltip.withSort('desc') + + g.panel.timeSeries.fieldConfig.defaults.custom.withFillOpacity(10) + + g.panel.timeSeries.panelOptions.withDescription('The disk allocated to the queue manager that is being used.'), + + freeDiskSpace: + g.panel.timeSeries.new('Free disk space') + + g.panel.timeSeries.queryOptions.withTargets([ + signals.qmgr.queueManagerFileSystemFreeSpacePercentage.asTarget() + g.query.prometheus.withIntervalFactor(2), + ]) + + g.panel.timeSeries.standardOptions.withUnit('percent') + + g.panel.timeSeries.standardOptions.withMin(0) + + g.panel.timeSeries.standardOptions.withMax(100) + + g.panel.timeSeries.options.legend.withDisplayMode('table') + + g.panel.timeSeries.options.legend.withPlacement('right') + + g.panel.timeSeries.options.legend.withShowLegend(true) + + g.panel.timeSeries.options.legend.withCalcs(['last', 'mean', 'max']) + + g.panel.timeSeries.options.tooltip.withMode('multi') + + g.panel.timeSeries.options.tooltip.withSort('desc') + + g.panel.timeSeries.fieldConfig.defaults.custom.withFillOpacity(10) + + g.panel.timeSeries.panelOptions.withDescription('The percentage of free disk space available for the queue manager.'), + + commitRate: + g.panel.timeSeries.new('Commit rate') + + g.panel.timeSeries.queryOptions.withTargets([ + signals.qmgr.commitCount.asTarget() + g.query.prometheus.withIntervalFactor(2), + ]) + + g.panel.timeSeries.standardOptions.withUnit('short') + + g.panel.timeSeries.options.legend.withDisplayMode('table') + + g.panel.timeSeries.options.legend.withPlacement('right') + + g.panel.timeSeries.options.legend.withShowLegend(true) + + g.panel.timeSeries.options.legend.withCalcs(['last', 'mean', 'max']) + + g.panel.timeSeries.options.tooltip.withMode('multi') + + g.panel.timeSeries.options.tooltip.withSort('desc') + + g.panel.timeSeries.fieldConfig.defaults.custom.withFillOpacity(10) + + g.panel.timeSeries.panelOptions.withDescription('The rate of commits by the queue manager.'), + + publishedBytes: + g.panel.timeSeries.new('Published bytes') + + g.panel.timeSeries.queryOptions.withTargets([ + signals.qmgr.publishedToSubscribersBytes.asTarget() + g.query.prometheus.withIntervalFactor(2), + ]) + + g.panel.timeSeries.standardOptions.withUnit('decbytes') + + g.panel.timeSeries.options.legend.withDisplayMode('table') + + g.panel.timeSeries.options.legend.withPlacement('right') + + g.panel.timeSeries.options.legend.withShowLegend(true) + + g.panel.timeSeries.options.legend.withCalcs(['last', 'mean', 'max']) + + g.panel.timeSeries.options.tooltip.withMode('multi') + + g.panel.timeSeries.options.tooltip.withSort('desc') + + g.panel.timeSeries.fieldConfig.defaults.custom.withFillOpacity(10) + + g.panel.timeSeries.panelOptions.withDescription('The rate of data being pushed from the queue manager to subscribers.'), + + publishedMessages: + g.panel.timeSeries.new('Published messages') + + g.panel.timeSeries.queryOptions.withTargets([ + signals.qmgr.publishedToSubscribersMessageCount.asTarget() + g.query.prometheus.withIntervalFactor(2), + ]) + + g.panel.timeSeries.standardOptions.withUnit('short') + + g.panel.timeSeries.options.legend.withDisplayMode('table') + + g.panel.timeSeries.options.legend.withPlacement('right') + + g.panel.timeSeries.options.legend.withShowLegend(true) + + g.panel.timeSeries.options.legend.withCalcs(['last', 'mean', 'max']) + + g.panel.timeSeries.options.tooltip.withMode('multi') + + g.panel.timeSeries.options.tooltip.withSort('desc') + + g.panel.timeSeries.fieldConfig.defaults.custom.withFillOpacity(10) + + g.panel.timeSeries.panelOptions.withDescription('The rate of messages being published by the queue manager.'), + + expiredMessages: + g.panel.timeSeries.new('Expired messages') + + g.panel.timeSeries.queryOptions.withTargets([ + signals.qmgr.expiredMessageCount.asTarget() + g.query.prometheus.withIntervalFactor(2), + ]) + + g.panel.timeSeries.standardOptions.withUnit('short') + + g.panel.timeSeries.options.legend.withDisplayMode('table') + + g.panel.timeSeries.options.legend.withPlacement('right') + + g.panel.timeSeries.options.legend.withShowLegend(true) + + g.panel.timeSeries.options.legend.withCalcs(['last', 'mean', 'max']) + + g.panel.timeSeries.options.tooltip.withMode('multi') + + g.panel.timeSeries.options.tooltip.withSort('desc') + + g.panel.timeSeries.fieldConfig.defaults.custom.withFillOpacity(10) + + g.panel.timeSeries.panelOptions.withDescription('The rate of expired messages for the queue manager.'), + + logWriteLatency: + g.panel.timeSeries.new('Log write latency') + + g.panel.timeSeries.queryOptions.withTargets([ + signals.qmgr.logWriteLatencySeconds.asTarget() + g.query.prometheus.withIntervalFactor(2), + ]) + + g.panel.timeSeries.standardOptions.withUnit('s') + + g.panel.timeSeries.options.legend.withDisplayMode('table') + + g.panel.timeSeries.options.legend.withPlacement('right') + + g.panel.timeSeries.options.legend.withShowLegend(true) + + g.panel.timeSeries.options.legend.withCalcs(['last', 'mean', 'max']) + + g.panel.timeSeries.options.tooltip.withMode('multi') + + g.panel.timeSeries.options.tooltip.withSort('desc') + + g.panel.timeSeries.fieldConfig.defaults.custom.withFillOpacity(10) + + g.panel.timeSeries.panelOptions.withDescription('The recent latency of log writes.'), + + logUsage: + g.panel.timeSeries.new('Log usage') + + g.panel.timeSeries.queryOptions.withTargets([ + signals.qmgr.logInUseBytes.asTarget() + g.query.prometheus.withIntervalFactor(2), + ]) + + g.panel.timeSeries.standardOptions.withUnit('decbytes') + + g.panel.timeSeries.options.legend.withDisplayMode('table') + + g.panel.timeSeries.options.legend.withPlacement('right') + + g.panel.timeSeries.options.legend.withShowLegend(true) + + g.panel.timeSeries.options.legend.withCalcs(['last', 'mean', 'max']) + + g.panel.timeSeries.options.tooltip.withMode('multi') + + g.panel.timeSeries.options.tooltip.withSort('desc') + + g.panel.timeSeries.fieldConfig.defaults.custom.withFillOpacity(10) + + g.panel.timeSeries.panelOptions.withDescription('The amount of data on the filesystem occupied by queue manager logs.'), + + // Queue overview panels + queueAverageTime: + g.panel.timeSeries.new('Average queue time') + + g.panel.timeSeries.queryOptions.withTargets([ + signals.queue.averageQueueTimeSeconds.asTarget() + g.query.prometheus.withIntervalFactor(2), + ]) + + g.panel.timeSeries.standardOptions.withUnit('s') + + g.panel.timeSeries.options.legend.withDisplayMode('table') + + g.panel.timeSeries.options.legend.withPlacement('right') + + g.panel.timeSeries.options.legend.withShowLegend(true) + + g.panel.timeSeries.options.legend.withCalcs(['last', 'mean', 'max']) + + g.panel.timeSeries.options.tooltip.withMode('multi') + + g.panel.timeSeries.options.tooltip.withSort('desc') + + g.panel.timeSeries.fieldConfig.defaults.custom.withFillOpacity(10) + + g.panel.timeSeries.panelOptions.withDescription('The average amount of time a message spends in the queue.'), + + queueExpiredMessages: + g.panel.timeSeries.new('Expired messages') + + g.panel.timeSeries.queryOptions.withTargets([ + signals.queue.expiredMessages.asTarget() + g.query.prometheus.withIntervalFactor(2), + ]) + + g.panel.timeSeries.standardOptions.withUnit('short') + + g.panel.timeSeries.options.legend.withDisplayMode('table') + + g.panel.timeSeries.options.legend.withPlacement('right') + + g.panel.timeSeries.options.legend.withShowLegend(true) + + g.panel.timeSeries.options.legend.withCalcs(['last', 'mean', 'max']) + + g.panel.timeSeries.options.tooltip.withMode('multi') + + g.panel.timeSeries.options.tooltip.withSort('desc') + + g.panel.timeSeries.fieldConfig.defaults.custom.withFillOpacity(10) + + g.panel.timeSeries.panelOptions.withDescription('The rate of expired messages in the queue.'), + + queueDepth: + g.panel.timeSeries.new('Depth') + + g.panel.timeSeries.queryOptions.withTargets([ + signals.queue.depth.asTarget() + g.query.prometheus.withIntervalFactor(2), + ]) + + g.panel.timeSeries.standardOptions.withUnit('short') + + g.panel.timeSeries.options.legend.withDisplayMode('table') + + g.panel.timeSeries.options.legend.withPlacement('right') + + g.panel.timeSeries.options.legend.withShowLegend(true) + + g.panel.timeSeries.options.legend.withCalcs(['last', 'mean', 'max']) + + g.panel.timeSeries.options.tooltip.withMode('multi') + + g.panel.timeSeries.options.tooltip.withSort('desc') + + g.panel.timeSeries.fieldConfig.defaults.custom.withFillOpacity(10) + + g.panel.timeSeries.panelOptions.withDescription('The number of active messages in the queue.'), + + queueOperationThroughput: + g.panel.timeSeries.new('Operation throughput') + + g.panel.timeSeries.queryOptions.withTargets([ + signals.queue.mqgetBytes.asTarget() + g.query.prometheus.withIntervalFactor(2), + signals.queue.mqputBytes.asTarget() + g.query.prometheus.withIntervalFactor(2), + ]) + + g.panel.timeSeries.standardOptions.withUnit('decbytes') + + g.panel.timeSeries.options.legend.withDisplayMode('table') + + g.panel.timeSeries.options.legend.withPlacement('right') + + g.panel.timeSeries.options.legend.withShowLegend(true) + + g.panel.timeSeries.options.legend.withCalcs(['last', 'mean', 'max']) + + g.panel.timeSeries.options.tooltip.withMode('multi') + + g.panel.timeSeries.options.tooltip.withSort('desc') + + g.panel.timeSeries.fieldConfig.defaults.custom.withFillOpacity(10) + + g.panel.timeSeries.panelOptions.withDescription('The throughput of operations on the queue.'), + + queueOperations: + g.panel.timeSeries.new('Operations') + + g.panel.timeSeries.queryOptions.withTargets([ + signals.queue.mqsetCount.asTarget() + g.query.prometheus.withIntervalFactor(2), + signals.queue.mqinqCount.asTarget() + g.query.prometheus.withIntervalFactor(2), + signals.queue.mqgetCount.asTarget() + g.query.prometheus.withIntervalFactor(2), + signals.queue.mqopenCount.asTarget() + g.query.prometheus.withIntervalFactor(2), + signals.queue.mqcloseCount.asTarget() + g.query.prometheus.withIntervalFactor(2), + signals.queue.mqputMqput1Count.asTarget() + g.query.prometheus.withIntervalFactor(2), + ]) + + g.panel.timeSeries.standardOptions.withUnit('operations') + + g.panel.timeSeries.options.legend.withDisplayMode('table') + + g.panel.timeSeries.options.legend.withPlacement('right') + + g.panel.timeSeries.options.legend.withShowLegend(true) + + g.panel.timeSeries.options.legend.withCalcs(['last', 'mean', 'max']) + + g.panel.timeSeries.options.tooltip.withMode('multi') + + g.panel.timeSeries.options.tooltip.withSort('desc') + + g.panel.timeSeries.fieldConfig.defaults.custom.withFillOpacity(10) + + g.panel.timeSeries.panelOptions.withDescription('The rate of operations on the queue.'), + + // Topics overview panels + topicMessagesReceived: + g.panel.timeSeries.new('Topic messages received') + + g.panel.timeSeries.queryOptions.withTargets([ + signals.topic.messagesReceived.asTarget() + g.query.prometheus.withIntervalFactor(2), + ]) + + g.panel.timeSeries.standardOptions.withUnit('short') + + g.panel.timeSeries.options.legend.withDisplayMode('table') + + g.panel.timeSeries.options.legend.withPlacement('right') + + g.panel.timeSeries.options.legend.withShowLegend(true) + + g.panel.timeSeries.options.legend.withCalcs(['last', 'mean', 'max']) + + g.panel.timeSeries.options.tooltip.withMode('multi') + + g.panel.timeSeries.options.tooltip.withSort('desc') + + g.panel.timeSeries.fieldConfig.defaults.custom.withFillOpacity(10) + + g.panel.timeSeries.panelOptions.withDescription('Received messages per topic.'), + + timeSinceLastMessage: + g.panel.barGauge.new('Time since last message') + + g.panel.barGauge.queryOptions.withTargets([ + signals.topic.timeSinceMsgReceived.asTarget() + g.query.prometheus.withIntervalFactor(2), + ]) + + g.panel.barGauge.standardOptions.withUnit('s') + + g.panel.barGauge.standardOptions.color.withMode('thresholds') + + g.panel.barGauge.options.reduceOptions.withCalcs(['lastNotNull']) + + g.panel.barGauge.options.withDisplayMode('basic') + + g.panel.barGauge.options.withOrientation('horizontal') + + g.panel.barGauge.options.withShowUnfilled(true) + + g.panel.barGauge.options.withValueMode('color') + + g.panel.barGauge.panelOptions.withDescription('The time since the topic last received a message.'), + + topicSubscribers: + g.panel.timeSeries.new('Topic subscribers') + + g.panel.timeSeries.queryOptions.withTargets([ + signals.topic.subscriberCount.asTarget() + g.query.prometheus.withIntervalFactor(2), + ]) + + g.panel.timeSeries.standardOptions.withUnit('short') + + g.panel.timeSeries.options.legend.withDisplayMode('table') + + g.panel.timeSeries.options.legend.withPlacement('right') + + g.panel.timeSeries.options.legend.withShowLegend(true) + + g.panel.timeSeries.options.legend.withCalcs(['last', 'mean', 'max']) + + g.panel.timeSeries.options.tooltip.withMode('multi') + + g.panel.timeSeries.options.tooltip.withSort('desc') + + g.panel.timeSeries.fieldConfig.defaults.custom.withFillOpacity(10) + + g.panel.timeSeries.panelOptions.withDescription('The number of subscribers per topic.'), + + topicPublishers: + g.panel.timeSeries.new('Topic publishers') + + g.panel.timeSeries.queryOptions.withTargets([ + signals.topic.publisherCount.asTarget() + g.query.prometheus.withIntervalFactor(2), + ]) + + g.panel.timeSeries.standardOptions.withUnit('short') + + g.panel.timeSeries.options.legend.withDisplayMode('table') + + g.panel.timeSeries.options.legend.withPlacement('right') + + g.panel.timeSeries.options.legend.withShowLegend(true) + + g.panel.timeSeries.options.legend.withCalcs(['last', 'mean', 'max']) + + g.panel.timeSeries.options.tooltip.withMode('multi') + + g.panel.timeSeries.options.tooltip.withSort('desc') + + g.panel.timeSeries.fieldConfig.defaults.custom.withFillOpacity(10) + + g.panel.timeSeries.panelOptions.withDescription('The number of publishers per topic.'), + + subscriptionMessagesReceived: + g.panel.timeSeries.new('Subscription messages received') + + g.panel.timeSeries.queryOptions.withTargets([ + signals.subscription.messagesReceived.asTarget() + g.query.prometheus.withIntervalFactor(2), + ]) + + g.panel.timeSeries.standardOptions.withUnit('short') + + g.panel.timeSeries.options.legend.withDisplayMode('table') + + g.panel.timeSeries.options.legend.withPlacement('right') + + g.panel.timeSeries.options.legend.withShowLegend(true) + + g.panel.timeSeries.options.legend.withCalcs(['last', 'mean', 'max']) + + g.panel.timeSeries.options.tooltip.withMode('multi') + + g.panel.timeSeries.options.tooltip.withSort('desc') + + g.panel.timeSeries.fieldConfig.defaults.custom.withFillOpacity(10) + + g.panel.timeSeries.panelOptions.withDescription('The rate of messages a subscription receives.'), + + subscriptionStatus: + g.panel.table.new('Subscription status') + + g.panel.table.queryOptions.withTargets([ + signals.subscription.timeSinceMessagePublished.asTarget() + g.query.prometheus.withIntervalFactor(2), + ]) + + g.panel.table.queryOptions.withTransformations([ + g.panel.table.transformation.withId('joinByLabels') + + g.panel.table.transformation.withOptions({ value: '__name__' }), + g.panel.table.transformation.withId('organize') + + g.panel.table.transformation.withOptions({ + renameByName: { + job: 'Job', + mq_cluster: 'Cluster', + qmgr: 'Queue manager', + subscription: 'Subscription', + 'ibmmq_subscription_time_since_message_published{job="integrations/ibmmq", mq_cluster="cluster0", qmgr="qm0", subscription="sub0"}': 'Time since message published', + }, + }), + ]) + + g.panel.table.standardOptions.withUnit('s') + + g.panel.table.options.withShowHeader(true) + + g.panel.table.options.footer.withEnablePagination(false) + + g.panel.table.standardOptions.withOverrides([ + g.panel.table.fieldOverride.byName.new('Time since message published') + + g.panel.table.fieldOverride.byName.withProperty('unit', 's') + + g.panel.table.fieldOverride.byName.withProperty('custom.align', 'center'), + ]) + + g.panel.table.panelOptions.withDescription('The time since a message was published to the subscription.'), + }, +} diff --git a/ibm-mq-mixin/prometheus_rules_out/prometheus_alerts.yaml b/ibm-mq-mixin/prometheus_rules_out/prometheus_alerts.yaml index 8e5ba8d4a..067488ae5 100644 --- a/ibm-mq-mixin/prometheus_rules_out/prometheus_alerts.yaml +++ b/ibm-mq-mixin/prometheus_rules_out/prometheus_alerts.yaml @@ -3,7 +3,7 @@ groups: rules: - alert: IBMMQExpiredMessages annotations: - description: The number of expired messages in the {{$labels.qmgr}} is {{$labels.value}} which is above the threshold of 2. + description: The number of expired messages in the {{$labels.qmgr}} is {{$value}} which is above the threshold of 2. summary: There are expired messages, which imply that application resilience is failing. expr: | sum without (description,hostname,instance,job,platform) (ibmmq_qmgr_expired_message_count) > 2 @@ -12,7 +12,7 @@ groups: severity: critical - alert: IBMMQStaleMessages annotations: - description: A stale message with an age of {{$labels.value}} has been sitting in the {{$labels.queue}} which is above the threshold of 300s. + description: A stale message with an age of {{$value}} has been sitting in the {{$labels.queue}} which is above the threshold of 300 seconds. summary: Stale messages have been detected. expr: | sum without (description,instance,job,platform) (ibmmq_queue_oldest_message_age) >= 300 @@ -21,16 +21,16 @@ groups: severity: warning - alert: IBMMQLowDiskSpace annotations: - description: The amount of disk space available for {{$labels.qmgr}} is at {{$labels.value}}% which is below the threshold of 5%. + description: The amount of disk space available for {{$labels.qmgr}} is at {{$value}}% which is below the threshold of 5%. summary: There is limited disk available for a queue manager. expr: | sum without (description,hostname,instance,job,platform) (ibmmq_qmgr_queue_manager_file_system_free_space_percentage) <= 5 for: 5m labels: severity: critical - - alert: IBMMQHighQueueManagerCpuUsage + - alert: IBMMQHighQMgrCpuUsage annotations: - description: The amount of CPU usage for the queue manager {{$labels.qmgr}} is at {{$labels.value}}% which is above the threshold of 85%. + description: The amount of CPU usage for the queue manager {{$labels.qmgr}} is at {{$value}}% which is above the threshold of 85%. summary: There is a high CPU usage estimate for a queue manager. expr: | sum without (description,hostname,instance,job,platform) (ibmmq_qmgr_user_cpu_time_estimate_for_queue_manager_percentage) >= 85 diff --git a/ibm-mq-mixin/rows.libsonnet b/ibm-mq-mixin/rows.libsonnet new file mode 100644 index 000000000..1fedf5ab1 --- /dev/null +++ b/ibm-mq-mixin/rows.libsonnet @@ -0,0 +1,94 @@ +local g = import './g.libsonnet'; + +{ + new(this): { + local panels = this.grafana.panels, + + // Cluster overview rows + clusterOverviewStats: + g.panel.row.new('Cluster overview') + + g.panel.row.withPanels([ + panels.clusterCount + g.panel.stat.gridPos.withW(4) + g.panel.stat.gridPos.withH(7), + panels.queueManagerCount + g.panel.stat.gridPos.withW(4) + g.panel.stat.gridPos.withH(7), + panels.topicCount + g.panel.stat.gridPos.withW(4) + g.panel.stat.gridPos.withH(7), + panels.queueCount + g.panel.stat.gridPos.withW(4) + g.panel.stat.gridPos.withH(7), + panels.clusterQueueOperations + g.panel.pieChart.gridPos.withW(8) + g.panel.pieChart.gridPos.withH(15), + ]), + + clusterStatus: + g.panel.row.new('Status') + + g.panel.row.withPanels([ + panels.clusterStatus + g.panel.table.gridPos.withW(16) + g.panel.table.gridPos.withH(4), + panels.queueManagerStatus + g.panel.table.gridPos.withW(16) + g.panel.table.gridPos.withH(4), + ]), + + clusterChannels: + g.panel.row.new('Channels') + + g.panel.row.withPanels([ + panels.transmissionQueueTime + g.panel.timeSeries.gridPos.withW(24) + g.panel.timeSeries.gridPos.withH(8), + ]), + + // Queue manager overview rows + queueManagerOverviewStats: + g.panel.row.new('Overview') + + g.panel.row.withPanels([ + panels.activeListeners + g.panel.stat.gridPos.withW(4) + g.panel.stat.gridPos.withH(7), + panels.activeConnections + g.panel.stat.gridPos.withW(4) + g.panel.stat.gridPos.withH(7), + panels.queuesManaged + g.panel.stat.gridPos.withW(4) + g.panel.stat.gridPos.withH(7), + panels.memoryUtilization + g.panel.timeSeries.gridPos.withW(12) + g.panel.timeSeries.gridPos.withH(7), + ]), + + queueManagerStatus: + g.panel.row.new('Status') + + g.panel.row.withPanels([ + panels.queueManagerStatus + g.panel.table.gridPos.withW(8) + g.panel.table.gridPos.withH(7), + panels.cpuUsage + g.panel.timeSeries.gridPos.withW(8) + g.panel.timeSeries.gridPos.withH(7), + panels.diskUsage + g.panel.timeSeries.gridPos.withW(8) + g.panel.timeSeries.gridPos.withH(7), + ]), + + queueManagerPerformance: + g.panel.row.new('Performance') + + g.panel.row.withPanels([ + panels.freeDiskSpace + g.panel.timeSeries.gridPos.withW(12) + g.panel.timeSeries.gridPos.withH(8), + panels.commitRate + g.panel.timeSeries.gridPos.withW(12) + g.panel.timeSeries.gridPos.withH(8), + panels.publishedBytes + g.panel.timeSeries.gridPos.withW(8) + g.panel.timeSeries.gridPos.withH(8), + panels.publishedMessages + g.panel.timeSeries.gridPos.withW(8) + g.panel.timeSeries.gridPos.withH(8), + panels.expiredMessages + g.panel.timeSeries.gridPos.withW(8) + g.panel.timeSeries.gridPos.withH(8), + ]), + + queueManagerLogs: + g.panel.row.new('Logs') + + g.panel.row.withPanels([ + panels.logWriteLatency + g.panel.timeSeries.gridPos.withW(12) + g.panel.timeSeries.gridPos.withH(8), + panels.logUsage + g.panel.timeSeries.gridPos.withW(12) + g.panel.timeSeries.gridPos.withH(8), + ]), + + // Queue overview rows + queueMetrics: + g.panel.row.new('Queue metrics') + + g.panel.row.withPanels([ + panels.queueAverageTime + g.panel.timeSeries.gridPos.withW(12) + g.panel.timeSeries.gridPos.withH(8), + panels.queueExpiredMessages + g.panel.timeSeries.gridPos.withW(12) + g.panel.timeSeries.gridPos.withH(8), + panels.queueDepth + g.panel.timeSeries.gridPos.withW(24) + g.panel.timeSeries.gridPos.withH(8), + panels.queueOperationThroughput + g.panel.timeSeries.gridPos.withW(9) + g.panel.timeSeries.gridPos.withH(8), + panels.queueOperations + g.panel.timeSeries.gridPos.withW(15) + g.panel.timeSeries.gridPos.withH(8), + ]), + + // Topics overview rows + topics: + g.panel.row.new('Topics') + + g.panel.row.withPanels([ + panels.topicMessagesReceived + g.panel.timeSeries.gridPos.withW(16) + g.panel.timeSeries.gridPos.withH(6), + panels.timeSinceLastMessage + g.panel.barGauge.gridPos.withW(8) + g.panel.barGauge.gridPos.withH(6), + panels.topicSubscribers + g.panel.timeSeries.gridPos.withW(12) + g.panel.timeSeries.gridPos.withH(6), + panels.topicPublishers + g.panel.timeSeries.gridPos.withW(12) + g.panel.timeSeries.gridPos.withH(6), + ]), + + subscriptions: + g.panel.row.new('Subscriptions') + + g.panel.row.withPanels([ + panels.subscriptionMessagesReceived + g.panel.timeSeries.gridPos.withW(24) + g.panel.timeSeries.gridPos.withH(6), + panels.subscriptionStatus + g.panel.table.gridPos.withW(24) + g.panel.table.gridPos.withH(10), + ]), + }, +} diff --git a/ibm-mq-mixin/signals/channel.libsonnet b/ibm-mq-mixin/signals/channel.libsonnet new file mode 100644 index 000000000..9a07ee792 --- /dev/null +++ b/ibm-mq-mixin/signals/channel.libsonnet @@ -0,0 +1,34 @@ +function(this) + { + filteringSelector: this.filteringSelector, + groupLabels: this.groupLabels, + instanceLabels: this.instanceLabels, + aggLevel: 'instance', + aggFunction: 'avg', + signals: { + xmitqTimeShort: { + name: 'Transmission queue time short', + type: 'gauge', + description: 'An average, minimum, or maximum time taken to transmit messages over the channel in recent intervals.', + unit: 'µs', + sources: { + prometheus: { + expr: 'ibmmq_channel_xmitq_time_short{type="SENDER",%(queriesSelector)s}', + legendCustomTemplate: '{{channel}} - short', + }, + }, + }, + xmitqTimeLong: { + name: 'Transmission queue time long', + type: 'gauge', + description: 'Total time taken for messages to be transmitted over the channel.', + unit: 'µs', + sources: { + prometheus: { + expr: 'ibmmq_channel_xmitq_time_long{type=~"SENDER",%(queriesSelector)s}', + legendCustomTemplate: '{{channel}} - long', + }, + }, + }, + }, + } diff --git a/ibm-mq-mixin/signals/cluster.libsonnet b/ibm-mq-mixin/signals/cluster.libsonnet new file mode 100644 index 000000000..359c39405 --- /dev/null +++ b/ibm-mq-mixin/signals/cluster.libsonnet @@ -0,0 +1,22 @@ +function(this) + { + filteringSelector: this.filteringSelector, + groupLabels: this.groupLabels, + instanceLabels: this.instanceLabels, + aggLevel: 'group', + aggFunction: 'sum', + signals: { + suspend: { + name: 'Cluster suspend status', + type: 'gauge', + description: 'The suspension status of the cluster (0 = not suspended, 1 = suspended).', + unit: 'short', + sources: { + prometheus: { + expr: 'ibmmq_cluster_suspend{%(queriesSelector)s}', + legendCustomTemplate: '{{mq_cluster}}', + }, + }, + }, + }, + } diff --git a/ibm-mq-mixin/signals/qmgr.libsonnet b/ibm-mq-mixin/signals/qmgr.libsonnet new file mode 100644 index 000000000..846a64bcc --- /dev/null +++ b/ibm-mq-mixin/signals/qmgr.libsonnet @@ -0,0 +1,226 @@ +function(this) + { + filteringSelector: this.filteringSelector, + groupLabels: this.groupLabels, + instanceLabels: this.instanceLabels, + aggLevel: 'instance', + aggFunction: 'avg', + signals: { + activeListeners: { + name: 'Active listeners', + type: 'gauge', + description: 'The number of active listeners for the queue manager.', + unit: 'short', + sources: { + prometheus: { + expr: 'ibmmq_qmgr_active_listeners{%(queriesSelector)s}', + legendCustomTemplate: '{{qmgr}}', + }, + }, + }, + connectionCount: { + name: 'Connection count', + type: 'gauge', + description: 'The number of active connections for the queue manager.', + unit: 'short', + sources: { + prometheus: { + expr: 'ibmmq_qmgr_connection_count{%(queriesSelector)s}', + legendCustomTemplate: '{{qmgr}}', + }, + }, + }, + status: { + name: 'Queue manager status', + type: 'gauge', + description: 'The status of the queue manager (-1=N/A, 0=Stopped, 1=Starting, 2=Running, 3=Quiescing, 4=Stopping, 5=Standby).', + unit: 'short', + sources: { + prometheus: { + expr: 'ibmmq_qmgr_status{%(queriesSelector)s}', + legendCustomTemplate: '{{qmgr}}', + }, + }, + }, + uptime: { + name: 'Queue manager uptime', + type: 'gauge', + description: 'The uptime of the queue manager.', + unit: 's', + sources: { + prometheus: { + expr: 'ibmmq_qmgr_uptime{%(queriesSelector)s}', + legendCustomTemplate: '{{qmgr}}', + }, + }, + }, + userCpuTimePercentage: { + name: 'User CPU time percentage', + type: 'gauge', + description: 'The user CPU usage percentage of the queue manager.', + unit: 'percent', + sources: { + prometheus: { + expr: 'ibmmq_qmgr_user_cpu_time_percentage{%(queriesSelector)s}', + legendCustomTemplate: '{{qmgr}} - user', + }, + }, + }, + systemCpuTimePercentage: { + name: 'System CPU time percentage', + type: 'gauge', + description: 'The system CPU usage percentage of the queue manager.', + unit: 'percent', + sources: { + prometheus: { + expr: 'ibmmq_qmgr_system_cpu_time_percentage{%(queriesSelector)s}', + legendCustomTemplate: '{{qmgr}} - system', + }, + }, + }, + userCpuTimeEstimatePercentage: { + name: 'User CPU time estimate percentage', + type: 'gauge', + description: 'The estimated user CPU usage percentage for the queue manager.', + unit: 'percent', + sources: { + prometheus: { + expr: 'ibmmq_qmgr_user_cpu_time_estimate_for_queue_manager_percentage{%(queriesSelector)s}', + legendCustomTemplate: '{{qmgr}}', + }, + }, + }, + ramTotalBytes: { + name: 'RAM total bytes', + type: 'gauge', + description: 'The total RAM available to the queue manager.', + unit: 'bytes', + sources: { + prometheus: { + expr: 'ibmmq_qmgr_ram_total_bytes{%(queriesSelector)s}', + legendCustomTemplate: '{{qmgr}}', + }, + }, + }, + ramTotalEstimateBytes: { + name: 'RAM total estimate bytes', + type: 'gauge', + description: 'The estimated total RAM usage of the queue manager.', + unit: 'bytes', + sources: { + prometheus: { + expr: 'ibmmq_qmgr_ram_total_estimate_for_queue_manager_bytes{%(queriesSelector)s}', + legendCustomTemplate: '{{qmgr}}', + }, + }, + }, + memoryUtilization: { + name: 'Memory utilization', + type: 'raw', + description: 'The estimated memory utilization of the queue manager as a ratio.', + unit: 'percentunit', + sources: { + prometheus: { + expr: '(ibmmq_qmgr_ram_total_estimate_for_queue_manager_bytes{%(queriesSelector)s}/ibmmq_qmgr_ram_total_bytes{%(queriesSelector)s})', + legendCustomTemplate: '{{qmgr}}', + }, + }, + }, + queueManagerFileSystemInUseBytes: { + name: 'Queue manager file system in use bytes', + type: 'gauge', + description: 'The disk allocated to the queue manager that is being used.', + unit: 'decbytes', + sources: { + prometheus: { + expr: 'ibmmq_qmgr_queue_manager_file_system_in_use_bytes{%(queriesSelector)s}', + legendCustomTemplate: '{{qmgr}}', + }, + }, + }, + queueManagerFileSystemFreeSpacePercentage: { + name: 'Queue manager file system free space percentage', + type: 'gauge', + description: 'The percentage of free disk space available for the queue manager.', + unit: 'percent', + sources: { + prometheus: { + expr: 'ibmmq_qmgr_queue_manager_file_system_free_space_percentage{%(queriesSelector)s}', + legendCustomTemplate: '{{qmgr}}', + }, + }, + }, + commitCount: { + name: 'Commit count', + type: 'counter', + description: 'The number of commits by the queue manager.', + unit: 'short', + sources: { + prometheus: { + expr: 'ibmmq_qmgr_commit_count{%(queriesSelector)s}', + legendCustomTemplate: '{{qmgr}}', + }, + }, + }, + publishedToSubscribersBytes: { + name: 'Published to subscribers bytes', + type: 'counter', + description: 'The amount of data being pushed from the queue manager to subscribers.', + unit: 'decbytes', + sources: { + prometheus: { + expr: 'ibmmq_qmgr_published_to_subscribers_bytes{%(queriesSelector)s}', + legendCustomTemplate: '{{qmgr}}', + }, + }, + }, + publishedToSubscribersMessageCount: { + name: 'Published to subscribers message count', + type: 'counter', + description: 'The number of messages being published by the queue manager.', + unit: 'short', + sources: { + prometheus: { + expr: 'ibmmq_qmgr_published_to_subscribers_message_count{%(queriesSelector)s}', + legendCustomTemplate: '{{qmgr}}', + }, + }, + }, + expiredMessageCount: { + name: 'Expired message count', + type: 'counter', + description: 'The number of expired messages for the queue manager.', + unit: 'short', + sources: { + prometheus: { + expr: 'ibmmq_qmgr_expired_message_count{%(queriesSelector)s}', + legendCustomTemplate: '{{qmgr}}', + }, + }, + }, + logWriteLatencySeconds: { + name: 'Log write latency seconds', + type: 'gauge', + description: 'The recent latency of log writes.', + unit: 's', + sources: { + prometheus: { + expr: 'ibmmq_qmgr_log_write_latency_seconds{%(queriesSelector)s}', + legendCustomTemplate: '{{qmgr}}', + }, + }, + }, + logInUseBytes: { + name: 'Log in use bytes', + type: 'gauge', + description: 'The amount of data on the filesystem occupied by queue manager logs.', + unit: 'decbytes', + sources: { + prometheus: { + expr: 'ibmmq_qmgr_log_in_use_bytes{%(queriesSelector)s}', + legendCustomTemplate: '{{qmgr}}', + }, + }, + }, + }, + } diff --git a/ibm-mq-mixin/signals/queue.libsonnet b/ibm-mq-mixin/signals/queue.libsonnet new file mode 100644 index 000000000..b85e90b20 --- /dev/null +++ b/ibm-mq-mixin/signals/queue.libsonnet @@ -0,0 +1,154 @@ +function(this) + { + filteringSelector: this.filteringSelector, + groupLabels: this.groupLabels, + instanceLabels: this.instanceLabels, + aggLevel: 'instance', + aggFunction: 'avg', + signals: { + depth: { + name: 'Queue depth', + type: 'gauge', + description: 'The number of active messages in the queue.', + unit: 'short', + sources: { + prometheus: { + expr: 'ibmmq_queue_depth{%(queriesSelector)s}', + legendCustomTemplate: '{{queue}}', + }, + }, + }, + averageQueueTimeSeconds: { + name: 'Average queue time seconds', + type: 'gauge', + description: 'The average amount of time a message spends in the queue.', + unit: 's', + sources: { + prometheus: { + expr: 'ibmmq_queue_average_queue_time_seconds{%(queriesSelector)s}', + legendCustomTemplate: '{{queue}}', + }, + }, + }, + expiredMessages: { + name: 'Expired messages', + type: 'counter', + description: 'The number of expired messages in the queue.', + unit: 'short', + sources: { + prometheus: { + expr: 'ibmmq_queue_expired_messages{%(queriesSelector)s}', + legendCustomTemplate: '{{queue}}', + }, + }, + }, + oldestMessageAge: { + name: 'Oldest message age', + type: 'gauge', + description: 'The age of the oldest message in the queue.', + unit: 's', + sources: { + prometheus: { + expr: 'ibmmq_queue_oldest_message_age{%(queriesSelector)s}', + legendCustomTemplate: '{{queue}}', + }, + }, + }, + mqsetCount: { + name: 'MQSET count', + type: 'counter', + description: 'The number of MQSET operations on the queue.', + unit: 'operations', + sources: { + prometheus: { + expr: 'ibmmq_queue_mqset_count{%(queriesSelector)s}', + legendCustomTemplate: '{{queue}} - MQSET', + }, + }, + }, + mqinqCount: { + name: 'MQINQ count', + type: 'counter', + description: 'The number of MQINQ operations on the queue.', + unit: 'operations', + sources: { + prometheus: { + expr: 'ibmmq_queue_mqinq_count{%(queriesSelector)s}', + legendCustomTemplate: '{{queue}} - MQINQ', + }, + }, + }, + mqgetCount: { + name: 'MQGET count', + type: 'counter', + description: 'The number of MQGET operations on the queue.', + unit: 'operations', + sources: { + prometheus: { + expr: 'ibmmq_queue_mqget_count{%(queriesSelector)s}', + legendCustomTemplate: '{{queue}} - MQGET', + }, + }, + }, + mqopenCount: { + name: 'MQOPEN count', + type: 'counter', + description: 'The number of MQOPEN operations on the queue.', + unit: 'operations', + sources: { + prometheus: { + expr: 'ibmmq_queue_mqopen_count{%(queriesSelector)s}', + legendCustomTemplate: '{{queue}} - MQOPEN', + }, + }, + }, + mqcloseCount: { + name: 'MQCLOSE count', + type: 'counter', + description: 'The number of MQCLOSE operations on the queue.', + unit: 'operations', + sources: { + prometheus: { + expr: 'ibmmq_queue_mqclose_count{%(queriesSelector)s}', + legendCustomTemplate: '{{queue}} - MQCLOSE', + }, + }, + }, + mqputMqput1Count: { + name: 'MQPUT/MQPUT1 count', + type: 'counter', + description: 'The number of MQPUT/MQPUT1 operations on the queue.', + unit: 'operations', + sources: { + prometheus: { + expr: 'ibmmq_queue_mqput_mqput1_count{%(queriesSelector)s}', + legendCustomTemplate: '{{queue}} - MQPUT/MQPUT1', + }, + }, + }, + mqgetBytes: { + name: 'MQGET bytes', + type: 'counter', + description: 'The throughput via MQGET operations.', + unit: 'decbytes', + sources: { + prometheus: { + expr: 'ibmmq_queue_mqget_bytes{%(queriesSelector)s}', + legendCustomTemplate: '{{queue}} - MQGET', + }, + }, + }, + mqputBytes: { + name: 'MQPUT bytes', + type: 'counter', + description: 'The throughput via MQPUT operations.', + unit: 'decbytes', + sources: { + prometheus: { + expr: 'ibmmq_queue_mqput_bytes{%(queriesSelector)s}', + legendCustomTemplate: '{{queue}} - MQPUT', + }, + }, + }, + }, + } diff --git a/ibm-mq-mixin/signals/subscription.libsonnet b/ibm-mq-mixin/signals/subscription.libsonnet new file mode 100644 index 000000000..147dd4c46 --- /dev/null +++ b/ibm-mq-mixin/signals/subscription.libsonnet @@ -0,0 +1,34 @@ +function(this) + { + filteringSelector: this.filteringSelector, + groupLabels: this.groupLabels, + instanceLabels: this.instanceLabels, + aggLevel: 'instance', + aggFunction: 'avg', + signals: { + messagesReceived: { + name: 'Subscription messages received', + type: 'counter', + description: 'The number of messages a subscription receives.', + unit: 'short', + sources: { + prometheus: { + expr: 'ibmmq_subscription_messsages_received{%(queriesSelector)s}', + legendCustomTemplate: '{{subscription}}', + }, + }, + }, + timeSinceMessagePublished: { + name: 'Time since message published', + type: 'gauge', + description: 'The time since a message was published to the subscription.', + unit: 's', + sources: { + prometheus: { + expr: 'ibmmq_subscription_time_since_message_published{%(queriesSelector)s}', + legendCustomTemplate: '{{subscription}}', + }, + }, + }, + }, + } diff --git a/ibm-mq-mixin/signals/topic.libsonnet b/ibm-mq-mixin/signals/topic.libsonnet new file mode 100644 index 000000000..47a87efeb --- /dev/null +++ b/ibm-mq-mixin/signals/topic.libsonnet @@ -0,0 +1,58 @@ +function(this) + { + filteringSelector: this.filteringSelector, + groupLabels: this.groupLabels, + instanceLabels: this.instanceLabels, + aggLevel: 'instance', + aggFunction: 'avg', + signals: { + messagesReceived: { + name: 'Topic messages received', + type: 'counter', + description: 'Received messages per topic.', + unit: 'short', + sources: { + prometheus: { + expr: 'ibmmq_topic_messages_received{%(queriesSelector)s}', + legendCustomTemplate: '{{topic}}', + }, + }, + }, + timeSinceMsgReceived: { + name: 'Time since message received', + type: 'gauge', + description: 'The time since the topic last received a message.', + unit: 's', + sources: { + prometheus: { + expr: 'ibmmq_topic_time_since_msg_received{%(queriesSelector)s}', + legendCustomTemplate: '{{topic}}', + }, + }, + }, + subscriberCount: { + name: 'Topic subscriber count', + type: 'gauge', + description: 'The number of subscribers per topic.', + unit: 'short', + sources: { + prometheus: { + expr: 'ibmmq_topic_subscriber_count{%(queriesSelector)s}', + legendCustomTemplate: '{{topic}}', + }, + }, + }, + publisherCount: { + name: 'Topic publisher count', + type: 'gauge', + description: 'The number of publishers per topic.', + unit: 'short', + sources: { + prometheus: { + expr: 'ibmmq_topic_publisher_count{%(queriesSelector)s}', + legendCustomTemplate: '{{topic}}', + }, + }, + }, + }, + }