diff --git a/cluster/applications/monitoring/dashboards.yaml b/cluster/applications/monitoring/dashboards.yaml index 9a40c01..6b96432 100644 --- a/cluster/applications/monitoring/dashboards.yaml +++ b/cluster/applications/monitoring/dashboards.yaml @@ -13,19 +13,3391 @@ # dashboard title source. Keep one dashboard per ConfigMap for clarity. # ------------------------------------------------------------------------------ -# Example structure — replace with real dashboard JSON when ready: -# -# apiVersion: v1 -# kind: ConfigMap -# metadata: -# name: dashboard-mk-labs-overview -# namespace: monitoring -# labels: -# grafana_dashboard: "1" -# data: -# mk-labs-overview.json: | -# { -# "title": "mk-labs Overview", -# "panels": [], -# ... -# } +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: dashboard-pure-flasharray-overview + namespace: monitoring + labels: + grafana_dashboard: "1" +data: + pure-flasharray-overview.json: | + { + "__inputs": [], + "__elements": {}, + "__requires": [ + { + "type": "grafana", + "id": "grafana", + "name": "Grafana", + "version": "10.1.5" + }, + { + "type": "panel", + "id": "piechart", + "name": "Pie chart", + "version": "" + }, + { + "type": "datasource", + "id": "prometheus", + "name": "Prometheus", + "version": "2.45.1" + }, + { + "type": "panel", + "id": "stat", + "name": "Stat", + "version": "" + }, + { + "type": "panel", + "id": "table", + "name": "Table", + "version": "" + }, + { + "type": "panel", + "id": "text", + "name": "Text", + "version": "" + }, + { + "type": "panel", + "id": "timeseries", + "name": "Time series", + "version": "" + } + ], + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": { + "type": "datasource", + "uid": "grafana" + }, + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "target": { + "limit": 100, + "matchAny": false, + "tags": [], + "type": "dashboard" + }, + "type": "dashboard" + } + ] + }, + "description": "v1.0.6 Fixes a bug with Grafana setting datasource \"uid\": \"${DS_PROMETHEUS}\" causing some user panels not to successfully load. Fix involves manually overriding with \"uid\": \"$datasource\". Enhancement: Connect null values <1hr..", + "editable": false, + "fiscalYearStartMonth": 0, + "graphTooltip": 1, + "id": null, + "links": [], + "liveNow": false, + "panels": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "description": "", + "gridPos": { + "h": 4, + "w": 6, + "x": 0, + "y": 0 + }, + "id": 121, + "links": [ + { + "targetBlank": true, + "title": "Pure Storage", + "url": "http://www.purestorage.com" + } + ], + "options": { + "code": { + "language": "plaintext", + "showLineNumbers": false, + "showMiniMap": false + }, + "content": "", + "mode": "markdown" + }, + "pluginVersion": "10.1.5", + "type": "text" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "center", + "cellOptions": { + "mode": "basic", + "type": "color-background" + }, + "filterable": false, + "inspect": false + }, + "decimals": 1, + "mappings": [], + "min": 0, + "noValue": "-", + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "transparent", + "value": null + } + ] + }, + "unit": "none" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Data Reduction" + }, + "properties": [ + { + "id": "unit", + "value": ":1" + }, + { + "id": "thresholds", + "value": { + "mode": "absolute", + "steps": [ + { + "color": "#1a9ea7", + "value": null + }, + { + "color": "#e0b400", + "value": 0 + }, + { + "color": "#1a9ea7", + "value": 1.01 + } + ] + } + }, + { + "id": "custom.width", + "value": 125 + }, + { + "id": "custom.cellOptions", + "value": { + "mode": "gradient", + "type": "color-background" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Capacity" + }, + "properties": [ + { + "id": "unit", + "value": "tbytes" + }, + { + "id": "custom.width", + "value": 95 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Free Space" + }, + "properties": [ + { + "id": "unit", + "value": "tbytes" + }, + { + "id": "custom.width", + "value": 95 + }, + { + "id": "thresholds", + "value": { + "mode": "absolute", + "steps": [ + { + "color": "#cd146d", + "value": null + }, + { + "color": "#1a9ea7", + "value": 1 + } + ] + } + }, + { + "id": "custom.cellOptions", + "value": { + "mode": "gradient", + "type": "color-background" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Utilization %" + }, + "properties": [ + { + "id": "unit", + "value": "percent" + }, + { + "id": "custom.width", + "value": 125 + }, + { + "id": "thresholds", + "value": { + "mode": "absolute", + "steps": [ + { + "color": "#1a9ea7", + "value": null + }, + { + "color": "#e0b400", + "value": 80 + }, + { + "color": "dark-orange", + "value": 90 + }, + { + "color": "#cd146d", + "value": 95 + } + ] + } + }, + { + "id": "custom.cellOptions", + "value": { + "mode": "gradient", + "type": "gauge" + } + }, + { + "id": "max", + "value": 100 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Array" + }, + "properties": [ + { + "id": "custom.align", + "value": "auto" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "OS" + }, + "properties": [ + { + "id": "custom.width", + "value": 95 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Ver" + }, + "properties": [ + { + "id": "custom.width", + "value": 70 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Alerts" + }, + "properties": [ + { + "id": "custom.width", + "value": 100 + }, + { + "id": "thresholds", + "value": { + "mode": "absolute", + "steps": [ + { + "color": "transparent", + "value": null + }, + { + "color": "#e0b400", + "value": 1 + } + ] + } + }, + { + "id": "decimals", + "value": 0 + }, + { + "id": "custom.cellOptions", + "value": { + "mode": "gradient", + "type": "color-background" + } + } + ] + } + ] + }, + "gridPos": { + "h": 5, + "w": 18, + "x": 6, + "y": 0 + }, + "id": 125, + "options": { + "cellHeight": "sm", + "footer": { + "countRows": false, + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, + "frameIndex": 0, + "showHeader": true, + "sortBy": [] + }, + "pluginVersion": "10.1.5", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "exemplar": false, + "expr": "sum(purefa_info{instance=~\"$instance\",env=~\"$env\"}) by (instance,os,version)", + "format": "table", + "hide": false, + "instant": true, + "legendFormat": "Version", + "range": false, + "refId": "Version" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "exemplar": false, + "expr": "sum(purefa_alerts_open{instance=~\"$instance\",env=~\"$env\"}) by (instance)", + "format": "table", + "hide": false, + "instant": true, + "legendFormat": "__auto", + "range": false, + "refId": "Alerts" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "exemplar": false, + "expr": "sum(purefa_array_space_data_reduction_ratio{instance=~\"$instance\",env=~\"$env\"}) by (instance)", + "format": "table", + "instant": true, + "interval": "", + "legendFormat": "Data Reduction", + "range": false, + "refId": "Data Reduction Ratio" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "exemplar": false, + "expr": "sum(purefa_array_space_bytes{instance=~\"$instance\",env=~\"$env\",space=\"capacity\"}) by (instance) /1024/1024/1024/1024", + "format": "table", + "hide": false, + "instant": true, + "interval": "", + "legendFormat": "Capacity", + "range": false, + "refId": "Array Capacity" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "exemplar": false, + "expr": "sum(purefa_array_space_bytes{instance=~\"$instance\",env=~\"$env\",space=\"empty\"}) by (instance) /1024/1024/1024/1024", + "format": "table", + "hide": false, + "instant": true, + "legendFormat": "Free Capacity (TB)", + "range": false, + "refId": "Array Free Space" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "exemplar": false, + "expr": "sum(purefa_array_space_utilization{instance=~\"$instance\",env=~\"$env\"}) by (instance)", + "format": "table", + "hide": false, + "instant": true, + "interval": "", + "legendFormat": "Utilization %", + "range": false, + "refId": "Utilization %" + } + ], + "title": "FlashArray System Detail", + "transformations": [ + { + "id": "joinByField", + "options": { + "byField": "instance", + "mode": "outer" + } + }, + { + "id": "filterFieldsByName", + "options": { + "include": { + "names": [ + "instance", + "os", + "version", + "Value #Data Reduction Ratio", + "Value #Array Capacity", + "Value #Array Free Space", + "Value #Utilization %", + "Value #Alerts" + ] + } + } + }, + { + "id": "organize", + "options": { + "excludeByName": {}, + "indexByName": {}, + "renameByName": { + "Value #Alerts": "Alerts", + "Value #Array Capacity": "Capacity", + "Value #Array Capacity (TB)": "Array Capacity (", + "Value #Array Free Space": "Free Space", + "Value #Array Free Space (TB)": "Array Free Space (TiB)", + "Value #Data Reduction Ratio": "Data Reduction", + "Value #Utilization %": "Utilization %", + "instance": "Array", + "os": "OS", + "version": "Ver" + } + } + } + ], + "type": "table" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "gridPos": { + "h": 6, + "w": 6, + "x": 0, + "y": 4 + }, + "id": 163, + "options": { + "code": { + "language": "plaintext", + "showLineNumbers": false, + "showMiniMap": false + }, + "content": "# **PURE** STORAGE\n\n## Overview\nThis dashboard provides performance and capacity details for Pure Storage FlashArrays.\nGroup arrays by customer defined environment, whole fleets, or view arrays individually.", + "mode": "markdown" + }, + "pluginVersion": "10.1.5", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "", + "legendFormat": "__auto", + "range": true, + "refId": "A" + } + ], + "type": "text" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "center", + "cellOptions": { + "mode": "gradient", + "type": "color-background" + }, + "inspect": false + }, + "decimals": 0, + "mappings": [ + { + "options": { + "0": { + "index": 0, + "text": "-" + } + }, + "type": "value" + } + ], + "min": 0, + "noValue": "-", + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "transparent", + "value": null + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Array" + }, + "properties": [ + { + "id": "custom.align", + "value": "auto" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Info" + }, + "properties": [ + { + "id": "custom.width", + "value": 125 + }, + { + "id": "thresholds", + "value": { + "mode": "absolute", + "steps": [ + { + "color": "transparent", + "value": null + }, + { + "color": "#1a9ea7", + "value": 1 + } + ] + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Warning" + }, + "properties": [ + { + "id": "custom.width", + "value": 125 + }, + { + "id": "thresholds", + "value": { + "mode": "absolute", + "steps": [ + { + "color": "transparent", + "value": null + }, + { + "color": "#e0b400", + "value": 1 + } + ] + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Critical" + }, + "properties": [ + { + "id": "custom.width", + "value": 125 + }, + { + "id": "thresholds", + "value": { + "mode": "absolute", + "steps": [ + { + "color": "transparent", + "value": null + }, + { + "color": "#cd146d", + "value": 1 + } + ] + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Total" + }, + "properties": [ + { + "id": "custom.width", + "value": 125 + }, + { + "id": "thresholds", + "value": { + "mode": "absolute", + "steps": [ + { + "color": "transparent", + "value": null + }, + { + "color": "#e0b400", + "value": 1 + } + ] + } + } + ] + } + ] + }, + "gridPos": { + "h": 5, + "w": 18, + "x": 6, + "y": 5 + }, + "id": 172, + "options": { + "cellHeight": "sm", + "footer": { + "countRows": false, + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, + "showHeader": true, + "sortBy": [ + { + "desc": true, + "displayName": "Critical" + } + ] + }, + "pluginVersion": "10.1.5", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "exemplar": false, + "expr": "sum(purefa_alerts_open{instance=~\"$instance\", env=~\"$env\", severity=\"info\"}) by (instance) OR on() sum(purefa_alerts_open{instance=~\"$instance\", env=~\"$env\"}*0) by (instance)", + "format": "table", + "instant": true, + "legendFormat": "__auto", + "range": false, + "refId": "Info" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "exemplar": false, + "expr": "sum(purefa_alerts_open{instance=~\"$instance\", env=~\"$env\", severity=\"warning\"}) by (instance) OR on() sum(purefa_alerts_open{instance=~\"$instance\", env=~\"$env\"}*0) by (instance)", + "format": "table", + "hide": false, + "instant": true, + "legendFormat": "__auto", + "range": false, + "refId": "Warning" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "exemplar": false, + "expr": "sum(purefa_alerts_open{instance=~\"$instance\", env=~\"$env\", severity=\"critical\"}) by (instance) OR on() sum(purefa_alerts_open{instance=~\"$instance\", env=~\"$env\"}*0) by (instance)", + "format": "table", + "hide": false, + "instant": true, + "legendFormat": "__auto", + "range": false, + "refId": "Critical" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "exemplar": false, + "expr": "sum(purefa_alerts_open{instance=~\"$instance\", env=~\"$env\", severity=\".*\"}) by (instance) OR on() sum(purefa_alerts_open{instance=~\"$instance\", env=~\"$env\"}) by (instance)", + "format": "table", + "hide": false, + "instant": true, + "legendFormat": "__auto", + "range": false, + "refId": "Total" + } + ], + "title": "Alerts", + "transformations": [ + { + "id": "joinByField", + "options": { + "byField": "instance", + "mode": "outer" + } + }, + { + "id": "filterFieldsByName", + "options": { + "include": { + "names": [ + "instance", + "Value #Info", + "Value #Warning", + "Value #Critical", + "Value #Total" + ] + } + } + }, + { + "id": "organize", + "options": { + "excludeByName": {}, + "indexByName": {}, + "renameByName": { + "Value #A": "Total", + "Value #Critical": "Critical", + "Value #Info": "Info", + "Value #Total": "Total", + "Value #Warning": "Warning", + "instance": "Array" + } + } + } + ], + "type": "table" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "gridPos": { + "h": 26, + "w": 6, + "x": 0, + "y": 10 + }, + "id": 165, + "options": { + "code": { + "language": "plaintext", + "showLineNumbers": false, + "showMiniMap": false + }, + "content": "## Metrics\n\nAll metrics are prefixed with purefa_\nBelow are the metrics names available\n```\n* alerts_open\n* array_performance_average_bytes\n* array_performance_bandwidth_bytes\n* array_performance_latency_usec\n* array_performance_queue_depth_ops\n* array_performance_throughput_iops\n* array_space_bytes\n* array_space_data_reduction_ratio\n* array_space_utilization\n* directory_performance_average_bytes\n* directory_performance_bandwidth_bytes\n* directory_performance_latency_usec\n* directory_performance_throughput_iops\n* directory_space_bytes\n* directory_space_data_reduction_ratio\n* host_connections_info\n* host_performance_average_bytes\n* host_performance_bandwidth_bytes\n* host_performance_latency_usec\n* host_performance_throughput_iops\n* host_space_bytes\n* host_space_data_reduction_ratio\n* host_space_size_bytes\n* hw_component_status\n* hw_component_temperature_celsius\n* hw_component_voltage_volt\n* info\n* pod_performance_average_bytes\n* pod_performance_bandwidth_bytes\n* pod_performance_latency_usec\n* pod_performance_throughput_iops\n* pod_space_bytes\n* pod_space_data_reduction_ratio\n* volume_performance_average_bytes\n* volume_performance_bandwidth_bytes\n* volume_performance_latency_usec\n* volume_performance_throughput_iops\n* volume_space_bytes\n* volume_space_data_reduction_ratio\n```", + "mode": "markdown" + }, + "pluginVersion": "10.1.5", + "type": "text" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "#2ae5f2", + "mode": "fixed" + }, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "white", + "value": null + } + ] + }, + "unit": "bytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 6, + "x": 6, + "y": 10 + }, + "id": 97, + "interval": "1m", + "links": [], + "maxDataPoints": 100, + "options": { + "colorMode": "value", + "fieldOptions": { + "calcs": [ + "lastNotNull" + ] + }, + "graphMode": "none", + "justifyMode": "auto", + "orientation": "horizontal", + "reduceOptions": { + "calcs": [], + "fields": "", + "values": false + }, + "textMode": "auto" + }, + "pluginVersion": "10.1.5", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "exemplar": false, + "expr": "sum(avg_over_time(purefa_array_performance_bandwidth_bytes{instance=~\"^$instance\",env=~\"^$env\"}[$__range]))", + "format": "table", + "hide": false, + "instant": true, + "legendFormat": "__auto", + "range": false, + "refId": "B" + } + ], + "title": "Average Total Bandwidth for $instance array(s) bytes SI", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "#2ae5f2", + "mode": "fixed" + }, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "white", + "value": null + } + ] + }, + "unit": ":1" + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 6, + "x": 12, + "y": 10 + }, + "id": 108, + "links": [], + "maxDataPoints": 100, + "options": { + "colorMode": "value", + "fieldOptions": { + "calcs": [ + "lastNotNull" + ] + }, + "graphMode": "none", + "justifyMode": "auto", + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "mean" + ], + "fields": "", + "values": false + }, + "textMode": "auto" + }, + "pluginVersion": "10.1.5", + "targets": [ + { + "datasource": { + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "avg(purefa_array_space_data_reduction_ratio{instance=~\"^$instance\",env=~\"^$env\"})", + "format": "table", + "range": true, + "refId": "A" + } + ], + "title": "Average Data Reduction Ratio for $instance array(s)", + "transformations": [], + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "#2ae5f2", + "mode": "fixed" + }, + "decimals": 1, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "max": 100, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "#ffffff", + "value": null + } + ] + }, + "unit": "percent" + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 6, + "x": 18, + "y": 10 + }, + "id": 30, + "links": [], + "maxDataPoints": 100, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": { + "valueSize": 100 + }, + "textMode": "auto" + }, + "pluginVersion": "10.1.5", + "targets": [ + { + "datasource": { + "uid": "$datasource" + }, + "editorMode": "code", + "exemplar": false, + "expr": "avg(purefa_array_space_utilization{instance=~\"^$instance\",env=~\"^$env\"})", + "format": "time_series", + "instant": false, + "intervalFactor": 1, + "range": true, + "refId": "A" + } + ], + "title": "Average Array Utilization for $instance array(s)", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + } + }, + "mappings": [], + "unit": "bytes" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "empty" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#808080", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "unique" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#ff8a24", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "shared" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#2ae5f2", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "snapshots" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#72459d", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "replication" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#ffc532", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "system" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#e05699", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 7, + "w": 9, + "x": 6, + "y": 15 + }, + "id": 127, + "options": { + "displayLabels": [ + "name" + ], + "legend": { + "displayMode": "list", + "placement": "right", + "showLegend": true, + "values": [ + "value", + "percent" + ] + }, + "pieType": "donut", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "sum (purefa_array_space_bytes{instance=~\"^$instance\",env=~\"^$env\",space=~\"system|replication|shared|snapshots|unique|empty\"}) by (space)", + "format": "time_series", + "legendFormat": "__auto", + "range": true, + "refId": "A" + } + ], + "title": "Sum of Space Utilization by $instance array(s)", + "type": "piechart" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + } + }, + "mappings": [], + "unit": "iops" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "reads_per_sec" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#00fddc", + "mode": "fixed" + } + }, + { + "id": "displayName", + "value": "reads" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "writes_per_sec" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#ff8316", + "mode": "fixed" + } + }, + { + "id": "displayName", + "value": "writes" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "mirrored_writes_per_sec" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#e05699", + "mode": "fixed" + } + }, + { + "id": "displayName", + "value": "mirrored" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "others_per_sec" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#662e9c", + "mode": "fixed" + } + }, + { + "id": "displayName", + "value": "other" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "reads" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#2ae5f2", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "mirrored" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#e05699", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "writes" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#ff8316", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "other" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#662e9c", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 7, + "w": 9, + "x": 15, + "y": 15 + }, + "id": 196, + "options": { + "displayLabels": [ + "name" + ], + "legend": { + "displayMode": "list", + "placement": "right", + "showLegend": true, + "values": [ + "percent", + "value" + ] + }, + "pieType": "donut", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "9.2.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "avg(purefa_array_performance_throughput_iops{instance=~\"^$instance\",env=~\"^$env\"}) by (dimension)", + "format": "time_series", + "legendFormat": "__auto", + "range": true, + "refId": "A" + } + ], + "title": "Average IOPS by IO Type and $instance array(s)", + "transformations": [], + "type": "piechart" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "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 + }, + "insertNulls": false, + "lineInterpolation": "smooth", + "lineStyle": { + "fill": "solid" + }, + "lineWidth": 1, + "pointSize": 3, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": 3600000, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "binBps" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 9, + "x": 6, + "y": 22 + }, + "id": 143, + "interval": "1m", + "options": { + "legend": { + "calcs": [ + "mean", + "min", + "max", + "last" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true, + "sortBy": "Mean", + "sortDesc": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "sum(avg_over_time(purefa_array_performance_bandwidth_bytes{env=~\"^$env\", instance=~\"^$instance\", dimension=\"write_bytes_per_sec\"} [$__interval])) by (instance)", + "legendFormat": "__auto", + "range": true, + "refId": "Write Bandwidth" + } + ], + "title": "Write Bandwidth by $instance array(s)", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "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 + }, + "insertNulls": false, + "lineInterpolation": "smooth", + "lineStyle": { + "fill": "solid" + }, + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": 3600000, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "binBps" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 9, + "x": 15, + "y": 22 + }, + "id": 131, + "interval": "1m", + "options": { + "legend": { + "calcs": [ + "mean", + "min", + "max", + "last" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true, + "sortBy": "Mean", + "sortDesc": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "sum(avg_over_time(purefa_array_performance_bandwidth_bytes{env=~\"^$env\", instance=~\"^$instance\", dimension=\"read_bytes_per_sec\"} [$__interval])) by (instance)", + "legendFormat": "__auto", + "range": true, + "refId": "Read Bandwidth" + } + ], + "title": "Read Bandwidth by $instance array(s)", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "description": "This query is very expensive on Prometheus and the browser. For large environments it may be advisable to reduce scope by using the filter and narrower time frame, use a tabular view or create a recording rule.\n\nhttps://prometheus.io/docs/prometheus/latest/querying/basics/#avoiding-slow-queries-and-overloads", + "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 + }, + "insertNulls": false, + "lineInterpolation": "smooth", + "lineStyle": { + "fill": "solid" + }, + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": 3600000, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "µs" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 9, + "x": 6, + "y": 30 + }, + "id": 173, + "options": { + "legend": { + "calcs": [ + "mean", + "min", + "max", + "last" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true, + "sortBy": "Mean", + "sortDesc": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "exemplar": false, + "expr": "avg(purefa_volume_performance_latency_usec{env=~\"$env\", instance=~\"$instance\"}) by (instance,dimension,name)\nand\ntopk($TopItems, avg(rate(purefa_volume_performance_latency_usec{env=~\"$env\", instance=~\"$instance\"}[$__range] @ end() )) by (instance,dimension,name))", + "format": "time_series", + "instant": false, + "interval": "", + "legendFormat": "{{instance}} - {{dimension}} - {{name}}", + "range": true, + "refId": "Volume Latency" + } + ], + "title": "Average Top $TopItems Latent Volumes by $instance array(s) & IO type", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "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 + }, + "insertNulls": false, + "lineInterpolation": "smooth", + "lineStyle": { + "fill": "solid" + }, + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": 3600000, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "ops" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 9, + "x": 15, + "y": 30 + }, + "id": 133, + "options": { + "legend": { + "calcs": [ + "mean", + "min", + "max", + "last" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true, + "sortBy": "Mean", + "sortDesc": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "avg(purefa_array_performance_queue_depth_ops{instance=~\"^$instance\",env=~\"^$env\"}) by (instance)", + "legendFormat": "__auto", + "range": true, + "refId": "Queue Depth" + } + ], + "title": "Array QDepth by $instance array(s)", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "description": "", + "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 + }, + "insertNulls": false, + "lineInterpolation": "smooth", + "lineStyle": { + "fill": "solid" + }, + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": 3600000, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "rps" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 9, + "x": 6, + "y": 38 + }, + "id": 160, + "options": { + "legend": { + "calcs": [ + "mean", + "min", + "max", + "lastNotNull" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true, + "sortBy": "Mean", + "sortDesc": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "exemplar": false, + "expr": "avg(purefa_host_performance_throughput_iops{env=~\"$env\", instance=~\"$instance\", dimension=\"reads_per_sec\"}) by (instance,host)\nand\ntopk($TopItems, avg(rate(purefa_host_performance_throughput_iops{env=~\"$env\", instance=~\"$instance\", dimension=\"reads_per_sec\"}[$__range] @ end() )) by (instance,host))", + "format": "time_series", + "instant": false, + "interval": "", + "legendFormat": "{{instance}} - {{host}}", + "range": true, + "refId": "Read Bandwidth" + } + ], + "title": "Average Top $TopItems Read Throughput by $instance array(s) & Hosts ", + "transformations": [], + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "description": "", + "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 + }, + "insertNulls": false, + "lineInterpolation": "smooth", + "lineStyle": { + "fill": "solid" + }, + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": 3600000, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "wps" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 9, + "x": 15, + "y": 38 + }, + "id": 153, + "options": { + "legend": { + "calcs": [ + "mean", + "min", + "max", + "lastNotNull" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true, + "sortBy": "Mean", + "sortDesc": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "exemplar": false, + "expr": "avg(purefa_host_performance_throughput_iops{env=~\"$env\", instance=~\"$instance\", dimension=\"writes_per_sec\"}) by (instance,host)\nand\ntopk($TopItems, avg(rate(purefa_host_performance_throughput_iops{env=~\"$env\", instance=~\"$instance\", dimension=\"writes_per_sec\"}[$__range] @ end() )) by (instance,host))", + "format": "time_series", + "instant": false, + "interval": "", + "legendFormat": "{{instance}} - {{host}}", + "range": true, + "refId": "Read Bandwidth" + } + ], + "title": "Average Top $TopItems Write Throughput by $instance array(s) & Hosts", + "transformations": [], + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "#fe7800", + "mode": "fixed" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "smooth", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": 3600000, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "white", + "value": null + } + ] + }, + "unit": "µs" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "usec_per_write_op" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "dark-orange", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "usec_per_mirrored_write_op" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#e05699", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "usec_per_other_op" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#662e9c", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "usec_per_read_op" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#2ae5f2", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 7, + "w": 18, + "x": 6, + "y": 46 + }, + "id": 195, + "interval": "1m", + "links": [], + "maxDataPoints": 100, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "9.2.6", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "exemplar": false, + "expr": "avg(purefa_array_performance_latency_usec{instance=~\"^$instance\",env=~\"^$env\",dimension=\"usec_per_read_op\"})", + "format": "time_series", + "instant": false, + "interval": "", + "legendFormat": "usec_per_read_op", + "range": true, + "refId": "Read" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "exemplar": false, + "expr": "avg(purefa_array_performance_latency_usec{instance=~\"^$instance\",env=~\"^$env\",dimension=\"usec_per_write_op\"})", + "format": "time_series", + "hide": false, + "instant": false, + "interval": "", + "legendFormat": "usec_per_write_op", + "range": true, + "refId": "Write" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "exemplar": false, + "expr": "avg(purefa_array_performance_latency_usec{instance=~\"^$instance\",env=~\"^$env\",dimension=\"usec_per_mirrored_write_op\"})", + "format": "time_series", + "hide": false, + "instant": false, + "interval": "", + "legendFormat": "usec_per_mirrored_write_op", + "range": true, + "refId": "Mirrored" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "exemplar": false, + "expr": "avg(purefa_array_performance_latency_usec{instance=~\"^$instance\",env=~\"^$env\",dimension=\"usec_per_other_op\"})", + "format": "time_series", + "hide": false, + "instant": false, + "interval": "", + "legendFormat": "usec_per_other_op", + "range": true, + "refId": "Other" + } + ], + "title": "Average Total Latency for $instance array(s)", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "#fe7800", + "mode": "fixed" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "smooth", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": 3600000, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "white", + "value": null + } + ] + }, + "unit": "iops" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "writes_per_sec" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#ff8316", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "mirrored_per_sec" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#e05699", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "reads_per_sec" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#2ae5f2", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "others_per_sec" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#662e9c", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 7, + "w": 18, + "x": 6, + "y": 53 + }, + "id": 192, + "interval": "1m", + "links": [], + "maxDataPoints": 100, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "9.2.6", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "exemplar": false, + "expr": "sum(avg_over_time(purefa_array_performance_throughput_iops{instance=~\"^$instance\",env=~\"^$env\",dimension=\"reads_per_sec\"}[$__interval]))", + "format": "time_series", + "instant": false, + "interval": "", + "legendFormat": "reads_per_sec", + "range": true, + "refId": "Read" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "exemplar": false, + "expr": "sum(avg_over_time(purefa_array_performance_throughput_iops{instance=~\"^$instance\",env=~\"^$env\",dimension=\"writes_per_sec\"}[$__interval]))", + "format": "time_series", + "hide": false, + "instant": false, + "interval": "", + "legendFormat": "writes_per_sec", + "range": true, + "refId": "Write" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "exemplar": false, + "expr": "sum(avg_over_time(purefa_array_performance_throughput_iops{instance=~\"^$instance\",env=~\"^$env\",dimension=\"mirrored_writes_per_sec\"}[$__interval]))", + "format": "time_series", + "hide": false, + "instant": false, + "interval": "", + "legendFormat": "mirrored_per_sec", + "range": true, + "refId": "Mirrored" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "exemplar": false, + "expr": "sum(avg_over_time(purefa_array_performance_throughput_iops{instance=~\"^$instance\",env=~\"^$env\",dimension=\"others_per_sec\"}[$__interval]))", + "format": "time_series", + "hide": false, + "instant": false, + "interval": "", + "legendFormat": "others_per_sec", + "range": true, + "refId": "Other" + } + ], + "title": "Average Total IOPS for $instance array(s)", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "#fe7800", + "mode": "fixed" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "smooth", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": 3600000, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "white", + "value": null + } + ] + }, + "unit": "bytes" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "writes_per_sec" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#ff8316", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "mirrored_per_sec" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#e05699", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "reads_per_sec" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#2ae5f2", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "others_per_sec" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#662e9c", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 8, + "w": 18, + "x": 6, + "y": 60 + }, + "id": 194, + "interval": "1m", + "links": [], + "maxDataPoints": 100, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "9.2.6", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "exemplar": false, + "expr": "avg(purefa_array_performance_bandwidth_bytes{instance=~\"^$instance\",env=~\"^$env\",dimension=\"read_bytes_per_sec\"})", + "format": "time_series", + "instant": false, + "interval": "", + "legendFormat": "reads_per_sec", + "range": true, + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "exemplar": false, + "expr": "avg(purefa_array_performance_bandwidth_bytes{instance=~\"^$instance\",env=~\"^$env\",dimension=\"write_bytes_per_sec\"})", + "format": "time_series", + "hide": false, + "instant": false, + "interval": "", + "legendFormat": "writes_per_sec", + "range": true, + "refId": "B" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "exemplar": false, + "expr": "avg(purefa_array_performance_bandwidth_bytes{instance=~\"^$instance\",env=~\"^$env\",dimension=\"mirrored_write_bytes_per_sec\"})", + "format": "time_series", + "hide": false, + "instant": false, + "interval": "", + "legendFormat": "mirrored_per_sec", + "range": true, + "refId": "C" + } + ], + "title": "Average Total Bandwidth for $instance array(s)", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "description": "* Recommended for single array only.\n\n* Panel will display \"No Data\" until there is at least 12 hours of data in the data source as this panel displays the last 90 days at 12 hour intervals.\n\n* purefa_array_space_bytes{space=total_provisioned, *_effective} metrics NOT available when a file system on the array has unlimited provisioned size.", + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "#fe7800", + "mode": "fixed" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "axisSoftMin": 0, + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 100, + "gradientMode": "opacity", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "smooth", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "white", + "value": null + } + ] + }, + "unit": "bytes" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "snapshots" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#662e9c", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "capacity" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#646464", + "mode": "fixed" + } + }, + { + "id": "custom.fillOpacity", + "value": 0 + }, + { + "id": "custom.hideFrom", + "value": { + "legend": true, + "tooltip": false, + "viz": false + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "shared" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#2ae5f2", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "system" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#e05699", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "DRR" + }, + "properties": [ + { + "id": "custom.axisPlacement", + "value": "right" + }, + { + "id": "custom.fillOpacity", + "value": 0 + }, + { + "id": "custom.lineStyle", + "value": { + "dash": [ + 0, + 10 + ], + "fill": "dot" + } + }, + { + "id": "unit", + "value": ":1" + }, + { + "id": "color", + "value": { + "fixedColor": "#00b89e", + "mode": "fixed" + } + }, + { + "id": "custom.lineWidth", + "value": 3 + }, + { + "id": "custom.axisLabel", + "value": "Data Reduction Ratio" + }, + { + "id": "custom.axisSoftMin", + "value": 0 + }, + { + "id": "custom.axisColorMode", + "value": "series" + }, + { + "id": "custom.axisSoftMax", + "value": 5 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "unique" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#FA6400", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "replication" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#feb804", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "total_provisioned" + }, + "properties": [ + { + "id": "custom.axisPlacement", + "value": "right" + }, + { + "id": "color", + "value": { + "fixedColor": "#662e9c", + "mode": "fixed" + } + }, + { + "id": "custom.lineStyle", + "value": { + "dash": [ + 0, + 10 + ], + "fill": "dot" + } + }, + { + "id": "custom.fillOpacity", + "value": 0 + }, + { + "id": "custom.lineWidth", + "value": 3 + }, + { + "id": "custom.axisColorMode", + "value": "series" + }, + { + "id": "custom.axisLabel", + "value": "Provisioned for Hosts" + }, + { + "id": "displayName", + "value": "Total Provisioned" + }, + { + "id": "custom.axisSoftMin", + "value": 0 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Total Provisioned" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#662e9c", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 8, + "w": 18, + "x": 6, + "y": 68 + }, + "id": 200, + "interval": "12h", + "links": [], + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "9.2.6", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "exemplar": false, + "expr": "sum(purefa_array_space_bytes{instance=~\"^$instance\",env=~\"^$env\",space=~\"system|shared|snapshots|unique|replication|capacity\"}) by (space)", + "format": "time_series", + "hide": false, + "instant": false, + "interval": "", + "legendFormat": "{{space}}", + "range": true, + "refId": "Physical Used Capacity" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "exemplar": false, + "expr": "avg(purefa_array_space_data_reduction_ratio{instance=~\"^$instance\",env=~\"^$env\"})", + "format": "time_series", + "hide": false, + "instant": false, + "interval": "", + "legendFormat": "DRR", + "range": true, + "refId": "DDR" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "editorMode": "code", + "exemplar": false, + "expr": "sum(purefa_array_space_bytes{instance=~\"^$instance\",env=~\"^$env\",space=~\"total_provisioned\"}) by (space)\n#\"total_provisioned and *_effective metrics NOT available when a file system on the array has unlimited provisioned size.\"", + "format": "time_series", + "hide": false, + "instant": false, + "interval": "", + "legendFormat": "{{space}}", + "range": true, + "refId": "Provisioned for Hosts" + } + ], + "timeFrom": "90d", + "title": "Capacity Utilization by Type & $instance array(s)", + "transformations": [], + "type": "timeseries" + } + ], + "refresh": "", + "revision": 1, + "schemaVersion": 38, + "style": "dark", + "tags": [ + "pure", + "storage", + "purestorage", + "flasharray", + "fa", + "prometheus" + ], + "templating": { + "list": [ + { + "current": { + "selected": false, + "text": "1.0.6", + "value": "1.0.6" + }, + "description": "Display Pure Storage dashboard release version", + "hide": 2, + "includeAll": false, + "label": "", + "multi": false, + "name": "DashboardVersion", + "options": [ + { + "selected": true, + "text": "1.0.6", + "value": "1.0.6" + } + ], + "query": "1.0.6", + "skipUrlSync": false, + "type": "custom" + }, + { + "current": { + "selected": false, + "text": "default", + "value": "default" + }, + "hide": 0, + "includeAll": false, + "label": "Datasource", + "multi": false, + "name": "datasource", + "options": [], + "query": "prometheus", + "queryValue": "", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "type": "datasource" + }, + { + "allValue": ".+", + "current": {}, + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "definition": "query_result(purefa_info)", + "hide": 0, + "includeAll": true, + "label": "Env", + "multi": true, + "name": "env", + "options": [], + "query": { + "query": "query_result(purefa_info)", + "refId": "StandardVariableQuery" + }, + "refresh": 1, + "regex": ".*env=\"(.*?)\".*", + "skipUrlSync": false, + "sort": 1, + "tagValuesQuery": "", + "tagsQuery": "", + "type": "query", + "useTags": false + }, + { + "allValue": ".+", + "current": {}, + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "definition": "query_result(purefa_info{instance=~\".+\"})", + "description": "", + "hide": 0, + "includeAll": true, + "label": "FlashArray", + "multi": true, + "name": "instance", + "options": [], + "query": { + "query": "query_result(purefa_info{instance=~\".+\"})", + "refId": "StandardVariableQuery" + }, + "refresh": 1, + "regex": ".*instance=\"(.*?)\".*", + "skipUrlSync": false, + "sort": 1, + "tagValuesQuery": "", + "tagsQuery": "", + "type": "query", + "useTags": false + }, + { + "current": { + "selected": true, + "text": "5", + "value": "5" + }, + "description": "", + "hide": 0, + "includeAll": false, + "label": "Top Items", + "multi": false, + "name": "TopItems", + "options": [ + { + "selected": false, + "text": "1", + "value": "1" + }, + { + "selected": false, + "text": "2", + "value": "2" + }, + { + "selected": false, + "text": "3", + "value": "3" + }, + { + "selected": false, + "text": "4", + "value": "4" + }, + { + "selected": true, + "text": "5", + "value": "5" + }, + { + "selected": false, + "text": "6", + "value": "6" + }, + { + "selected": false, + "text": "7", + "value": "7" + }, + { + "selected": false, + "text": "8", + "value": "8" + }, + { + "selected": false, + "text": "10", + "value": "10" + }, + { + "selected": false, + "text": "15", + "value": "15" + }, + { + "selected": false, + "text": "25", + "value": "25" + }, + { + "selected": false, + "text": "50", + "value": "50" + } + ], + "query": "1,2,3,4,5,6,7,8,10,15,25,50", + "queryValue": "", + "skipUrlSync": false, + "type": "custom" + } + ] + }, + "time": { + "from": "now-3h", + "to": "now" + }, + "timepicker": { + "refresh_intervals": [ + "10s", + "30s", + "1m", + "5m" + ], + "time_options": [ + "5m", + "15m", + "1h", + "6h", + "12h", + "24h", + "2d", + "7d", + "30d" + ] + }, + "timezone": "", + "title": "Pure Storage FlashArray - Overview", + "uid": "kq1L0kKVk", + "version": 75, + "weekStart": "" + } \ No newline at end of file diff --git a/cluster/platform/pure-exporter/servicemonitor.yaml b/cluster/platform/pure-exporter/servicemonitor.yaml index 38c5014..c208d26 100644 --- a/cluster/platform/pure-exporter/servicemonitor.yaml +++ b/cluster/platform/pure-exporter/servicemonitor.yaml @@ -40,8 +40,28 @@ spec: endpoint: - utilidor - # Relabeling to add FlashArray identifier + # Relabeling to add FlashArray identifier and required dashboard labels relabelings: + # Add 'instance' label (dashboard expects this for array identification) + - sourceLabels: [__param_endpoint] + targetLabel: instance + action: replace + # Keep 'array' label for compatibility - sourceLabels: [__param_endpoint] targetLabel: array action: replace + + # Static labels for dashboard filters + metricRelabelings: + # Add 'env' label (dashboard template variable requirement) + - targetLabel: env + replacement: production + action: replace + # Add 'location' label (optional dashboard filter) + - targetLabel: location + replacement: homelab + action: replace + # Add 'site' label (optional dashboard filter) + - targetLabel: site + replacement: main + action: replace