From ea40e508c4cf551f6172212ff310cef611c33955 Mon Sep 17 00:00:00 2001
From: James Laing <102221031+james-laing@users.noreply.github.com>
Date: Fri, 13 Jan 2023 18:54:11 +0000
Subject: [PATCH 1/4] Minor README.md updates
---
README.md | 2 +-
extra/grafana/README.md | 28 ++++++++++++++--------------
2 files changed, 15 insertions(+), 15 deletions(-)
diff --git a/README.md b/README.md
index 563c1b9..2a9819b 100644
--- a/README.md
+++ b/README.md
@@ -168,7 +168,7 @@ Drill down into specific arrays and identify top busy hosts while correlating re
-For more information on dependencies and notes to deploy, take look at the files in the [extra/grafana/](extra/grafana/) folder and [README.md](extra/grafana/README.md)
+For more information on dependencies and notes to deploy, take look at the files in the [extra/grafana/](extra/grafana/) folder and [README.md](extra/grafana/README.md) and an example of prometheus.yaml configuration can be found in [extra/prometheus/](extra/prometheus/) folder.
### License
diff --git a/extra/grafana/README.md b/extra/grafana/README.md
index 07f0179..b5f8628 100644
--- a/extra/grafana/README.md
+++ b/extra/grafana/README.md
@@ -6,7 +6,7 @@ This exporter is provided under Best Efforts support by the Pure Portfolio Solut
## TL;DR
1. Configure Pure Storage OpenMetrics Exporter ([pure-fb-openmetrics-exporter][1]).
-2. Deploy and configure Prometheus ([prometheus-docs][2]).
+2. Deploy and configure Prometheus ([prometheus-docs][2]). Example [prometheus.yaml](../prometheus/prometheus.yaml) here.
3. Deploy and configure Grafana ([grafana-docs][3]).
4. Import Pure Storage dashboards using .json files into Grafana.
5. Check out the features and default values set in the [Pure Storage FlashBlade Overview Grafana Dashboard](grafana-purefb-flashblade-overview.json)
@@ -62,15 +62,17 @@ Dashboards may have limited functionality with earlier versions and some modific
## Prometheus
1. Install Prometheus on your chosen OS platform ([prometheus-docs][2]).
-2. Generate API token from your chosen user account or create a new readonly user.
+2. Generate an API token for your chosen user account.
+In this case we are using a remote LDAP user account with read-only permissions.
```console
-pureuser@arrayname01> pureadmin create --role readonly svc-readonly
- Name Type Role
-svc-readonly local readonly
+pureuser@arrayname01> pureadmin list
+Name Type Role
+pureuser local array_admin
+svc-readonly remote readonly
pureuser@arrayname01> pureadmin create --api-token svc-readonly
-Name Type API Token Created Expires
-svc-readonly local a12345bc6-d78e-901f-23a4-56b07b89012 2022-11-30 08:58:40 EST -
+Name Type API Token Created Expires
+svc-readonly remote a12345bc6-d78e-901f-23a4-56b07b89012 2022-11-30 08:58:40 EST -
```
3. Configure `/etc/prometheus/prometheus.yaml` to point use the OpenMetrics exporter to query the device endpoint.
@@ -154,13 +156,11 @@ Check the data is accessible at component in the stack. If at any on these point
* Check Grafana
### Check Pure OpenMetrics Exporter
-1. Start by querying the exporter to make sure it is returning results. Use an API query tool such as [Postman](https://www.postman.com/) to query the device direct and retrieve the raw API call.
- - GET: `http://:9491/metrics/array?endpoint=arrayname01.fqdn.com`.
- - Authorization > Type:Bearer Token: `T-a12345bc6-d78e-901f-23a4-56b07b89012`.
-
-
-
-2. Ensure the API authorization token is correct and correctly configured in prometheus.yaml.
+1. Run cURL against the exporter and pass is the bearer token and endpoint.
+```
+curl -H 'Authorization: Bearer a12345bc6-d78e-901f-23a4-56b07b89012' -X GET 'http://:9490/metrics/array?endpoint=arrayname01.fqdn.com'
+```
+
### Check Prometheus
3. Using the Prometheus UI, run a simple query to see if any results are returned.
From ed026befebc904d42efb97c2d47630cb1d316fa8 Mon Sep 17 00:00:00 2001
From: James Laing <102221031+james-laing@users.noreply.github.com>
Date: Fri, 13 Jan 2023 21:59:49 +0000
Subject: [PATCH 2/4] Minor updates to README.md files
---
README.md | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/README.md b/README.md
index 2a9819b..a98ec2c 100644
--- a/README.md
+++ b/README.md
@@ -168,8 +168,8 @@ Drill down into specific arrays and identify top busy hosts while correlating re
-For more information on dependencies and notes to deploy, take look at the files in the [extra/grafana/](extra/grafana/) folder and [README.md](extra/grafana/README.md) and an example of prometheus.yaml configuration can be found in [extra/prometheus/](extra/prometheus/) folder.
+For more information on dependencies, and notes to deploy -- take look at the examples for Grafana and Prometheus in the [extra/grafana/](extra/grafana/) and [extra/prometheus/](extra/prometheus/) folders respectively.
### License
-This project is licensed under the Apache 2.0 License - see the [LICENSE.md](LICENSE.md) file for details
+This project is licensed under the Apache 2.0 License - see the [LICENSE](LICENSE) file for details
From 2706aabf43cd593fe412f24dbd5674972c8c1887 Mon Sep 17 00:00:00 2001
From: James Laing <102221031+james-laing@users.noreply.github.com>
Date: Fri, 13 Jan 2023 22:14:34 +0000
Subject: [PATCH 3/4] Update README.md
---
extra/grafana/README.md | 18 +++++++++---------
1 file changed, 9 insertions(+), 9 deletions(-)
diff --git a/extra/grafana/README.md b/extra/grafana/README.md
index b5f8628..70b6e49 100644
--- a/extra/grafana/README.md
+++ b/extra/grafana/README.md
@@ -6,10 +6,9 @@ This exporter is provided under Best Efforts support by the Pure Portfolio Solut
## TL;DR
1. Configure Pure Storage OpenMetrics Exporter ([pure-fb-openmetrics-exporter][1]).
-2. Deploy and configure Prometheus ([prometheus-docs][2]). Example [prometheus.yaml](../prometheus/prometheus.yaml) here.
+2. Deploy and configure Prometheus ([prometheus-docs][2]). [Example prometheus.yaml here](../prometheus/prometheus.yaml).
3. Deploy and configure Grafana ([grafana-docs][3]).
-4. Import Pure Storage dashboards using .json files into Grafana.
-5. Check out the features and default values set in the [Pure Storage FlashBlade Overview Grafana Dashboard](grafana-purefb-flashblade-overview.json)
+4. Import [grafana-purefb-flashblade-overview.json](grafana-purefb-flashblade-overview.json) into Grafana.
# Overview
Take a holistic overview of your Pure Storage FlashBlade estate on-premise with Prometheus and Grafana to summarize statistics such as:
@@ -76,7 +75,8 @@ svc-readonly remote a12345bc6-d78e-901f-23a4-56b07b89012 2022-11-30 08:58:40
```
3. Configure `/etc/prometheus/prometheus.yaml` to point use the OpenMetrics exporter to query the device endpoint.
-An example of a single FlashBlade device configuration is here: [](../prometheus/prometheus.yaml)
+
+[This is an example of configuring the prometheus.yaml](../prometheus/prometheus.yaml)
Let's take a walkthrough an example of scraping the `/metrics/array` endpoint.
@@ -162,25 +162,25 @@ curl -H 'Authorization: Bearer a12345bc6-d78e-901f-23a4-56b07b89012' -X GET 'htt
```
### Check Prometheus
-3. Using the Prometheus UI, run a simple query to see if any results are returned.
+2. Using the Prometheus UI, run a simple query to see if any results are returned.
-4. If the query does not return results, check the status of the targets for status errors.
+3. If the query does not return results, check the status of the targets for status errors.
-5. Run prometheus.yaml through the yaml checker. Check the configuration is correct and retsart Prometheus.
+4. Run prometheus.yaml through the yaml checker. Check the configuration is correct and retsart Prometheus.
```console
> promtool check config /etc/prometheus/prometheus.yml
Checking prometheus.yml
SUCCESS: prometheus.yml is valid prometheus config file syntax
```
-6. Check messages log for Prometheus errors.
+5. Check messages log for Prometheus errors.
### Check Grafana
-7. Perform a simple test for Grafana by navigating to 'Explore' and entering a simple query.
+6. Perform a simple test for Grafana by navigating to 'Explore' and entering a simple query.
From 7a0e88cff44e8a2d757d162f2cec4dafdc589735 Mon Sep 17 00:00:00 2001
From: James Laing <102221031+james-laing@users.noreply.github.com>
Date: Fri, 21 Apr 2023 15:24:20 +0100
Subject: [PATCH 4/4] grafana-purefb-flashblade-overview.json v1.0.2 updates
Several minor updates:
1. Fixes Issue#22 where table utilisation gauge does not reflect percentage value
2. Changes Pure Storage logo for one which works for both light and dark modes
3. Fixed inconsistency with some colour formatting
4. Corrected avg total latency graph colours and removed smaller graphs of avg latency/throughput/bandwidth
Updates to README.md to reflect latest tested software versions.
---
extra/grafana/README.md | 6 +-
.../grafana-purefb-flashblade-overview.json | 689 ++++++++----------
2 files changed, 321 insertions(+), 374 deletions(-)
diff --git a/extra/grafana/README.md b/extra/grafana/README.md
index 70b6e49..719551e 100644
--- a/extra/grafana/README.md
+++ b/extra/grafana/README.md
@@ -52,9 +52,9 @@ This deployment assumes the [Pure Storage FlashBlade OpenMetrics Exporter][1] is
Supported operating system platforms are available to install Prometheus and Grafana.
The Grafana dashboards have been developed and tested using the following software versions:
-* Prometheus v2.39.1
-* Grafana v9.2.6
-* Pure Storage OpenMetrics Exporter v1.0.1
+* Prometheus v2.41.1
+* Grafana v9.3.2 & v9.4.1
+* Pure Storage OpenMetrics Exporter v1.0.5.hotfix1
Dashboards may have limited functionality with earlier versions and some modifications may be required.
diff --git a/extra/grafana/grafana-purefb-flashblade-overview.json b/extra/grafana/grafana-purefb-flashblade-overview.json
index 403a605..7f4d2ca 100644
--- a/extra/grafana/grafana-purefb-flashblade-overview.json
+++ b/extra/grafana/grafana-purefb-flashblade-overview.json
@@ -7,6 +7,13 @@
"type": "datasource",
"pluginId": "prometheus",
"pluginName": "Prometheus"
+ },
+ {
+ "name": "VAR_DASHBOARDVERSION",
+ "type": "constant",
+ "label": "DashboardVersion",
+ "value": "1.0.2",
+ "description": ""
}
],
"__elements": {},
@@ -15,7 +22,7 @@
"type": "grafana",
"id": "grafana",
"name": "Grafana",
- "version": "9.2.6"
+ "version": "9.3.2"
},
{
"type": "panel",
@@ -27,7 +34,7 @@
"type": "datasource",
"id": "prometheus",
"name": "Prometheus",
- "version": "1.0.0"
+ "version": "2.41.0"
},
{
"type": "panel",
@@ -82,17 +89,30 @@
"type": "prometheus",
"uid": "${DS_PROMETHEUS}"
},
+ "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": "",
+ "content": "",
"mode": "markdown"
},
- "pluginVersion": "9.2.6",
+ "pluginVersion": "9.3.2",
"type": "text"
},
{
@@ -108,7 +128,7 @@
},
"custom": {
"align": "center",
- "displayMode": "color-background-solid",
+ "displayMode": "auto",
"filterable": false,
"inspect": false
},
@@ -131,7 +151,7 @@
{
"matcher": {
"id": "byName",
- "options": "Array Free Space"
+ "options": "Free Space"
},
"properties": [
{
@@ -140,14 +160,34 @@
},
{
"id": "custom.width",
- "value": 125
+ "value": 95
+ },
+ {
+ "id": "thresholds",
+ "value": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "#cd146d",
+ "value": null
+ },
+ {
+ "color": "#1a9ea7",
+ "value": 1
+ }
+ ]
+ }
+ },
+ {
+ "id": "custom.displayMode",
+ "value": "color-background"
}
]
},
{
"matcher": {
"id": "byName",
- "options": "Array Capacity"
+ "options": "Capacity"
},
"properties": [
{
@@ -156,7 +196,7 @@
},
{
"id": "custom.width",
- "value": 125
+ "value": 95
}
]
},
@@ -198,6 +238,10 @@
"id": "custom.width",
"value": 125
},
+ {
+ "id": "max",
+ "value": 100
+ },
{
"id": "custom.displayMode",
"value": "gradient-gauge"
@@ -224,7 +268,7 @@
"value": null
},
{
- "color": "dark-orange",
+ "color": "#e0b400",
"value": 0
},
{
@@ -247,7 +291,7 @@
{
"matcher": {
"id": "byName",
- "options": "Array Health"
+ "options": "Health"
},
"properties": [
{
@@ -273,10 +317,6 @@
{
"id": "custom.width",
"value": 125
- },
- {
- "id": "custom.displayMode",
- "value": "color-background"
}
]
},
@@ -352,7 +392,7 @@
"properties": [
{
"id": "custom.width",
- "value": 85
+ "value": 90
}
]
}
@@ -367,6 +407,7 @@
"id": 163,
"options": {
"footer": {
+ "countRows": false,
"fields": "",
"reducer": [
"sum"
@@ -377,7 +418,7 @@
"showHeader": true,
"sortBy": []
},
- "pluginVersion": "9.2.6",
+ "pluginVersion": "9.3.2",
"targets": [
{
"datasource": {
@@ -454,7 +495,7 @@
"instant": true,
"legendFormat": "Array Capacity (TB)",
"range": false,
- "refId": "Array Capacity"
+ "refId": "Capacity"
},
{
"datasource": {
@@ -470,7 +511,7 @@
"interval": "",
"legendFormat": "Array Free Space",
"range": false,
- "refId": "Array Free Space"
+ "refId": "Free Space"
},
{
"datasource": {
@@ -506,11 +547,11 @@
"os",
"version",
"Value #Array health",
+ "Value #Alerts",
"Value #Data Reduction",
- "Value #Array Capacity",
- "Value #Array Free Space",
+ "Value #Free Space",
"Value #Utilization",
- "Value #Alerts"
+ "Value #Capacity"
]
}
}
@@ -522,10 +563,12 @@
"indexByName": {},
"renameByName": {
"Value #Alerts": "Alerts",
- "Value #Array Capacity": "Array Capacity",
- "Value #Array Free Space": "Array Free Space",
- "Value #Array health": "Array Health",
+ "Value #Array Capacity": "Capacity",
+ "Value #Array Free Space": "Free Space",
+ "Value #Array health": "Health",
+ "Value #Capacity": "Capacity",
"Value #Data Reduction": "Data Reduction",
+ "Value #Free Space": "Free Space",
"Value #Total Alerts": "Alerts",
"Value #Utilization": "Utilization",
"instance": "Array",
@@ -543,10 +586,10 @@
"uid": "${DS_PROMETHEUS}"
},
"gridPos": {
- "h": 7,
+ "h": 5,
"w": 6,
"x": 0,
- "y": 3
+ "y": 4
},
"id": 177,
"options": {
@@ -555,10 +598,10 @@
"showLineNumbers": false,
"showMiniMap": false
},
- "content": "# PURE STORAGE\n\n## Overview\n\nThis dashboard provides performance and capacity details for Pure Storage FlashBlades.\nGroup arrays by customer defined environment, whole fleets, or view arrays individually.",
+ "content": "# **PURE** STORAGE\n\n## Overview\n\nThis dashboard provides performance and capacity details for Pure Storage FlashBlades.\nGroup arrays by customer defined environment, whole fleets, or view arrays individually.",
"mode": "markdown"
},
- "pluginVersion": "9.2.6",
+ "pluginVersion": "9.3.2",
"type": "text"
},
{
@@ -573,7 +616,7 @@
},
"custom": {
"align": "auto",
- "displayMode": "color-background-solid",
+ "displayMode": "auto",
"inspect": false
},
"mappings": [
@@ -720,10 +763,6 @@
"id": "custom.align",
"value": "center"
},
- {
- "id": "custom.displayMode",
- "value": "color-background"
- },
{
"id": "thresholds",
"value": {
@@ -745,7 +784,7 @@
]
},
"gridPos": {
- "h": 5,
+ "h": 4,
"w": 18,
"x": 6,
"y": 5
@@ -753,6 +792,7 @@
"id": 180,
"options": {
"footer": {
+ "countRows": false,
"fields": "",
"reducer": [
"sum"
@@ -762,7 +802,7 @@
"showHeader": true,
"sortBy": []
},
- "pluginVersion": "9.2.6",
+ "pluginVersion": "9.3.2",
"targets": [
{
"datasource": {
@@ -876,10 +916,10 @@
"uid": "${DS_PROMETHEUS}"
},
"gridPos": {
- "h": 34,
+ "h": 42,
"w": 6,
"x": 0,
- "y": 10
+ "y": 9
},
"id": 175,
"options": {
@@ -891,7 +931,7 @@
"content": "## Metrics\n\n`All metrics are prefixed with purefb_`\n\nBelow are the metrics names available:\n\n### Collected with endpoint /metrics/array\n\n * info\n * alerts_open\n * hardware_health\n * array_http_specific_performance_latency_usec\n * array_http_specific_performance_throughput_iops\n * array_nfs_latency_usec\n * array_nfs_throughput_iops\n * array_performance_average_bytes\n * array_performance_bandwidth_bytes\n * array_performance_latency_usec\n * array_performance_throughput_iops\n * array_s3_specific_performance_latency_usec\n * array_s3_specific_performance_throughput_iops\n * array_space_bytes\n * array_space_data_reduction_ratio\n * array_space_parity\n * bucket_replica_links_lag_msec\n * buckets_performance_average_bytes\n * buckets_performance_bandwidth_bytes\n * buckets_performance_latency_usec\n * buckets_performance_throughput_iops\n * buckets_s3_specific_performance_latency_usec\n * buckets_s3_specific_performance_throughput_iops\n * buckets_space_bytes\n * buckets_space_data_reduction_ratio\n * buckets_space_objects\n * file_system_links_lag_msec\n * file_systems_performance_average_bytes\n * file_systems_performance_bandwidth_bytes\n * file_systems_performance_latency_usec\n * file_systems_performance_throughput_iops\n * file_systems_space_bytes\n * file_systems_space_data_reduction_ratio\n * hardware_connectors_performance_bandwidth_bytes\n * hardware_connectors_performance_errors\n * hardware_connectors_performance_throughput_pkts\n\n### Collected with endpoint /metrics/usage\n * file_system_usage_groups_bytes\n * file_system_usage_users_bytes\n \n### Collected with endpoint /metrics/clients\nCollecting client performance information may require increasing scrape collection it is therefore recommended as an optional configuration item.\n \n * array_clients_performance_avg_size_bytes\n * array_clients_performance_bandwidth_bytes\n * array_clients_performance_latency_usec\n * array_clients_performance_throughput_iops\n\n\n\n",
"mode": "markdown"
},
- "pluginVersion": "9.2.6",
+ "pluginVersion": "9.3.2",
"type": "text"
},
{
@@ -986,7 +1026,7 @@
"h": 8,
"w": 6,
"x": 6,
- "y": 10
+ "y": 9
},
"id": 127,
"options": {
@@ -1195,7 +1235,7 @@
"h": 8,
"w": 6,
"x": 12,
- "y": 10
+ "y": 9
},
"id": 128,
"options": {
@@ -1336,7 +1376,7 @@
"h": 8,
"w": 6,
"x": 18,
- "y": 10
+ "y": 9
},
"id": 190,
"options": {
@@ -1429,7 +1469,7 @@
"type": "linear"
},
"showPoints": "never",
- "spanNulls": false,
+ "spanNulls": 300000,
"stacking": {
"group": "A",
"mode": "none"
@@ -1457,7 +1497,7 @@
"h": 10,
"w": 9,
"x": 6,
- "y": 18
+ "y": 17
},
"id": 165,
"options": {
@@ -1530,7 +1570,7 @@
"type": "linear"
},
"showPoints": "never",
- "spanNulls": false,
+ "spanNulls": 300000,
"stacking": {
"group": "A",
"mode": "none"
@@ -1558,7 +1598,7 @@
"h": 10,
"w": 9,
"x": 15,
- "y": 18
+ "y": 17
},
"id": 131,
"options": {
@@ -1631,7 +1671,7 @@
"type": "linear"
},
"showPoints": "never",
- "spanNulls": false,
+ "spanNulls": 300000,
"stacking": {
"group": "A",
"mode": "none"
@@ -1646,8 +1686,7 @@
"mode": "absolute",
"steps": [
{
- "color": "green",
- "value": null
+ "color": "green"
}
]
},
@@ -1659,7 +1698,7 @@
"h": 8,
"w": 9,
"x": 6,
- "y": 28
+ "y": 27
},
"id": 183,
"options": {
@@ -1735,7 +1774,7 @@
"type": "linear"
},
"showPoints": "never",
- "spanNulls": true,
+ "spanNulls": 300000,
"stacking": {
"group": "A",
"mode": "none"
@@ -1750,8 +1789,7 @@
"mode": "absolute",
"steps": [
{
- "color": "green",
- "value": null
+ "color": "green"
}
]
},
@@ -1763,7 +1801,7 @@
"h": 8,
"w": 9,
"x": 15,
- "y": 28
+ "y": 27
},
"id": 172,
"options": {
@@ -1838,7 +1876,7 @@
"type": "linear"
},
"showPoints": "never",
- "spanNulls": true,
+ "spanNulls": 300000,
"stacking": {
"group": "A",
"mode": "none"
@@ -1853,8 +1891,7 @@
"mode": "absolute",
"steps": [
{
- "color": "green",
- "value": null
+ "color": "green"
}
]
},
@@ -1866,7 +1903,7 @@
"h": 8,
"w": 9,
"x": 6,
- "y": 36
+ "y": 35
},
"id": 142,
"options": {
@@ -1941,7 +1978,7 @@
"type": "linear"
},
"showPoints": "never",
- "spanNulls": true,
+ "spanNulls": 300000,
"stacking": {
"group": "A",
"mode": "none"
@@ -1956,8 +1993,7 @@
"mode": "absolute",
"steps": [
{
- "color": "green",
- "value": null
+ "color": "green"
}
]
},
@@ -1969,7 +2005,7 @@
"h": 8,
"w": 9,
"x": 15,
- "y": 36
+ "y": 35
},
"id": 191,
"options": {
@@ -2044,7 +2080,7 @@
"type": "linear"
},
"showPoints": "never",
- "spanNulls": false,
+ "spanNulls": 300000,
"stacking": {
"group": "A",
"mode": "none"
@@ -2054,7 +2090,6 @@
}
},
"mappings": [],
- "min": -1,
"thresholds": {
"mode": "absolute",
"steps": [
@@ -2065,15 +2100,61 @@
},
"unit": "µs"
},
- "overrides": []
+ "overrides": [
+ {
+ "matcher": {
+ "id": "byName",
+ "options": "usec_per_write_op"
+ },
+ "properties": [
+ {
+ "id": "color",
+ "value": {
+ "fixedColor": "#fa6400",
+ "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": 8,
- "w": 8,
- "x": 0,
- "y": 44
+ "w": 18,
+ "x": 6,
+ "y": 43
},
- "id": 135,
+ "id": 193,
"options": {
"legend": {
"calcs": [
@@ -2101,103 +2182,14 @@
},
"editorMode": "code",
"exemplar": false,
- "expr": "avg(purefb_array_performance_latency_usec{instance=~\"$instance\",env=~\"$env\", dimension=\"usec_per_read_op\", protocol=~\"$protocol\"}) by (instance,protocol)",
+ "expr": "sum(avg_over_time(purefb_array_performance_latency_usec{instance=~\"^$instance\",env=~\"^$env\",dimension=\"usec_per_read_op\"}[$__interval]))",
"format": "time_series",
"instant": false,
"interval": "",
- "legendFormat": "{{instance}} - {{protocol}}",
+ "legendFormat": "usec_per_read_op",
"range": true,
- "refId": "Volume Latency"
- }
- ],
- "title": "Read Latency by $instance array(s) & $protocol protocol(s)",
- "type": "timeseries"
- },
- {
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "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
- },
- "lineInterpolation": "smooth",
- "lineStyle": {
- "fill": "solid"
- },
- "lineWidth": 1,
- "pointSize": 5,
- "scaleDistribution": {
- "type": "linear"
- },
- "showPoints": "never",
- "spanNulls": false,
- "stacking": {
- "group": "A",
- "mode": "none"
- },
- "thresholdsStyle": {
- "mode": "off"
- }
- },
- "mappings": [],
- "min": -1,
- "thresholds": {
- "mode": "absolute",
- "steps": [
- {
- "color": "green"
- }
- ]
- },
- "unit": "µs"
- },
- "overrides": []
- },
- "gridPos": {
- "h": 8,
- "w": 8,
- "x": 8,
- "y": 44
- },
- "id": 186,
- "options": {
- "legend": {
- "calcs": [
- "mean",
- "min",
- "max",
- "last"
- ],
- "displayMode": "table",
- "placement": "bottom",
- "showLegend": true,
- "sortBy": "Mean",
- "sortDesc": true
+ "refId": "Read"
},
- "tooltip": {
- "mode": "single",
- "sort": "none"
- }
- },
- "targets": [
{
"datasource": {
"type": "prometheus",
@@ -2205,103 +2197,15 @@
},
"editorMode": "code",
"exemplar": false,
- "expr": "avg(purefb_array_performance_latency_usec{instance=~\"$instance\",env=~\"$env\", dimension=\"usec_per_write_op\", protocol=~\"$protocol\"}) by (instance,protocol)",
+ "expr": "sum(avg_over_time(purefb_array_performance_latency_usec{instance=~\"^$instance\",env=~\"^$env\",dimension=\"usec_per_write_op\"}[$__interval]))",
"format": "time_series",
+ "hide": false,
"instant": false,
"interval": "",
- "legendFormat": "{{instance}} - {{protocol}}",
+ "legendFormat": "usec_per_write_op",
"range": true,
- "refId": "Volume Latency"
- }
- ],
- "title": "Write Latency by $instance array(s) & $protocol protocol(s)",
- "type": "timeseries"
- },
- {
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "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
- },
- "lineInterpolation": "smooth",
- "lineStyle": {
- "fill": "solid"
- },
- "lineWidth": 1,
- "pointSize": 5,
- "scaleDistribution": {
- "type": "linear"
- },
- "showPoints": "never",
- "spanNulls": false,
- "stacking": {
- "group": "A",
- "mode": "none"
- },
- "thresholdsStyle": {
- "mode": "off"
- }
- },
- "mappings": [],
- "min": -1,
- "thresholds": {
- "mode": "absolute",
- "steps": [
- {
- "color": "green"
- }
- ]
- },
- "unit": "µs"
- },
- "overrides": []
- },
- "gridPos": {
- "h": 8,
- "w": 8,
- "x": 16,
- "y": 44
- },
- "id": 192,
- "options": {
- "legend": {
- "calcs": [
- "mean",
- "min",
- "max",
- "last"
- ],
- "displayMode": "table",
- "placement": "bottom",
- "showLegend": true,
- "sortBy": "Mean",
- "sortDesc": true
+ "refId": "Write"
},
- "tooltip": {
- "mode": "single",
- "sort": "none"
- }
- },
- "targets": [
{
"datasource": {
"type": "prometheus",
@@ -2309,16 +2213,17 @@
},
"editorMode": "code",
"exemplar": false,
- "expr": "avg(purefb_array_performance_latency_usec{instance=~\"$instance\",env=~\"$env\", dimension=\"usec_per_other_op\", protocol=~\"$protocol\"}) by (instance,protocol)",
+ "expr": "sum(avg_over_time(purefb_array_performance_latency_usec{instance=~\"^$instance\",env=~\"^$env\",dimension=\"usec_per_other_op\"}[$__interval]))",
"format": "time_series",
+ "hide": false,
"instant": false,
"interval": "",
- "legendFormat": "{{instance}} - {{protocol}}",
+ "legendFormat": "usec_per_other_op",
"range": true,
- "refId": "Volume Latency"
+ "refId": "Other"
}
],
- "title": "Other Latency by $instance array(s) & $protocol protocol(s)",
+ "title": "Average Total Latency by $instance array(s) and $protocol protocol(s)",
"type": "timeseries"
},
{
@@ -2356,7 +2261,7 @@
"type": "linear"
},
"showPoints": "never",
- "spanNulls": false,
+ "spanNulls": 300000,
"stacking": {
"group": "A",
"mode": "none"
@@ -2366,7 +2271,7 @@
}
},
"mappings": [],
- "min": -1,
+ "min": 0,
"thresholds": {
"mode": "absolute",
"steps": [
@@ -2375,17 +2280,48 @@
}
]
},
- "unit": "µs"
+ "unit": "iops"
},
- "overrides": []
+ "overrides": [
+ {
+ "matcher": {
+ "id": "byName",
+ "options": "reads_per_sec"
+ },
+ "properties": [
+ {
+ "id": "color",
+ "value": {
+ "fixedColor": "#2ae5f2",
+ "mode": "fixed"
+ }
+ }
+ ]
+ },
+ {
+ "matcher": {
+ "id": "byName",
+ "options": "writes_per_sec"
+ },
+ "properties": [
+ {
+ "id": "color",
+ "value": {
+ "fixedColor": "#ff8316",
+ "mode": "fixed"
+ }
+ }
+ ]
+ }
+ ]
},
"gridPos": {
"h": 8,
- "w": 8,
- "x": 0,
- "y": 52
+ "w": 18,
+ "x": 6,
+ "y": 51
},
- "id": 185,
+ "id": 194,
"options": {
"legend": {
"calcs": [
@@ -2413,103 +2349,30 @@
},
"editorMode": "code",
"exemplar": false,
- "expr": "purefb_array_performance_latency_usec{instance=~\"$instance\",env=~\"$env\",protocol=~\"$protocol\"}\nand \ntopk($TopItems,rate(purefb_array_performance_latency_usec{instance=~\"$instance\",env=~\"$env\",protocol=~\"$protocol\"}[$__range] @ end() ))",
+ "expr": "sum(avg_over_time(purefb_array_performance_throughput_iops{instance=~\"^$instance\",env=~\"^$env\",dimension=\"reads_per_sec\"}[$__interval]))",
"format": "time_series",
"instant": false,
"interval": "",
- "legendFormat": "{{instance}} - {{dimension}}",
+ "legendFormat": "reads_per_sec",
"range": true,
- "refId": "Latency"
- }
- ],
- "title": "Latency by $instance array(s) and $protocol protocol(s)",
- "type": "timeseries"
- },
- {
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "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
- },
- "lineInterpolation": "smooth",
- "lineStyle": {
- "fill": "solid"
- },
- "lineWidth": 1,
- "pointSize": 5,
- "scaleDistribution": {
- "type": "linear"
- },
- "showPoints": "never",
- "spanNulls": false,
- "stacking": {
- "group": "A",
- "mode": "none"
- },
- "thresholdsStyle": {
- "mode": "off"
- }
- },
- "mappings": [],
- "min": 0,
- "thresholds": {
- "mode": "absolute",
- "steps": [
- {
- "color": "green"
- }
- ]
- },
- "unit": "iops"
+ "refId": "Read"
},
- "overrides": []
- },
- "gridPos": {
- "h": 8,
- "w": 8,
- "x": 8,
- "y": 52
- },
- "id": 188,
- "options": {
- "legend": {
- "calcs": [
- "mean",
- "min",
- "max",
- "last"
- ],
- "displayMode": "table",
- "placement": "bottom",
- "showLegend": true,
- "sortBy": "Mean",
- "sortDesc": true
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "editorMode": "code",
+ "exemplar": false,
+ "expr": "sum(avg_over_time(purefb_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"
},
- "tooltip": {
- "mode": "single",
- "sort": "none"
- }
- },
- "targets": [
{
"datasource": {
"type": "prometheus",
@@ -2517,13 +2380,14 @@
},
"editorMode": "code",
"exemplar": false,
- "expr": "purefb_array_performance_throughput_iops{instance=~\"$instance\",env=~\"$env\",protocol=~\"$protocol\"}\nand \ntopk($TopItems,rate(purefb_array_performance_throughput_iops{instance=~\"$instance\",env=~\"$env\",protocol=~\"$protocol\"}[$__range] @ end() ))",
+ "expr": "sum(avg_over_time(purefb_array_performance_throughput_iops{instance=~\"^$instance\",env=~\"^$env\",dimension=\"other_per_sec\"}[$__interval]))",
"format": "time_series",
+ "hide": false,
"instant": false,
"interval": "",
- "legendFormat": "{{instance}} - {{dimension}}",
+ "legendFormat": "other_per_sec",
"range": true,
- "refId": "Latency"
+ "refId": "Other"
}
],
"title": "IOPS by $instance array(s) and $protocol protocol(s)",
@@ -2564,7 +2428,7 @@
"type": "linear"
},
"showPoints": "never",
- "spanNulls": false,
+ "spanNulls": 300000,
"stacking": {
"group": "A",
"mode": "none"
@@ -2585,15 +2449,46 @@
},
"unit": "binBps"
},
- "overrides": []
+ "overrides": [
+ {
+ "matcher": {
+ "id": "byName",
+ "options": "read_bytes_per_sec"
+ },
+ "properties": [
+ {
+ "id": "color",
+ "value": {
+ "fixedColor": "#2ae5f2",
+ "mode": "fixed"
+ }
+ }
+ ]
+ },
+ {
+ "matcher": {
+ "id": "byName",
+ "options": "write_bytes_per_sec"
+ },
+ "properties": [
+ {
+ "id": "color",
+ "value": {
+ "fixedColor": "dark-orange",
+ "mode": "fixed"
+ }
+ }
+ ]
+ }
+ ]
},
"gridPos": {
"h": 8,
- "w": 8,
- "x": 16,
- "y": 52
+ "w": 18,
+ "x": 6,
+ "y": 59
},
- "id": 189,
+ "id": 195,
"options": {
"legend": {
"calcs": [
@@ -2621,20 +2516,53 @@
},
"editorMode": "code",
"exemplar": false,
- "expr": "purefb_array_performance_bandwidth_bytes{instance=~\"$instance\",env=~\"$env\",protocol=~\"$protocol\"}\nand \ntopk($TopItems,rate(purefb_array_performance_bandwidth_bytes{instance=~\"$instance\",env=~\"$env\",protocol=~\"$protocol\"}[$__range] @ end() ))",
+ "expr": "sum(avg_over_time(purefb_array_performance_bandwidth_bytes{instance=~\"^$instance\",env=~\"^$env\",dimension=\"read_bytes_per_sec\"}[$__interval]))",
+ "format": "time_series",
+ "instant": false,
+ "interval": "",
+ "legendFormat": "read_bytes_per_sec",
+ "range": true,
+ "refId": "Read"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "editorMode": "code",
+ "exemplar": false,
+ "expr": "sum(avg_over_time(purefb_array_performance_bandwidth_bytes{instance=~\"^$instance\",env=~\"^$env\",dimension=\"write_bytes_per_sec\"}[$__interval]))",
+ "format": "time_series",
+ "hide": false,
+ "instant": false,
+ "interval": "",
+ "legendFormat": "write_bytes_per_sec",
+ "range": true,
+ "refId": "Write"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "editorMode": "code",
+ "exemplar": false,
+ "expr": "sum(avg_over_time(purefb_array_performance_bandwidth_bytes{instance=~\"^$instance\",env=~\"^$env\",dimension=\"other_bytes_per_sec\"}[$__interval]))",
"format": "time_series",
+ "hide": false,
"instant": false,
"interval": "",
- "legendFormat": "{{instance}} - {{dimension}} - {{protocol}}",
+ "legendFormat": "other_bytes_per_sec",
"range": true,
- "refId": "Latency"
+ "refId": "Other"
}
],
- "title": "Bandwidth by $instance array(s) and $protocol protocol(s)",
+ "title": "Average Total Bandwidth by $instance array(s) and $protocol protocol(s)",
"type": "timeseries"
}
],
- "refresh": false,
+ "refresh": "",
+ "revision": 1,
"schemaVersion": 37,
"style": "dark",
"tags": [
@@ -2644,6 +2572,25 @@
],
"templating": {
"list": [
+ {
+ "hide": 2,
+ "name": "DashboardVersion",
+ "query": "${VAR_DASHBOARDVERSION}",
+ "skipUrlSync": false,
+ "type": "constant",
+ "current": {
+ "value": "${VAR_DASHBOARDVERSION}",
+ "text": "${VAR_DASHBOARDVERSION}",
+ "selected": false
+ },
+ "options": [
+ {
+ "value": "${VAR_DASHBOARDVERSION}",
+ "text": "${VAR_DASHBOARDVERSION}",
+ "selected": false
+ }
+ ]
+ },
{
"current": {
"selected": false,
@@ -2848,6 +2795,6 @@
"timezone": "",
"title": "Pure Storage FlashBlade - Overview",
"uid": "z0BG6-vVz",
- "version": 176,
+ "version": 2,
"weekStart": ""
}
\ No newline at end of file