diff --git a/templates/dashboards/grafana-dashboard-image-builder-composer-general.configmap.yml b/templates/dashboards/grafana-dashboard-image-builder-composer-general.configmap.yml index 6e77d8ff9..3dea966cb 100644 --- a/templates/dashboards/grafana-dashboard-image-builder-composer-general.configmap.yml +++ b/templates/dashboards/grafana-dashboard-image-builder-composer-general.configmap.yml @@ -34,7 +34,7 @@ data: "editable": true, "fiscalYearStartMonth": 0, "graphTooltip": 0, - "iteration": 1671021530884, + "id": 150222, "links": [], "liveNow": false, "panels": [ @@ -49,376 +49,12 @@ data: "x": 0, "y": 0 }, - "id": 128, + "id": 129, "panels": [], - "title": "Compose Stability", + "title": "SLO", "type": "row" }, { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "description": "The percentage of successful compose requests for the selected time range", - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "decimals": 0, - "mappings": [ - { - "options": { - "match": "null", - "result": { - "index": 0, - "text": "N/A" - } - }, - "type": "special" - } - ], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "red", - "value": null - }, - { - "color": "#EAB839", - "value": "0.95" - }, - { - "color": "green", - "value": "0.955" - } - ] - }, - "unit": "percentunit" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 5, - "x": 0, - "y": 1 - }, - "id": 197, - "mappings": [ - { - "options": { - "match": "null", - "result": { - "text": "N/A" - } - }, - "type": "special" - } - ], - "options": { - "colorMode": "value", - "graphMode": "none", - "justifyMode": "auto", - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "text": {}, - "textMode": "auto" - }, - "pluginVersion": "9.0.2", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "exemplar": true, - "expr": "1 - (\n (\n sum(increase(image_builder_composer_total_failed_compose_requests[$__range]))\n /\n sum(increase(image_builder_composer_total_compose_requests[$__range]))\n ) OR on() vector(0) # set a fallback if the query result is empty\n)", - "interval": "", - "legendFormat": "", - "refId": "A" - } - ], - "title": "Compose Request Success Rate", - "type": "stat" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "description": "The number of total compose requests for the selected date range", - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "decimals": 0, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - } - ] - } - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 3, - "x": 5, - "y": 1 - }, - "id": 196, - "options": { - "colorMode": "value", - "graphMode": "none", - "justifyMode": "auto", - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "text": {}, - "textMode": "auto" - }, - "pluginVersion": "9.0.2", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "exemplar": true, - "expr": "sum(increase(image_builder_composer_total_compose_requests[$__range]))", - "interval": "", - "legendFormat": "", - "refId": "A" - } - ], - "title": "Compose Requests", - "type": "stat" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "description": "The throughput rate of Compose errors and non-errors over time for the selected time range", - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "custom": { - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 11, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "auto", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "red", - "value": null - } - ] - }, - "unit": "none" - }, - "overrides": [ - { - "matcher": { - "id": "byName", - "options": "success/sec" - }, - "properties": [ - { - "id": "color", - "value": { - "fixedColor": "green", - "mode": "fixed" - } - } - ] - } - ] - }, - "gridPos": { - "h": 8, - "w": 8, - "x": 8, - "y": 1 - }, - "id": 202, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom" - }, - "tooltip": { - "mode": "single", - "sort": "none" - } - }, - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "exemplar": true, - "expr": "(sum(rate(image_builder_composer_total_compose_requests[$interval])) OR on() vector(0)) \n- \n(sum(rate(image_builder_composer_total_failed_compose_requests[$interval])) OR on() vector(0))", - "hide": false, - "interval": "", - "legendFormat": "success/sec", - "refId": "A" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "exemplar": true, - "expr": "(sum(rate(image_builder_composer_total_failed_compose_requests[$interval])) OR on() vector(0))", - "hide": false, - "interval": "", - "legendFormat": "errors/sec", - "refId": "B" - } - ], - "title": "Compose Throughput Rate", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "description": "The number of compose errors (as a percentage) over time for the selected time range", - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "custom": { - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "bars", - "fillOpacity": 0, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "auto", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "max": 1, - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "red", - "value": null - } - ] - }, - "unit": "percentunit" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 8, - "x": 16, - "y": 1 - }, - "id": 209, - "options": { - "legend": { - "calcs": [], - "displayMode": "hidden", - "placement": "bottom" - }, - "tooltip": { - "mode": "single", - "sort": "none" - } - }, - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "exemplar": true, - "expr": "(\n sum(rate(image_builder_composer_total_failed_compose_requests[$interval]))\n /\n sum(rate(image_builder_composer_total_compose_requests[$interval]))\n) OR on() vector(0)", - "interval": "", - "legendFormat": "", - "refId": "A" - } - ], - "title": "Compose Error Rate", - "type": "timeseries" - }, - { - "cacheTimeout": 1, "datasource": { "type": "prometheus", "uid": "${datasource}" @@ -475,12 +111,12 @@ data: "overrides": [] }, "gridPos": { - "h": 8, - "w": 4, + "h": 4, + "w": 16, "x": 0, - "y": 9 + "y": 1 }, - "id": 115, + "id": 214, "links": [], "maxDataPoints": 100, "options": { @@ -500,23 +136,128 @@ data: }, "textMode": "auto" }, - "pluginVersion": "9.0.2", + "pluginVersion": "9.3.8", "targets": [ { "datasource": { "type": "prometheus", "uid": "${datasource}" }, + "editorMode": "code", "exemplar": true, - "expr": "28 * 24 * (1 - $stability_slo)\n/\n(\n (\n sum(rate(image_builder_composer_total_failed_compose_requests[28d]))\n / \n sum(rate(image_builder_composer_total_compose_requests[28d]))\n ) OR on() vector(0.01) # set fallback incase the above query result is empty\n)", + "expr": "28 * 24 * (1 - $stability_slo)\n/\n(\n (\n sum(rate(image_builder_composer_request_count{path=~\".*\",code=~\"5.*\", tenant=~\"$tenant\"}[28d]))\n / \n sum(rate(image_builder_composer_request_count{path=~\".*\",code!~\"5.*\", tenant=~\"$tenant\"}[28d]))\n ) OR on() vector(0.01) # set fallback incase the above query result is empty\n)", "format": "time_series", "interval": "", "intervalFactor": 1, "legendFormat": "", + "range": true, "refId": "A" } ], - "title": "Error Budget Remaining", + "title": "request error budget remaining", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "description": "How long will it take to consume all our budget if our error consumption remains at the current rate for the selected date range.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 2, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "index": 0, + "text": "1.40 days" + } + }, + "type": "special" + }, + { + "options": { + "from": 672, + "result": { + "index": 1, + "text": "∞" + }, + "to": 3360100 + }, + "type": "range" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "red", + "value": null + }, + { + "color": "#EAB839", + "value": 40 + }, + { + "color": "green", + "value": 50 + } + ] + }, + "unit": "h" + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 8, + "x": 16, + "y": 1 + }, + "id": 198, + "links": [], + "maxDataPoints": 100, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": { + "valueSize": 80 + }, + "textMode": "auto" + }, + "pluginVersion": "9.3.8", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", + "exemplar": true, + "expr": "28 * 24 * (1 - $latency_slo) \n/\n(\n 1.001 - (\n (\n sum(rate(image_builder_composer_http_duration_seconds_bucket{le=\"0.2\", tenant=~\"$tenant\"}[$__range]))\n /\n sum(rate(image_builder_composer_http_duration_seconds_count{tenant=~\"$tenant\"}[$__range]))\n ) OR on() vector(1) # set fallback incase the above query result is empty\n ) \n)", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "", + "range": true, + "refId": "A" + } + ], + "title": "latency error budget remaining", "type": "stat" }, { @@ -531,6 +272,8 @@ data: "mode": "thresholds" }, "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", "axisLabel": "", "axisPlacement": "auto", "barAlignment": 0, @@ -563,6 +306,7 @@ data: }, "links": [], "mappings": [], + "min": 0, "thresholds": { "mode": "absolute", "steps": [ @@ -586,17 +330,18 @@ data: }, "gridPos": { "h": 8, - "w": 20, - "x": 4, - "y": 9 + "w": 16, + "x": 0, + "y": 5 }, - "id": 119, + "id": 216, "links": [], "options": { "legend": { "calcs": [], - "displayMode": "hidden", - "placement": "bottom" + "displayMode": "list", + "placement": "bottom", + "showLegend": false }, "tooltip": { "mode": "single", @@ -610,8 +355,9 @@ data: "type": "prometheus", "uid": "${datasource}" }, + "editorMode": "code", "exemplar": true, - "expr": "1 - (\n (\n 1 - $stability_slo - (\n (\n sum(increase(image_builder_composer_total_failed_compose_requests[28d]))\n /\n sum(increase(image_builder_composer_total_compose_requests[28d]))\n ) OR on() vector(0) # set fallback for empty query result\n )\n )\n)\n/\n(1 - $stability_slo)", + "expr": "1 - (\n (\n 1 - $stability_slo - (\n (\n sum(increase(image_builder_composer_request_count{code=~\"5.*\", tenant=~\"$tenant\"}[28d]))\n /\n sum(increase(image_builder_composer_request_count{code!~\"5.*\", tenant=~\"$tenant\"}[28d]))\n ) OR on() vector(0) # set fallback for empty query result\n )\n )\n)\n/\n(1 - $stability_slo)", "instant": false, "interval": "", "intervalFactor": 10, @@ -619,7 +365,115 @@ data: "refId": "A" } ], - "title": "Error Budget Consumed", + "title": "request error budget consumed", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "description": "The percentage of error budget consumed for the selected time range. ", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 100, + "gradientMode": "scheme", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineStyle": { + "fill": "solid" + }, + "lineWidth": 0, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": true, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "#EAB839", + "value": 0.95 + }, + { + "color": "red", + "value": 1 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 8, + "x": 16, + "y": 5 + }, + "id": 199, + "links": [], + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": false + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "8.2.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", + "exemplar": true, + "expr": "1 - (\n (\n (\n sum(increase(image_builder_composer_http_duration_seconds_bucket{le=\"0.2\", tenant=~\"$tenant\"}[28d]))\n /\n sum(increase(image_builder_composer_http_duration_seconds_count{tenant=~\"$tenant\"}[28d]))\n ) OR on() vector(1)\n ) - $latency_slo\n)\n/ \n(1 - $latency_slo)", + "instant": false, + "interval": "", + "intervalFactor": 10, + "legendFormat": "errorbudget", + "refId": "A" + } + ], + "title": "latency error budget consumed", "type": "timeseries" }, { @@ -628,11 +482,11 @@ data: "h": 1, "w": 24, "x": 0, - "y": 17 + "y": 13 }, "id": 206, "panels": [], - "title": "Request Stability", + "title": "API throughput", "type": "row" }, { @@ -681,10 +535,107 @@ data: "overrides": [] }, "gridPos": { - "h": 8, - "w": 5, + "h": 3, + "w": 8, "x": 0, - "y": 18 + "y": 14 + }, + "id": 197, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "9.3.8", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", + "exemplar": true, + "expr": "1 - (\n (\n sum(increase(image_builder_composer_total_failed_compose_requests{tenant=~\"$tenant\"}[$__range]))\n /\n sum(increase(image_builder_composer_total_compose_requests{tenant=~\"$tenant\"}[$__range]))\n ) OR on() vector(0) # set a fallback if the query result is empty\n)", + "interval": "", + "legendFormat": "", + "range": true, + "refId": "A" + } + ], + "title": "compose request success rate", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "description": "The percentage of successful compose requests for the selected time range", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 0, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "index": 0, + "text": "N/A" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "red", + "value": null + }, + { + "color": "#EAB839", + "value": "0.95" + }, + { + "color": "green", + "value": "0.955" + } + ] + }, + "unit": "percentunit" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 8, + "x": 8, + "y": 14 }, "id": 207, "mappings": [ @@ -713,21 +664,89 @@ data: "text": {}, "textMode": "auto" }, - "pluginVersion": "9.0.2", + "pluginVersion": "9.3.8", "targets": [ { "datasource": { "type": "prometheus", "uid": "${datasource}" }, + "editorMode": "code", "exemplar": true, - "expr": "1 - (\n (\n sum(increase(image_builder_composer_request_count{code=~\"5.*\", path!=\"/api/image-builder-composer/v2/compose\", subsystem=\"composer\"}[$__range]))\n /\n sum(increase(image_builder_composer_request_count{code!~\"4.*\", path!=\"/api/image-builder-composer/v2/compose\", subsystem=\"composer\"}[$__range]))\n ) OR on() vector(0) # set a fallback if the query result is empty\n)", + "expr": "1 - (\n (\n sum(increase(image_builder_composer_request_count{code=~\"5.*\", path!=\"/api/image-builder-composer/v2/compose\", subsystem=\"composer\", tenant=~\"$tenant\"}[$__range]))\n /\n sum(increase(image_builder_composer_request_count{code!~\"4.*\", path!=\"/api/image-builder-composer/v2/compose\", subsystem=\"composer\", tenant=~\"$tenant\"}[$__range]))\n ) OR on() vector(0) # set a fallback if the query result is empty\n)", "interval": "", "legendFormat": "", + "range": true, "refId": "A" } ], - "title": "Non-compose Request Success Rate", + "title": "non-compose request success rate", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "description": "The number of total compose requests for the selected date range", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 0, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 8, + "x": 16, + "y": 14 + }, + "id": 196, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "9.3.8", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", + "exemplar": true, + "expr": "sum(increase(image_builder_composer_request_count{path=\"/api/image-builder-composer/v2/compose\", tenant=~\"$tenant\"}[$__range]))", + "interval": "", + "legendFormat": "", + "range": true, + "refId": "A" + } + ], + "title": "compose requests", "type": "stat" }, { @@ -739,22 +758,24 @@ data: "fieldConfig": { "defaults": { "color": { - "mode": "thresholds" + "mode": "continuous-blues" }, "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", "axisLabel": "", "axisPlacement": "auto", "barAlignment": 0, "drawStyle": "line", - "fillOpacity": 11, - "gradientMode": "none", + "fillOpacity": 5, + "gradientMode": "hue", "hideFrom": { "legend": false, "tooltip": false, "viz": false }, "lineInterpolation": "linear", - "lineWidth": 1, + "lineWidth": 2, "pointSize": 5, "scaleDistribution": { "type": "linear" @@ -784,15 +805,15 @@ data: "overrides": [ { "matcher": { - "id": "byName", - "options": "success/sec" + "id": "byRegexp", + "options": ".*success/sec" }, "properties": [ { "id": "color", "value": { - "fixedColor": "green", - "mode": "fixed" + "fixedColor": "blue", + "mode": "palette-classic" } } ] @@ -800,17 +821,18 @@ data: ] }, "gridPos": { - "h": 8, - "w": 11, - "x": 5, - "y": 18 + "h": 16, + "w": 24, + "x": 0, + "y": 17 }, - "id": 210, + "id": 202, "options": { "legend": { "calcs": [], - "displayMode": "list", - "placement": "bottom" + "displayMode": "table", + "placement": "bottom", + "showLegend": true }, "tooltip": { "mode": "single", @@ -823,11 +845,13 @@ data: "type": "prometheus", "uid": "${datasource}" }, + "editorMode": "code", "exemplar": true, - "expr": "(sum(rate(image_builder_composer_request_count{code!~\"4.*\", path!=\"/api/image-builder-composer/v2/compose\", subsystem=\"composer\"}[$interval])) OR on() vector(0)) \n- \n(sum(rate(image_builder_composer_request_count{code=~\"5.*\", path!=\"/api/image-builder-composer/v2/compose\", subsystem=\"composer\"}[$interval])) OR on() vector(0))", + "expr": "sum by (path) (rate(image_builder_composer_request_count{code!~\"5.*\", tenant=~\"$tenant\"}[$__rate_interval]))", "hide": false, "interval": "", - "legendFormat": "success/sec", + "legendFormat": "{{path}} success/sec", + "range": true, "refId": "A" }, { @@ -835,103 +859,17 @@ data: "type": "prometheus", "uid": "${datasource}" }, + "editorMode": "code", "exemplar": true, - "expr": "(sum(rate(image_builder_composer_request_count{code=~\"5.*\", path!=\"/api/image-builder-composer/v2/compose\", subsystem=\"composer\"}[$interval])) OR on() vector(0))", + "expr": "sum by (path) (rate(image_builder_composer_request_count{code=~\"5.*\", tenant=~\"$tenant\"}[$interval]))", "hide": false, "interval": "", - "legendFormat": "errors/sec", + "legendFormat": "{{path}} errors/sec", + "range": true, "refId": "B" } ], - "title": "Non-compose Throughput Rate", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "description": "The number of compose errors (as a percentage) over time for the selected time range", - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "custom": { - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "bars", - "fillOpacity": 0, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "auto", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "max": 1, - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "red", - "value": null - } - ] - }, - "unit": "percentunit" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 8, - "x": 16, - "y": 18 - }, - "id": 194, - "options": { - "legend": { - "calcs": [], - "displayMode": "hidden", - "placement": "bottom" - }, - "tooltip": { - "mode": "single", - "sort": "none" - } - }, - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "exemplar": true, - "expr": "(\n sum(rate(image_builder_composer_request_count{code=~\"5.*\", path!=\"/api/image-builder-composer/v2/compose\", subsystem=\"composer\"}[$interval]))\n /\n sum(rate(image_builder_composer_request_count{code!~\"4.*\", path!=\"/api/image-builder-composer/v2/compose\", subsystem=\"composer\"}[$interval]))\n) OR on() vector(0)", - "interval": "", - "legendFormat": "", - "refId": "A" - } - ], - "title": "Non-compose Error Rate", + "title": "request throughput", "type": "timeseries" }, { @@ -943,15 +881,16 @@ data: "h": 1, "w": 24, "x": 0, - "y": 26 + "y": 33 }, - "id": 129, + "id": 128, "panels": [], - "title": "Request Latency", + "title": "API latency", "type": "row" }, { "datasource": { + "type": "prometheus", "uid": "${datasource}" }, "description": "The percentage of successful compose requests for the selected time range", @@ -977,8 +916,7 @@ data: "mode": "absolute", "steps": [ { - "color": "green", - "value": null + "color": "green" }, { "color": "#EAB839", @@ -995,10 +933,10 @@ data: "overrides": [] }, "gridPos": { - "h": 8, - "w": 5, + "h": 7, + "w": 4, "x": 0, - "y": 27 + "y": 34 }, "id": 200, "mappings": [ @@ -1027,21 +965,28 @@ data: "text": {}, "textMode": "auto" }, - "pluginVersion": "9.0.2", + "pluginVersion": "9.3.8", "targets": [ { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", "exemplar": true, - "expr": "histogram_quantile(0.95, sum(rate(image_builder_composer_http_duration_seconds_bucket[$__range])) by (le)) * 1000", + "expr": "histogram_quantile(0.95, sum(rate(image_builder_composer_http_duration_seconds_bucket{tenant=~\"$tenant\"}[$__range])) by (le)) * 1000", "interval": "", "legendFormat": "", + "range": true, "refId": "A" } ], - "title": "Request Latency", + "title": "request latency", "type": "stat" }, { "datasource": { + "type": "prometheus", "uid": "${datasource}" }, "description": "The request latency for http requests over the selected date range", @@ -1051,19 +996,21 @@ data: "mode": "thresholds" }, "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", "axisLabel": "seconds", "axisPlacement": "auto", "barAlignment": 0, "drawStyle": "line", - "fillOpacity": 35, - "gradientMode": "scheme", + "fillOpacity": 25, + "gradientMode": "opacity", "hideFrom": { "legend": false, "tooltip": false, "viz": false }, "lineInterpolation": "linear", - "lineWidth": 3, + "lineWidth": 2, "pointSize": 5, "scaleDistribution": { "type": "linear" @@ -1084,8 +1031,7 @@ data: "mode": "absolute", "steps": [ { - "color": "green", - "value": null + "color": "green" }, { "color": "dark-purple", @@ -1144,17 +1090,18 @@ data: ] }, "gridPos": { - "h": 8, - "w": 11, - "x": 5, - "y": 27 + "h": 7, + "w": 12, + "x": 4, + "y": 34 }, "id": 201, "options": { "legend": { "calcs": [], "displayMode": "list", - "placement": "bottom" + "placement": "bottom", + "showLegend": true }, "tooltip": { "mode": "single", @@ -1163,17 +1110,27 @@ data: }, "targets": [ { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", "exemplar": true, - "expr": "histogram_quantile(0.99, sum(rate(image_builder_composer_http_duration_seconds_bucket[$interval])) by (le))", + "expr": "histogram_quantile(0.99, sum(rate(image_builder_composer_http_duration_seconds_bucket{tenant=~\"$tenant\"}[$interval])) by (le))", "hide": false, "interval": "", "legendFormat": "p99", + "range": true, "refId": "C" }, { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, "editorMode": "code", "exemplar": true, - "expr": "histogram_quantile(0.95, sum(rate(image_builder_composer_http_duration_seconds_bucket[$interval])) by (le))", + "expr": "histogram_quantile(0.95, sum(rate(image_builder_composer_http_duration_seconds_bucket{tenant=~\"$tenant\"}[$interval])) by (le))", "hide": false, "interval": "", "legendFormat": "p95", @@ -1181,18 +1138,25 @@ data: "refId": "B" }, { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", "exemplar": true, - "expr": "histogram_quantile(0.5, sum(rate(image_builder_composer_http_duration_seconds_bucket[$interval])) by (le))", + "expr": "histogram_quantile(0.5, sum(rate(image_builder_composer_http_duration_seconds_bucket{tenant=~\"$tenant\"}[$interval])) by (le))", "interval": "", "legendFormat": "p50", + "range": true, "refId": "A" } ], - "title": "Request Latency", + "title": "request latency", "type": "timeseries" }, { "datasource": { + "type": "prometheus", "uid": "${datasource}" }, "description": "Percent of requests exceeding latency allowed by SLO", @@ -1202,6 +1166,8 @@ data: "mode": "palette-classic" }, "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", "axisLabel": "", "axisPlacement": "auto", "barAlignment": 0, @@ -1236,8 +1202,7 @@ data: "mode": "absolute", "steps": [ { - "color": "green", - "value": null + "color": "green" }, { "color": "red", @@ -1250,17 +1215,18 @@ data: "overrides": [] }, "gridPos": { - "h": 8, + "h": 7, "w": 8, "x": 16, - "y": 27 + "y": 34 }, "id": 204, "options": { "legend": { "calcs": [], - "displayMode": "hidden", - "placement": "bottom" + "displayMode": "list", + "placement": "bottom", + "showLegend": false }, "tooltip": { "mode": "single", @@ -1269,129 +1235,41 @@ data: }, "targets": [ { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", "exemplar": true, - "expr": "1 - sum(rate(image_builder_composer_http_duration_seconds_bucket{le=\"0.2\"}[$interval]))/sum(rate(image_builder_composer_http_duration_seconds_count[$interval]))", + "expr": "1 - sum(rate(image_builder_composer_http_duration_seconds_bucket{le=\"0.2\", tenant=~\"$tenant\"}[$interval]))/sum(rate(image_builder_composer_http_duration_seconds_count[$interval]))", "interval": "", "legendFormat": "", + "range": true, "refId": "A" } ], - "title": "Slow Request Rate", + "title": "slow request rate", "type": "timeseries" }, { - "cacheTimeout": 1, "datasource": { + "type": "prometheus", "uid": "${datasource}" }, - "description": "How long will it take to consume all our budget if our error consumption remains at the current rate for the selected date range.", - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "decimals": 2, - "mappings": [ - { - "options": { - "match": "null", - "result": { - "index": 0, - "text": "1.40 days" - } - }, - "type": "special" - }, - { - "options": { - "from": 672, - "result": { - "index": 1, - "text": "∞" - }, - "to": 3360100 - }, - "type": "range" - } - ], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "red", - "value": null - }, - { - "color": "#EAB839", - "value": 40 - }, - { - "color": "green", - "value": 50 - } - ] - }, - "unit": "h" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 4, - "x": 0, - "y": 35 - }, - "id": 198, - "links": [], - "maxDataPoints": 100, - "options": { - "colorMode": "value", - "graphMode": "none", - "justifyMode": "auto", - "orientation": "horizontal", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "text": { - "valueSize": 80 - }, - "textMode": "auto" - }, - "pluginVersion": "9.0.2", - "targets": [ - { - "exemplar": true, - "expr": "28 * 24 * (1 - $latency_slo) \n/\n(\n 1.001 - (\n (\n sum(rate(image_builder_composer_http_duration_seconds_bucket{le=\"0.2\"}[$__range]))\n /\n sum(rate(image_builder_composer_http_duration_seconds_count[$__range]))\n ) OR on() vector(1) # set fallback incase the above query result is empty\n ) \n)", - "format": "time_series", - "interval": "", - "intervalFactor": 1, - "legendFormat": "", - "refId": "A" - } - ], - "title": "Error Budget Remaining", - "type": "stat" - }, - { - "datasource": { - "uid": "${datasource}" - }, - "description": "The percentage of error budget consumed for the selected time range. ", + "description": "The throughput rate of Compose errors and non-errors over time for the selected time range", "fieldConfig": { "defaults": { "color": { "mode": "thresholds" }, "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", "axisLabel": "", "axisPlacement": "auto", "barAlignment": 0, "drawStyle": "line", - "fillOpacity": 100, + "fillOpacity": 5, "gradientMode": "scheme", "hideFrom": { "legend": false, @@ -1399,91 +1277,91 @@ data: "viz": false }, "lineInterpolation": "linear", - "lineStyle": { - "fill": "solid" - }, - "lineWidth": 0, + "lineWidth": 2, "pointSize": 5, "scaleDistribution": { "type": "linear" }, - "showPoints": "never", - "spanNulls": true, + "showPoints": "auto", + "spanNulls": 3600000, "stacking": { "group": "A", "mode": "none" }, "thresholdsStyle": { - "mode": "off" + "mode": "line" } }, - "links": [], "mappings": [], + "min": 0, "thresholds": { "mode": "absolute", "steps": [ { - "color": "green", - "value": null + "color": "green" }, { "color": "#EAB839", - "value": 0.95 + "value": 400 }, { "color": "red", - "value": 1 + "value": 500 } ] }, - "unit": "percentunit" + "unit": "none" }, "overrides": [] }, "gridPos": { - "h": 8, - "w": 20, - "x": 4, - "y": 35 + "h": 16, + "w": 24, + "x": 0, + "y": 41 }, - "id": 199, - "links": [], + "id": 213, "options": { "legend": { "calcs": [], - "displayMode": "hidden", - "placement": "bottom" + "displayMode": "table", + "placement": "bottom", + "showLegend": true }, "tooltip": { "mode": "single", "sort": "none" } }, - "pluginVersion": "8.2.1", "targets": [ { + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, + "editorMode": "code", "exemplar": true, - "expr": "1 - (\n (\n (\n sum(increase(image_builder_composer_http_duration_seconds_bucket{le=\"0.2\"}[28d]))\n /\n sum(increase(image_builder_composer_http_duration_seconds_count[28d]))\n ) OR on() vector(1)\n ) - $latency_slo\n)\n/ \n(1 - $latency_slo)", - "instant": false, + "expr": "histogram_quantile(0.95, sum by(le, path) (rate(image_builder_composer_http_duration_seconds_bucket{tenant=~\"$tenant\"}[$__rate_interval]))) * 1000", + "hide": false, "interval": "", - "intervalFactor": 10, - "legendFormat": "errorbudget", + "legendFormat": "{{path}}", + "range": true, "refId": "A" } ], - "title": "Error Budget Consumed", + "title": "request latency", "type": "timeseries" } ], "refresh": false, - "schemaVersion": 36, + "schemaVersion": 37, "style": "dark", "tags": [], "templating": { "list": [ { "current": { - "selected": false, + "selected": true, "text": "app-sre-prod-04-prometheus", "value": "app-sre-prod-04-prometheus" }, @@ -1504,9 +1382,9 @@ data: "auto_count": 30, "auto_min": "10s", "current": { - "selected": false, - "text": "6h", - "value": "6h" + "selected": true, + "text": "30m", + "value": "30m" }, "hide": 0, "name": "interval", @@ -1517,7 +1395,7 @@ data: "value": "5m" }, { - "selected": false, + "selected": true, "text": "30m", "value": "30m" }, @@ -1527,7 +1405,7 @@ data: "value": "1h" }, { - "selected": true, + "selected": false, "text": "6h", "value": "6h" }, @@ -1573,11 +1451,68 @@ data: "query": "0.95", "skipUrlSync": false, "type": "constant" + }, + { + "allValue": ".*", + "current": { + "selected": true, + "text": [ + "All" + ], + "value": [ + "$__all" + ] + }, + "hide": 0, + "includeAll": true, + "multi": true, + "name": "tenant", + "options": [ + { + "selected": true, + "text": "All", + "value": "$__all" + }, + { + "selected": false, + "text": "crc stage", + "value": "org-15877963" + }, + { + "selected": false, + "text": "fedora stage", + "value": "org-15842261" + }, + { + "selected": false, + "text": "brew stage", + "value": "org-16133643" + }, + { + "selected": false, + "text": "crc production", + "value": "org-15885990" + }, + { + "selected": false, + "text": "fedora production", + "value": "org-16057323" + }, + { + "selected": false, + "text": "brew production", + "value": "org-16135456" + } + ], + "query": "crc stage : org-15877963,fedora stage : org-15842261,brew stage : org-16133643,crc production : org-15885990,fedora production : org-16057323,brew production : org-16135456", + "queryValue": "", + "skipUrlSync": false, + "type": "custom" } ] }, "time": { - "from": "now-28d", + "from": "now-6h", "to": "now" }, "timepicker": { @@ -1608,6 +1543,6 @@ data: "timezone": "", "title": "Image Builder Composer", "uid": "image-builder-composer", - "version": 6, + "version": 7, "weekStart": "" }