From c3460317a484b443901aa3deb1c28df252fbaf6b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maximilian=20Pa=C3=9F?= <22845248+mpass99@users.noreply.github.com> Date: Fri, 12 Aug 2022 00:35:30 +0200 Subject: [PATCH] #110 Add Grafana dashboard visualizing important Poseidon stats. --- deploy/grafana-dashboard/main.json | 2419 ++++++++++++++++++---------- 1 file changed, 1536 insertions(+), 883 deletions(-) diff --git a/deploy/grafana-dashboard/main.json b/deploy/grafana-dashboard/main.json index 3e81929..a41c59f 100644 --- a/deploy/grafana-dashboard/main.json +++ b/deploy/grafana-dashboard/main.json @@ -3,7 +3,10 @@ "list": [ { "builtIn": 1, - "datasource": "-- Grafana --", + "datasource": { + "type": "datasource", + "uid": "grafana" + }, "enable": true, "hide": true, "iconColor": "rgba(0, 211, 255, 1)", @@ -22,12 +25,16 @@ "fiscalYearStartMonth": 0, "graphTooltip": 0, "id": 13, - "iteration": 1653418538550, + "iteration": 1660256037912, "links": [], "liveNow": false, "panels": [ { - "collapsed": true, + "collapsed": false, + "datasource": { + "type": "influxdb", + "uid": "w2iPT7fGz" + }, "gridPos": { "h": 1, "w": 24, @@ -35,894 +42,1164 @@ "y": 0 }, "id": 25, - "panels": [ - { - "cards": {}, - "color": { - "cardColor": "#b4ff00", - "colorScale": "sqrt", - "colorScheme": "interpolateOranges", - "exponent": 0.5, - "mode": "spectrum" - }, - "dataFormat": "timeseries", - "datasource": { - "type": "influxdb", - "uid": "cMBTRmQnz" - }, - "description": "", - "gridPos": { - "h": 9, - "w": 8, - "x": 0, - "y": 1 - }, - "heatmap": {}, - "hideZeroBuckets": false, - "highlightCards": true, - "id": 28, - "legend": { - "show": false - }, - "pluginVersion": "8.4.6", - "reverseYBuckets": false, - "targets": [ - { - "datasource": { - "type": "influxdb", - "uid": "cMBTRmQnz" - }, - "query": "from(bucket: \"poseidon/autogen\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_field\"] == \"duration\")\n |> filter(fn: (r) => contains(value: r[\"environment_id\"], set: ${environment_ids:json}))\n |> filter(fn: (r) => contains(value: r[\"status\"], set: ${status_codes:json}))\n |> keep(columns: [\"_time\", \"_value\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean)\n", - "refId": "A" - } - ], - "title": "Request Latency", - "tooltip": { - "show": true, - "showHistogram": false - }, - "type": "heatmap", - "xAxis": { - "show": true - }, - "yAxis": { - "decimals": 1, - "format": "ns", - "logBase": 1, - "show": true - }, - "yBucketBound": "auto" - }, - { - "datasource": { - "type": "influxdb", - "uid": "cMBTRmQnz" - }, - "description": "", - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 0, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "log": 10, - "type": "log" - }, - "showPoints": "auto", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "ns" - }, - "overrides": [] - }, - "gridPos": { - "h": 9, - "w": 8, - "x": 8, - "y": 1 - }, - "id": 27, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom" - }, - "tooltip": { - "mode": "single", - "sort": "none" - } - }, - "pluginVersion": "8.4.6", - "targets": [ - { - "datasource": { - "type": "influxdb", - "uid": "cMBTRmQnz" - }, - "query": "from(bucket: \"poseidon/autogen\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_field\"] == \"duration\")\n |> filter(fn: (r) => contains(value: r[\"environment_id\"], set: ${environment_ids:json}))\n |> filter(fn: (r) => contains(value: r[\"status\"], set: ${status_codes:json}))\n |> keep(columns: [\"_time\", \"_value\", \"_measurement\"])\n |> aggregateWindow(every: duration(v: int(v: v.windowPeriod) * 10), fn: (tables=<-, column) => tables |> quantile(q: 0.999))\n", - "refId": "A" - } - ], - "title": "Service time (99.9%)", - "type": "timeseries" - }, - { - "datasource": { - "type": "influxdb", - "uid": "cMBTRmQnz" - }, - "description": "", - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 0, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "log": 2, - "type": "log" - }, - "showPoints": "auto", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - } - }, - "overrides": [ - { - "matcher": { - "id": "byName", - "options": "all" - }, - "properties": [ - { - "id": "color", - "value": { - "fixedColor": "super-light-green", - "mode": "fixed" - } - } - ] - } - ] - }, - "gridPos": { - "h": 9, - "w": 8, - "x": 16, - "y": 1 - }, - "id": 2, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom" - }, - "tooltip": { - "mode": "single", - "sort": "none" - } - }, - "pluginVersion": "8.4.6", - "targets": [ - { - "datasource": { - "type": "influxdb", - "uid": "cMBTRmQnz" - }, - "query": "import \"date\"\n\ndata = from(bucket: \"poseidon/autogen\")\n |> range(start: date.truncate(t: v.timeRangeStart, unit: 1m), stop: date.truncate(t: v.timeRangeStop, unit: 1m))\n |> filter(fn: (r) => r._field == \"duration\")\n |> filter(fn: (r) => contains(value: r[\"environment_id\"], set: ${environment_ids:json}))\n |> filter(fn: (r) => contains(value: r[\"status\"], set: ${status_codes:json}))\n |> keep(columns: [\"_time\", \"_value\", \"status\"])\n\nall = data |> set(key: \"status\", value: \"all\")\n\nunion(tables: [data, all])\n |> aggregateWindow(every: 1m, fn: count, createEmpty: true)\n |> aggregateWindow(every: duration(v: int(v: v.windowPeriod) * 20), fn: mean, createEmpty: true) \n", - "refId": "A" - } - ], - "title": "Requests per minute", - "type": "timeseries" - }, - { - "datasource": { - "type": "influxdb", - "uid": "cMBTRmQnz" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "super-light-green", - "value": null - }, - { - "color": "green", - "value": 1000000000 - }, - { - "color": "yellow", - "value": 2000000000 - }, - { - "color": "#EF843C", - "value": 3000000000 - }, - { - "color": "light-red", - "value": 4000000000 - }, - { - "color": "dark-red", - "value": 5000000000 - }, - { - "color": "dark-purple", - "value": 10000000000 - }, - { - "color": "#000000", - "value": 20000000000 - } - ] - }, - "unit": "ns" - }, - "overrides": [] - }, - "gridPos": { - "h": 11, - "w": 8, - "x": 0, - "y": 10 - }, - "id": 20, - "options": { - "displayMode": "gradient", - "orientation": "horizontal", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": true - }, - "showUnfilled": true - }, - "pluginVersion": "8.4.6", - "targets": [ - { - "datasource": { - "type": "influxdb", - "uid": "cMBTRmQnz" - }, - "query": "from(bucket: \"poseidon/autogen\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_field\"] == \"duration\")\n |> filter(fn: (r) => r[\"_measurement\"] == \"poseidon_/execute\" or r[\"_measurement\"] == \"poseidon_/files\" or r[\"_measurement\"] == \"poseidon_/websocket\")\n |> filter(fn: (r) => contains(value: r[\"environment_id\"], set: ${environment_ids:json}))\n |> filter(fn: (r) => contains(value: r[\"status\"], set: ${status_codes:json}))\n |> filter(fn: (r) => exists r.environment_id)\n |> drop(columns: [\"_field\", \"environment_type\", \"status\", \"_measurement\"])\n |> group(columns: [\"environment_id\", \"runner_id\"])\n |> mean()\n |> group(columns: [\"environment_id\"])\n |> mean()\n |> map(fn: (r) => ({r with _value: r._value * 3.0})) // Each execution has three requests\n |> rename(columns: {_value: \"env\"})\n", - "refId": "A" - } - ], - "title": "Execution duration", - "type": "bargauge" - }, - { - "datasource": { - "type": "influxdb", - "uid": "cMBTRmQnz" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "continuous-RdYlGr" - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "super-light-green", - "value": null - } - ] - }, - "unit": "none" - }, - "overrides": [] - }, - "gridPos": { - "h": 11, - "w": 8, - "x": 8, - "y": 10 - }, - "id": 32, - "options": { - "displayMode": "gradient", - "orientation": "horizontal", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": true - }, - "showUnfilled": true - }, - "pluginVersion": "8.4.6", - "targets": [ - { - "datasource": { - "type": "influxdb", - "uid": "cMBTRmQnz" - }, - "query": "from(bucket: \"poseidon/autogen\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_field\"] == \"duration\")\n |> filter(fn: (r) => contains(value: r[\"environment_id\"], set: ${environment_ids:json}))\n |> filter(fn: (r) => contains(value: r[\"status\"], set: ${status_codes:json}))\n |> filter(fn: (r) => exists r.environment_id)\n |> filter(fn: (r) => r[\"_measurement\"] == \"poseidon_/websocket\")\n |> keep(columns: [\"_value\", \"environment_id\", \"runner_id\"])\n |> count()\n |> keep(columns: [\"_value\", \"environment_id\"])\n |> mean()\n |> rename(columns: {_value: \"env\"})\n", - "refId": "A" - } - ], - "title": "Executions per runner", - "type": "bargauge" - }, - { - "datasource": { - "type": "influxdb", - "uid": "cMBTRmQnz" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "continuous-GrYlRd" - }, - "decimals": 2, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "super-light-green", - "value": null - } - ] - }, - "unit": "none" - }, - "overrides": [] - }, - "gridPos": { - "h": 11, - "w": 8, - "x": 16, - "y": 10 - }, - "id": 26, - "options": { - "displayMode": "gradient", - "orientation": "horizontal", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": true - }, - "showUnfilled": true - }, - "pluginVersion": "8.4.6", - "targets": [ - { - "datasource": { - "type": "influxdb", - "uid": "cMBTRmQnz" - }, - "query": "from(bucket: \"poseidon/autogen\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_field\"] == \"duration\")\n |> filter(fn: (r) => contains(value: r[\"environment_id\"], set: ${environment_ids:json}))\n |> filter(fn: (r) => contains(value: r[\"status\"], set: ${status_codes:json}))\n |> filter(fn: (r) => r[\"_measurement\"] == \"poseidon_/execute\" or r[\"_measurement\"] == \"poseidon_/files\" or r[\"_measurement\"] == \"poseidon_/websocket\")\n |> filter(fn: (r) => exists r.environment_id)\n |> drop(columns: [\"_measurement\", \"_field\", \"environment_type\", \"runner_id\", \"status\"])\n |> aggregateWindow(every: 1m, fn: count, createEmpty: true)\n |> keep(columns: [\"_value\", \"environment_id\"])\n |> mean()\n |> map(fn: (r) => ({r with _value: r._value / 3.0})) // Each execution has three requests\n |> rename(columns: {_value: \"env\"})\n", - "refId": "A" - } - ], - "title": "Executions per minute", - "type": "bargauge" - } - ], + "panels": [], "title": "General", "type": "row" }, { - "collapsed": true, + "datasource": { + "type": "influxdb", + "uid": "cMBTRmQnz" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "log": 2, + "type": "log" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "all" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#4c4b5a", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 9, + "w": 8, + "x": 0, + "y": 1 + }, + "id": 2, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom" + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "8.4.6", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "cMBTRmQnz" + }, + "query": "import \"date\"\n\ndata = from(bucket: \"poseidon/autogen\")\n |> range(start: date.truncate(t: v.timeRangeStart, unit: 1m), stop: date.truncate(t: v.timeRangeStop, unit: 1m))\n |> filter(fn: (r) => r._field == \"duration\")\n |> filter(fn: (r) => contains(value: r[\"environment_id\"], set: ${environment_ids:json}))\n |> filter(fn: (r) => contains(value: r[\"status\"], set: ${status_codes:json}))\n |> filter(fn: (r) => (not exists r.stage) or contains(value: r[\"stage\"], set: ${stages:json}))\n |> keep(columns: [\"_time\", \"_value\", \"status\"])\n\nall = data |> set(key: \"status\", value: \"all\")\n\nresult = union(tables: [data, all])\n |> aggregateWindow(every: 1m, fn: count, createEmpty: true)\n\nif int(v: v.windowPeriod) > int(v: 1m) \n then result |> aggregateWindow(every: duration(v: int(v: v.windowPeriod) * 20), fn: mean, createEmpty: true)\n else result |> aggregateWindow(every: duration(v: int(v: v.windowPeriod) * 5), fn: mean, createEmpty: false)\n", + "refId": "A" + } + ], + "title": "Requests per minute", + "type": "timeseries" + }, + { + "cards": {}, + "color": { + "cardColor": "#b4ff00", + "colorScale": "sqrt", + "colorScheme": "interpolateOranges", + "exponent": 0.5, + "mode": "spectrum" + }, + "dataFormat": "timeseries", + "datasource": { + "type": "influxdb", + "uid": "cMBTRmQnz" + }, + "description": "", + "gridPos": { + "h": 9, + "w": 8, + "x": 8, + "y": 1 + }, + "heatmap": {}, + "hideZeroBuckets": false, + "highlightCards": true, + "id": 28, + "legend": { + "show": false + }, + "pluginVersion": "8.4.6", + "reverseYBuckets": false, + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "cMBTRmQnz" + }, + "query": "from(bucket: \"poseidon/autogen\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_field\"] == \"duration\")\n |> filter(fn: (r) => contains(value: r[\"environment_id\"], set: ${environment_ids:json}))\n |> filter(fn: (r) => contains(value: r[\"status\"], set: ${status_codes:json}))\n |> filter(fn: (r) => (not exists r.stage) or contains(value: r[\"stage\"], set: ${stages:json}))\n |> keep(columns: [\"_time\", \"_value\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean)\n", + "refId": "A" + } + ], + "title": "Request Latency", + "tooltip": { + "show": true, + "showHistogram": false + }, + "type": "heatmap", + "xAxis": { + "show": true + }, + "yAxis": { + "decimals": 1, + "format": "ns", + "logBase": 1, + "show": true + }, + "yBucketBound": "auto" + }, + { + "datasource": { + "type": "influxdb", + "uid": "cMBTRmQnz" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "log": 10, + "type": "log" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ns" + }, + "overrides": [] + }, + "gridPos": { + "h": 9, + "w": 8, + "x": 16, + "y": 1 + }, + "id": 27, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom" + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "8.4.6", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "cMBTRmQnz" + }, + "query": "from(bucket: \"poseidon/autogen\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_field\"] == \"duration\")\n |> filter(fn: (r) => contains(value: r[\"environment_id\"], set: ${environment_ids:json}))\n |> filter(fn: (r) => contains(value: r[\"status\"], set: ${status_codes:json}))\n |> filter(fn: (r) => (not exists r.stage) or contains(value: r[\"stage\"], set: ${stages:json}))\n |> keep(columns: [\"_time\", \"_value\", \"_measurement\"])\n |> aggregateWindow(every: duration(v: int(v: v.windowPeriod) * 10), fn: (tables=<-, column) => tables |> quantile(q: 0.999))\n", + "refId": "A" + } + ], + "title": "Service time (99.9%)", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "cMBTRmQnz" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "fixed" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 6, + "w": 8, + "x": 0, + "y": 10 + }, + "id": 41, + "options": { + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": true + }, + "showThresholdLabels": false, + "showThresholdMarkers": false + }, + "pluginVersion": "8.5.5", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "cMBTRmQnz" + }, + "query": "import \"date\"\n\n// The need for the date truncation is caused by Poseidon sending all influx events at the same time when starting up. This way not the last but a random value is displayed.\n// Since in this startup process the highes value is the correct one, we choose the highest value of the last events.\n\ndata = from(bucket: \"poseidon/autogen\")\n |> range(start: -1y)\n |> filter(fn: (r) => r[\"_measurement\"] == \"poseidon_environments\")\n |> group(columns: [\"stage\"], mode:\"by\")\n |> map(fn: (r) => ({ r with _time: date.truncate(t: r._time, unit: 1m) }))\n\ndeploy_times = data\n |> last()\n |> keep(columns: [\"stage\", \"_time\"])\n\njoin(tables: {key1: data, key2: deploy_times}, on: [\"stage\", \"_time\"], method: \"inner\")\n |> max()\n |> keep(columns: [\"stage\", \"_value\"])\n |> rename(columns: {_value: \"\"})\n", + "refId": "A" + } + ], + "title": "Current environment count", + "type": "gauge" + }, + { + "datasource": { + "type": "influxdb", + "uid": "cMBTRmQnz" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "fixed" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 6, + "w": 8, + "x": 8, + "y": 10 + }, + "id": 42, + "options": { + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": true + }, + "showThresholdLabels": false, + "showThresholdMarkers": true + }, + "pluginVersion": "8.5.5", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "cMBTRmQnz" + }, + "query": "from(bucket: \"poseidon/autogen\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"poseidon_used_runners\")\n |> filter(fn: (r) => r[\"_field\"] == \"count\")\n |> group(columns: [\"stage\"], mode:\"by\")\n |> last()\n |> keep(columns: [\"_value\", \"stage\"])\n |> rename(columns: {_value: \"\"})\n", + "refId": "A" + } + ], + "title": "Currently used runners", + "type": "gauge" + }, + { + "datasource": { + "type": "influxdb", + "uid": "cMBTRmQnz" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "continuous-GrYlRd" + }, + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 6, + "w": 8, + "x": 16, + "y": 10 + }, + "id": 37, + "options": { + "displayMode": "gradient", + "minVizHeight": 10, + "minVizWidth": 0, + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showUnfilled": true + }, + "pluginVersion": "8.5.5", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "cMBTRmQnz" + }, + "query": "from(bucket: \"poseidon/autogen\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"poseidon_aws_executions\" or r[\"_measurement\"] == \"poseidon_nomad_executions\")\n |> filter(fn: (r) => contains(value: r[\"environment_id\"], set: ${environment_ids:json}))\n |> filter(fn: (r) => (not exists r.stage) or contains(value: r[\"stage\"], set: ${stages:json}))\n |> filter(fn: (r) => not bool(v: r[\"isDeletion\"]))\n |> group(columns: [\"environment_id\", \"stage\"], mode:\"by\")\n |> count()\n |> keep(columns: [\"_value\", \"environment_id\"])\n |> rename(columns: {_value: \"env\"})\n", + "refId": "A" + } + ], + "title": "Number of Executions", + "type": "bargauge" + }, + { + "datasource": { + "type": "influxdb", + "uid": "cMBTRmQnz" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "super-light-green", + "value": null + }, + { + "color": "green", + "value": 1000000000 + }, + { + "color": "yellow", + "value": 2000000000 + }, + { + "color": "#EF843C", + "value": 3000000000 + }, + { + "color": "light-red", + "value": 4000000000 + }, + { + "color": "dark-red", + "value": 5000000000 + }, + { + "color": "dark-purple", + "value": 10000000000 + }, + { + "color": "#000000", + "value": 20000000000 + } + ] + }, + "unit": "ns" + }, + "overrides": [] + }, + "gridPos": { + "h": 11, + "w": 8, + "x": 0, + "y": 16 + }, + "id": 20, + "options": { + "displayMode": "gradient", + "minVizHeight": 10, + "minVizWidth": 0, + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": true + }, + "showUnfilled": true + }, + "pluginVersion": "8.5.5", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "cMBTRmQnz" + }, + "query": "from(bucket: \"poseidon/autogen\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_field\"] == \"duration\")\n |> filter(fn: (r) => r[\"_measurement\"] == \"poseidon_/execute\" or r[\"_measurement\"] == \"poseidon_/files\" or r[\"_measurement\"] == \"poseidon_/websocket\")\n |> filter(fn: (r) => contains(value: r[\"environment_id\"], set: ${environment_ids:json}))\n |> filter(fn: (r) => contains(value: r[\"status\"], set: ${status_codes:json}))\n |> filter(fn: (r) => (not exists r.stage) or contains(value: r[\"stage\"], set: ${stages:json}))\n |> filter(fn: (r) => exists r.environment_id)\n |> drop(columns: [\"_field\", \"environment_type\", \"status\", \"_measurement\"])\n |> group(columns: [\"environment_id\", \"runner_id\"])\n |> mean()\n |> group(columns: [\"environment_id\"])\n |> mean()\n |> map(fn: (r) => ({r with _value: r._value * 3.0})) // Each execution has three requests\n |> rename(columns: {_value: \"env\"})\n", + "refId": "A" + } + ], + "title": "Execution duration", + "type": "bargauge" + }, + { + "datasource": { + "type": "influxdb", + "uid": "cMBTRmQnz" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "continuous-RdYlGr" + }, + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "super-light-green", + "value": null + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 11, + "w": 8, + "x": 8, + "y": 16 + }, + "id": 32, + "options": { + "displayMode": "gradient", + "minVizHeight": 10, + "minVizWidth": 0, + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": true + }, + "showUnfilled": true + }, + "pluginVersion": "8.5.5", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "cMBTRmQnz" + }, + "query": "data = from(bucket: \"poseidon/autogen\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => (not exists r.stage) or contains(value: r[\"stage\"], set: ${stages:json}))\n\nrunner_deletions = data\n |> filter(fn: (r) => r[\"_measurement\"] == \"poseidon_used_runners\")\n |> filter(fn: (r) => bool(v: r[\"isDeletion\"]))\n |> keep(columns: [\"id\"])\n |> rename(columns: {id: \"runner_id\"})\n\nexecutions = data\n |> filter(fn: (r) => r[\"_measurement\"] == \"poseidon_nomad_executions\" or r[\"_measurement\"] == \"poseidon_aws_executions\")\n |> filter(fn: (r) => not bool(v: r[\"isDeletion\"]))\n |> filter(fn: (r) => contains(value: r[\"environment_id\"], set: ${environment_ids:json}))\n |> keep(columns: [\"_value\", \"environment_id\", \"runner_id\"])\n |> count()\n\njoin(tables: {key1: executions, key2: runner_deletions}, on: [\"runner_id\"], method: \"inner\")\n |> keep(columns: [\"_value\", \"environment_id\"])\n |> mean()\n |> rename(columns: {_value: \"env\"})\n", + "refId": "A" + } + ], + "title": "Executions per runner", + "type": "bargauge" + }, + { + "datasource": { + "type": "influxdb", + "uid": "cMBTRmQnz" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "continuous-GrYlRd" + }, + "decimals": 2, + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "super-light-green", + "value": null + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 11, + "w": 8, + "x": 16, + "y": 16 + }, + "id": 26, + "options": { + "displayMode": "gradient", + "minVizHeight": 10, + "minVizWidth": 0, + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": true + }, + "showUnfilled": true + }, + "pluginVersion": "8.5.5", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "cMBTRmQnz" + }, + "query": "import \"date\"\n\nfrom(bucket: \"poseidon/autogen\")\n |> range(start: date.truncate(t: v.timeRangeStart, unit: 1m), stop: date.truncate(t: v.timeRangeStop, unit: 1m))\n |> filter(fn: (r) => r[\"_measurement\"] == \"poseidon_aws_executions\" or r[\"_measurement\"] == \"poseidon_nomad_executions\")\n |> filter(fn: (r) => contains(value: r[\"environment_id\"], set: ${environment_ids:json}))\n |> filter(fn: (r) => (not exists r.stage) or contains(value: r[\"stage\"], set: ${stages:json}))\n |> filter(fn: (r) => not bool(v: r[\"isDeletion\"]))\n |> group(columns: [\"environment_id\", \"stage\"], mode:\"by\")\n |> aggregateWindow(every: 1m, fn: count, createEmpty: true)\n |> keep(columns: [\"_value\", \"environment_id\"])\n |> mean()\n |> rename(columns: {_value: \"env\"})\n", + "refId": "A" + } + ], + "title": "Executions per minute", + "type": "bargauge" + }, + { + "collapsed": false, + "datasource": { + "type": "influxdb", + "uid": "w2iPT7fGz" + }, "gridPos": { "h": 1, "w": 24, "x": 0, - "y": 1 + "y": 27 }, "id": 23, - "panels": [ - { - "cards": {}, - "color": { - "cardColor": "#b4ff00", - "colorScale": "sqrt", - "colorScheme": "interpolateOranges", - "exponent": 0.5, - "mode": "spectrum" - }, - "dataFormat": "timeseries", - "datasource": { - "type": "influxdb", - "uid": "cMBTRmQnz" - }, - "description": "", - "gridPos": { - "h": 10, - "w": 10, - "x": 0, - "y": 2 - }, - "heatmap": {}, - "hideZeroBuckets": false, - "highlightCards": true, - "id": 29, - "legend": { - "show": false - }, - "pluginVersion": "8.4.6", - "reverseYBuckets": false, - "targets": [ - { - "datasource": { - "type": "influxdb", - "uid": "cMBTRmQnz" - }, - "query": "from(bucket: \"poseidon/autogen\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_field\"] == \"duration\")\n |> filter(fn: (r) => contains(value: r[\"environment_id\"], set: ${environment_ids:json}))\n |> filter(fn: (r) => contains(value: r[\"status\"], set: ${status_codes:json}))\n |> filter(fn: (r) => r[\"_measurement\"] == \"poseidon_/execute\" or r[\"_measurement\"] == \"poseidon_/files\" or r[\"_measurement\"] == \"poseidon_/websocket\")\n |> filter(fn: (r) => exists r.environment_id)\n |> keep(columns: [\"_time\", \"_start\", \"_stop\", \"_value\", \"environment_id\"])\n |> aggregateWindow(every: duration(v: int(v: v.windowPeriod) * 10), fn: mean)\n |> map(fn: (r) => ({r with _value: r._value * 3.0})) // Each execution has three requests\n", - "refId": "A" - } - ], - "title": "Execution duration", - "tooltip": { - "show": true, - "showHistogram": false - }, - "type": "heatmap", - "xAxis": { - "show": true - }, - "yAxis": { - "decimals": 1, - "format": "ns", - "logBase": 1, - "show": true - }, - "yBucketBound": "auto" - }, - { - "datasource": { - "type": "influxdb", - "uid": "cMBTRmQnz" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "continuous-GrYlRd" - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - } - ] - }, - "unit": "none" - }, - "overrides": [] - }, - "gridPos": { - "h": 7, - "w": 4, - "x": 10, - "y": 2 - }, - "id": 18, - "options": { - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "mean" - ], - "fields": "", - "values": false - }, - "showThresholdLabels": true, - "showThresholdMarkers": true - }, - "pluginVersion": "8.4.6", - "targets": [ - { - "datasource": { - "type": "influxdb", - "uid": "cMBTRmQnz" - }, - "query": "import \"date\"\n\nresult = from(bucket: \"poseidon/autogen\")\n |> range(start: date.truncate(t: v.timeRangeStart, unit: 1m), stop: date.truncate(t: v.timeRangeStop, unit: 1m))\n |> filter(fn: (r) => r[\"_field\"] == \"duration\")\n |> filter(fn: (r) => contains(value: r[\"environment_id\"], set: ${environment_ids:json}))\n |> filter(fn: (r) => contains(value: r[\"status\"], set: ${status_codes:json})) \n |> filter(fn: (r) => r[\"_measurement\"] == \"poseidon_/websocket\")\n |> keep(columns: [\"_time\", \"_value\"])\n |> aggregateWindow(every: 1m, fn: count, createEmpty: true)\n\nif int(v: v.windowPeriod) > int(v: 1m)\n then result |> aggregateWindow(every: duration(v: int(v: v.windowPeriod) * 10), fn: mean, createEmpty: true) \n else result\n", - "refId": "A" - } - ], - "title": "Executions per minute", - "type": "gauge" - }, - { - "datasource": { - "type": "influxdb", - "uid": "cMBTRmQnz" - }, - "description": "", - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "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": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "none" - }, - "overrides": [] - }, - "gridPos": { - "h": 10, - "w": 10, - "x": 14, - "y": 2 - }, - "id": 21, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom" - }, - "tooltip": { - "mode": "single", - "sort": "none" - } - }, - "pluginVersion": "8.4.6", - "targets": [ - { - "datasource": { - "type": "influxdb", - "uid": "cMBTRmQnz" - }, - "query": "import \"date\"\n\ndata = from(bucket: \"poseidon/autogen\")\n |> range(start: date.truncate(t: v.timeRangeStart, unit: 1m), stop: date.truncate(t: v.timeRangeStop, unit: 1m))\n |> filter(fn: (r) => r[\"_field\"] == \"duration\")\n |> filter(fn: (r) => contains(value: r[\"environment_id\"], set: ${environment_ids:json}))\n |> filter(fn: (r) => contains(value: r[\"status\"], set: ${status_codes:json}))\n |> filter(fn: (r) => r[\"_measurement\"] == \"poseidon_/websocket\")\n |> keep(columns: [\"_time\", \"_value\", \"environment_id\"])\n\nall = data |> set(key: \"environment_id\", value: \"all\")\n\nunion(tables: [data, all])\n |> aggregateWindow(every: 1m, fn: count, createEmpty: true)\n |> aggregateWindow(every: duration(v: int(v: v.windowPeriod) * 20), fn: mean, createEmpty: true) \n", - "refId": "A" - } - ], - "title": "Executions per minute", - "type": "timeseries" - }, - { - "datasource": { - "type": "influxdb", - "uid": "cMBTRmQnz" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "continuous-GrYlRd" - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - } - ] - }, - "unit": "ns" - }, - "overrides": [] - }, - "gridPos": { - "h": 6, - "w": 4, - "x": 10, - "y": 9 - }, - "id": 31, - "options": { - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "mean" - ], - "fields": "", - "values": false - }, - "showThresholdLabels": false, - "showThresholdMarkers": true - }, - "pluginVersion": "8.4.6", - "targets": [ - { - "datasource": { - "type": "influxdb", - "uid": "cMBTRmQnz" - }, - "query": "from(bucket: \"poseidon/autogen\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_field\"] == \"duration\")\n |> filter(fn: (r) => contains(value: r[\"environment_id\"], set: ${environment_ids:json}))\n |> filter(fn: (r) => contains(value: r[\"status\"], set: ${status_codes:json}))\n |> filter(fn: (r) => r[\"_measurement\"] == \"poseidon_/execute\" or r[\"_measurement\"] == \"poseidon_/files\" or r[\"_measurement\"] == \"poseidon_/websocket\")\n |> filter(fn: (r) => exists r.environment_id)\n |> keep(columns: [\"_value\", \"_time\"])\n |> aggregateWindow(every: duration(v: int(v: v.windowPeriod) * 10), fn: mean, createEmpty: false)\n |> map(fn: (r) => ({r with _value: r._value * 3.0})) // Each execution has three requests\n", - "refId": "A" - } - ], - "title": "Execution duration", - "type": "gauge" - }, - { - "cards": {}, - "color": { - "cardColor": "#b4ff00", - "colorScale": "sqrt", - "colorScheme": "interpolateOranges", - "exponent": 0.5, - "mode": "spectrum" - }, - "dataFormat": "timeseries", - "datasource": { - "type": "influxdb", - "uid": "cMBTRmQnz" - }, - "description": "", - "gridPos": { - "h": 10, - "w": 10, - "x": 0, - "y": 12 - }, - "heatmap": {}, - "hideZeroBuckets": false, - "highlightCards": true, - "id": 33, - "legend": { - "show": false - }, - "pluginVersion": "8.4.6", - "reverseYBuckets": false, - "targets": [ - { - "datasource": { - "type": "influxdb", - "uid": "cMBTRmQnz" - }, - "query": "data = from(bucket: \"poseidon/autogen\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_field\"] == \"duration\")\n |> filter(fn: (r) => contains(value: r[\"environment_id\"], set: ${environment_ids:json}))\n |> filter(fn: (r) => contains(value: r[\"status\"], set: ${status_codes:json}))\n\nrunner_deletions = data\n |> filter(fn: (r) => r[\"_measurement\"] == \"poseidon_deleteRunner\")\n |> keep(columns: [\"_time\", \"runner_id\"])\n\nexecutions = data\n |> filter(fn: (r) => r[\"_measurement\"] == \"poseidon_/websocket\")\n |> keep(columns: [\"_value\", \"environment_id\", \"runner_id\"])\n |> count()\n\njoin(tables: {key1: executions, key2: runner_deletions}, on: [\"runner_id\"], method: \"inner\")\n |> keep(columns: [\"_value\", \"_time\"])\n |> aggregateWindow(every: duration(v: int(v: v.windowPeriod) * 10), fn: mean)\n", - "refId": "A" - } - ], - "title": "Executions per runner", - "tooltip": { - "show": true, - "showHistogram": false - }, - "type": "heatmap", - "xAxis": { - "show": true - }, - "yAxis": { - "format": "none", - "logBase": 1, - "show": true - }, - "yBucketBound": "auto" - }, - { - "datasource": { - "type": "influxdb", - "uid": "cMBTRmQnz" - }, - "description": "", - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "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": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "none" - }, - "overrides": [] - }, - "gridPos": { - "h": 10, - "w": 10, - "x": 14, - "y": 12 - }, - "id": 30, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom" - }, - "tooltip": { - "mode": "single", - "sort": "none" - } - }, - "pluginVersion": "8.4.6", - "targets": [ - { - "datasource": { - "type": "influxdb", - "uid": "cMBTRmQnz" - }, - "query": "import \"date\"\n\ndata = from(bucket: \"poseidon/autogen\")\n |> range(start: date.truncate(t: v.timeRangeStart, unit: 1m), stop: date.truncate(t: v.timeRangeStop, unit: 1m))\n |> filter(fn: (r) => r[\"_field\"] == \"duration\")\n |> filter(fn: (r) => contains(value: r[\"environment_id\"], set: ${environment_ids:json}))\n |> filter(fn: (r) => contains(value: r[\"status\"], set: ${status_codes:json})) \n |> filter(fn: (r) => r[\"_measurement\"] == \"poseidon_provideRunner\")\n |> keep(columns: [\"_time\", \"_value\", \"environment_id\"])\n\nall = data |> set(key: \"environment_id\", value: \"all\")\n\nunion(tables: [data, all])\n |> aggregateWindow(every: 1m, fn: count, createEmpty: true)\n |> aggregateWindow(every: duration(v: int(v: v.windowPeriod) * 20), fn: mean, createEmpty: true) \n", - "refId": "A" - } - ], - "title": "Runner per minute", - "type": "timeseries" - } - ], + "panels": [], "title": "Runner Insights", "type": "row" }, { - "collapsed": false, + "datasource": { + "type": "influxdb", + "uid": "cMBTRmQnz" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "fillOpacity": 48, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineWidth": 1 + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "ns" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "32" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "red", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "10" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "14" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "yellow", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "29" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "orange", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "28" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + }, + { + "__systemRef": "hideSeriesFrom", + "matcher": { + "id": "byNames", + "options": { + "mode": "exclude", + "names": [ + "10" + ], + "prefix": "All except:", + "readOnly": true + } + }, + "properties": [ + { + "id": "custom.hideFrom", + "value": { + "legend": false, + "tooltip": false, + "viz": true + } + } + ] + } + ] + }, "gridPos": { - "h": 1, + "h": 8, "w": 24, "x": 0, - "y": 2 + "y": 28 }, - "id": 36, - "panels": [], - "title": "Availability", - "type": "row" + "id": 29, + "options": { + "bucketOffset": 0, + "bucketSize": 100000000, + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom" + } + }, + "pluginVersion": "8.4.6", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "cMBTRmQnz" + }, + "query": "from(bucket: \"poseidon/autogen\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_field\"] == \"duration\")\n |> filter(fn: (r) => contains(value: r[\"environment_id\"], set: ${environment_ids:json}))\n |> filter(fn: (r) => contains(value: r[\"status\"], set: ${status_codes:json}))\n |> filter(fn: (r) => (not exists r.stage) or contains(value: r[\"stage\"], set: ${stages:json}))\n |> filter(fn: (r) => r[\"_measurement\"] == \"poseidon_/execute\" or r[\"_measurement\"] == \"poseidon_/files\" or r[\"_measurement\"] == \"poseidon_/websocket\")\n |> filter(fn: (r) => exists r.environment_id)\n |> keep(columns: [\"_time\", \"_value\", \"environment_id\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean)\n |> map(fn: (r) => ({r with _value: r._value * 3.0})) // Each execution has three requests\n", + "refId": "A" + } + ], + "title": "Execution duration", + "type": "histogram" + }, + { + "datasource": { + "type": "influxdb", + "uid": "cMBTRmQnz" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "fillOpacity": 80, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineWidth": 1 + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "32" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "red", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "10" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "__systemRef": "hideSeriesFrom", + "matcher": { + "id": "byNames", + "options": { + "mode": "exclude", + "names": [ + "14" + ], + "prefix": "All except:", + "readOnly": true + } + }, + "properties": [ + { + "id": "custom.hideFrom", + "value": { + "legend": false, + "tooltip": false, + "viz": true + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "14" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "yellow", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "29" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "orange", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 10, + "w": 11, + "x": 0, + "y": 36 + }, + "id": 33, + "options": { + "bucketOffset": 0, + "bucketSize": 1, + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom" + } + }, + "pluginVersion": "8.4.6", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "cMBTRmQnz" + }, + "query": "data = from(bucket: \"poseidon/autogen\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => (not exists r.stage) or contains(value: r[\"stage\"], set: ${stages:json}))\n\nrunner_deletions = data\n |> filter(fn: (r) => r[\"_measurement\"] == \"poseidon_used_runners\")\n |> filter(fn: (r) => bool(v: r[\"isDeletion\"]))\n |> keep(columns: [\"_time\", \"id\"])\n |> rename(columns: {id: \"runner_id\"})\n\nexecutions = data\n |> filter(fn: (r) => r[\"_measurement\"] == \"poseidon_nomad_executions\" or r[\"_measurement\"] == \"poseidon_aws_executions\")\n |> filter(fn: (r) => not bool(v: r[\"isDeletion\"]))\n |> filter(fn: (r) => contains(value: r[\"environment_id\"], set: ${environment_ids:json}))\n |> keep(columns: [\"_value\", \"environment_id\", \"runner_id\"])\n |> count()\n\njoin(tables: {key1: executions, key2: runner_deletions}, on: [\"runner_id\"], method: \"inner\")\n |> keep(columns: [\"_value\", \"_time\", \"environment_id\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n", + "refId": "A" + } + ], + "title": "Executions per runner", + "type": "histogram" + }, + { + "datasource": { + "type": "influxdb", + "uid": "cMBTRmQnz" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "smooth", + "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": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 13, + "x": 11, + "y": 36 + }, + "id": 21, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom" + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "8.4.6", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "cMBTRmQnz" + }, + "query": "import \"date\"\n\nfrom(bucket: \"poseidon/autogen\")\n |> range(start: date.truncate(t: v.timeRangeStart, unit: 1m), stop: date.truncate(t: v.timeRangeStop, unit: 1m))\n |> filter(fn: (r) => r[\"_field\"] == \"duration\")\n |> filter(fn: (r) => contains(value: r[\"environment_id\"], set: ${environment_ids:json}))\n |> filter(fn: (r) => contains(value: r[\"status\"], set: ${status_codes:json}))\n |> filter(fn: (r) => (not exists r.stage) or contains(value: r[\"stage\"], set: ${stages:json}))\n |> filter(fn: (r) => r[\"_measurement\"] == \"poseidon_/websocket\")\n |> keep(columns: [\"_time\", \"_value\", \"environment_id\"])\n |> aggregateWindow(every: 1m, fn: count, createEmpty: true)\n |> aggregateWindow(every: duration(v: int(v: v.windowPeriod) * 10), fn: mean, createEmpty: true)\n", + "refId": "A" + } + ], + "title": "Executions per minute", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "cMBTRmQnz" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "log": 2, + "type": "log" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 11, + "x": 0, + "y": 46 + }, + "id": 38, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom" + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "8.4.6", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "cMBTRmQnz" + }, + "query": "result = from(bucket: \"poseidon/autogen\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_field\"] == \"request_size\")\n |> filter(fn: (r) => contains(value: r[\"environment_id\"], set: ${environment_ids:json}))\n |> filter(fn: (r) => contains(value: r[\"status\"], set: ${status_codes:json}))\n |> filter(fn: (r) => (not exists r.stage) or contains(value: r[\"stage\"], set: ${stages:json}))\n |> keep(columns: [\"_time\", \"_value\", \"environment_id\"])\n\nif int(v: v.windowPeriod) > int(v: 1m) \n then result |> aggregateWindow(every: duration(v: int(v: v.windowPeriod) * 10), fn: mean, createEmpty: true)\n else result |> aggregateWindow(every: duration(v: int(v: v.windowPeriod) * 5), fn: mean, createEmpty: false)\n", + "refId": "A" + } + ], + "title": "Request Body Size", + "type": "timeseries" }, { "datasource": { @@ -982,12 +1259,12 @@ "overrides": [] }, "gridPos": { - "h": 11, - "w": 24, - "x": 0, - "y": 3 + "h": 10, + "w": 13, + "x": 11, + "y": 46 }, - "id": 34, + "id": 30, "options": { "legend": { "calcs": [], @@ -1006,20 +1283,396 @@ "type": "influxdb", "uid": "cMBTRmQnz" }, - "query": "from(bucket: \"poseidon/autogen\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_field\"] == \"idle_runner\" or r[\"_field\"] == \"prewarming_pool_size\")\n |> filter(fn: (r) => contains(value: r[\"environment_id\"], set: ${environment_ids:json}))\n |> filter(fn: (r) => contains(value: r[\"status\"], set: ${status_codes:json}))\n |> keep(columns: [\"_field\", \"_value\", \"_time\", \"environment_id\"])\n |> aggregateWindow(every: duration(v: int(v: v.windowPeriod) * 10), fn: mean)\n", + "query": "import \"date\"\n\nresult = from(bucket: \"poseidon/autogen\")\n |> range(start: date.truncate(t: v.timeRangeStart, unit: 1m), stop: date.truncate(t: v.timeRangeStop, unit: 1m))\n |> filter(fn: (r) => r[\"_measurement\"] == \"poseidon_used_runners\")\n |> filter(fn: (r) => contains(value: r[\"environment_id\"], set: ${environment_ids:json}))\n |> filter(fn: (r) => (not exists r.stage) or contains(value: r[\"stage\"], set: ${stages:json}))\n |> filter(fn: (r) => not bool(v: r[\"isDeletion\"]))\n |> group(columns: [\"environment_id\", \"stage\"], mode:\"by\")\n |> aggregateWindow(every: 1m, fn: count, createEmpty: true)\n |> keep(columns: [\"_value\", \"_time\", \"environment_id\"])\n\nif int(v: v.windowPeriod) > int(v: 2m) \n then result |> aggregateWindow(every: duration(v: int(v: v.windowPeriod) * 30), fn: mean, createEmpty: true)\n else result |> aggregateWindow(every: duration(v: int(v: v.windowPeriod) * 15), fn: mean, createEmpty: true)\n", "refId": "A" } ], - "title": "Prewarming Poolsize and idle Runner", + "title": "Runner per minute", + "type": "timeseries" + }, + { + "collapsed": false, + "datasource": { + "type": "influxdb", + "uid": "w2iPT7fGz" + }, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 56 + }, + "id": 36, + "panels": [], + "title": "Availability", + "type": "row" + }, + { + "datasource": { + "type": "influxdb", + "uid": "cMBTRmQnz" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "continuous-GrYlRd" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 9, + "x": 0, + "y": 57 + }, + "id": 34, + "options": { + "displayMode": "basic", + "minVizHeight": 10, + "minVizWidth": 0, + "orientation": "vertical", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showUnfilled": true + }, + "pluginVersion": "8.5.5", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "cMBTRmQnz" + }, + "query": "from(bucket: \"poseidon/autogen\")\n |> range(start: -1y)\n |> filter(fn: (r) => r[\"_measurement\"] == \"poseidon_poolsize\")\n |> filter(fn: (r) => contains(value: r[\"environment_id\"], set: ${environment_ids:json}))\n |> filter(fn: (r) => (not exists r.stage) or contains(value: r[\"stage\"], set: ${stages:json}))\n |> group(columns: [\"environment_id\", \"stage\"], mode:\"by\")\n |> last()\n |> keep(columns: [\"_value\", \"environment_id\"])\n |> rename(columns: {_value: \"env\"})\n", + "refId": "A" + } + ], + "title": "Prewarming Pool Size", + "type": "bargauge" + }, + { + "datasource": { + "type": "influxdb", + "uid": "cMBTRmQnz" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "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": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 15, + "x": 9, + "y": 57 + }, + "id": 39, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom" + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "8.4.6", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "cMBTRmQnz" + }, + "query": "from(bucket: \"poseidon/autogen\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"poseidon_nomad_idle_runners\" and r[\"_field\"] == \"count\")\n |> filter(fn: (r) => contains(value: r[\"environment_id\"], set: ${environment_ids:json}))\n |> filter(fn: (r) => (not exists r.stage) or contains(value: r[\"stage\"], set: ${stages:json}))\n |> keep(columns: [\"_value\", \"_time\", \"environment_id\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n", + "refId": "A" + } + ], + "title": "Idle Runner", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "cMBTRmQnz" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "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": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ns" + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 67 + }, + "id": 44, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom" + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "8.4.6", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "cMBTRmQnz" + }, + "query": "from(bucket: \"poseidon/autogen\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"poseidon_nomad_idle_runners\")\n |> filter(fn: (r) => r[\"_field\"] == \"startup_duration\")\n |> filter(fn: (r) => contains(value: r[\"environment_id\"], set: ${environment_ids:json}))\n |> filter(fn: (r) => (not exists r.stage) or contains(value: r[\"stage\"], set: ${stages:json}))\n |> keep(columns: [\"_value\", \"_time\", \"environment_id\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)", + "refId": "A" + } + ], + "title": "Runner startup duration", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "cMBTRmQnz" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "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": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 67 + }, + "id": 43, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom" + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "8.4.6", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "cMBTRmQnz" + }, + "query": "from(bucket: \"poseidon/autogen\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"poseidon_used_runners\")\n |> filter(fn: (r) => r[\"_field\"] == \"count\")\n |> group(columns: [\"stage\"], mode:\"by\")\n |> keep(columns: [\"_value\", \"_time\", \"stage\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)", + "refId": "A" + } + ], + "title": "Used Runner", "type": "timeseries" } ], - "refresh": "5m", - "schemaVersion": 35, + "refresh": "10s", + "schemaVersion": 36, "style": "dark", "tags": [], "templating": { "list": [ + { + "current": { + "selected": true, + "text": [ + "production" + ], + "value": [ + "production" + ] + }, + "datasource": { + "type": "influxdb", + "uid": "cMBTRmQnz" + }, + "definition": "from(bucket: \"poseidon/autogen\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_field\"] == \"duration\")\n |> keep(columns: [\"stage\"])\n |> distinct(column: \"stage\")\n |> keep(columns: [\"_value\"])\n", + "description": "The stage of the Poseidon instance.", + "hide": 0, + "includeAll": true, + "label": "Stage", + "multi": true, + "name": "stages", + "options": [], + "query": "from(bucket: \"poseidon/autogen\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_field\"] == \"duration\")\n |> keep(columns: [\"stage\"])\n |> distinct(column: \"stage\")\n |> keep(columns: [\"_value\"])\n", + "refresh": 2, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query" + }, { "current": { "selected": true, @@ -1088,6 +1741,6 @@ "timezone": "", "title": "Poseidon", "uid": "hQRzR1Qnz", - "version": 16, + "version": 46, "weekStart": "" } \ No newline at end of file