Grafana dashboard: The DevOps Toolkit: Kubernetes (via Prometheus)
Description: Kubernetes dashboard based on Prometheus metrics. With with out-of-the-box Prometheus installed through Helm.


{
  "__inputs": [
    {
      "name": "DS_PROMETHEUS",
      "label": "Prometheus",
      "description": "",
      "type": "datasource",
      "pluginId": "prometheus",
      "pluginName": "Prometheus"
    },
    {
      "name": "VAR_SECBUCKET",
      "type": "constant",
      "label": "Requests seconds bucket",
      "value": "1",
      "description": ""
    },
    {
      "name": "VAR_PODAGEDAYS",
      "type": "constant",
      "label": "Max Pod age in days",
      "value": "90",
      "description": ""
    },
    {
      "name": "VAR_MINBYTES",
      "type": "constant",
      "label": "Minimum Bytes",
      "value": "5242880",
      "description": ""
    },
    {
      "name": "VAR_MINCPU",
      "type": "constant",
      "label": "Minimum CPU",
      "value": "0.005",
      "description": ""
    },
    {
      "name": "VAR_REQPERCENT",
      "type": "constant",
      "label": "Requests bucket %",
      "value": "95",
      "description": ""
    },
    {
      "name": "VAR_REQPERSEC",
      "type": "constant",
      "label": "Requests per second",
      "value": "1",
      "description": ""
    },
    {
      "name": "VAR_ERRORPERCENT",
      "type": "constant",
      "label": "Error percentage",
      "value": "5",
      "description": ""
    },
    {
      "name": "VAR_MEMLIMITPERCENT",
      "type": "constant",
      "label": "% of memory limit",
      "value": "80",
      "description": ""
    },
    {
      "name": "VAR_MEMREQPERCENTMIN",
      "type": "constant",
      "label": "Min % of requested memory",
      "value": "50",
      "description": ""
    },
    {
      "name": "VAR_MEMREQPERCENTMAX",
      "type": "constant",
      "label": "Max % of requested memory",
      "value": "150",
      "description": ""
    },
    {
      "name": "VAR_CPUREQPERCENTMIN",
      "type": "constant",
      "label": "Min % of requested CPU",
      "value": "50",
      "description": ""
    },
    {
      "name": "VAR_CPUREQPERCENTMAX",
      "type": "constant",
      "label": "Max % of requested CPU",
      "value": "150",
      "description": ""
    }
  ],
  "__requires": [
    {
      "type": "grafana",
      "id": "grafana",
      "name": "Grafana",
      "version": "5.3.2"
    },
    {
      "type": "panel",
      "id": "graph",
      "name": "Graph",
      "version": "5.0.0"
    },
    {
      "type": "datasource",
      "id": "prometheus",
      "name": "Prometheus",
      "version": "5.0.0"
    },
    {
      "type": "panel",
      "id": "singlestat",
      "name": "Singlestat",
      "version": "5.0.0"
    },
    {
      "type": "panel",
      "id": "table",
      "name": "Table",
      "version": "5.0.0"
    }
  ],
  "annotations": {
    "list": [
      {
        "builtIn": 1,
        "datasource": "-- Grafana --",
        "enable": true,
        "hide": true,
        "iconColor": "rgba(0, 211, 255, 1)",
        "name": "Annotations & Alerts",
        "type": "dashboard"
      }
    ]
  },
  "description": "Kubernetes dashboard based on Prometheus metrics. With with out-of-the-box Prometheus installed through Helm.",
  "editable": true,
  "gnetId": 9132,
  "graphTooltip": 0,
  "id": null,
  "iteration": 1543435045310,
  "links": [],
  "panels": [
    {
      "collapsed": false,
      "gridPos": {
        "h": 1,
        "w": 24,
        "x": 0,
        "y": 0
      },
      "id": 15,
      "panels": [],
      "title": "Alerts",
      "type": "row"
    },
    {
      "cacheTimeout": null,
      "colorBackground": true,
      "colorPrefix": false,
      "colorValue": false,
      "colors": [
        "green",
        "orange",
        "red"
      ],
      "datasource": "${DS_PROMETHEUS}",
      "description": "The total number of nodes",
      "format": "none",
      "gauge": {
        "maxValue": 100,
        "minValue": 0,
        "show": false,
        "thresholdLabels": false,
        "thresholdMarkers": true
      },
      "gridPos": {
        "h": 3,
        "w": 8,
        "x": 0,
        "y": 1
      },
      "hideTimeOverride": false,
      "id": 5,
      "interval": null,
      "links": [],
      "mappingType": 1,
      "mappingTypes": [
        {
          "name": "value to text",
          "value": 1
        },
        {
          "name": "range to text",
          "value": 2
        }
      ],
      "maxDataPoints": 100,
      "nullPointMode": "connected",
      "nullText": null,
      "postfix": "",
      "postfixFontSize": "50%",
      "prefix": "",
      "prefixFontSize": "50%",
      "rangeMaps": [
        {
          "from": "null",
          "text": "N/A",
          "to": "null"
        }
      ],
      "sparkline": {
        "fillColor": "rgba(31, 118, 189, 0.18)",
        "full": false,
        "lineColor": "rgb(31, 120, 193)",
        "show": false
      },
      "tableColumn": "Value",
      "targets": [
        {
          "expr": "count(kube_node_info)",
          "format": "table",
          "hide": false,
          "intervalFactor": 1,
          "refId": "A"
        }
      ],
      "thresholds": "4,5",
      "timeFrom": null,
      "timeShift": null,
      "title": "Nodes",
      "transparent": false,
      "type": "singlestat",
      "valueFontSize": "200%",
      "valueMaps": [
        {
          "op": "=",
          "text": "N/A",
          "value": "null"
        }
      ],
      "valueName": "total"
    },
    {
      "cacheTimeout": null,
      "colorBackground": true,
      "colorPrefix": false,
      "colorValue": false,
      "colors": [
        "green",
        "red",
        "#d44a3a"
      ],
      "datasource": "${DS_PROMETHEUS}",
      "decimals": 0,
      "description": "The number of Pods in failed, unknown, or pending state",
      "format": "none",
      "gauge": {
        "maxValue": 100,
        "minValue": 0,
        "show": false,
        "thresholdLabels": false,
        "thresholdMarkers": true
      },
      "gridPos": {
        "h": 3,
        "w": 8,
        "x": 8,
        "y": 1
      },
      "id": 8,
      "interval": null,
      "links": [],
      "mappingType": 1,
      "mappingTypes": [
        {
          "name": "value to text",
          "value": 1
        },
        {
          "name": "range to text",
          "value": 2
        }
      ],
      "maxDataPoints": 100,
      "nullPointMode": "connected",
      "nullText": null,
      "postfix": "",
      "postfixFontSize": "50%",
      "prefix": "",
      "prefixFontSize": "50%",
      "rangeMaps": [
        {
          "from": "null",
          "text": "N/A",
          "to": "null"
        }
      ],
      "sparkline": {
        "fillColor": "rgba(31, 118, 189, 0.18)",
        "full": false,
        "lineColor": "rgb(31, 120, 193)",
        "show": false
      },
      "tableColumn": "",
      "targets": [
        {
          "expr": "sum(kube_pod_status_phase{phase=~\"Failed|Unknown|Pending\"})",
          "format": "time_series",
          "intervalFactor": 1,
          "refId": "A"
        }
      ],
      "thresholds": "1",
      "title": "Unschedulable Pods",
      "type": "singlestat",
      "valueFontSize": "200%",
      "valueMaps": [
        {
          "op": "=",
          "text": "N/A",
          "value": "null"
        }
      ],
      "valueName": "current"
    },
    {
      "cacheTimeout": null,
      "colorBackground": true,
      "colorValue": false,
      "colors": [
        "green",
        "red",
        "#d44a3a"
      ],
      "datasource": "${DS_PROMETHEUS}",
      "description": "The number of Pods older than $podAgeDays days",
      "format": "none",
      "gauge": {
        "maxValue": 100,
        "minValue": 0,
        "show": false,
        "thresholdLabels": false,
        "thresholdMarkers": true
      },
      "gridPos": {
        "h": 3,
        "w": 8,
        "x": 16,
        "y": 1
      },
      "id": 10,
      "interval": null,
      "links": [],
      "mappingType": 1,
      "mappingTypes": [
        {
          "name": "value to text",
          "value": 1
        },
        {
          "name": "range to text",
          "value": 2
        }
      ],
      "maxDataPoints": 100,
      "nullPointMode": "connected",
      "nullText": null,
      "postfix": "",
      "postfixFontSize": "50%",
      "prefix": "",
      "prefixFontSize": "50%",
      "rangeMaps": [
        {
          "from": "null",
          "text": "N/A",
          "to": "null"
        }
      ],
      "sparkline": {
        "fillColor": "rgba(31, 118, 189, 0.18)",
        "full": false,
        "lineColor": "rgb(31, 120, 193)",
        "show": false
      },
      "tableColumn": "",
      "targets": [
        {
          "expr": "sum((time() - kube_pod_start_time{namespace!=\"kube-system\"}) > bool (60 * 60 * 24 * $podAgeDays))",
          "format": "time_series",
          "intervalFactor": 1,
          "refId": "A"
        }
      ],
      "thresholds": "1",
      "title": "Pods older than $podAgeDays days",
      "type": "singlestat",
      "valueFontSize": "200%",
      "valueMaps": [
        {
          "op": "=",
          "text": "N/A",
          "value": "null"
        }
      ],
      "valueName": "current"
    },
    {
      "cacheTimeout": null,
      "colorBackground": true,
      "colorValue": false,
      "colors": [
        "green",
        "red",
        "#d44a3a"
      ],
      "datasource": "${DS_PROMETHEUS}",
      "description": "The number of nginx Ingress resources with less than $reqPercent% of requests in $secBucket seconds bucket.",
      "format": "none",
      "gauge": {
        "maxValue": 100,
        "minValue": 0,
        "show": false,
        "thresholdLabels": false,
        "thresholdMarkers": true
      },
      "gridPos": {
        "h": 3,
        "w": 12,
        "x": 0,
        "y": 4
      },
      "id": 19,
      "interval": null,
      "links": [],
      "mappingType": 1,
      "mappingTypes": [
        {
          "name": "value to text",
          "value": 1
        },
        {
          "name": "range to text",
          "value": 2
        }
      ],
      "maxDataPoints": 100,
      "nullPointMode": "connected",
      "nullText": null,
      "postfix": "",
      "postfixFontSize": "50%",
      "prefix": "",
      "prefixFontSize": "50%",
      "rangeMaps": [
        {
          "from": "null",
          "text": "N/A",
          "to": "null"
        }
      ],
      "sparkline": {
        "fillColor": "rgba(31, 118, 189, 0.18)",
        "full": false,
        "lineColor": "rgb(31, 120, 193)",
        "show": false
      },
      "tableColumn": "",
      "targets": [
        {
          "expr": "sum(sum by(ingress) (rate(nginx_ingress_controller_request_duration_seconds_bucket{ingress!=\"grafana\", le=\"$secBucket\"}[5m])) / sum by(ingress) (rate(nginx_ingress_controller_request_duration_seconds_count[5m])) < bool ($reqPercent / 100))",
          "format": "time_series",
          "instant": false,
          "intervalFactor": 1,
          "refId": "A"
        }
      ],
      "thresholds": "1",
      "timeFrom": null,
      "timeShift": null,
      "title": "Ingresses with requests in $secBucket bucket below $reqPercent%",
      "type": "singlestat",
      "valueFontSize": "200%",
      "valueMaps": [
        {
          "op": "=",
          "text": "N/A",
          "value": "null"
        }
      ],
      "valueName": "current"
    },
    {
      "cacheTimeout": null,
      "colorBackground": true,
      "colorValue": false,
      "colors": [
        "green",
        "red",
        "#d44a3a"
      ],
      "datasource": "${DS_PROMETHEUS}",
      "description": "Calculates the number of nginx Ingresses with more than $reqPerSec requests per second over 5 minutes interval divided by Deployment replicas.",
      "format": "none",
      "gauge": {
        "maxValue": 100,
        "minValue": 0,
        "show": false,
        "thresholdLabels": false,
        "thresholdMarkers": true
      },
      "gridPos": {
        "h": 3,
        "w": 12,
        "x": 12,
        "y": 4
      },
      "id": 21,
      "interval": null,
      "links": [],
      "mappingType": 1,
      "mappingTypes": [
        {
          "name": "value to text",
          "value": 1
        },
        {
          "name": "range to text",
          "value": 2
        }
      ],
      "maxDataPoints": 100,
      "nullPointMode": "connected",
      "nullText": null,
      "postfix": "",
      "postfixFontSize": "50%",
      "prefix": "",
      "prefixFontSize": "50%",
      "rangeMaps": [
        {
          "from": "null",
          "text": "N/A",
          "to": "null"
        }
      ],
      "sparkline": {
        "fillColor": "rgba(31, 118, 189, 0.18)",
        "full": false,
        "lineColor": "rgb(31, 120, 193)",
        "show": false
      },
      "tableColumn": "",
      "targets": [
        {
          "expr": "sum(sum by(ingress) (rate(nginx_ingress_controller_requests[5m])) / sum by(ingress) (label_join(kube_deployment_status_replicas, \"ingress\", \",\", \"deployment\")) > bool $reqPerSec)",
          "format": "time_series",
          "intervalFactor": 1,
          "refId": "A"
        }
      ],
      "thresholds": "1",
      "title": "Ingresses with average > $reqPerSec req per sec",
      "type": "singlestat",
      "valueFontSize": "200%",
      "valueMaps": [
        {
          "op": "=",
          "text": "N/A",
          "value": "null"
        }
      ],
      "valueName": "current"
    },
    {
      "cacheTimeout": null,
      "colorBackground": true,
      "colorValue": false,
      "colors": [
        "green",
        "red",
        "#d44a3a"
      ],
      "datasource": "${DS_PROMETHEUS}",
      "description": "The percentage of nginx Ingresses with more than $errorPercent% of responses with 5xx code.",
      "format": "none",
      "gauge": {
        "maxValue": 100,
        "minValue": 0,
        "show": false,
        "thresholdLabels": false,
        "thresholdMarkers": true
      },
      "gridPos": {
        "h": 3,
        "w": 12,
        "x": 0,
        "y": 7
      },
      "id": 23,
      "interval": null,
      "links": [],
      "mappingType": 1,
      "mappingTypes": [
        {
          "name": "value to text",
          "value": 1
        },
        {
          "name": "range to text",
          "value": 2
        }
      ],
      "maxDataPoints": 100,
      "nullPointMode": "connected",
      "nullText": null,
      "postfix": "",
      "postfixFontSize": "50%",
      "prefix": "",
      "prefixFontSize": "50%",
      "rangeMaps": [
        {
          "from": "null",
          "text": "N/A",
          "to": "null"
        }
      ],
      "sparkline": {
        "fillColor": "rgba(31, 118, 189, 0.18)",
        "full": false,
        "lineColor": "rgb(31, 120, 193)",
        "show": false
      },
      "tableColumn": "",
      "targets": [
        {
          "expr": "sum(sum(rate(nginx_ingress_controller_requests{status=~\"5..\"}[5m])) by (ingress) / sum(rate(nginx_ingress_controller_requests[5m])) by (ingress) > bool ($errorPercent / 100))",
          "format": "time_series",
          "intervalFactor": 1,
          "refId": "A"
        }
      ],
      "thresholds": "1",
      "timeFrom": null,
      "timeShift": null,
      "title": "Ingresses with > $errorPercent% of 5xx responses",
      "type": "singlestat",
      "valueFontSize": "200%",
      "valueMaps": [
        {
          "op": "=",
          "text": "0",
          "value": "null"
        }
      ],
      "valueName": "current"
    },
    {
      "cacheTimeout": null,
      "colorBackground": true,
      "colorValue": false,
      "colors": [
        "green",
        "red",
        "#d44a3a"
      ],
      "datasource": "${DS_PROMETHEUS}",
      "description": "The number of Pods with over $memLimitPercent% of actual memory usage compared to the memory limit.",
      "format": "none",
      "gauge": {
        "maxValue": 100,
        "minValue": 0,
        "show": false,
        "thresholdLabels": false,
        "thresholdMarkers": true
      },
      "gridPos": {
        "h": 3,
        "w": 12,
        "x": 12,
        "y": 7
      },
      "id": 31,
      "interval": null,
      "links": [],
      "mappingType": 1,
      "mappingTypes": [
        {
          "name": "value to text",
          "value": 1
        },
        {
          "name": "range to text",
          "value": 2
        }
      ],
      "maxDataPoints": 100,
      "nullPointMode": "connected",
      "nullText": null,
      "postfix": "",
      "postfixFontSize": "50%",
      "prefix": "",
      "prefixFontSize": "50%",
      "rangeMaps": [
        {
          "from": "null",
          "text": "N/A",
          "to": "null"
        }
      ],
      "sparkline": {
        "fillColor": "rgba(31, 118, 189, 0.18)",
        "full": false,
        "lineColor": "rgb(31, 120, 193)",
        "show": false
      },
      "tableColumn": "",
      "targets": [
        {
          "expr": "sum(sum(label_join(container_memory_usage_bytes{namespace!=\"kube-system\", container_name!=\"\"}, \"pod\", \",\", \"pod_name\")) by (pod) / sum(kube_pod_container_resource_limits_memory_bytes{namespace!=\"kube-system\"}) by (pod) > bool ($memLimitPercent / 100))",
          "format": "time_series",
          "intervalFactor": 1,
          "refId": "A"
        }
      ],
      "thresholds": "1",
      "title": "Pods with > $memLimitPercent% usage of mem limit",
      "type": "singlestat",
      "valueFontSize": "200%",
      "valueMaps": [
        {
          "op": "=",
          "text": "N/A",
          "value": "null"
        }
      ],
      "valueName": "current"
    },
    {
      "cacheTimeout": null,
      "colorBackground": true,
      "colorValue": false,
      "colors": [
        "green",
        "red",
        "#d44a3a"
      ],
      "datasource": "${DS_PROMETHEUS}",
      "description": "The number of Pods with with less than $memReqPercentMin% or more than $memReqPercentMax% actual compared to reserved memory",
      "format": "none",
      "gauge": {
        "maxValue": 100,
        "minValue": 0,
        "show": false,
        "thresholdLabels": false,
        "thresholdMarkers": true
      },
      "gridPos": {
        "h": 3,
        "w": 12,
        "x": 0,
        "y": 10
      },
      "id": 33,
      "interval": null,
      "links": [],
      "mappingType": 1,
      "mappingTypes": [
        {
          "name": "value to text",
          "value": 1
        },
        {
          "name": "range to text",
          "value": 2
        }
      ],
      "maxDataPoints": 100,
      "nullPointMode": "connected",
      "nullText": null,
      "postfix": "",
      "postfixFontSize": "50%",
      "prefix": "",
      "prefixFontSize": "50%",
      "rangeMaps": [
        {
          "from": "null",
          "text": "N/A",
          "to": "null"
        }
      ],
      "sparkline": {
        "fillColor": "rgba(31, 118, 189, 0.18)",
        "full": false,
        "lineColor": "rgb(31, 120, 193)",
        "show": false
      },
      "tableColumn": "",
      "targets": [
        {
          "expr": "sum((sum(label_join(container_memory_usage_bytes{namespace!=\"kube-system\", namespace!=\"ingress-nginx\", container_name!=\"\"}, \"pod\", \",\", \"pod_name\")) by (pod) / sum(kube_pod_container_resource_requests_memory_bytes{namespace!=\"kube-system\"}) by (pod) and sum(kube_pod_container_resource_requests_memory_bytes{namespace!=\"kube-system\"}) by (pod) > 5242880)  < bool ($memReqPercentMin / 100)) + sum((sum(label_join(container_memory_usage_bytes{namespace!=\"kube-system\", namespace!=\"ingress-nginx\", container_name!=\"\"}, \"pod\", \",\", \"pod_name\")) by (pod) / sum(kube_pod_container_resource_requests_memory_bytes{namespace!=\"kube-system\"}) by (pod) and sum(kube_pod_container_resource_requests_memory_bytes{namespace!=\"kube-system\"}) by (pod) > 5242880)  > bool ($memReqPercentMax / 100))",
          "format": "time_series",
          "intervalFactor": 1,
          "refId": "A"
        }
      ],
      "thresholds": "1",
      "title": "Pods with < $memReqPercentMin% || > $memReqPercentMax% actual compared to reserved mem",
      "type": "singlestat",
      "valueFontSize": "200%",
      "valueMaps": [
        {
          "op": "=",
          "text": "N/A",
          "value": "null"
        }
      ],
      "valueName": "current"
    },
    {
      "cacheTimeout": null,
      "colorBackground": true,
      "colorValue": false,
      "colors": [
        "green",
        "red",
        "#d44a3a"
      ],
      "datasource": "${DS_PROMETHEUS}",
      "description": "The number of Pods with less than $cpuReqPercentMin% or more than $cpuReqPercentMax% actual compared to reserved CPU",
      "format": "none",
      "gauge": {
        "maxValue": 100,
        "minValue": 0,
        "show": false,
        "thresholdLabels": false,
        "thresholdMarkers": true
      },
      "gridPos": {
        "h": 3,
        "w": 12,
        "x": 12,
        "y": 10
      },
      "id": 34,
      "interval": null,
      "links": [],
      "mappingType": 1,
      "mappingTypes": [
        {
          "name": "value to text",
          "value": 1
        },
        {
          "name": "range to text",
          "value": 2
        }
      ],
      "maxDataPoints": 100,
      "nullPointMode": "connected",
      "nullText": null,
      "postfix": "",
      "postfixFontSize": "50%",
      "prefix": "",
      "prefixFontSize": "50%",
      "rangeMaps": [
        {
          "from": "null",
          "text": "N/A",
          "to": "null"
        }
      ],
      "sparkline": {
        "fillColor": "rgba(31, 118, 189, 0.18)",
        "full": false,
        "lineColor": "rgb(31, 120, 193)",
        "show": false
      },
      "tableColumn": "",
      "targets": [
        {
          "expr": "sum((sum(label_join(rate(container_cpu_usage_seconds_total{namespace!=\"kube-system\", pod_name!=\"\"}[5m]), \"pod\", \",\", \"pod_name\")) by (pod) / sum(kube_pod_container_resource_requests_cpu_cores{namespace!=\"kube-system\", namespace!=\"ingress-nginx\"}) by (pod) and sum(kube_pod_container_resource_requests_cpu_cores{namespace!=\"kube-system\", namespace!=\"ingress-nginx\"}) by (pod) > $minCpu) < bool ($cpuReqPercentMin / 100)) + sum((sum(label_join(rate(container_cpu_usage_seconds_total{namespace!=\"kube-system\", pod_name!=\"\"}[5m]), \"pod\", \",\", \"pod_name\")) by (pod) / sum(kube_pod_container_resource_requests_cpu_cores{namespace!=\"kube-system\", namespace!=\"ingress-nginx\"}) by (pod) and sum(kube_pod_container_resource_requests_cpu_cores{namespace!=\"kube-system\", namespace!=\"ingress-nginx\"}) by (pod) > $minCpu) > bool ($cpuReqPercentMax / 100))",
          "format": "time_series",
          "intervalFactor": 1,
          "refId": "A"
        }
      ],
      "thresholds": "1",
      "title": "Pods with < $cpuReqPercentMin% || > $cpuReqPercentMax% actual compared to reserved CPU",
      "type": "singlestat",
      "valueFontSize": "200%",
      "valueMaps": [
        {
          "op": "=",
          "text": "N/A",
          "value": "null"
        }
      ],
      "valueName": "current"
    },
    {
      "collapsed": true,
      "gridPos": {
        "h": 1,
        "w": 24,
        "x": 0,
        "y": 13
      },
      "id": 17,
      "panels": [
        {
          "columns": [],
          "datasource": "${DS_PROMETHEUS}",
          "description": "The nodes of the cluster",
          "fontSize": "100%",
          "gridPos": {
            "h": 4,
            "w": 8,
            "x": 0,
            "y": 14
          },
          "id": 25,
          "links": [],
          "pageSize": null,
          "scroll": true,
          "showHeader": true,
          "sort": {
            "col": 0,
            "desc": true
          },
          "styles": [
            {
              "alias": "Time",
              "dateFormat": "YYYY-MM-DD HH:mm:ss",
              "pattern": "Time",
              "type": "hidden"
            },
            {
              "alias": "",
              "colorMode": null,
              "colors": [
                "rgba(245, 54, 54, 0.9)",
                "rgba(237, 129, 40, 0.89)",
                "rgba(50, 172, 45, 0.97)"
              ],
              "dateFormat": "YYYY-MM-DD HH:mm:ss",
              "decimals": 2,
              "mappingType": 1,
              "pattern": "/Value/",
              "thresholds": [],
              "type": "hidden",
              "unit": "short"
            },
            {
              "alias": "",
              "colorMode": null,
              "colors": [
                "rgba(245, 54, 54, 0.9)",
                "rgba(237, 129, 40, 0.89)",
                "rgba(50, 172, 45, 0.97)"
              ],
              "decimals": 0,
              "pattern": "/.*/",
              "thresholds": [],
              "type": "number",
              "unit": "short"
            }
          ],
          "targets": [
            {
              "expr": "sum(kube_node_info) by (node, kubelet_version)",
              "format": "table",
              "instant": true,
              "intervalFactor": 1,
              "refId": "A"
            }
          ],
          "title": "Nodes",
          "transform": "table",
          "type": "table"
        },
        {
          "columns": [],
          "datasource": "${DS_PROMETHEUS}",
          "description": "Pods that could not be scheduled",
          "fontSize": "100%",
          "gridPos": {
            "h": 4,
            "w": 8,
            "x": 8,
            "y": 14
          },
          "id": 27,
          "links": [],
          "pageSize": null,
          "scroll": true,
          "showHeader": true,
          "sort": {
            "col": 0,
            "desc": true
          },
          "styles": [
            {
              "alias": "Time",
              "dateFormat": "YYYY-MM-DD HH:mm:ss",
              "pattern": "Time",
              "type": "hidden"
            },
            {
              "alias": "",
              "colorMode": null,
              "colors": [
                "rgba(245, 54, 54, 0.9)",
                "rgba(237, 129, 40, 0.89)",
                "rgba(50, 172, 45, 0.97)"
              ],
              "dateFormat": "YYYY-MM-DD HH:mm:ss",
              "decimals": 2,
              "mappingType": 1,
              "pattern": "/Value/",
              "thresholds": [],
              "type": "hidden",
              "unit": "short"
            },
            {
              "alias": "",
              "colorMode": null,
              "colors": [
                "rgba(245, 54, 54, 0.9)",
                "rgba(237, 129, 40, 0.89)",
                "rgba(50, 172, 45, 0.97)"
              ],
              "decimals": 2,
              "pattern": "/.*/",
              "thresholds": [],
              "type": "number",
              "unit": "short"
            }
          ],
          "targets": [
            {
              "expr": "sum(kube_pod_status_phase{phase=~\"Failed|Unknown|Pending\"}) by (namespace, pod) > 0",
              "format": "table",
              "instant": true,
              "intervalFactor": 1,
              "refId": "A"
            }
          ],
          "title": "Unschedulable Pods",
          "transform": "table",
          "type": "table"
        },
        {
          "columns": [],
          "datasource": "${DS_PROMETHEUS}",
          "description": "The number of Pods older than $podAgeDays days",
          "fontSize": "100%",
          "gridPos": {
            "h": 4,
            "w": 8,
            "x": 16,
            "y": 14
          },
          "id": 29,
          "links": [],
          "pageSize": null,
          "scroll": true,
          "showHeader": true,
          "sort": {
            "col": 0,
            "desc": true
          },
          "styles": [
            {
              "alias": "Time",
              "dateFormat": "YYYY-MM-DD HH:mm:ss",
              "pattern": "Time",
              "type": "hidden"
            },
            {
              "alias": "",
              "colorMode": null,
              "colors": [
                "rgba(245, 54, 54, 0.9)",
                "rgba(237, 129, 40, 0.89)",
                "rgba(50, 172, 45, 0.97)"
              ],
              "dateFormat": "YYYY-MM-DD HH:mm:ss",
              "decimals": 2,
              "mappingType": 1,
              "pattern": "/Value/",
              "thresholds": [],
              "type": "hidden",
              "unit": "short"
            },
            {
              "alias": "",
              "colorMode": null,
              "colors": [
                "rgba(245, 54, 54, 0.9)",
                "rgba(237, 129, 40, 0.89)",
                "rgba(50, 172, 45, 0.97)"
              ],
              "decimals": 2,
              "pattern": "/.*/",
              "thresholds": [],
              "type": "number",
              "unit": "short"
            }
          ],
          "targets": [
            {
              "expr": "sum((time() - kube_pod_start_time{namespace!=\"kube-system\"}) > (60 * 60 * 24 * $podAgeDays)) by (namespace, pod)",
              "format": "table",
              "instant": true,
              "intervalFactor": 1,
              "refId": "A"
            }
          ],
          "title": "Pods older than $podAgeDays days",
          "transform": "table",
          "type": "table"
        },
        {
          "alert": {
            "conditions": [
              {
                "evaluator": {
                  "params": [
                    0.95
                  ],
                  "type": "lt"
                },
                "operator": {
                  "type": "and"
                },
                "query": {
                  "params": [
                    "A",
                    "5m",
                    "now"
                  ]
                },
                "reducer": {
                  "params": [],
                  "type": "avg"
                },
                "type": "query"
              }
            ],
            "executionErrorState": "alerting",
            "frequency": "60s",
            "handler": 1,
            "name": "Response time alert",
            "noDataState": "no_data",
            "notifications": []
          },
          "aliasColors": {},
          "bars": false,
          "dashLength": 10,
          "dashes": false,
          "datasource": "${DS_PROMETHEUS}",
          "decimals": 0,
          "description": "Calculates the percentage of requests in $$secBucket bucket entering through nginx Ingress.",
          "fill": 0,
          "gridPos": {
            "h": 6,
            "w": 12,
            "x": 0,
            "y": 18
          },
          "id": 2,
          "legend": {
            "alignAsTable": true,
            "avg": false,
            "current": true,
            "max": false,
            "min": false,
            "rightSide": true,
            "show": true,
            "total": false,
            "values": true
          },
          "lines": true,
          "linewidth": 2,
          "links": [],
          "nullPointMode": "connected",
          "percentage": false,
          "pointradius": 5,
          "points": false,
          "renderer": "flot",
          "repeat": null,
          "seriesOverrides": [],
          "spaceLength": 10,
          "stack": false,
          "steppedLine": false,
          "targets": [
            {
              "expr": "  sum by(ingress) (rate(nginx_ingress_controller_request_duration_seconds_bucket{ingress!=\"grafana\", le=\"$secBucket\"}[5m])) / sum by(ingress) (rate(nginx_ingress_controller_request_duration_seconds_count[5m]))",
              "format": "time_series",
              "hide": false,
              "instant": false,
              "interval": "",
              "intervalFactor": 1,
              "legendFormat": "{{ ingress }}",
              "refId": "A"
            }
          ],
          "thresholds": [
            {
              "colorMode": "critical",
              "fill": true,
              "line": true,
              "op": "lt",
              "value": 0.95
            }
          ],
          "timeFrom": null,
          "timeShift": null,
          "title": "% of Ingress requests in ${secBucket}s bucket",
          "tooltip": {
            "shared": true,
            "sort": 1,
            "value_type": "individual"
          },
          "transparent": false,
          "type": "graph",
          "xaxis": {
            "buckets": null,
            "mode": "time",
            "name": null,
            "show": true,
            "values": []
          },
          "yaxes": [
            {
              "decimals": null,
              "format": "percentunit",
              "label": null,
              "logBase": 1,
              "max": "1",
              "min": null,
              "show": true
            },
            {
              "format": "short",
              "label": null,
              "logBase": 1,
              "max": null,
              "min": null,
              "show": false
            }
          ],
          "yaxis": {
            "align": false,
            "alignLevel": null
          }
        },
        {
          "aliasColors": {},
          "bars": false,
          "dashLength": 10,
          "dashes": false,
          "datasource": "${DS_PROMETHEUS}",
          "decimals": 1,
          "description": "Calculates the number of Ingress requests divided by Deployment replicas.",
          "fill": 0,
          "gridPos": {
            "h": 6,
            "w": 12,
            "x": 12,
            "y": 18
          },
          "id": 3,
          "legend": {
            "alignAsTable": true,
            "avg": false,
            "current": true,
            "max": false,
            "min": false,
            "rightSide": true,
            "show": true,
            "total": false,
            "values": true
          },
          "lines": true,
          "linewidth": 2,
          "links": [],
          "nullPointMode": "connected",
          "percentage": false,
          "pointradius": 5,
          "points": false,
          "renderer": "flot",
          "seriesOverrides": [],
          "spaceLength": 10,
          "stack": false,
          "steppedLine": false,
          "targets": [
            {
              "expr": "sum by(ingress) (rate(nginx_ingress_controller_requests[5m])) / sum by(ingress) (label_join(kube_deployment_status_replicas, \"ingress\", \",\", \"deployment\"))",
              "format": "time_series",
              "hide": false,
              "instant": false,
              "interval": "",
              "intervalFactor": 1,
              "legendFormat": "{{ ingress }}",
              "refId": "A"
            }
          ],
          "thresholds": [],
          "timeFrom": null,
          "timeShift": null,
          "title": "Ingress requests per second by Deployment  replicas",
          "tooltip": {
            "shared": true,
            "sort": 1,
            "value_type": "individual"
          },
          "transparent": false,
          "type": "graph",
          "xaxis": {
            "buckets": null,
            "mode": "time",
            "name": null,
            "show": true,
            "values": []
          },
          "yaxes": [
            {
              "format": "none",
              "label": null,
              "logBase": 1,
              "max": null,
              "min": null,
              "show": true
            },
            {
              "format": "short",
              "label": null,
              "logBase": 1,
              "max": null,
              "min": null,
              "show": false
            }
          ],
          "yaxis": {
            "align": false,
            "alignLevel": null
          }
        },
        {
          "alert": {
            "conditions": [
              {
                "evaluator": {
                  "params": [
                    0.05
                  ],
                  "type": "gt"
                },
                "operator": {
                  "type": "and"
                },
                "query": {
                  "params": [
                    "A",
                    "5m",
                    "now"
                  ]
                },
                "reducer": {
                  "params": [],
                  "type": "avg"
                },
                "type": "query"
              }
            ],
            "executionErrorState": "alerting",
            "frequency": "60s",
            "handler": 1,
            "name": "% of 5xx responses alert",
            "noDataState": "no_data",
            "notifications": []
          },
          "aliasColors": {},
          "bars": false,
          "dashLength": 10,
          "dashes": false,
          "datasource": "${DS_PROMETHEUS}",
          "decimals": 1,
          "description": "The percentage of nginx Ingress responses with 5xx code.",
          "fill": 0,
          "gridPos": {
            "h": 7,
            "w": 12,
            "x": 0,
            "y": 24
          },
          "id": 11,
          "legend": {
            "alignAsTable": true,
            "avg": false,
            "current": true,
            "max": false,
            "min": false,
            "rightSide": true,
            "show": true,
            "total": false,
            "values": true
          },
          "lines": true,
          "linewidth": 2,
          "links": [],
          "nullPointMode": "connected",
          "percentage": false,
          "pointradius": 5,
          "points": false,
          "renderer": "flot",
          "seriesOverrides": [],
          "spaceLength": 10,
          "stack": false,
          "steppedLine": false,
          "targets": [
            {
              "expr": "sum(rate(nginx_ingress_controller_requests{status=~\"5..\"}[5m])) by (ingress) / sum(rate(nginx_ingress_controller_requests[5m])) by (ingress) > 0",
              "format": "time_series",
              "hide": false,
              "instant": false,
              "interval": "",
              "intervalFactor": 1,
              "legendFormat": "{{ ingress }}",
              "refId": "A"
            }
          ],
          "thresholds": [
            {
              "colorMode": "critical",
              "fill": true,
              "line": true,
              "op": "gt",
              "value": 0.05
            }
          ],
          "timeFrom": null,
          "timeShift": null,
          "title": "% of 5xx responses",
          "tooltip": {
            "shared": true,
            "sort": 1,
            "value_type": "individual"
          },
          "transparent": false,
          "type": "graph",
          "xaxis": {
            "buckets": null,
            "mode": "time",
            "name": null,
            "show": true,
            "values": []
          },
          "yaxes": [
            {
              "format": "percentunit",
              "label": null,
              "logBase": 1,
              "max": null,
              "min": "0",
              "show": true
            },
            {
              "format": "short",
              "label": null,
              "logBase": 1,
              "max": null,
              "min": null,
              "show": false
            }
          ],
          "yaxis": {
            "align": false,
            "alignLevel": null
          }
        },
        {
          "alert": {
            "conditions": [
              {
                "evaluator": {
                  "params": [
                    0.8
                  ],
                  "type": "gt"
                },
                "operator": {
                  "type": "and"
                },
                "query": {
                  "params": [
                    "A",
                    "5m",
                    "now"
                  ]
                },
                "reducer": {
                  "params": [],
                  "type": "avg"
                },
                "type": "query"
              }
            ],
            "executionErrorState": "alerting",
            "frequency": "60s",
            "handler": 1,
            "name": "% of actual memory vs the limit alert",
            "noDataState": "no_data",
            "notifications": []
          },
          "aliasColors": {},
          "bars": false,
          "dashLength": 10,
          "dashes": false,
          "datasource": "${DS_PROMETHEUS}",
          "decimals": 0,
          "description": "The percentage of memory usage compared to the limit",
          "fill": 0,
          "gridPos": {
            "h": 7,
            "w": 12,
            "x": 12,
            "y": 24
          },
          "id": 13,
          "legend": {
            "alignAsTable": true,
            "avg": false,
            "current": true,
            "max": false,
            "min": false,
            "rightSide": true,
            "show": true,
            "total": false,
            "values": true
          },
          "lines": true,
          "linewidth": 2,
          "links": [],
          "nullPointMode": "connected",
          "percentage": false,
          "pointradius": 5,
          "points": false,
          "renderer": "flot",
          "seriesOverrides": [],
          "spaceLength": 10,
          "stack": false,
          "steppedLine": false,
          "targets": [
            {
              "expr": "sum(label_join(container_memory_usage_bytes{namespace!=\"kube-system\", container_name!=\"\"}, \"pod\", \",\", \"pod_name\")) by (pod) / sum(kube_pod_container_resource_limits_memory_bytes{namespace!=\"kube-system\"}) by (pod)",
              "format": "time_series",
              "hide": false,
              "instant": false,
              "interval": "",
              "intervalFactor": 1,
              "legendFormat": "{{ pod }}",
              "refId": "A"
            }
          ],
          "thresholds": [
            {
              "colorMode": "critical",
              "fill": true,
              "line": true,
              "op": "gt",
              "value": 0.8
            }
          ],
          "timeFrom": null,
          "timeShift": null,
          "title": "% of actual memory vs the limit",
          "tooltip": {
            "shared": true,
            "sort": 1,
            "value_type": "individual"
          },
          "transparent": false,
          "type": "graph",
          "xaxis": {
            "buckets": null,
            "mode": "time",
            "name": null,
            "show": true,
            "values": []
          },
          "yaxes": [
            {
              "format": "percentunit",
              "label": null,
              "logBase": 1,
              "max": null,
              "min": null,
              "show": true
            },
            {
              "format": "short",
              "label": null,
              "logBase": 1,
              "max": null,
              "min": null,
              "show": false
            }
          ],
          "yaxis": {
            "align": false,
            "alignLevel": null
          }
        },
        {
          "alert": {
            "conditions": [
              {
                "evaluator": {
                  "params": [
                    0.5,
                    1.5
                  ],
                  "type": "outside_range"
                },
                "operator": {
                  "type": "and"
                },
                "query": {
                  "params": [
                    "A",
                    "5m",
                    "now"
                  ]
                },
                "reducer": {
                  "params": [],
                  "type": "avg"
                },
                "type": "query"
              }
            ],
            "executionErrorState": "alerting",
            "frequency": "60s",
            "handler": 1,
            "name": "% of actual vs reserved memory alert",
            "noDataState": "no_data",
            "notifications": []
          },
          "aliasColors": {},
          "bars": false,
          "dashLength": 10,
          "dashes": false,
          "datasource": "${DS_PROMETHEUS}",
          "decimals": 0,
          "description": "The percentage actual memory usage compared to reserved. The calculation excludes Pods with reserved memory equal to or smaller than $minBytes. Those with less than $minBytes of requested bytes are ignored.",
          "fill": 0,
          "gridPos": {
            "h": 6,
            "w": 12,
            "x": 0,
            "y": 31
          },
          "id": 6,
          "legend": {
            "alignAsTable": true,
            "avg": false,
            "current": true,
            "max": false,
            "min": false,
            "rightSide": true,
            "show": true,
            "total": false,
            "values": true
          },
          "lines": true,
          "linewidth": 2,
          "links": [],
          "nullPointMode": "connected",
          "percentage": false,
          "pointradius": 5,
          "points": false,
          "renderer": "flot",
          "seriesOverrides": [],
          "spaceLength": 10,
          "stack": false,
          "steppedLine": false,
          "targets": [
            {
              "expr": "sum(label_join(container_memory_usage_bytes{namespace!=\"kube-system\", namespace!=\"ingress-nginx\", container_name!=\"\"}, \"pod\", \",\", \"pod_name\")) by (pod) / sum(kube_pod_container_resource_requests_memory_bytes{namespace!=\"kube-system\"}) by (pod) and sum(kube_pod_container_resource_requests_memory_bytes{namespace!=\"kube-system\"}) by (pod) > $minBytes",
              "format": "time_series",
              "hide": false,
              "instant": false,
              "interval": "",
              "intervalFactor": 1,
              "legendFormat": "{{ pod }}",
              "refId": "A"
            }
          ],
          "thresholds": [
            {
              "colorMode": "critical",
              "fill": true,
              "line": true,
              "op": "lt",
              "value": 0.5
            },
            {
              "colorMode": "critical",
              "fill": true,
              "line": true,
              "op": "gt",
              "value": 1.5
            }
          ],
          "timeFrom": null,
          "timeShift": null,
          "title": "% of actual vs reserved memory",
          "tooltip": {
            "shared": true,
            "sort": 1,
            "value_type": "individual"
          },
          "transparent": false,
          "type": "graph",
          "xaxis": {
            "buckets": null,
            "mode": "time",
            "name": null,
            "show": true,
            "values": []
          },
          "yaxes": [
            {
              "decimals": null,
              "format": "percentunit",
              "label": "",
              "logBase": 1,
              "max": null,
              "min": null,
              "show": true
            },
            {
              "format": "short",
              "label": null,
              "logBase": 1,
              "max": null,
              "min": null,
              "show": false
            }
          ],
          "yaxis": {
            "align": false,
            "alignLevel": null
          }
        },
        {
          "alert": {
            "conditions": [
              {
                "evaluator": {
                  "params": [
                    0.5,
                    1.5
                  ],
                  "type": "outside_range"
                },
                "operator": {
                  "type": "and"
                },
                "query": {
                  "params": [
                    "A",
                    "5m",
                    "now"
                  ]
                },
                "reducer": {
                  "params": [],
                  "type": "avg"
                },
                "type": "query"
              }
            ],
            "executionErrorState": "alerting",
            "frequency": "60s",
            "handler": 1,
            "name": "% of actual vs reserved CPU alert",
            "noDataState": "no_data",
            "notifications": []
          },
          "aliasColors": {},
          "bars": false,
          "dashLength": 10,
          "dashes": false,
          "datasource": "${DS_PROMETHEUS}",
          "decimals": 0,
          "description": "The percentage of actual CPU usage compared to reserved. The calculation excludes Pods with reserved CPU equal to or smaller than $minCpu. Those with less than $minCpu of requested CPU are ignored.",
          "fill": 0,
          "gridPos": {
            "h": 6,
            "w": 12,
            "x": 12,
            "y": 31
          },
          "id": 12,
          "legend": {
            "alignAsTable": true,
            "avg": false,
            "current": true,
            "max": false,
            "min": false,
            "rightSide": true,
            "show": true,
            "total": false,
            "values": true
          },
          "lines": true,
          "linewidth": 2,
          "links": [],
          "nullPointMode": "connected",
          "percentage": false,
          "pointradius": 5,
          "points": false,
          "renderer": "flot",
          "seriesOverrides": [],
          "spaceLength": 10,
          "stack": false,
          "steppedLine": false,
          "targets": [
            {
              "expr": "sum(label_join(rate(container_cpu_usage_seconds_total{namespace!=\"kube-system\", pod_name!=\"\"}[5m]), \"pod\", \",\", \"pod_name\")) by (pod) / sum(kube_pod_container_resource_requests_cpu_cores{namespace!=\"kube-system\", namespace!=\"ingress-nginx\"}) by (pod) and sum(kube_pod_container_resource_requests_cpu_cores{namespace!=\"kube-system\", namespace!=\"ingress-nginx\"}) by (pod) > $minCpu",
              "format": "time_series",
              "hide": false,
              "instant": false,
              "interval": "",
              "intervalFactor": 1,
              "legendFormat": "{{ pod }}",
              "refId": "A"
            }
          ],
          "thresholds": [
            {
              "colorMode": "critical",
              "fill": true,
              "line": true,
              "op": "lt",
              "value": 0.5
            },
            {
              "colorMode": "critical",
              "fill": true,
              "line": true,
              "op": "gt",
              "value": 1.5
            }
          ],
          "timeFrom": null,
          "timeShift": null,
          "title": "% of actual vs reserved CPU",
          "tooltip": {
            "shared": true,
            "sort": 1,
            "value_type": "individual"
          },
          "transparent": false,
          "type": "graph",
          "xaxis": {
            "buckets": null,
            "mode": "time",
            "name": null,
            "show": true,
            "values": []
          },
          "yaxes": [
            {
              "decimals": null,
              "format": "percentunit",
              "label": "",
              "logBase": 1,
              "max": null,
              "min": null,
              "show": true
            },
            {
              "format": "short",
              "label": null,
              "logBase": 1,
              "max": null,
              "min": null,
              "show": false
            }
          ],
          "yaxis": {
            "align": false,
            "alignLevel": null
          }
        }
      ],
      "title": "Graphs",
      "type": "row"
    }
  ],
  "refresh": "1m",
  "schemaVersion": 16,
  "style": "dark",
  "tags": [
    "Kubernetes",
    "Prometheus"
  ],
  "templating": {
    "list": [
      {
        "current": {
          "value": "${VAR_SECBUCKET}",
          "text": "${VAR_SECBUCKET}"
        },
        "hide": 2,
        "label": "Requests seconds bucket",
        "name": "secBucket",
        "options": [
          {
            "value": "${VAR_SECBUCKET}",
            "text": "${VAR_SECBUCKET}"
          }
        ],
        "query": "${VAR_SECBUCKET}",
        "skipUrlSync": false,
        "type": "constant"
      },
      {
        "current": {
          "value": "${VAR_PODAGEDAYS}",
          "text": "${VAR_PODAGEDAYS}"
        },
        "hide": 2,
        "label": "Max Pod age in days",
        "name": "podAgeDays",
        "options": [
          {
            "value": "${VAR_PODAGEDAYS}",
            "text": "${VAR_PODAGEDAYS}"
          }
        ],
        "query": "${VAR_PODAGEDAYS}",
        "skipUrlSync": false,
        "type": "constant"
      },
      {
        "current": {
          "value": "${VAR_MINBYTES}",
          "text": "${VAR_MINBYTES}"
        },
        "hide": 2,
        "label": "Minimum Bytes",
        "name": "minBytes",
        "options": [
          {
            "value": "${VAR_MINBYTES}",
            "text": "${VAR_MINBYTES}"
          }
        ],
        "query": "${VAR_MINBYTES}",
        "skipUrlSync": false,
        "type": "constant"
      },
      {
        "current": {
          "value": "${VAR_MINCPU}",
          "text": "${VAR_MINCPU}"
        },
        "hide": 2,
        "label": "Minimum CPU",
        "name": "minCpu",
        "options": [
          {
            "value": "${VAR_MINCPU}",
            "text": "${VAR_MINCPU}"
          }
        ],
        "query": "${VAR_MINCPU}",
        "skipUrlSync": false,
        "type": "constant"
      },
      {
        "current": {
          "value": "${VAR_REQPERCENT}",
          "text": "${VAR_REQPERCENT}"
        },
        "hide": 2,
        "label": "Requests bucket %",
        "name": "reqPercent",
        "options": [
          {
            "value": "${VAR_REQPERCENT}",
            "text": "${VAR_REQPERCENT}"
          }
        ],
        "query": "${VAR_REQPERCENT}",
        "skipUrlSync": false,
        "type": "constant"
      },
      {
        "current": {
          "value": "${VAR_REQPERSEC}",
          "text": "${VAR_REQPERSEC}"
        },
        "hide": 2,
        "label": "Requests per second",
        "name": "reqPerSec",
        "options": [
          {
            "value": "${VAR_REQPERSEC}",
            "text": "${VAR_REQPERSEC}"
          }
        ],
        "query": "${VAR_REQPERSEC}",
        "skipUrlSync": false,
        "type": "constant"
      },
      {
        "current": {
          "value": "${VAR_ERRORPERCENT}",
          "text": "${VAR_ERRORPERCENT}"
        },
        "hide": 2,
        "label": "Error percentage",
        "name": "errorPercent",
        "options": [
          {
            "value": "${VAR_ERRORPERCENT}",
            "text": "${VAR_ERRORPERCENT}"
          }
        ],
        "query": "${VAR_ERRORPERCENT}",
        "skipUrlSync": false,
        "type": "constant"
      },
      {
        "current": {
          "value": "${VAR_MEMLIMITPERCENT}",
          "text": "${VAR_MEMLIMITPERCENT}"
        },
        "hide": 2,
        "label": "% of memory limit",
        "name": "memLimitPercent",
        "options": [
          {
            "value": "${VAR_MEMLIMITPERCENT}",
            "text": "${VAR_MEMLIMITPERCENT}"
          }
        ],
        "query": "${VAR_MEMLIMITPERCENT}",
        "skipUrlSync": false,
        "type": "constant"
      },
      {
        "current": {
          "value": "${VAR_MEMREQPERCENTMIN}",
          "text": "${VAR_MEMREQPERCENTMIN}"
        },
        "hide": 2,
        "label": "Min % of requested memory",
        "name": "memReqPercentMin",
        "options": [
          {
            "value": "${VAR_MEMREQPERCENTMIN}",
            "text": "${VAR_MEMREQPERCENTMIN}"
          }
        ],
        "query": "${VAR_MEMREQPERCENTMIN}",
        "skipUrlSync": false,
        "type": "constant"
      },
      {
        "current": {
          "value": "${VAR_MEMREQPERCENTMAX}",
          "text": "${VAR_MEMREQPERCENTMAX}"
        },
        "hide": 2,
        "label": "Max % of requested memory",
        "name": "memReqPercentMax",
        "options": [
          {
            "value": "${VAR_MEMREQPERCENTMAX}",
            "text": "${VAR_MEMREQPERCENTMAX}"
          }
        ],
        "query": "${VAR_MEMREQPERCENTMAX}",
        "skipUrlSync": false,
        "type": "constant"
      },
      {
        "current": {
          "value": "${VAR_CPUREQPERCENTMIN}",
          "text": "${VAR_CPUREQPERCENTMIN}"
        },
        "hide": 2,
        "label": "Min % of requested CPU",
        "name": "cpuReqPercentMin",
        "options": [
          {
            "value": "${VAR_CPUREQPERCENTMIN}",
            "text": "${VAR_CPUREQPERCENTMIN}"
          }
        ],
        "query": "${VAR_CPUREQPERCENTMIN}",
        "skipUrlSync": false,
        "type": "constant"
      },
      {
        "current": {
          "value": "${VAR_CPUREQPERCENTMAX}",
          "text": "${VAR_CPUREQPERCENTMAX}"
        },
        "hide": 2,
        "label": "Max % of requested CPU",
        "name": "cpuReqPercentMax",
        "options": [
          {
            "value": "${VAR_CPUREQPERCENTMAX}",
            "text": "${VAR_CPUREQPERCENTMAX}"
          }
        ],
        "query": "${VAR_CPUREQPERCENTMAX}",
        "skipUrlSync": false,
        "type": "constant"
      }
    ]
  },
  "time": {
    "from": "now-1h",
    "to": "now"
  },
  "timepicker": {
    "refresh_intervals": [
      "5s",
      "10s",
      "30s",
      "1m",
      "5m",
      "15m",
      "30m",
      "1h",
      "2h",
      "1d"
    ],
    "time_options": [
      "5m",
      "15m",
      "1h",
      "6h",
      "12h",
      "24h",
      "2d",
      "7d",
      "30d"
    ]
  },
  "timezone": "browser",
  "title": "The DevOps Toolkit: Kubernetes (via Prometheus)",
  "uid": "4-m_gSfik",
  "version": 6
}