From 36f7f82f685c92978bbd8abec0783db5b4d9e808 Mon Sep 17 00:00:00 2001 From: Clive Cox Date: Sat, 19 Jan 2019 15:04:42 +0000 Subject: [PATCH 1/2] initial commit to add ksonnet version of seldon core analytics --- .../templates/alertmanager-deployment.json | 2 +- helm-charts/seldon-core-analytics/values.yaml | 2 +- .../seldon-core-analytics/analytics.libsonnet | 153 ++++++ .../seldon-core-analytics/json/README.md | 1 + .../seldon-core-analytics/json/analytics.json | 513 ++++++++++++++++++ seldon-core/seldon-core-analytics/parts.yaml | 37 ++ .../prototypes/analytics.jsonnet | 47 ++ util/ksonnet/Makefile | 25 +- util/ksonnet/yj2j.py | 38 ++ 9 files changed, 812 insertions(+), 6 deletions(-) create mode 100644 seldon-core/seldon-core-analytics/analytics.libsonnet create mode 100644 seldon-core/seldon-core-analytics/json/README.md create mode 100644 seldon-core/seldon-core-analytics/json/analytics.json create mode 100644 seldon-core/seldon-core-analytics/parts.yaml create mode 100644 seldon-core/seldon-core-analytics/prototypes/analytics.jsonnet create mode 100644 util/ksonnet/yj2j.py diff --git a/helm-charts/seldon-core-analytics/templates/alertmanager-deployment.json b/helm-charts/seldon-core-analytics/templates/alertmanager-deployment.json index 8393172429..efb38d50e2 100644 --- a/helm-charts/seldon-core-analytics/templates/alertmanager-deployment.json +++ b/helm-charts/seldon-core-analytics/templates/alertmanager-deployment.json @@ -13,7 +13,7 @@ "template": { "metadata": { "annotations": { - "checksum/config-1": {{ include (print $.Template.BasePath "/alertmanager-config-configmap.yaml") . | sha256sum | quote }}, + "checksum/config-1": {{ include (print $.Template.BasePath "/alertmanager-config-configmap.yaml") . | sha256sum | quote }} }, "labels": { "app": "alertmanager-server" diff --git a/helm-charts/seldon-core-analytics/values.yaml b/helm-charts/seldon-core-analytics/values.yaml index 22611cb512..0c91433f18 100644 --- a/helm-charts/seldon-core-analytics/values.yaml +++ b/helm-charts/seldon-core-analytics/values.yaml @@ -4,7 +4,7 @@ alertmanager: grafana_prom_service_type: NodePort grafana_prom_admin_password: admin persistence: - enabled: true + enabled: false rbac: enabled: true prometheus: diff --git a/seldon-core/seldon-core-analytics/analytics.libsonnet b/seldon-core/seldon-core-analytics/analytics.libsonnet new file mode 100644 index 0000000000..dc1d009673 --- /dev/null +++ b/seldon-core/seldon-core-analytics/analytics.libsonnet @@ -0,0 +1,153 @@ +local k = import "k.libsonnet"; +local deployment = k.extensions.v1beta1.deployment; +local container = k.apps.v1beta1.deployment.mixin.spec.template.spec.containersType; +local service = k.core.v1.service.mixin; +local serviceAccountMixin = k.core.v1.serviceAccount.mixin; +local clusterRoleBindingMixin = k.rbac.v1beta1.clusterRoleBinding.mixin; +local clusterRoleBinding = k.rbac.v1beta1.clusterRoleBinding; +local roleBindingMixin = k.rbac.v1beta1.roleBinding.mixin; +local roleBinding = k.rbac.v1beta1.roleBinding; +local roleMixin = k.rbac.v1beta1.role.mixin; +local serviceAccount = k.core.v1.serviceAccount; +local secret = k.core.v1.secret; +local configMap = k.core.v1.configMap; +local job = k.batch.v1.job; +local daemonSet = k.extensions.v1beta1.daemonSet; + +local analyticsTemplate = import "json/analytics.json"; + +local getGrafanaPromSecret(x) = std.endsWith(x.metadata.name, "grafana-prom-secret"); +local getAlertmanagerServerConf(x) = std.endsWith(x.metadata.name, "alertmanager-server-conf") && x.kind == "ConfigMap"; +local getGrafanaImportDashboards(x) = std.endsWith(x.metadata.name, "grafana-import-dashboards") && x.kind == "ConfigMap"; +local getPrometheusRules(x) = std.endsWith(x.metadata.name, "prometheus-rules") && x.kind == "ConfigMap"; +local getPrometheusServerConf(x) = std.endsWith(x.metadata.name, "prometheus-server-conf") && x.kind == "ConfigMap"; +local getPrometheusClusterRole(x) = x.metadata.name == "prometheus" && x.kind == "ClusterRole"; +local getPrometheusServiceAccount(x) = x.metadata.name == "prometheus" && x.kind == "ServiceAccount"; +local getPrometheusClusterRoleBinding(x) = x.metadata.name == "prometheus" && x.kind == "ClusterRoleBinding"; +local getAlertManagerDeployment(x) = x.metadata.name == "alertmanager-deployment" && x.kind == "Deployment"; +local getAlertManagerService(x) = x.metadata.name == "alertmanager" && x.kind == "Service"; +local getGrafanaPromDeployment(x) = x.metadata.name == "grafana-prom-deployment" && x.kind == "Deployment"; +local getGrafanaPromService(x) = x.metadata.name == "grafana-prom" && x.kind == "Service"; +local getGrafanaPromJob(x) = x.metadata.name == "grafana-prom-import-dashboards" && x.kind == "Job"; +local getPrometheusExporter(x) = x.metadata.name == "prometheus-node-exporter" && x.kind == "DaemonSet"; +local getPrometheusExporterService(x) = x.metadata.name == "prometheus-node-exporter" && x.kind == "Service"; +local getPrometheusDeployment(x) = x.metadata.name == "prometheus-deployment" && x.kind == "Deployment"; +local getPrometheusService(x) = x.metadata.name == "prometheus-seldon" && x.kind == "Service"; + +{ + parts(name, namespace):: + + { + grafanaPromSecret(password):: + + local baseGrafanaPromSecret = std.filter(getGrafanaPromSecret, analyticsTemplate.items)[0]; + baseGrafanaPromSecret + + secret.withDataMixin({"grafana-prom-admin-password": std.base64(password)}) + + secret.mixin.metadata.withNamespace(namespace), + + alertManagerServerConf():: + + local baseAlertManagerServerConf = std.filter(getAlertmanagerServerConf, analyticsTemplate.items)[0]; + baseAlertManagerServerConf + + configMap.mixin.metadata.withNamespace(namespace), + + grafanaImportDashboards():: + + local baseGrafanaImportDashboards = std.filter(getGrafanaImportDashboards, analyticsTemplate.items)[0]; + baseGrafanaImportDashboards + + configMap.mixin.metadata.withNamespace(namespace), + + prometheusRules():: + + local basePrometheusRules = std.filter(getPrometheusRules, analyticsTemplate.items)[0]; + basePrometheusRules + + configMap.mixin.metadata.withNamespace(namespace), + + prometheusServerConf():: + + local basePrometheusServerConf = std.filter(getPrometheusServerConf, analyticsTemplate.items)[0]; + basePrometheusServerConf + + configMap.mixin.metadata.withNamespace(namespace), + + prometheusClusterRole():: + + std.filter(getPrometheusClusterRole, analyticsTemplate.items)[0], + + prometheusServiceAccount():: + + local basePrometheusServiceAccount = std.filter(getPrometheusServiceAccount, analyticsTemplate.items)[0]; + basePrometheusServiceAccount + + serviceAccountMixin.metadata.withNamespace(namespace), + + prometheusClusterRoleBinding():: + + local rbacClusterRoleBinding = std.filter(getPrometheusClusterRoleBinding, analyticsTemplate.items)[0]; + + local subject = rbacClusterRoleBinding.subjects[0] + { namespace: namespace }; + + rbacClusterRoleBinding + + clusterRoleBindingMixin.metadata.withNamespace(namespace) + + clusterRoleBinding.withSubjects([subject]), + + + alertManagerDeployment():: + + local baseAlertManagerDeployment = std.filter(getAlertManagerDeployment, analyticsTemplate.items)[0]; + baseAlertManagerDeployment + + deployment.mixin.metadata.withNamespace(namespace), + + alertManagerService():: + + local baseAlertManagerService = std.filter(getAlertManagerService, analyticsTemplate.items)[0]; + baseAlertManagerService + + service.metadata.withNamespace(namespace), + + grafanaPromDeployment():: + + local baseGrafanaDeployment = std.filter(getGrafanaPromDeployment, analyticsTemplate.items)[0]; + baseGrafanaDeployment + + deployment.mixin.metadata.withNamespace(namespace), + + grafanaPromService(serviceType):: + + local baseServiceGrafana = std.filter(getGrafanaPromService, analyticsTemplate.items)[0]; + + baseServiceGrafana + + service.spec.withType(serviceType) + + service.metadata.withNamespace(namespace), + + grafanaPromJob():: + + local baseGrafanaPromJob = std.filter(getGrafanaPromJob, analyticsTemplate.items)[0]; + baseGrafanaPromJob + + job.mixin.metadata.withNamespace(namespace), + + prometheusExporter():: + + local basePrometheuExporter = std.filter(getPrometheusExporter, analyticsTemplate.items)[0]; + basePrometheuExporter + + daemonSet.mixin.metadata.withNamespace(namespace), + + prometheusExporterService():: + + local basePrometheusExporterService = std.filter(getPrometheusExporterService, analyticsTemplate.items)[0]; + basePrometheusExporterService + + service.metadata.withNamespace(namespace), + + prometheusDeployment():: + + local basePrometheusDeployment = std.filter(getPrometheusDeployment, analyticsTemplate.items)[0]; + basePrometheusDeployment + + deployment.mixin.metadata.withNamespace(namespace), + + prometheusService(serviceType):: + + local baseServiceProm = std.filter(getPrometheusService, analyticsTemplate.items)[0]; + + baseServiceProm + + service.spec.withType(serviceType) + + service.metadata.withNamespace(namespace), + + }, // parts +} diff --git a/seldon-core/seldon-core-analytics/json/README.md b/seldon-core/seldon-core-analytics/json/README.md new file mode 100644 index 0000000000..6ce8fc747f --- /dev/null +++ b/seldon-core/seldon-core-analytics/json/README.md @@ -0,0 +1 @@ +analytics.json is created from ../../../util/ksonnet scripts diff --git a/seldon-core/seldon-core-analytics/json/analytics.json b/seldon-core/seldon-core-analytics/json/analytics.json new file mode 100644 index 0000000000..9c4fd4bc01 --- /dev/null +++ b/seldon-core/seldon-core-analytics/json/analytics.json @@ -0,0 +1,513 @@ +{ + "kind": "List", + "apiVersion": "v1", + "metadata": {}, + "items": [ + { + "apiVersion": "v1", + "kind": "Secret", + "metadata": { + "name": "grafana-prom-secret", + "namespace": "default" + }, + "type": "Opaque", + "data": { + "grafana-prom-admin-password": "YWRtaW4=" + } + }, + { + "apiVersion": "v1", + "data": { + "config.yaml": "route:\n receiver: 'slack_chatbots'\n group_by: ['alertname']\n group_wait: 30s\n group_interval: 5m\n repeat_interval: 3h\nreceivers:\n- name: 'slack_chatbots'\n # Deliberately left empty to not deliver anywhere.\n" + }, + "kind": "ConfigMap", + "metadata": { + "creationTimestamp": null, + "name": "alertmanager-server-conf", + "namespace": "default" + } + }, + { + "apiVersion": "v1", + "data": { + "README.md": "\n## For development if updating the Seldon Example Dashboard.\n\n * Save the dashboard to JSON by exporting it.\n * Overwrite the prediction-analytics-dashboard.json with the exported JSON\n * Run ```./convert-exported-graph.sh```\n * Then import the new dashboard\n * Port forward the grafana port\n ```\n kubectl port-forward $(kubectl get pods -n seldon -l app=grafana-prom-server -o jsonpath='{.items[0].metadata.name}') -n seldon 3000:3000\n ```\n * export the password used when starting the analytics, e.g.\n ```\n export GF_SECURITY_ADMIN_PASSWORD=password\n ```\n * run ```import-dashboards-job.sh```\n\n", + "convert-exported-graph.sh": "#!/usr/bin/env bash\n\nset -o nounset\nset -o errexit\nset -o pipefail\nset -o xtrace\n\nSTARTUP_DIR=\"$( cd \"$( dirname \"$0\" )\" && pwd )\"\n\ncd \"${STARTUP_DIR}\"\n\n\ncat predictions-analytics-dashboard.json | sed 's/\\${DS_PROMETHEUS}/prometheus/' | sed 's/DS_PROMETHEUS/DS_PROM/' > tt\nmv tt predictions-analytics-dashboard.json\n", + "grafana-net-2115-dashboard.json": "{\n \"__inputs\": [\n {\n \"name\": \"DS_PROM\",\n \"label\": \"prom\",\n \"description\": \"Prometheus Metrics Server\",\n \"type\": \"datasource\",\n \"pluginId\": \"prometheus\",\n \"pluginName\": \"Prometheus\"\n }\n ],\n \"__requires\": [\n {\n \"type\": \"grafana\",\n \"id\": \"grafana\",\n \"name\": \"Grafana\",\n \"version\": \"4.2.0\"\n },\n {\n \"type\": \"panel\",\n \"id\": \"graph\",\n \"name\": \"Graph\",\n \"version\": \"\"\n },\n {\n \"type\": \"datasource\",\n \"id\": \"prometheus\",\n \"name\": \"Prometheus\",\n \"version\": \"1.0.0\"\n },\n {\n \"type\": \"panel\",\n \"id\": \"singlestat\",\n \"name\": \"Singlestat\",\n \"version\": \"\"\n }\n ],\n \"annotations\": {\n \"list\": []\n },\n \"description\": \"This is a copy of https://grafana.com/dashboards/315 with filesystem usage tweaked to work with minikube\",\n \"editable\": true,\n \"gnetId\": 2115,\n \"graphTooltip\": 0,\n \"hideControls\": false,\n \"id\": null,\n \"links\": [],\n \"refresh\": \"10s\",\n \"rows\": [\n {\n \"collapse\": false,\n \"height\": \"200px\",\n \"panels\": [\n {\n \"aliasColors\": {},\n \"bars\": false,\n \"datasource\": \"${DS_PROM}\",\n \"decimals\": 2,\n \"editable\": true,\n \"error\": false,\n \"fill\": 1,\n \"grid\": {},\n \"height\": \"200px\",\n \"id\": 32,\n \"legend\": {\n \"alignAsTable\": false,\n \"avg\": true,\n \"current\": true,\n \"max\": false,\n \"min\": false,\n \"rightSide\": false,\n \"show\": false,\n \"sideWidth\": 200,\n \"sort\": \"current\",\n \"sortDesc\": true,\n \"total\": false,\n \"values\": true\n },\n \"lines\": true,\n \"linewidth\": 2,\n \"links\": [],\n \"nullPointMode\": \"connected\",\n \"percentage\": false,\n \"pointradius\": 5,\n \"points\": false,\n \"renderer\": \"flot\",\n \"seriesOverrides\": [],\n \"span\": 12,\n \"stack\": false,\n \"steppedLine\": false,\n \"targets\": [\n {\n \"expr\": \"sum (rate (container_network_receive_bytes_total{kubernetes_io_hostname=~\\\"^$Node$\\\"}[1m]))\",\n \"interval\": \"10s\",\n \"intervalFactor\": 1,\n \"legendFormat\": \"Received\",\n \"metric\": \"network\",\n \"refId\": \"A\",\n \"step\": 10\n },\n {\n \"expr\": \"- sum (rate (container_network_transmit_bytes_total{kubernetes_io_hostname=~\\\"^$Node$\\\"}[1m]))\",\n \"interval\": \"10s\",\n \"intervalFactor\": 1,\n \"legendFormat\": \"Sent\",\n \"metric\": \"network\",\n \"refId\": \"B\",\n \"step\": 10\n }\n ],\n \"thresholds\": [],\n \"timeFrom\": null,\n \"timeShift\": null,\n \"title\": \"Network I/O pressure\",\n \"tooltip\": {\n \"msResolution\": false,\n \"shared\": true,\n \"sort\": 0,\n \"value_type\": \"cumulative\"\n },\n \"transparent\": false,\n \"type\": \"graph\",\n \"xaxis\": {\n \"mode\": \"time\",\n \"name\": null,\n \"show\": true,\n \"values\": []\n },\n \"yaxes\": [\n {\n \"format\": \"Bps\",\n \"label\": null,\n \"logBase\": 1,\n \"max\": null,\n \"min\": null,\n \"show\": true\n },\n {\n \"format\": \"Bps\",\n \"label\": null,\n \"logBase\": 1,\n \"max\": null,\n \"min\": null,\n \"show\": false\n }\n ]\n }\n ],\n \"repeat\": null,\n \"repeatIteration\": null,\n \"repeatRowId\": null,\n \"showTitle\": false,\n \"title\": \"Network I/O pressure\",\n \"titleSize\": \"h6\"\n },\n {\n \"collapse\": false,\n \"height\": \"250px\",\n \"panels\": [\n {\n \"cacheTimeout\": null,\n \"colorBackground\": false,\n \"colorValue\": true,\n \"colors\": [\n \"rgba(50, 172, 45, 0.97)\",\n \"rgba(237, 129, 40, 0.89)\",\n \"rgba(245, 54, 54, 0.9)\"\n ],\n \"datasource\": \"${DS_PROM}\",\n \"editable\": true,\n \"error\": false,\n \"format\": \"percent\",\n \"gauge\": {\n \"maxValue\": 100,\n \"minValue\": 0,\n \"show\": true,\n \"thresholdLabels\": false,\n \"thresholdMarkers\": true\n },\n \"height\": \"180px\",\n \"id\": 4,\n \"interval\": null,\n \"links\": [],\n \"mappingType\": 1,\n \"mappingTypes\": [\n {\n \"name\": \"value to text\",\n \"value\": 1\n },\n {\n \"name\": \"range to text\",\n \"value\": 2\n }\n ],\n \"maxDataPoints\": 100,\n \"nullPointMode\": \"connected\",\n \"nullText\": null,\n \"postfix\": \"\",\n \"postfixFontSize\": \"50%\",\n \"prefix\": \"\",\n \"prefixFontSize\": \"50%\",\n \"rangeMaps\": [\n {\n \"from\": \"null\",\n \"text\": \"N/A\",\n \"to\": \"null\"\n }\n ],\n \"span\": 4,\n \"sparkline\": {\n \"fillColor\": \"rgba(31, 118, 189, 0.18)\",\n \"full\": false,\n \"lineColor\": \"rgb(31, 120, 193)\",\n \"show\": false\n },\n \"targets\": [\n {\n \"expr\": \"sum (container_memory_working_set_bytes{id=\\\"/\\\",kubernetes_io_hostname=~\\\"^$Node$\\\"}) / sum (machine_memory_bytes{kubernetes_io_hostname=~\\\"^$Node$\\\"}) * 100\",\n \"interval\": \"10s\",\n \"intervalFactor\": 1,\n \"refId\": \"A\",\n \"step\": 10\n }\n ],\n \"thresholds\": \"65, 90\",\n \"title\": \"Cluster memory usage\",\n \"transparent\": false,\n \"type\": \"singlestat\",\n \"valueFontSize\": \"80%\",\n \"valueMaps\": [\n {\n \"op\": \"=\",\n \"text\": \"N/A\",\n \"value\": \"null\"\n }\n ],\n \"valueName\": \"current\"\n },\n {\n \"cacheTimeout\": null,\n \"colorBackground\": false,\n \"colorValue\": true,\n \"colors\": [\n \"rgba(50, 172, 45, 0.97)\",\n \"rgba(237, 129, 40, 0.89)\",\n \"rgba(245, 54, 54, 0.9)\"\n ],\n \"datasource\": \"${DS_PROM}\",\n \"decimals\": 2,\n \"editable\": true,\n \"error\": false,\n \"format\": \"percent\",\n \"gauge\": {\n \"maxValue\": 100,\n \"minValue\": 0,\n \"show\": true,\n \"thresholdLabels\": false,\n \"thresholdMarkers\": true\n },\n \"height\": \"180px\",\n \"id\": 6,\n \"interval\": null,\n \"links\": [],\n \"mappingType\": 1,\n \"mappingTypes\": [\n {\n \"name\": \"value to text\",\n \"value\": 1\n },\n {\n \"name\": \"range to text\",\n \"value\": 2\n }\n ],\n \"maxDataPoints\": 100,\n \"nullPointMode\": \"connected\",\n \"nullText\": null,\n \"postfix\": \"\",\n \"postfixFontSize\": \"50%\",\n \"prefix\": \"\",\n \"prefixFontSize\": \"50%\",\n \"rangeMaps\": [\n {\n \"from\": \"null\",\n \"text\": \"N/A\",\n \"to\": \"null\"\n }\n ],\n \"span\": 4,\n \"sparkline\": {\n \"fillColor\": \"rgba(31, 118, 189, 0.18)\",\n \"full\": false,\n \"lineColor\": \"rgb(31, 120, 193)\",\n \"show\": false\n },\n \"targets\": [\n {\n \"expr\": \"sum (rate (container_cpu_usage_seconds_total{id=\\\"/\\\",kubernetes_io_hostname=~\\\"^$Node$\\\"}[1m])) / sum (machine_cpu_cores{kubernetes_io_hostname=~\\\"^$Node$\\\"}) * 100\",\n \"interval\": \"10s\",\n \"intervalFactor\": 1,\n \"refId\": \"A\",\n \"step\": 10\n }\n ],\n \"thresholds\": \"65, 90\",\n \"title\": \"Cluster CPU usage (1m avg)\",\n \"type\": \"singlestat\",\n \"valueFontSize\": \"80%\",\n \"valueMaps\": [\n {\n \"op\": \"=\",\n \"text\": \"N/A\",\n \"value\": \"null\"\n }\n ],\n \"valueName\": \"current\"\n },\n {\n \"cacheTimeout\": null,\n \"colorBackground\": false,\n \"colorValue\": true,\n \"colors\": [\n \"rgba(50, 172, 45, 0.97)\",\n \"rgba(237, 129, 40, 0.89)\",\n \"rgba(245, 54, 54, 0.9)\"\n ],\n \"datasource\": \"${DS_PROM}\",\n \"decimals\": 2,\n \"editable\": true,\n \"error\": false,\n \"format\": \"percent\",\n \"gauge\": {\n \"maxValue\": 100,\n \"minValue\": 0,\n \"show\": true,\n \"thresholdLabels\": false,\n \"thresholdMarkers\": true\n },\n \"height\": \"180px\",\n \"id\": 7,\n \"interval\": null,\n \"links\": [],\n \"mappingType\": 1,\n \"mappingTypes\": [\n {\n \"name\": \"value to text\",\n \"value\": 1\n },\n {\n \"name\": \"range to text\",\n \"value\": 2\n }\n ],\n \"maxDataPoints\": 100,\n \"nullPointMode\": \"connected\",\n \"nullText\": null,\n \"postfix\": \"\",\n \"postfixFontSize\": \"50%\",\n \"prefix\": \"\",\n \"prefixFontSize\": \"50%\",\n \"rangeMaps\": [\n {\n \"from\": \"null\",\n \"text\": \"N/A\",\n \"to\": \"null\"\n }\n ],\n \"span\": 4,\n \"sparkline\": {\n \"fillColor\": \"rgba(31, 118, 189, 0.18)\",\n \"full\": false,\n \"lineColor\": \"rgb(31, 120, 193)\",\n \"show\": false\n },\n \"targets\": [\n {\n \"expr\": \"sum (container_fs_usage_bytes{device=~\\\"^/dev/[sv]da[0-9]$\\\",id=\\\"/\\\",kubernetes_io_hostname=~\\\"^$Node$\\\"}) / sum (container_fs_limit_bytes{device=~\\\"^/dev/[sv]da[0-9]$\\\",id=\\\"/\\\",kubernetes_io_hostname=~\\\"^$Node$\\\"}) * 100\",\n \"interval\": \"10s\",\n \"intervalFactor\": 1,\n \"legendFormat\": \"\",\n \"metric\": \"\",\n \"refId\": \"A\",\n \"step\": 10\n }\n ],\n \"thresholds\": \"65, 90\",\n \"title\": \"Cluster filesystem usage\",\n \"type\": \"singlestat\",\n \"valueFontSize\": \"80%\",\n \"valueMaps\": [\n {\n \"op\": \"=\",\n \"text\": \"N/A\",\n \"value\": \"null\"\n }\n ],\n \"valueName\": \"current\"\n },\n {\n \"cacheTimeout\": null,\n \"colorBackground\": false,\n \"colorValue\": false,\n \"colors\": [\n \"rgba(50, 172, 45, 0.97)\",\n \"rgba(237, 129, 40, 0.89)\",\n \"rgba(245, 54, 54, 0.9)\"\n ],\n \"datasource\": \"${DS_PROM}\",\n \"decimals\": 2,\n \"editable\": true,\n \"error\": false,\n \"format\": \"bytes\",\n \"gauge\": {\n \"maxValue\": 100,\n \"minValue\": 0,\n \"show\": false,\n \"thresholdLabels\": false,\n \"thresholdMarkers\": true\n },\n \"height\": \"1px\",\n \"id\": 9,\n \"interval\": null,\n \"links\": [],\n \"mappingType\": 1,\n \"mappingTypes\": [\n {\n \"name\": \"value to text\",\n \"value\": 1\n },\n {\n \"name\": \"range to text\",\n \"value\": 2\n }\n ],\n \"maxDataPoints\": 100,\n \"nullPointMode\": \"connected\",\n \"nullText\": null,\n \"postfix\": \"\",\n \"postfixFontSize\": \"20%\",\n \"prefix\": \"\",\n \"prefixFontSize\": \"20%\",\n \"rangeMaps\": [\n {\n \"from\": \"null\",\n \"text\": \"N/A\",\n \"to\": \"null\"\n }\n ],\n \"span\": 2,\n \"sparkline\": {\n \"fillColor\": \"rgba(31, 118, 189, 0.18)\",\n \"full\": false,\n \"lineColor\": \"rgb(31, 120, 193)\",\n \"show\": false\n },\n \"targets\": [\n {\n \"expr\": \"sum (container_memory_working_set_bytes{id=\\\"/\\\",kubernetes_io_hostname=~\\\"^$Node$\\\"})\",\n \"interval\": \"10s\",\n \"intervalFactor\": 1,\n \"refId\": \"A\",\n \"step\": 10\n }\n ],\n \"thresholds\": \"\",\n \"title\": \"Used\",\n \"type\": \"singlestat\",\n \"valueFontSize\": \"50%\",\n \"valueMaps\": [\n {\n \"op\": \"=\",\n \"text\": \"N/A\",\n \"value\": \"null\"\n }\n ],\n \"valueName\": \"current\"\n },\n {\n \"cacheTimeout\": null,\n \"colorBackground\": false,\n \"colorValue\": false,\n \"colors\": [\n \"rgba(50, 172, 45, 0.97)\",\n \"rgba(237, 129, 40, 0.89)\",\n \"rgba(245, 54, 54, 0.9)\"\n ],\n \"datasource\": \"${DS_PROM}\",\n \"decimals\": 2,\n \"editable\": true,\n \"error\": false,\n \"format\": \"bytes\",\n \"gauge\": {\n \"maxValue\": 100,\n \"minValue\": 0,\n \"show\": false,\n \"thresholdLabels\": false,\n \"thresholdMarkers\": true\n },\n \"height\": \"1px\",\n \"id\": 10,\n \"interval\": null,\n \"links\": [],\n \"mappingType\": 1,\n \"mappingTypes\": [\n {\n \"name\": \"value to text\",\n \"value\": 1\n },\n {\n \"name\": \"range to text\",\n \"value\": 2\n }\n ],\n \"maxDataPoints\": 100,\n \"nullPointMode\": \"connected\",\n \"nullText\": null,\n \"postfix\": \"\",\n \"postfixFontSize\": \"50%\",\n \"prefix\": \"\",\n \"prefixFontSize\": \"50%\",\n \"rangeMaps\": [\n {\n \"from\": \"null\",\n \"text\": \"N/A\",\n \"to\": \"null\"\n }\n ],\n \"span\": 2,\n \"sparkline\": {\n \"fillColor\": \"rgba(31, 118, 189, 0.18)\",\n \"full\": false,\n \"lineColor\": \"rgb(31, 120, 193)\",\n \"show\": false\n },\n \"targets\": [\n {\n \"expr\": \"sum (machine_memory_bytes{kubernetes_io_hostname=~\\\"^$Node$\\\"})\",\n \"interval\": \"10s\",\n \"intervalFactor\": 1,\n \"refId\": \"A\",\n \"step\": 10\n }\n ],\n \"thresholds\": \"\",\n \"title\": \"Total\",\n \"type\": \"singlestat\",\n \"valueFontSize\": \"50%\",\n \"valueMaps\": [\n {\n \"op\": \"=\",\n \"text\": \"N/A\",\n \"value\": \"null\"\n }\n ],\n \"valueName\": \"current\"\n },\n {\n \"cacheTimeout\": null,\n \"colorBackground\": false,\n \"colorValue\": false,\n \"colors\": [\n \"rgba(50, 172, 45, 0.97)\",\n \"rgba(237, 129, 40, 0.89)\",\n \"rgba(245, 54, 54, 0.9)\"\n ],\n \"datasource\": \"${DS_PROM}\",\n \"decimals\": 2,\n \"editable\": true,\n \"error\": false,\n \"format\": \"none\",\n \"gauge\": {\n \"maxValue\": 100,\n \"minValue\": 0,\n \"show\": false,\n \"thresholdLabels\": false,\n \"thresholdMarkers\": true\n },\n \"height\": \"1px\",\n \"id\": 11,\n \"interval\": null,\n \"links\": [],\n \"mappingType\": 1,\n \"mappingTypes\": [\n {\n \"name\": \"value to text\",\n \"value\": 1\n },\n {\n \"name\": \"range to text\",\n \"value\": 2\n }\n ],\n \"maxDataPoints\": 100,\n \"nullPointMode\": \"connected\",\n \"nullText\": null,\n \"postfix\": \" cores\",\n \"postfixFontSize\": \"30%\",\n \"prefix\": \"\",\n \"prefixFontSize\": \"50%\",\n \"rangeMaps\": [\n {\n \"from\": \"null\",\n \"text\": \"N/A\",\n \"to\": \"null\"\n }\n ],\n \"span\": 2,\n \"sparkline\": {\n \"fillColor\": \"rgba(31, 118, 189, 0.18)\",\n \"full\": false,\n \"lineColor\": \"rgb(31, 120, 193)\",\n \"show\": false\n },\n \"targets\": [\n {\n \"expr\": \"sum (rate (container_cpu_usage_seconds_total{id=\\\"/\\\",kubernetes_io_hostname=~\\\"^$Node$\\\"}[1m]))\",\n \"interval\": \"10s\",\n \"intervalFactor\": 1,\n \"refId\": \"A\",\n \"step\": 10\n }\n ],\n \"thresholds\": \"\",\n \"title\": \"Used\",\n \"type\": \"singlestat\",\n \"valueFontSize\": \"50%\",\n \"valueMaps\": [\n {\n \"op\": \"=\",\n \"text\": \"N/A\",\n \"value\": \"null\"\n }\n ],\n \"valueName\": \"current\"\n },\n {\n \"cacheTimeout\": null,\n \"colorBackground\": false,\n \"colorValue\": false,\n \"colors\": [\n \"rgba(50, 172, 45, 0.97)\",\n \"rgba(237, 129, 40, 0.89)\",\n \"rgba(245, 54, 54, 0.9)\"\n ],\n \"datasource\": \"${DS_PROM}\",\n \"decimals\": 2,\n \"editable\": true,\n \"error\": false,\n \"format\": \"none\",\n \"gauge\": {\n \"maxValue\": 100,\n \"minValue\": 0,\n \"show\": false,\n \"thresholdLabels\": false,\n \"thresholdMarkers\": true\n },\n \"height\": \"1px\",\n \"id\": 12,\n \"interval\": null,\n \"links\": [],\n \"mappingType\": 1,\n \"mappingTypes\": [\n {\n \"name\": \"value to text\",\n \"value\": 1\n },\n {\n \"name\": \"range to text\",\n \"value\": 2\n }\n ],\n \"maxDataPoints\": 100,\n \"nullPointMode\": \"connected\",\n \"nullText\": null,\n \"postfix\": \" cores\",\n \"postfixFontSize\": \"30%\",\n \"prefix\": \"\",\n \"prefixFontSize\": \"50%\",\n \"rangeMaps\": [\n {\n \"from\": \"null\",\n \"text\": \"N/A\",\n \"to\": \"null\"\n }\n ],\n \"span\": 2,\n \"sparkline\": {\n \"fillColor\": \"rgba(31, 118, 189, 0.18)\",\n \"full\": false,\n \"lineColor\": \"rgb(31, 120, 193)\",\n \"show\": false\n },\n \"targets\": [\n {\n \"expr\": \"sum (machine_cpu_cores{kubernetes_io_hostname=~\\\"^$Node$\\\"})\",\n \"interval\": \"10s\",\n \"intervalFactor\": 1,\n \"refId\": \"A\",\n \"step\": 10\n }\n ],\n \"thresholds\": \"\",\n \"title\": \"Total\",\n \"type\": \"singlestat\",\n \"valueFontSize\": \"50%\",\n \"valueMaps\": [\n {\n \"op\": \"=\",\n \"text\": \"N/A\",\n \"value\": \"null\"\n }\n ],\n \"valueName\": \"current\"\n },\n {\n \"cacheTimeout\": null,\n \"colorBackground\": false,\n \"colorValue\": false,\n \"colors\": [\n \"rgba(50, 172, 45, 0.97)\",\n \"rgba(237, 129, 40, 0.89)\",\n \"rgba(245, 54, 54, 0.9)\"\n ],\n \"datasource\": \"${DS_PROM}\",\n \"decimals\": 2,\n \"editable\": true,\n \"error\": false,\n \"format\": \"bytes\",\n \"gauge\": {\n \"maxValue\": 100,\n \"minValue\": 0,\n \"show\": false,\n \"thresholdLabels\": false,\n \"thresholdMarkers\": true\n },\n \"height\": \"1px\",\n \"id\": 13,\n \"interval\": null,\n \"links\": [],\n \"mappingType\": 1,\n \"mappingTypes\": [\n {\n \"name\": \"value to text\",\n \"value\": 1\n },\n {\n \"name\": \"range to text\",\n \"value\": 2\n }\n ],\n \"maxDataPoints\": 100,\n \"nullPointMode\": \"connected\",\n \"nullText\": null,\n \"postfix\": \"\",\n \"postfixFontSize\": \"50%\",\n \"prefix\": \"\",\n \"prefixFontSize\": \"50%\",\n \"rangeMaps\": [\n {\n \"from\": \"null\",\n \"text\": \"N/A\",\n \"to\": \"null\"\n }\n ],\n \"span\": 2,\n \"sparkline\": {\n \"fillColor\": \"rgba(31, 118, 189, 0.18)\",\n \"full\": false,\n \"lineColor\": \"rgb(31, 120, 193)\",\n \"show\": false\n },\n \"targets\": [\n {\n \"expr\": \"sum (container_fs_usage_bytes{device=~\\\"^/dev/[sv]da[0-9]$\\\",id=\\\"/\\\",kubernetes_io_hostname=~\\\"^$Node$\\\"})\",\n \"interval\": \"10s\",\n \"intervalFactor\": 1,\n \"refId\": \"A\",\n \"step\": 10\n }\n ],\n \"thresholds\": \"\",\n \"title\": \"Used\",\n \"type\": \"singlestat\",\n \"valueFontSize\": \"50%\",\n \"valueMaps\": [\n {\n \"op\": \"=\",\n \"text\": \"N/A\",\n \"value\": \"null\"\n }\n ],\n \"valueName\": \"current\"\n },\n {\n \"cacheTimeout\": null,\n \"colorBackground\": false,\n \"colorValue\": false,\n \"colors\": [\n \"rgba(50, 172, 45, 0.97)\",\n \"rgba(237, 129, 40, 0.89)\",\n \"rgba(245, 54, 54, 0.9)\"\n ],\n \"datasource\": \"${DS_PROM}\",\n \"decimals\": 2,\n \"editable\": true,\n \"error\": false,\n \"format\": \"bytes\",\n \"gauge\": {\n \"maxValue\": 100,\n \"minValue\": 0,\n \"show\": false,\n \"thresholdLabels\": false,\n \"thresholdMarkers\": true\n },\n \"height\": \"1px\",\n \"id\": 14,\n \"interval\": null,\n \"links\": [],\n \"mappingType\": 1,\n \"mappingTypes\": [\n {\n \"name\": \"value to text\",\n \"value\": 1\n },\n {\n \"name\": \"range to text\",\n \"value\": 2\n }\n ],\n \"maxDataPoints\": 100,\n \"nullPointMode\": \"connected\",\n \"nullText\": null,\n \"postfix\": \"\",\n \"postfixFontSize\": \"50%\",\n \"prefix\": \"\",\n \"prefixFontSize\": \"50%\",\n \"rangeMaps\": [\n {\n \"from\": \"null\",\n \"text\": \"N/A\",\n \"to\": \"null\"\n }\n ],\n \"span\": 2,\n \"sparkline\": {\n \"fillColor\": \"rgba(31, 118, 189, 0.18)\",\n \"full\": false,\n \"lineColor\": \"rgb(31, 120, 193)\",\n \"show\": false\n },\n \"targets\": [\n {\n \"expr\": \"sum (container_fs_limit_bytes{device=~\\\"^/dev/[sv]da[0-9]$\\\",id=\\\"/\\\",kubernetes_io_hostname=~\\\"^$Node$\\\"})\",\n \"interval\": \"10s\",\n \"intervalFactor\": 1,\n \"refId\": \"A\",\n \"step\": 10\n }\n ],\n \"thresholds\": \"\",\n \"title\": \"Total\",\n \"type\": \"singlestat\",\n \"valueFontSize\": \"50%\",\n \"valueMaps\": [\n {\n \"op\": \"=\",\n \"text\": \"N/A\",\n \"value\": \"null\"\n }\n ],\n \"valueName\": \"current\"\n }\n ],\n \"repeat\": null,\n \"repeatIteration\": null,\n \"repeatRowId\": null,\n \"showTitle\": false,\n \"title\": \"Total usage\",\n \"titleSize\": \"h6\"\n },\n {\n \"collapse\": false,\n \"height\": \"250px\",\n \"panels\": [\n {\n \"aliasColors\": {},\n \"bars\": false,\n \"datasource\": \"${DS_PROM}\",\n \"decimals\": 3,\n \"editable\": true,\n \"error\": false,\n \"fill\": 0,\n \"grid\": {},\n \"height\": \"\",\n \"id\": 17,\n \"legend\": {\n \"alignAsTable\": true,\n \"avg\": true,\n \"current\": true,\n \"max\": false,\n \"min\": false,\n \"rightSide\": true,\n \"show\": true,\n \"sort\": \"current\",\n \"sortDesc\": true,\n \"total\": false,\n \"values\": true\n },\n \"lines\": true,\n \"linewidth\": 2,\n \"links\": [],\n \"nullPointMode\": \"connected\",\n \"percentage\": false,\n \"pointradius\": 5,\n \"points\": false,\n \"renderer\": \"flot\",\n \"seriesOverrides\": [],\n \"span\": 12,\n \"stack\": false,\n \"steppedLine\": true,\n \"targets\": [\n {\n \"expr\": \"sum (rate (container_cpu_usage_seconds_total{image!=\\\"\\\",name=~\\\"^k8s_.*\\\",kubernetes_io_hostname=~\\\"^$Node$\\\"}[1m])) by (pod_name)\",\n \"interval\": \"10s\",\n \"intervalFactor\": 1,\n \"legendFormat\": \"{{ pod_name }}\",\n \"metric\": \"container_cpu\",\n \"refId\": \"A\",\n \"step\": 10\n }\n ],\n \"thresholds\": [],\n \"timeFrom\": null,\n \"timeShift\": null,\n \"title\": \"Pods CPU usage (1m avg)\",\n \"tooltip\": {\n \"msResolution\": true,\n \"shared\": true,\n \"sort\": 2,\n \"value_type\": \"cumulative\"\n },\n \"transparent\": false,\n \"type\": \"graph\",\n \"xaxis\": {\n \"mode\": \"time\",\n \"name\": null,\n \"show\": true,\n \"values\": []\n },\n \"yaxes\": [\n {\n \"format\": \"none\",\n \"label\": \"cores\",\n \"logBase\": 1,\n \"max\": null,\n \"min\": null,\n \"show\": true\n },\n {\n \"format\": \"short\",\n \"label\": null,\n \"logBase\": 1,\n \"max\": null,\n \"min\": null,\n \"show\": false\n }\n ]\n }\n ],\n \"repeat\": null,\n \"repeatIteration\": null,\n \"repeatRowId\": null,\n \"showTitle\": false,\n \"title\": \"Pods CPU usage\",\n \"titleSize\": \"h6\"\n },\n {\n \"collapse\": true,\n \"height\": \"250px\",\n \"panels\": [\n {\n \"aliasColors\": {},\n \"bars\": false,\n \"datasource\": \"${DS_PROM}\",\n \"decimals\": 3,\n \"editable\": true,\n \"error\": false,\n \"fill\": 0,\n \"grid\": {},\n \"height\": \"\",\n \"id\": 23,\n \"legend\": {\n \"alignAsTable\": true,\n \"avg\": true,\n \"current\": true,\n \"max\": false,\n \"min\": false,\n \"rightSide\": true,\n \"show\": true,\n \"sort\": \"current\",\n \"sortDesc\": true,\n \"total\": false,\n \"values\": true\n },\n \"lines\": true,\n \"linewidth\": 2,\n \"links\": [],\n \"nullPointMode\": \"connected\",\n \"percentage\": false,\n \"pointradius\": 5,\n \"points\": false,\n \"renderer\": \"flot\",\n \"seriesOverrides\": [],\n \"span\": 12,\n \"stack\": false,\n \"steppedLine\": true,\n \"targets\": [\n {\n \"expr\": \"sum (rate (container_cpu_usage_seconds_total{systemd_service_name!=\\\"\\\",kubernetes_io_hostname=~\\\"^$Node$\\\"}[1m])) by (systemd_service_name)\",\n \"hide\": false,\n \"interval\": \"10s\",\n \"intervalFactor\": 1,\n \"legendFormat\": \"{{ systemd_service_name }}\",\n \"metric\": \"container_cpu\",\n \"refId\": \"A\",\n \"step\": 10\n }\n ],\n \"thresholds\": [],\n \"timeFrom\": null,\n \"timeShift\": null,\n \"title\": \"System services CPU usage (1m avg)\",\n \"tooltip\": {\n \"msResolution\": true,\n \"shared\": true,\n \"sort\": 2,\n \"value_type\": \"cumulative\"\n },\n \"type\": \"graph\",\n \"xaxis\": {\n \"mode\": \"time\",\n \"name\": null,\n \"show\": true,\n \"values\": []\n },\n \"yaxes\": [\n {\n \"format\": \"none\",\n \"label\": \"cores\",\n \"logBase\": 1,\n \"max\": null,\n \"min\": null,\n \"show\": true\n },\n {\n \"format\": \"short\",\n \"label\": null,\n \"logBase\": 1,\n \"max\": null,\n \"min\": null,\n \"show\": false\n }\n ]\n }\n ],\n \"repeat\": null,\n \"repeatIteration\": null,\n \"repeatRowId\": null,\n \"showTitle\": false,\n \"title\": \"System services CPU usage\",\n \"titleSize\": \"h6\"\n },\n {\n \"collapse\": true,\n \"height\": \"250px\",\n \"panels\": [\n {\n \"aliasColors\": {},\n \"bars\": false,\n \"datasource\": \"${DS_PROM}\",\n \"decimals\": 3,\n \"editable\": true,\n \"error\": false,\n \"fill\": 0,\n \"grid\": {},\n \"height\": \"\",\n \"id\": 24,\n \"legend\": {\n \"alignAsTable\": true,\n \"avg\": true,\n \"current\": true,\n \"hideEmpty\": false,\n \"hideZero\": false,\n \"max\": false,\n \"min\": false,\n \"rightSide\": true,\n \"show\": true,\n \"sideWidth\": null,\n \"sort\": \"current\",\n \"sortDesc\": true,\n \"total\": false,\n \"values\": true\n },\n \"lines\": true,\n \"linewidth\": 2,\n \"links\": [],\n \"nullPointMode\": \"connected\",\n \"percentage\": false,\n \"pointradius\": 5,\n \"points\": false,\n \"renderer\": \"flot\",\n \"seriesOverrides\": [],\n \"span\": 12,\n \"stack\": false,\n \"steppedLine\": true,\n \"targets\": [\n {\n \"expr\": \"sum (rate (container_cpu_usage_seconds_total{image!=\\\"\\\",name=~\\\"^k8s_.*\\\",container_name!=\\\"POD\\\",kubernetes_io_hostname=~\\\"^$Node$\\\"}[1m])) by (container_name, pod_name)\",\n \"hide\": false,\n \"interval\": \"10s\",\n \"intervalFactor\": 1,\n \"legendFormat\": \"pod: {{ pod_name }} | {{ container_name }}\",\n \"metric\": \"container_cpu\",\n \"refId\": \"A\",\n \"step\": 10\n },\n {\n \"expr\": \"sum (rate (container_cpu_usage_seconds_total{image!=\\\"\\\",name!~\\\"^k8s_.*\\\",kubernetes_io_hostname=~\\\"^$Node$\\\"}[1m])) by (kubernetes_io_hostname, name, image)\",\n \"hide\": false,\n \"interval\": \"10s\",\n \"intervalFactor\": 1,\n \"legendFormat\": \"docker: {{ kubernetes_io_hostname }} | {{ image }} ({{ name }})\",\n \"metric\": \"container_cpu\",\n \"refId\": \"B\",\n \"step\": 10\n },\n {\n \"expr\": \"sum (rate (container_cpu_usage_seconds_total{rkt_container_name!=\\\"\\\",kubernetes_io_hostname=~\\\"^$Node$\\\"}[1m])) by (kubernetes_io_hostname, rkt_container_name)\",\n \"interval\": \"10s\",\n \"intervalFactor\": 1,\n \"legendFormat\": \"rkt: {{ kubernetes_io_hostname }} | {{ rkt_container_name }}\",\n \"metric\": \"container_cpu\",\n \"refId\": \"C\",\n \"step\": 10\n }\n ],\n \"thresholds\": [],\n \"timeFrom\": null,\n \"timeShift\": null,\n \"title\": \"Containers CPU usage (1m avg)\",\n \"tooltip\": {\n \"msResolution\": true,\n \"shared\": true,\n \"sort\": 2,\n \"value_type\": \"cumulative\"\n },\n \"type\": \"graph\",\n \"xaxis\": {\n \"mode\": \"time\",\n \"name\": null,\n \"show\": true,\n \"values\": []\n },\n \"yaxes\": [\n {\n \"format\": \"none\",\n \"label\": \"cores\",\n \"logBase\": 1,\n \"max\": null,\n \"min\": null,\n \"show\": true\n },\n {\n \"format\": \"short\",\n \"label\": null,\n \"logBase\": 1,\n \"max\": null,\n \"min\": null,\n \"show\": false\n }\n ]\n }\n ],\n \"repeat\": null,\n \"repeatIteration\": null,\n \"repeatRowId\": null,\n \"showTitle\": false,\n \"title\": \"Containers CPU usage\",\n \"titleSize\": \"h6\"\n },\n {\n \"collapse\": true,\n \"height\": \"500px\",\n \"panels\": [\n {\n \"aliasColors\": {},\n \"bars\": false,\n \"datasource\": \"${DS_PROM}\",\n \"decimals\": 3,\n \"editable\": true,\n \"error\": false,\n \"fill\": 0,\n \"grid\": {},\n \"id\": 20,\n \"legend\": {\n \"alignAsTable\": true,\n \"avg\": true,\n \"current\": true,\n \"max\": false,\n \"min\": false,\n \"rightSide\": false,\n \"show\": true,\n \"sort\": \"current\",\n \"sortDesc\": true,\n \"total\": false,\n \"values\": true\n },\n \"lines\": true,\n \"linewidth\": 2,\n \"links\": [],\n \"nullPointMode\": \"connected\",\n \"percentage\": false,\n \"pointradius\": 5,\n \"points\": false,\n \"renderer\": \"flot\",\n \"seriesOverrides\": [],\n \"span\": 12,\n \"stack\": false,\n \"steppedLine\": true,\n \"targets\": [\n {\n \"expr\": \"sum (rate (container_cpu_usage_seconds_total{id!=\\\"/\\\",kubernetes_io_hostname=~\\\"^$Node$\\\"}[1m])) by (id)\",\n \"hide\": false,\n \"interval\": \"10s\",\n \"intervalFactor\": 1,\n \"legendFormat\": \"{{ id }}\",\n \"metric\": \"container_cpu\",\n \"refId\": \"A\",\n \"step\": 10\n }\n ],\n \"thresholds\": [],\n \"timeFrom\": null,\n \"timeShift\": null,\n \"title\": \"All processes CPU usage (1m avg)\",\n \"tooltip\": {\n \"msResolution\": true,\n \"shared\": true,\n \"sort\": 2,\n \"value_type\": \"cumulative\"\n },\n \"type\": \"graph\",\n \"xaxis\": {\n \"mode\": \"time\",\n \"name\": null,\n \"show\": true,\n \"values\": []\n },\n \"yaxes\": [\n {\n \"format\": \"none\",\n \"label\": \"cores\",\n \"logBase\": 1,\n \"max\": null,\n \"min\": null,\n \"show\": true\n },\n {\n \"format\": \"short\",\n \"label\": null,\n \"logBase\": 1,\n \"max\": null,\n \"min\": null,\n \"show\": false\n }\n ]\n }\n ],\n \"repeat\": null,\n \"repeatIteration\": null,\n \"repeatRowId\": null,\n \"showTitle\": false,\n \"title\": \"All processes CPU usage\",\n \"titleSize\": \"h6\"\n },\n {\n \"collapse\": false,\n \"height\": \"250px\",\n \"panels\": [\n {\n \"aliasColors\": {},\n \"bars\": false,\n \"datasource\": \"${DS_PROM}\",\n \"decimals\": 2,\n \"editable\": true,\n \"error\": false,\n \"fill\": 0,\n \"grid\": {},\n \"id\": 25,\n \"legend\": {\n \"alignAsTable\": true,\n \"avg\": true,\n \"current\": true,\n \"max\": false,\n \"min\": false,\n \"rightSide\": true,\n \"show\": true,\n \"sideWidth\": 200,\n \"sort\": \"current\",\n \"sortDesc\": true,\n \"total\": false,\n \"values\": true\n },\n \"lines\": true,\n \"linewidth\": 2,\n \"links\": [],\n \"nullPointMode\": \"connected\",\n \"percentage\": false,\n \"pointradius\": 5,\n \"points\": false,\n \"renderer\": \"flot\",\n \"seriesOverrides\": [],\n \"span\": 12,\n \"stack\": false,\n \"steppedLine\": true,\n \"targets\": [\n {\n \"expr\": \"sum (container_memory_working_set_bytes{image!=\\\"\\\",name=~\\\"^k8s_.*\\\",kubernetes_io_hostname=~\\\"^$Node$\\\"}) by (pod_name)\",\n \"interval\": \"10s\",\n \"intervalFactor\": 1,\n \"legendFormat\": \"{{ pod_name }}\",\n \"metric\": \"container_memory_usage:sort_desc\",\n \"refId\": \"A\",\n \"step\": 10\n }\n ],\n \"thresholds\": [],\n \"timeFrom\": null,\n \"timeShift\": null,\n \"title\": \"Pods memory usage\",\n \"tooltip\": {\n \"msResolution\": false,\n \"shared\": true,\n \"sort\": 2,\n \"value_type\": \"cumulative\"\n },\n \"type\": \"graph\",\n \"xaxis\": {\n \"mode\": \"time\",\n \"name\": null,\n \"show\": true,\n \"values\": []\n },\n \"yaxes\": [\n {\n \"format\": \"bytes\",\n \"label\": null,\n \"logBase\": 1,\n \"max\": null,\n \"min\": null,\n \"show\": true\n },\n {\n \"format\": \"short\",\n \"label\": null,\n \"logBase\": 1,\n \"max\": null,\n \"min\": null,\n \"show\": false\n }\n ]\n }\n ],\n \"repeat\": null,\n \"repeatIteration\": null,\n \"repeatRowId\": null,\n \"showTitle\": false,\n \"title\": \"Pods memory usage\",\n \"titleSize\": \"h6\"\n },\n {\n \"collapse\": true,\n \"height\": \"250px\",\n \"panels\": [\n {\n \"aliasColors\": {},\n \"bars\": false,\n \"datasource\": \"${DS_PROM}\",\n \"decimals\": 2,\n \"editable\": true,\n \"error\": false,\n \"fill\": 0,\n \"grid\": {},\n \"id\": 26,\n \"isNew\": true,\n \"legend\": {\n \"alignAsTable\": true,\n \"avg\": true,\n \"current\": true,\n \"max\": false,\n \"min\": false,\n \"rightSide\": true,\n \"show\": true,\n \"sideWidth\": 200,\n \"sort\": \"current\",\n \"sortDesc\": true,\n \"total\": false,\n \"values\": true\n },\n \"lines\": true,\n \"linewidth\": 2,\n \"links\": [],\n \"nullPointMode\": \"connected\",\n \"percentage\": false,\n \"pointradius\": 5,\n \"points\": false,\n \"renderer\": \"flot\",\n \"seriesOverrides\": [],\n \"span\": 12,\n \"stack\": false,\n \"steppedLine\": true,\n \"targets\": [\n {\n \"expr\": \"sum (container_memory_working_set_bytes{systemd_service_name!=\\\"\\\",kubernetes_io_hostname=~\\\"^$Node$\\\"}) by (systemd_service_name)\",\n \"interval\": \"10s\",\n \"intervalFactor\": 1,\n \"legendFormat\": \"{{ systemd_service_name }}\",\n \"metric\": \"container_memory_usage:sort_desc\",\n \"refId\": \"A\",\n \"step\": 10\n }\n ],\n \"thresholds\": [],\n \"timeFrom\": null,\n \"timeShift\": null,\n \"title\": \"System services memory usage\",\n \"tooltip\": {\n \"msResolution\": false,\n \"shared\": true,\n \"sort\": 2,\n \"value_type\": \"cumulative\"\n },\n \"type\": \"graph\",\n \"xaxis\": {\n \"show\": true\n },\n \"yaxes\": [\n {\n \"format\": \"bytes\",\n \"label\": null,\n \"logBase\": 1,\n \"max\": null,\n \"min\": null,\n \"show\": true\n },\n {\n \"format\": \"short\",\n \"label\": null,\n \"logBase\": 1,\n \"max\": null,\n \"min\": null,\n \"show\": false\n }\n ]\n }\n ],\n \"repeat\": null,\n \"repeatIteration\": null,\n \"repeatRowId\": null,\n \"showTitle\": false,\n \"title\": \"System services memory usage\",\n \"titleSize\": \"h6\"\n },\n {\n \"collapse\": true,\n \"height\": \"250px\",\n \"panels\": [\n {\n \"aliasColors\": {},\n \"bars\": false,\n \"datasource\": \"${DS_PROM}\",\n \"decimals\": 2,\n \"editable\": true,\n \"error\": false,\n \"fill\": 0,\n \"grid\": {},\n \"id\": 27,\n \"isNew\": true,\n \"legend\": {\n \"alignAsTable\": true,\n \"avg\": true,\n \"current\": true,\n \"max\": false,\n \"min\": false,\n \"rightSide\": true,\n \"show\": true,\n \"sideWidth\": 200,\n \"sort\": \"current\",\n \"sortDesc\": true,\n \"total\": false,\n \"values\": true\n },\n \"lines\": true,\n \"linewidth\": 2,\n \"links\": [],\n \"nullPointMode\": \"connected\",\n \"percentage\": false,\n \"pointradius\": 5,\n \"points\": false,\n \"renderer\": \"flot\",\n \"seriesOverrides\": [],\n \"span\": 12,\n \"stack\": false,\n \"steppedLine\": true,\n \"targets\": [\n {\n \"expr\": \"sum (container_memory_working_set_bytes{image!=\\\"\\\",name=~\\\"^k8s_.*\\\",container_name!=\\\"POD\\\",kubernetes_io_hostname=~\\\"^$Node$\\\"}) by (container_name, pod_name)\",\n \"interval\": \"10s\",\n \"intervalFactor\": 1,\n \"legendFormat\": \"pod: {{ pod_name }} | {{ container_name }}\",\n \"metric\": \"container_memory_usage:sort_desc\",\n \"refId\": \"A\",\n \"step\": 10\n },\n {\n \"expr\": \"sum (container_memory_working_set_bytes{image!=\\\"\\\",name!~\\\"^k8s_.*\\\",kubernetes_io_hostname=~\\\"^$Node$\\\"}) by (kubernetes_io_hostname, name, image)\",\n \"interval\": \"10s\",\n \"intervalFactor\": 1,\n \"legendFormat\": \"docker: {{ kubernetes_io_hostname }} | {{ image }} ({{ name }})\",\n \"metric\": \"container_memory_usage:sort_desc\",\n \"refId\": \"B\",\n \"step\": 10\n },\n {\n \"expr\": \"sum (container_memory_working_set_bytes{rkt_container_name!=\\\"\\\",kubernetes_io_hostname=~\\\"^$Node$\\\"}) by (kubernetes_io_hostname, rkt_container_name)\",\n \"interval\": \"10s\",\n \"intervalFactor\": 1,\n \"legendFormat\": \"rkt: {{ kubernetes_io_hostname }} | {{ rkt_container_name }}\",\n \"metric\": \"container_memory_usage:sort_desc\",\n \"refId\": \"C\",\n \"step\": 10\n }\n ],\n \"thresholds\": [],\n \"timeFrom\": null,\n \"timeShift\": null,\n \"title\": \"Containers memory usage\",\n \"tooltip\": {\n \"msResolution\": false,\n \"shared\": true,\n \"sort\": 2,\n \"value_type\": \"cumulative\"\n },\n \"type\": \"graph\",\n \"xaxis\": {\n \"show\": true\n },\n \"yaxes\": [\n {\n \"format\": \"bytes\",\n \"label\": null,\n \"logBase\": 1,\n \"max\": null,\n \"min\": null,\n \"show\": true\n },\n {\n \"format\": \"short\",\n \"label\": null,\n \"logBase\": 1,\n \"max\": null,\n \"min\": null,\n \"show\": false\n }\n ]\n }\n ],\n \"repeat\": null,\n \"repeatIteration\": null,\n \"repeatRowId\": null,\n \"showTitle\": false,\n \"title\": \"Containers memory usage\",\n \"titleSize\": \"h6\"\n },\n {\n \"collapse\": true,\n \"height\": \"500px\",\n \"panels\": [\n {\n \"aliasColors\": {},\n \"bars\": false,\n \"datasource\": \"${DS_PROM}\",\n \"decimals\": 2,\n \"editable\": true,\n \"error\": false,\n \"fill\": 0,\n \"grid\": {},\n \"id\": 28,\n \"isNew\": true,\n \"legend\": {\n \"alignAsTable\": true,\n \"avg\": true,\n \"current\": true,\n \"max\": false,\n \"min\": false,\n \"rightSide\": false,\n \"show\": true,\n \"sideWidth\": 200,\n \"sort\": \"current\",\n \"sortDesc\": true,\n \"total\": false,\n \"values\": true\n },\n \"lines\": true,\n \"linewidth\": 2,\n \"links\": [],\n \"nullPointMode\": \"connected\",\n \"percentage\": false,\n \"pointradius\": 5,\n \"points\": false,\n \"renderer\": \"flot\",\n \"seriesOverrides\": [],\n \"span\": 12,\n \"stack\": false,\n \"steppedLine\": true,\n \"targets\": [\n {\n \"expr\": \"sum (container_memory_working_set_bytes{id!=\\\"/\\\",kubernetes_io_hostname=~\\\"^$Node$\\\"}) by (id)\",\n \"interval\": \"10s\",\n \"intervalFactor\": 1,\n \"legendFormat\": \"{{ id }}\",\n \"metric\": \"container_memory_usage:sort_desc\",\n \"refId\": \"A\",\n \"step\": 10\n }\n ],\n \"thresholds\": [],\n \"timeFrom\": null,\n \"timeShift\": null,\n \"title\": \"All processes memory usage\",\n \"tooltip\": {\n \"msResolution\": false,\n \"shared\": true,\n \"sort\": 2,\n \"value_type\": \"cumulative\"\n },\n \"type\": \"graph\",\n \"xaxis\": {\n \"show\": true\n },\n \"yaxes\": [\n {\n \"format\": \"bytes\",\n \"label\": null,\n \"logBase\": 1,\n \"max\": null,\n \"min\": null,\n \"show\": true\n },\n {\n \"format\": \"short\",\n \"label\": null,\n \"logBase\": 1,\n \"max\": null,\n \"min\": null,\n \"show\": false\n }\n ]\n }\n ],\n \"repeat\": null,\n \"repeatIteration\": null,\n \"repeatRowId\": null,\n \"showTitle\": false,\n \"title\": \"All processes memory usage\",\n \"titleSize\": \"h6\"\n },\n {\n \"collapse\": false,\n \"height\": \"250px\",\n \"panels\": [\n {\n \"aliasColors\": {},\n \"bars\": false,\n \"datasource\": \"${DS_PROM}\",\n \"decimals\": 2,\n \"editable\": true,\n \"error\": false,\n \"fill\": 1,\n \"grid\": {},\n \"id\": 16,\n \"legend\": {\n \"alignAsTable\": true,\n \"avg\": true,\n \"current\": true,\n \"max\": false,\n \"min\": false,\n \"rightSide\": true,\n \"show\": true,\n \"sideWidth\": 200,\n \"sort\": \"current\",\n \"sortDesc\": true,\n \"total\": false,\n \"values\": true\n },\n \"lines\": true,\n \"linewidth\": 2,\n \"links\": [],\n \"nullPointMode\": \"connected\",\n \"percentage\": false,\n \"pointradius\": 5,\n \"points\": false,\n \"renderer\": \"flot\",\n \"seriesOverrides\": [],\n \"span\": 12,\n \"stack\": false,\n \"steppedLine\": false,\n \"targets\": [\n {\n \"expr\": \"sum (rate (container_network_receive_bytes_total{image!=\\\"\\\",name=~\\\"^k8s_.*\\\",kubernetes_io_hostname=~\\\"^$Node$\\\"}[1m])) by (pod_name)\",\n \"interval\": \"10s\",\n \"intervalFactor\": 1,\n \"legendFormat\": \"-> {{ pod_name }}\",\n \"metric\": \"network\",\n \"refId\": \"A\",\n \"step\": 10\n },\n {\n \"expr\": \"- sum (rate (container_network_transmit_bytes_total{image!=\\\"\\\",name=~\\\"^k8s_.*\\\",kubernetes_io_hostname=~\\\"^$Node$\\\"}[1m])) by (pod_name)\",\n \"interval\": \"10s\",\n \"intervalFactor\": 1,\n \"legendFormat\": \"<- {{ pod_name }}\",\n \"metric\": \"network\",\n \"refId\": \"B\",\n \"step\": 10\n }\n ],\n \"thresholds\": [],\n \"timeFrom\": null,\n \"timeShift\": null,\n \"title\": \"Pods network I/O (1m avg)\",\n \"tooltip\": {\n \"msResolution\": false,\n \"shared\": true,\n \"sort\": 2,\n \"value_type\": \"cumulative\"\n },\n \"type\": \"graph\",\n \"xaxis\": {\n \"mode\": \"time\",\n \"name\": null,\n \"show\": true,\n \"values\": []\n },\n \"yaxes\": [\n {\n \"format\": \"Bps\",\n \"label\": null,\n \"logBase\": 1,\n \"max\": null,\n \"min\": null,\n \"show\": true\n },\n {\n \"format\": \"short\",\n \"label\": null,\n \"logBase\": 1,\n \"max\": null,\n \"min\": null,\n \"show\": false\n }\n ]\n }\n ],\n \"repeat\": null,\n \"repeatIteration\": null,\n \"repeatRowId\": null,\n \"showTitle\": false,\n \"title\": \"Pods network I/O\",\n \"titleSize\": \"h6\"\n },\n {\n \"collapse\": true,\n \"height\": \"250px\",\n \"panels\": [\n {\n \"aliasColors\": {},\n \"bars\": false,\n \"datasource\": \"${DS_PROM}\",\n \"decimals\": 2,\n \"editable\": true,\n \"error\": false,\n \"fill\": 1,\n \"grid\": {},\n \"id\": 30,\n \"isNew\": true,\n \"legend\": {\n \"alignAsTable\": true,\n \"avg\": true,\n \"current\": true,\n \"max\": false,\n \"min\": false,\n \"rightSide\": true,\n \"show\": true,\n \"sideWidth\": 200,\n \"sort\": \"current\",\n \"sortDesc\": true,\n \"total\": false,\n \"values\": true\n },\n \"lines\": true,\n \"linewidth\": 2,\n \"links\": [],\n \"nullPointMode\": \"connected\",\n \"percentage\": false,\n \"pointradius\": 5,\n \"points\": false,\n \"renderer\": \"flot\",\n \"seriesOverrides\": [],\n \"span\": 12,\n \"stack\": false,\n \"steppedLine\": false,\n \"targets\": [\n {\n \"expr\": \"sum (rate (container_network_receive_bytes_total{image!=\\\"\\\",name=~\\\"^k8s_.*\\\",kubernetes_io_hostname=~\\\"^$Node$\\\"}[1m])) by (container_name, pod_name)\",\n \"hide\": false,\n \"interval\": \"10s\",\n \"intervalFactor\": 1,\n \"legendFormat\": \"-> pod: {{ pod_name }} | {{ container_name }}\",\n \"metric\": \"network\",\n \"refId\": \"B\",\n \"step\": 10\n },\n {\n \"expr\": \"- sum (rate (container_network_transmit_bytes_total{image!=\\\"\\\",name=~\\\"^k8s_.*\\\",kubernetes_io_hostname=~\\\"^$Node$\\\"}[1m])) by (container_name, pod_name)\",\n \"hide\": false,\n \"interval\": \"10s\",\n \"intervalFactor\": 1,\n \"legendFormat\": \"<- pod: {{ pod_name }} | {{ container_name }}\",\n \"metric\": \"network\",\n \"refId\": \"D\",\n \"step\": 10\n },\n {\n \"expr\": \"sum (rate (container_network_receive_bytes_total{image!=\\\"\\\",name!~\\\"^k8s_.*\\\",kubernetes_io_hostname=~\\\"^$Node$\\\"}[1m])) by (kubernetes_io_hostname, name, image)\",\n \"hide\": false,\n \"interval\": \"10s\",\n \"intervalFactor\": 1,\n \"legendFormat\": \"-> docker: {{ kubernetes_io_hostname }} | {{ image }} ({{ name }})\",\n \"metric\": \"network\",\n \"refId\": \"A\",\n \"step\": 10\n },\n {\n \"expr\": \"- sum (rate (container_network_transmit_bytes_total{image!=\\\"\\\",name!~\\\"^k8s_.*\\\",kubernetes_io_hostname=~\\\"^$Node$\\\"}[1m])) by (kubernetes_io_hostname, name, image)\",\n \"hide\": false,\n \"interval\": \"10s\",\n \"intervalFactor\": 1,\n \"legendFormat\": \"<- docker: {{ kubernetes_io_hostname }} | {{ image }} ({{ name }})\",\n \"metric\": \"network\",\n \"refId\": \"C\",\n \"step\": 10\n },\n {\n \"expr\": \"sum (rate (container_network_transmit_bytes_total{rkt_container_name!=\\\"\\\",kubernetes_io_hostname=~\\\"^$Node$\\\"}[1m])) by (kubernetes_io_hostname, rkt_container_name)\",\n \"hide\": false,\n \"interval\": \"10s\",\n \"intervalFactor\": 1,\n \"legendFormat\": \"-> rkt: {{ kubernetes_io_hostname }} | {{ rkt_container_name }}\",\n \"metric\": \"network\",\n \"refId\": \"E\",\n \"step\": 10\n },\n {\n \"expr\": \"- sum (rate (container_network_transmit_bytes_total{rkt_container_name!=\\\"\\\",kubernetes_io_hostname=~\\\"^$Node$\\\"}[1m])) by (kubernetes_io_hostname, rkt_container_name)\",\n \"hide\": false,\n \"interval\": \"10s\",\n \"intervalFactor\": 1,\n \"legendFormat\": \"<- rkt: {{ kubernetes_io_hostname }} | {{ rkt_container_name }}\",\n \"metric\": \"network\",\n \"refId\": \"F\",\n \"step\": 10\n }\n ],\n \"thresholds\": [],\n \"timeFrom\": null,\n \"timeShift\": null,\n \"title\": \"Containers network I/O (1m avg)\",\n \"tooltip\": {\n \"msResolution\": false,\n \"shared\": true,\n \"sort\": 2,\n \"value_type\": \"cumulative\"\n },\n \"type\": \"graph\",\n \"xaxis\": {\n \"show\": true\n },\n \"yaxes\": [\n {\n \"format\": \"Bps\",\n \"label\": null,\n \"logBase\": 1,\n \"max\": null,\n \"min\": null,\n \"show\": true\n },\n {\n \"format\": \"short\",\n \"label\": null,\n \"logBase\": 1,\n \"max\": null,\n \"min\": null,\n \"show\": false\n }\n ]\n }\n ],\n \"repeat\": null,\n \"repeatIteration\": null,\n \"repeatRowId\": null,\n \"showTitle\": false,\n \"title\": \"Containers network I/O\",\n \"titleSize\": \"h6\"\n },\n {\n \"collapse\": true,\n \"height\": \"500px\",\n \"panels\": [\n {\n \"aliasColors\": {},\n \"bars\": false,\n \"datasource\": \"${DS_PROM}\",\n \"decimals\": 2,\n \"editable\": true,\n \"error\": false,\n \"fill\": 1,\n \"grid\": {},\n \"id\": 29,\n \"isNew\": true,\n \"legend\": {\n \"alignAsTable\": true,\n \"avg\": true,\n \"current\": true,\n \"max\": false,\n \"min\": false,\n \"rightSide\": false,\n \"show\": true,\n \"sideWidth\": 200,\n \"sort\": \"current\",\n \"sortDesc\": true,\n \"total\": false,\n \"values\": true\n },\n \"lines\": true,\n \"linewidth\": 2,\n \"links\": [],\n \"nullPointMode\": \"connected\",\n \"percentage\": false,\n \"pointradius\": 5,\n \"points\": false,\n \"renderer\": \"flot\",\n \"seriesOverrides\": [],\n \"span\": 12,\n \"stack\": false,\n \"steppedLine\": false,\n \"targets\": [\n {\n \"expr\": \"sum (rate (container_network_receive_bytes_total{id!=\\\"/\\\",kubernetes_io_hostname=~\\\"^$Node$\\\"}[1m])) by (id)\",\n \"interval\": \"10s\",\n \"intervalFactor\": 1,\n \"legendFormat\": \"-> {{ id }}\",\n \"metric\": \"network\",\n \"refId\": \"A\",\n \"step\": 10\n },\n {\n \"expr\": \"- sum (rate (container_network_transmit_bytes_total{id!=\\\"/\\\",kubernetes_io_hostname=~\\\"^$Node$\\\"}[1m])) by (id)\",\n \"interval\": \"10s\",\n \"intervalFactor\": 1,\n \"legendFormat\": \"<- {{ id }}\",\n \"metric\": \"network\",\n \"refId\": \"B\",\n \"step\": 10\n }\n ],\n \"thresholds\": [],\n \"timeFrom\": null,\n \"timeShift\": null,\n \"title\": \"All processes network I/O (1m avg)\",\n \"tooltip\": {\n \"msResolution\": false,\n \"shared\": true,\n \"sort\": 2,\n \"value_type\": \"cumulative\"\n },\n \"type\": \"graph\",\n \"xaxis\": {\n \"show\": true\n },\n \"yaxes\": [\n {\n \"format\": \"Bps\",\n \"label\": null,\n \"logBase\": 1,\n \"max\": null,\n \"min\": null,\n \"show\": true\n },\n {\n \"format\": \"short\",\n \"label\": null,\n \"logBase\": 1,\n \"max\": null,\n \"min\": null,\n \"show\": false\n }\n ]\n }\n ],\n \"repeat\": null,\n \"repeatIteration\": null,\n \"repeatRowId\": null,\n \"showTitle\": false,\n \"title\": \"All processes network I/O\",\n \"titleSize\": \"h6\"\n }\n ],\n \"schemaVersion\": 14,\n \"style\": \"dark\",\n \"tags\": [\n \"kubernetes\"\n ],\n \"templating\": {\n \"list\": [\n {\n \"allValue\": \".*\",\n \"current\": {},\n \"datasource\": \"${DS_PROM}\",\n \"hide\": 0,\n \"includeAll\": true,\n \"label\": null,\n \"multi\": false,\n \"name\": \"Node\",\n \"options\": [],\n \"query\": \"label_values(kubernetes_io_hostname)\",\n \"refresh\": 1,\n \"regex\": \"\",\n \"sort\": 0,\n \"tagValuesQuery\": \"\",\n \"tags\": [],\n \"tagsQuery\": \"\",\n \"type\": \"query\",\n \"useTags\": false\n }\n ]\n },\n \"time\": {\n \"from\": \"now-1h\",\n \"to\": \"now\"\n },\n \"timepicker\": {\n \"refresh_intervals\": [\n \"5s\",\n \"10s\",\n \"30s\",\n \"1m\",\n \"5m\",\n \"15m\",\n \"30m\",\n \"1h\",\n \"2h\",\n \"1d\"\n ],\n \"time_options\": [\n \"5m\",\n \"15m\",\n \"1h\",\n \"6h\",\n \"12h\",\n \"24h\",\n \"2d\",\n \"7d\",\n \"30d\"\n ]\n },\n \"timezone\": \"browser\",\n \"title\": \"Kubernetes cluster monitoring (via Prometheus) v2\",\n \"version\": 0\n}\n", + "import-dashboards-job.sh": "\nGRAFANA_USER=admin\nGRAFANA_PASS=${GF_SECURITY_ADMIN_PASSWORD}\nHOST=grafana-prom\nPORT=80\n\n# For DEV outside of cluster\nif [ ! -e /var/run/secrets/kubernetes.io/serviceaccount ]; then\n HOST=localhost\n PORT=3000\nfi\necho \"Using ${HOST}:${PORT}\"\n\ncheck_connection() {\n\n COUNT=0\n MAX_COUNT=120\n\n while true; do\n COUNT=$((COUNT+1))\n if [ $COUNT -gt $MAX_COUNT ]; then\n break\n fi\n\n echo \"checking connection to grafana [$COUNT]\"\n\n curl -sI --connect-timeout 1 ${HOST}:${PORT} > /dev/null\n if [ $? -eq 0 ]; then\n break\n fi\n\n WAIT_SECS=1\n echo \"Sleeping ${WAIT_SECS} secs...\"\n sleep $WAIT_SECS\n done\n}\n\nrecreate_datasource() {\n curl --silent --fail --show-error --request DELETE http://${GRAFANA_USER}:${GRAFANA_PASS}@${HOST}:${PORT}/api/datasources/name/prometheus\n\n curl --silent --fail --show-error --request POST http://${GRAFANA_USER}:${GRAFANA_PASS}@${HOST}:${PORT}/api/datasources --header \"Content-Type: application/json\" --data-binary \"@prometheus-datasource.json\"\n}\n\nadd_dashboard() {\n file=$1\n SRC_NAME=$2\n echo \"\"\n echo \"importing $file\"\n\n ( echo '{\"dashboard\":';\n cat \"$file\";\n echo ',\"overwrite\":true,\"inputs\":[{\"name\":\"'${SRC_NAME}'\",\"type\":\"datasource\",\"pluginId\":\"prometheus\",\"value\":\"prometheus\"}]}'\n ) | jq -c '.' | curl --silent --fail --show-error --request POST http://${GRAFANA_USER}:${GRAFANA_PASS}@${HOST}:${PORT}/api/dashboards/import --header \"Content-Type: application/json\" --data-binary \"@-\"\n\n}\n\ncheck_connection\nrecreate_datasource\nadd_dashboard grafana-net-2115-dashboard.json DS_PROM\nadd_dashboard metrics-test-dashboard.json DS_PROM\nadd_dashboard predictions-analytics-dashboard.json DS_PROM\n\n", + "metrics-test-dashboard.json": "{\n \"__inputs\": [\n {\n \"name\": \"DS_PROM\",\n \"label\": \"prom\",\n \"description\": \"\",\n \"type\": \"datasource\",\n \"pluginId\": \"prometheus\",\n \"pluginName\": \"Prometheus\"\n }\n ],\n \"__requires\": [\n {\n \"type\": \"grafana\",\n \"id\": \"grafana\",\n \"name\": \"Grafana\",\n \"version\": \"4.3.2\"\n },\n {\n \"type\": \"panel\",\n \"id\": \"graph\",\n \"name\": \"Graph\",\n \"version\": \"\"\n },\n {\n \"type\": \"datasource\",\n \"id\": \"prometheus\",\n \"name\": \"Prometheus\",\n \"version\": \"1.0.0\"\n }\n ],\n \"annotations\": {\n \"list\": []\n },\n \"editable\": true,\n \"gnetId\": null,\n \"graphTooltip\": 0,\n \"hideControls\": false,\n \"id\": null,\n \"links\": [],\n \"refresh\": false,\n \"rows\": [\n {\n \"collapse\": false,\n \"height\": 264,\n \"panels\": [\n {\n \"aliasColors\": {},\n \"bars\": false,\n \"dashLength\": 10,\n \"dashes\": false,\n \"datasource\": \"${DS_PROM}\",\n \"fill\": 1,\n \"id\": 1,\n \"legend\": {\n \"avg\": false,\n \"current\": false,\n \"max\": false,\n \"min\": false,\n \"show\": true,\n \"total\": false,\n \"values\": false\n },\n \"lines\": true,\n \"linewidth\": 1,\n \"nullPointMode\": \"null\",\n \"percentage\": false,\n \"pointradius\": 5,\n \"points\": false,\n \"renderer\": \"flot\",\n \"seriesOverrides\": [],\n \"spaceLength\": 10,\n \"span\": 10,\n \"stack\": false,\n \"steppedLine\": false,\n \"targets\": [\n {\n \"expr\": \"io_seldon_apife_api_rest_RestClientController_home_snapshot_75thPercentile\",\n \"format\": \"time_series\",\n \"intervalFactor\": 2,\n \"metric\": \"io_seldon_apife_api_rest_RestClientController_home_snapshot_75thPercentile\",\n \"refId\": \"A\",\n \"step\": 2\n },\n {\n \"expr\": \"io_seldon_apife_api_rest_RestClientController_home_snapshot_95thPercentile\",\n \"format\": \"time_series\",\n \"intervalFactor\": 2,\n \"metric\": \"io_seldon_apife_api_rest_RestClientController_home_snapshot_95thPercentile\",\n \"refId\": \"B\",\n \"step\": 2\n },\n {\n \"expr\": \"io_seldon_apife_api_rest_RestClientController_home_snapshot_98thPercentile\",\n \"format\": \"time_series\",\n \"intervalFactor\": 2,\n \"legendFormat\": \"\",\n \"metric\": \"io_seldon_apife_api_rest_RestClientController_home_snapshot_98thPercentile\",\n \"refId\": \"C\",\n \"step\": 2\n }\n ],\n \"thresholds\": [],\n \"timeFrom\": null,\n \"timeShift\": null,\n \"title\": \"Panel Title\",\n \"tooltip\": {\n \"shared\": true,\n \"sort\": 0,\n \"value_type\": \"individual\"\n },\n \"type\": \"graph\",\n \"xaxis\": {\n \"buckets\": null,\n \"mode\": \"time\",\n \"name\": null,\n \"show\": true,\n \"values\": []\n },\n \"yaxes\": [\n {\n \"format\": \"short\",\n \"label\": null,\n \"logBase\": 1,\n \"max\": null,\n \"min\": null,\n \"show\": true\n },\n {\n \"format\": \"short\",\n \"label\": null,\n \"logBase\": 1,\n \"max\": null,\n \"min\": null,\n \"show\": true\n }\n ]\n }\n ],\n \"repeat\": null,\n \"repeatIteration\": null,\n \"repeatRowId\": null,\n \"showTitle\": false,\n \"title\": \"Dashboard Row\",\n \"titleSize\": \"h6\"\n }\n ],\n \"schemaVersion\": 14,\n \"style\": \"dark\",\n \"tags\": [],\n \"templating\": {\n \"list\": []\n },\n \"time\": {\n \"from\": \"now-5m\",\n \"to\": \"now\"\n },\n \"timepicker\": {\n \"refresh_intervals\": [\n \"5s\",\n \"10s\",\n \"30s\",\n \"1m\",\n \"5m\",\n \"15m\",\n \"30m\",\n \"1h\",\n \"2h\",\n \"1d\"\n ],\n \"time_options\": [\n \"5m\",\n \"15m\",\n \"1h\",\n \"6h\",\n \"12h\",\n \"24h\",\n \"2d\",\n \"7d\",\n \"30d\"\n ]\n },\n \"timezone\": \"browser\",\n \"title\": \"metrics-test\",\n \"version\": 0\n}\n", + "outlier-detection-if.json": "{\n \"annotations\": {\n \"list\": [\n {\n \"builtIn\": 1,\n \"datasource\": \"-- Grafana --\",\n \"enable\": true,\n \"hide\": true,\n \"iconColor\": \"rgba(0, 211, 255, 1)\",\n \"name\": \"Annotations & Alerts\",\n \"type\": \"dashboard\"\n }\n ]\n },\n \"editable\": true,\n \"gnetId\": null,\n \"graphTooltip\": 0,\n \"id\": 4,\n \"links\": [],\n \"panels\": [\n {\n \"content\": \"# OUTLIER DETECTOR\\n\\n\\n### Monitor predictions and performance of an Isolation Forest (IF) as outlier detector for network intrusions.\",\n \"gridPos\": {\n \"h\": 4,\n \"w\": 24,\n \"x\": 0,\n \"y\": 0\n },\n \"id\": 20,\n \"links\": [],\n \"mode\": \"markdown\",\n \"title\": \"\",\n \"type\": \"text\"\n },\n {\n \"dashboardFilter\": \"\",\n \"dashboardTags\": [],\n \"folderId\": null,\n \"gridPos\": {\n \"h\": 5,\n \"w\": 4,\n \"x\": 0,\n \"y\": 4\n },\n \"id\": 4,\n \"limit\": 10,\n \"links\": [],\n \"nameFilter\": \"\",\n \"onlyAlertsOnDashboard\": true,\n \"show\": \"current\",\n \"sortOrder\": 1,\n \"stateFilter\": [],\n \"title\": \"Alerts\",\n \"type\": \"alertlist\"\n },\n {\n \"cacheTimeout\": null,\n \"colorBackground\": false,\n \"colorValue\": false,\n \"colors\": [\n \"rgba(245, 54, 54, 0.9)\",\n \"rgba(237, 129, 40, 0.89)\",\n \"rgba(50, 172, 45, 0.97)\"\n ],\n \"datasource\": \"prometheus\",\n \"format\": \"none\",\n \"gauge\": {\n \"maxValue\": 100,\n \"minValue\": 0,\n \"show\": false,\n \"thresholdLabels\": false,\n \"thresholdMarkers\": true\n },\n \"gridPos\": {\n \"h\": 5,\n \"w\": 4,\n \"x\": 4,\n \"y\": 4\n },\n \"id\": 3,\n \"interval\": \"1s\",\n \"links\": [],\n \"mappingType\": 1,\n \"mappingTypes\": [\n {\n \"name\": \"value to text\",\n \"value\": 1\n },\n {\n \"name\": \"range to text\",\n \"value\": 2\n }\n ],\n \"maxDataPoints\": 100,\n \"nullPointMode\": \"connected\",\n \"nullText\": null,\n \"postfix\": \"\",\n \"postfixFontSize\": \"50%\",\n \"prefix\": \"\",\n \"prefixFontSize\": \"50%\",\n \"rangeMaps\": [\n {\n \"from\": \"null\",\n \"text\": \"N/A\",\n \"to\": \"null\"\n }\n ],\n \"sparkline\": {\n \"fillColor\": \"rgba(31, 118, 189, 0.18)\",\n \"full\": true,\n \"lineColor\": \"rgb(31, 120, 193)\",\n \"show\": true\n },\n \"tableColumn\": \"\",\n \"targets\": [\n {\n \"expr\": \"observation\",\n \"format\": \"time_series\",\n \"hide\": false,\n \"interval\": \"1s\",\n \"intervalFactor\": 1,\n \"refId\": \"A\",\n \"step\": 4\n }\n ],\n \"thresholds\": \"\",\n \"title\": \"Nb observations\",\n \"type\": \"singlestat\",\n \"valueFontSize\": \"80%\",\n \"valueMaps\": [\n {\n \"op\": \"=\",\n \"text\": \"N/A\",\n \"value\": \"null\"\n }\n ],\n \"valueName\": \"current\"\n },\n {\n \"cacheTimeout\": null,\n \"colorBackground\": false,\n \"colorValue\": false,\n \"colors\": [\n \"rgba(245, 54, 54, 0.9)\",\n \"rgba(237, 129, 40, 0.89)\",\n \"rgba(50, 172, 45, 0.97)\"\n ],\n \"datasource\": \"prometheus\",\n \"format\": \"none\",\n \"gauge\": {\n \"maxValue\": 100,\n \"minValue\": 0,\n \"show\": false,\n \"thresholdLabels\": false,\n \"thresholdMarkers\": true\n },\n \"gridPos\": {\n \"h\": 5,\n \"w\": 4,\n \"x\": 8,\n \"y\": 4\n },\n \"id\": 16,\n \"interval\": \"1s\",\n \"links\": [],\n \"mappingType\": 1,\n \"mappingTypes\": [\n {\n \"name\": \"value to text\",\n \"value\": 1\n },\n {\n \"name\": \"range to text\",\n \"value\": 2\n }\n ],\n \"maxDataPoints\": 100,\n \"nullPointMode\": \"connected\",\n \"nullText\": null,\n \"postfix\": \"\",\n \"postfixFontSize\": \"50%\",\n \"prefix\": \"\",\n \"prefixFontSize\": \"50%\",\n \"rangeMaps\": [\n {\n \"from\": \"null\",\n \"text\": \"N/A\",\n \"to\": \"null\"\n }\n ],\n \"sparkline\": {\n \"fillColor\": \"rgba(189, 148, 31, 0.18)\",\n \"full\": true,\n \"lineColor\": \"rgb(193, 74, 31)\",\n \"show\": true\n },\n \"tableColumn\": \"\",\n \"targets\": [\n {\n \"expr\": \"nb_outliers_tot\",\n \"format\": \"time_series\",\n \"interval\": \"1s\",\n \"intervalFactor\": 1,\n \"refId\": \"A\",\n \"step\": 2\n }\n ],\n \"thresholds\": \"\",\n \"timeFrom\": null,\n \"title\": \"Nb Predicted Outliers\",\n \"type\": \"singlestat\",\n \"valueFontSize\": \"80%\",\n \"valueMaps\": [\n {\n \"op\": \"=\",\n \"text\": \"N/A\",\n \"value\": \"null\"\n }\n ],\n \"valueName\": \"current\"\n },\n {\n \"cacheTimeout\": null,\n \"colorBackground\": false,\n \"colorValue\": false,\n \"colors\": [\n \"rgba(50, 172, 45, 0.97)\",\n \"rgba(237, 129, 40, 0.89)\",\n \"rgba(245, 54, 54, 0.9)\"\n ],\n \"datasource\": \"prometheus\",\n \"format\": \"percent\",\n \"gauge\": {\n \"maxValue\": 100,\n \"minValue\": 0,\n \"show\": true,\n \"thresholdLabels\": false,\n \"thresholdMarkers\": true\n },\n \"gridPos\": {\n \"h\": 5,\n \"w\": 4,\n \"x\": 12,\n \"y\": 4\n },\n \"id\": 17,\n \"interval\": \"1s\",\n \"links\": [],\n \"mappingType\": 1,\n \"mappingTypes\": [\n {\n \"name\": \"value to text\",\n \"value\": 1\n },\n {\n \"name\": \"range to text\",\n \"value\": 2\n }\n ],\n \"maxDataPoints\": 100,\n \"nullPointMode\": \"connected\",\n \"nullText\": null,\n \"postfix\": \"\",\n \"postfixFontSize\": \"50%\",\n \"prefix\": \"\",\n \"prefixFontSize\": \"50%\",\n \"rangeMaps\": [\n {\n \"from\": \"null\",\n \"text\": \"N/A\",\n \"to\": \"null\"\n }\n ],\n \"sparkline\": {\n \"fillColor\": \"rgba(31, 118, 189, 0.18)\",\n \"full\": false,\n \"lineColor\": \"rgb(31, 120, 193)\",\n \"show\": false\n },\n \"tableColumn\": \"\",\n \"targets\": [\n {\n \"expr\": \"100 * nb_outliers_tot / observation\",\n \"format\": \"time_series\",\n \"interval\": \"1s\",\n \"intervalFactor\": 1,\n \"refId\": \"A\",\n \"step\": 2\n }\n ],\n \"thresholds\": \"10,20\",\n \"title\": \"% Predicted Outliers\",\n \"type\": \"singlestat\",\n \"valueFontSize\": \"80%\",\n \"valueMaps\": [\n {\n \"op\": \"=\",\n \"text\": \"N/A\",\n \"value\": \"null\"\n }\n ],\n \"valueName\": \"current\"\n },\n {\n \"cacheTimeout\": null,\n \"colorBackground\": false,\n \"colorValue\": false,\n \"colors\": [\n \"rgba(245, 54, 54, 0.9)\",\n \"rgba(237, 129, 40, 0.89)\",\n \"rgba(50, 172, 45, 0.97)\"\n ],\n \"datasource\": \"prometheus\",\n \"format\": \"none\",\n \"gauge\": {\n \"maxValue\": 100,\n \"minValue\": 0,\n \"show\": false,\n \"thresholdLabels\": false,\n \"thresholdMarkers\": true\n },\n \"gridPos\": {\n \"h\": 5,\n \"w\": 4,\n \"x\": 16,\n \"y\": 4\n },\n \"id\": 18,\n \"interval\": \"1s\",\n \"links\": [],\n \"mappingType\": 1,\n \"mappingTypes\": [\n {\n \"name\": \"value to text\",\n \"value\": 1\n },\n {\n \"name\": \"range to text\",\n \"value\": 2\n }\n ],\n \"maxDataPoints\": 100,\n \"nullPointMode\": \"connected\",\n \"nullText\": null,\n \"postfix\": \"\",\n \"postfixFontSize\": \"50%\",\n \"prefix\": \"\",\n \"prefixFontSize\": \"50%\",\n \"rangeMaps\": [\n {\n \"from\": \"null\",\n \"text\": \"N/A\",\n \"to\": \"null\"\n }\n ],\n \"sparkline\": {\n \"fillColor\": \"rgba(189, 128, 31, 0.18)\",\n \"full\": true,\n \"lineColor\": \"rgb(193, 94, 31)\",\n \"show\": true\n },\n \"tableColumn\": \"\",\n \"targets\": [\n {\n \"expr\": \"nb_labels_tot\",\n \"format\": \"time_series\",\n \"interval\": \"1s\",\n \"intervalFactor\": 1,\n \"refId\": \"A\",\n \"step\": 4\n }\n ],\n \"thresholds\": \"\",\n \"title\": \"Nb Labeled Outliers\",\n \"type\": \"singlestat\",\n \"valueFontSize\": \"80%\",\n \"valueMaps\": [\n {\n \"op\": \"=\",\n \"text\": \"N/A\",\n \"value\": \"null\"\n }\n ],\n \"valueName\": \"current\"\n },\n {\n \"cacheTimeout\": null,\n \"colorBackground\": false,\n \"colorValue\": false,\n \"colors\": [\n \"rgba(50, 172, 45, 0.97)\",\n \"rgba(237, 129, 40, 0.89)\",\n \"rgba(245, 54, 54, 0.9)\"\n ],\n \"datasource\": \"prometheus\",\n \"format\": \"percent\",\n \"gauge\": {\n \"maxValue\": 100,\n \"minValue\": 0,\n \"show\": true,\n \"thresholdLabels\": false,\n \"thresholdMarkers\": true\n },\n \"gridPos\": {\n \"h\": 5,\n \"w\": 4,\n \"x\": 20,\n \"y\": 4\n },\n \"id\": 19,\n \"interval\": \"1s\",\n \"links\": [],\n \"mappingType\": 1,\n \"mappingTypes\": [\n {\n \"name\": \"value to text\",\n \"value\": 1\n },\n {\n \"name\": \"range to text\",\n \"value\": 2\n }\n ],\n \"maxDataPoints\": 100,\n \"nullPointMode\": \"connected\",\n \"nullText\": null,\n \"postfix\": \"\",\n \"postfixFontSize\": \"50%\",\n \"prefix\": \"\",\n \"prefixFontSize\": \"50%\",\n \"rangeMaps\": [\n {\n \"from\": \"null\",\n \"text\": \"N/A\",\n \"to\": \"null\"\n }\n ],\n \"sparkline\": {\n \"fillColor\": \"rgba(31, 118, 189, 0.18)\",\n \"full\": false,\n \"lineColor\": \"rgb(31, 120, 193)\",\n \"show\": false\n },\n \"tableColumn\": \"\",\n \"targets\": [\n {\n \"expr\": \"100 * nb_labels_tot / observation\",\n \"format\": \"time_series\",\n \"interval\": \"1s\",\n \"intervalFactor\": 1,\n \"refId\": \"A\",\n \"step\": 4\n }\n ],\n \"thresholds\": \"10,20\",\n \"title\": \"% Labeled Outliers\",\n \"type\": \"singlestat\",\n \"valueFontSize\": \"80%\",\n \"valueMaps\": [\n {\n \"op\": \"=\",\n \"text\": \"N/A\",\n \"value\": \"null\"\n }\n ],\n \"valueName\": \"current\"\n },\n {\n \"alert\": {\n \"conditions\": [\n {\n \"evaluator\": {\n \"params\": [\n 30\n ],\n \"type\": \"gt\"\n },\n \"operator\": {\n \"type\": \"and\"\n },\n \"query\": {\n \"params\": [\n \"A\",\n \"2m\",\n \"now\"\n ]\n },\n \"reducer\": {\n \"params\": [],\n \"type\": \"sum\"\n },\n \"type\": \"query\"\n }\n ],\n \"executionErrorState\": \"alerting\",\n \"frequency\": \"3s\",\n \"handler\": 1,\n \"message\": \"At least 10 outliers detected over past 5min!\",\n \"name\": \"Outlier Prediction\",\n \"noDataState\": \"no_data\",\n \"notifications\": []\n },\n \"aliasColors\": {},\n \"bars\": false,\n \"dashLength\": 10,\n \"dashes\": false,\n \"datasource\": \"prometheus\",\n \"description\": \"0=normal\\n1=outlier\",\n \"fill\": 1,\n \"gridPos\": {\n \"h\": 8,\n \"w\": 12,\n \"x\": 0,\n \"y\": 9\n },\n \"height\": \"\",\n \"id\": 1,\n \"interval\": \"1s\",\n \"legend\": {\n \"avg\": false,\n \"current\": false,\n \"max\": false,\n \"min\": false,\n \"show\": false,\n \"total\": false,\n \"values\": false\n },\n \"lines\": false,\n \"linewidth\": 1,\n \"links\": [],\n \"nullPointMode\": \"null\",\n \"percentage\": false,\n \"pointradius\": 2,\n \"points\": true,\n \"renderer\": \"flot\",\n \"seriesOverrides\": [],\n \"spaceLength\": 10,\n \"stack\": false,\n \"steppedLine\": false,\n \"targets\": [\n {\n \"expr\": \"is_outlier\",\n \"format\": \"time_series\",\n \"instant\": false,\n \"interval\": \"3s\",\n \"intervalFactor\": 1,\n \"legendFormat\": \"\",\n \"refId\": \"A\",\n \"step\": 1\n }\n ],\n \"thresholds\": [\n {\n \"colorMode\": \"critical\",\n \"fill\": true,\n \"line\": true,\n \"op\": \"gt\",\n \"value\": 30\n }\n ],\n \"timeFrom\": null,\n \"timeShift\": null,\n \"title\": \"Outlier Prediction\",\n \"tooltip\": {\n \"shared\": true,\n \"sort\": 0,\n \"value_type\": \"individual\"\n },\n \"transparent\": false,\n \"type\": \"graph\",\n \"xaxis\": {\n \"buckets\": null,\n \"mode\": \"time\",\n \"name\": null,\n \"show\": true,\n \"values\": []\n },\n \"yaxes\": [\n {\n \"format\": \"short\",\n \"label\": \"Outlier\",\n \"logBase\": 1,\n \"max\": \"1.1\",\n \"min\": null,\n \"show\": true\n },\n {\n \"format\": \"short\",\n \"label\": \"\",\n \"logBase\": 1,\n \"max\": null,\n \"min\": null,\n \"show\": false\n }\n ],\n \"yaxis\": {\n \"align\": false,\n \"alignLevel\": null\n }\n },\n {\n \"aliasColors\": {},\n \"bars\": true,\n \"dashLength\": 10,\n \"dashes\": false,\n \"datasource\": \"prometheus\",\n \"description\": \"Anomaly score of input data. Values below the threshold line are outliers.\",\n \"fill\": 1,\n \"gridPos\": {\n \"h\": 8,\n \"w\": 12,\n \"x\": 12,\n \"y\": 9\n },\n \"id\": 2,\n \"interval\": \"1s\",\n \"legend\": {\n \"alignAsTable\": false,\n \"avg\": false,\n \"current\": false,\n \"max\": false,\n \"min\": false,\n \"show\": false,\n \"total\": false,\n \"values\": false\n },\n \"lines\": false,\n \"linewidth\": 1,\n \"links\": [],\n \"nullPointMode\": \"null\",\n \"percentage\": false,\n \"pointradius\": 2,\n \"points\": false,\n \"renderer\": \"flot\",\n \"seriesOverrides\": [],\n \"spaceLength\": 10,\n \"stack\": false,\n \"steppedLine\": false,\n \"targets\": [\n {\n \"expr\": \"anomaly_score\",\n \"format\": \"time_series\",\n \"interval\": \"3s\",\n \"intervalFactor\": 1,\n \"refId\": \"A\",\n \"step\": 1\n }\n ],\n \"thresholds\": [\n {\n \"colorMode\": \"critical\",\n \"fill\": true,\n \"line\": true,\n \"op\": \"lt\",\n \"value\": 0,\n \"yaxis\": \"left\"\n }\n ],\n \"timeFrom\": null,\n \"timeShift\": null,\n \"title\": \"Anomaly Score\",\n \"tooltip\": {\n \"shared\": true,\n \"sort\": 0,\n \"value_type\": \"individual\"\n },\n \"transparent\": false,\n \"type\": \"graph\",\n \"xaxis\": {\n \"buckets\": null,\n \"mode\": \"time\",\n \"name\": null,\n \"show\": true,\n \"values\": []\n },\n \"yaxes\": [\n {\n \"format\": \"short\",\n \"label\": \"Anomaly Score\",\n \"logBase\": 1,\n \"max\": null,\n \"min\": null,\n \"show\": true\n },\n {\n \"format\": \"short\",\n \"label\": \"\",\n \"logBase\": 1,\n \"max\": null,\n \"min\": null,\n \"show\": true\n }\n ],\n \"yaxis\": {\n \"align\": false,\n \"alignLevel\": null\n }\n },\n {\n \"alert\": {\n \"conditions\": [\n {\n \"evaluator\": {\n \"params\": [\n 30\n ],\n \"type\": \"gt\"\n },\n \"operator\": {\n \"type\": \"and\"\n },\n \"query\": {\n \"params\": [\n \"A\",\n \"2m\",\n \"now\"\n ]\n },\n \"reducer\": {\n \"params\": [],\n \"type\": \"sum\"\n },\n \"type\": \"query\"\n }\n ],\n \"executionErrorState\": \"alerting\",\n \"frequency\": \"3s\",\n \"handler\": 1,\n \"name\": \"Outlier Labels\",\n \"noDataState\": \"no_data\",\n \"notifications\": []\n },\n \"aliasColors\": {},\n \"bars\": false,\n \"dashLength\": 10,\n \"dashes\": false,\n \"datasource\": \"prometheus\",\n \"description\": \"0=normal\\n1=outlier\",\n \"fill\": 1,\n \"gridPos\": {\n \"h\": 9,\n \"w\": 12,\n \"x\": 0,\n \"y\": 17\n },\n \"id\": 5,\n \"interval\": \"1s\",\n \"legend\": {\n \"avg\": false,\n \"current\": false,\n \"max\": false,\n \"min\": false,\n \"show\": false,\n \"total\": false,\n \"values\": false\n },\n \"lines\": false,\n \"linewidth\": 1,\n \"links\": [],\n \"nullPointMode\": \"null\",\n \"percentage\": false,\n \"pointradius\": 2,\n \"points\": true,\n \"renderer\": \"flot\",\n \"seriesOverrides\": [],\n \"spaceLength\": 10,\n \"stack\": false,\n \"steppedLine\": false,\n \"targets\": [\n {\n \"expr\": \"label\",\n \"format\": \"time_series\",\n \"interval\": \"3s\",\n \"intervalFactor\": 1,\n \"legendFormat\": \"\",\n \"refId\": \"A\",\n \"step\": 1\n }\n ],\n \"thresholds\": [\n {\n \"colorMode\": \"critical\",\n \"fill\": true,\n \"line\": true,\n \"op\": \"gt\",\n \"value\": 30\n }\n ],\n \"timeFrom\": null,\n \"timeShift\": null,\n \"title\": \"Outlier Labels\",\n \"tooltip\": {\n \"shared\": true,\n \"sort\": 0,\n \"value_type\": \"individual\"\n },\n \"transparent\": false,\n \"type\": \"graph\",\n \"xaxis\": {\n \"buckets\": null,\n \"mode\": \"time\",\n \"name\": null,\n \"show\": true,\n \"values\": []\n },\n \"yaxes\": [\n {\n \"format\": \"short\",\n \"label\": \"Outlier\",\n \"logBase\": 1,\n \"max\": \"1.1\",\n \"min\": null,\n \"show\": true\n },\n {\n \"format\": \"short\",\n \"label\": null,\n \"logBase\": 1,\n \"max\": null,\n \"min\": null,\n \"show\": true\n }\n ],\n \"yaxis\": {\n \"align\": false,\n \"alignLevel\": null\n }\n },\n {\n \"aliasColors\": {},\n \"bars\": false,\n \"dashLength\": 10,\n \"dashes\": false,\n \"datasource\": \"prometheus\",\n \"description\": \"Rolling window = 100 observations.\",\n \"fill\": 1,\n \"gridPos\": {\n \"h\": 9,\n \"w\": 12,\n \"x\": 12,\n \"y\": 17\n },\n \"id\": 6,\n \"interval\": \"1s\",\n \"legend\": {\n \"alignAsTable\": true,\n \"avg\": true,\n \"current\": true,\n \"max\": false,\n \"min\": false,\n \"show\": true,\n \"total\": false,\n \"values\": true\n },\n \"lines\": true,\n \"linewidth\": 1,\n \"links\": [],\n \"nullPointMode\": \"null\",\n \"percentage\": false,\n \"pointradius\": 5,\n \"points\": false,\n \"renderer\": \"flot\",\n \"seriesOverrides\": [],\n \"spaceLength\": 10,\n \"stack\": false,\n \"steppedLine\": false,\n \"targets\": [\n {\n \"expr\": \"nb_outliers_roll\",\n \"format\": \"time_series\",\n \"interval\": \"1s\",\n \"intervalFactor\": 1,\n \"legendFormat\": \"Predicted outliers\",\n \"refId\": \"A\",\n \"step\": 1\n },\n {\n \"expr\": \"nb_labels_roll\",\n \"format\": \"time_series\",\n \"interval\": \"1s\",\n \"intervalFactor\": 1,\n \"legendFormat\": \"Labeled outliers\",\n \"refId\": \"B\",\n \"step\": 1\n }\n ],\n \"thresholds\": [],\n \"timeFrom\": null,\n \"timeShift\": null,\n \"title\": \"Rolling Number of Predicted and Labeled Outliers\",\n \"tooltip\": {\n \"shared\": true,\n \"sort\": 0,\n \"value_type\": \"individual\"\n },\n \"type\": \"graph\",\n \"xaxis\": {\n \"buckets\": null,\n \"mode\": \"time\",\n \"name\": null,\n \"show\": true,\n \"values\": []\n },\n \"yaxes\": [\n {\n \"format\": \"short\",\n \"label\": \"Number of Outliers\",\n \"logBase\": 1,\n \"max\": null,\n \"min\": null,\n \"show\": true\n },\n {\n \"format\": \"short\",\n \"label\": null,\n \"logBase\": 1,\n \"max\": null,\n \"min\": null,\n \"show\": true\n }\n ],\n \"yaxis\": {\n \"align\": false,\n \"alignLevel\": null\n }\n },\n {\n \"content\": \"# PERFORMANCE METRICS\",\n \"gridPos\": {\n \"h\": 3,\n \"w\": 24,\n \"x\": 0,\n \"y\": 26\n },\n \"id\": 8,\n \"links\": [],\n \"mode\": \"markdown\",\n \"title\": \"\",\n \"type\": \"text\"\n },\n {\n \"content\": \"### CONFUSION MATRIX\",\n \"gridPos\": {\n \"h\": 3,\n \"w\": 12,\n \"x\": 0,\n \"y\": 29\n },\n \"id\": 15,\n \"links\": [],\n \"mode\": \"markdown\",\n \"title\": \"\",\n \"transparent\": false,\n \"type\": \"text\"\n },\n {\n \"content\": \"### OTHER METRICS\",\n \"gridPos\": {\n \"h\": 3,\n \"w\": 12,\n \"x\": 12,\n \"y\": 29\n },\n \"id\": 25,\n \"links\": [],\n \"mode\": \"markdown\",\n \"title\": \"\",\n \"type\": \"text\"\n },\n {\n \"cacheTimeout\": null,\n \"colorBackground\": false,\n \"colorPrefix\": false,\n \"colorValue\": false,\n \"colors\": [\n \"rgba(50, 172, 45, 0.97)\",\n \"rgba(237, 129, 40, 0.89)\",\n \"rgba(245, 54, 54, 0.9)\"\n ],\n \"datasource\": \"prometheus\",\n \"format\": \"none\",\n \"gauge\": {\n \"maxValue\": 100,\n \"minValue\": 0,\n \"show\": false,\n \"thresholdLabels\": false,\n \"thresholdMarkers\": true\n },\n \"gridPos\": {\n \"h\": 4,\n \"w\": 6,\n \"x\": 0,\n \"y\": 32\n },\n \"id\": 11,\n \"interval\": \"1s\",\n \"links\": [],\n \"mappingType\": 1,\n \"mappingTypes\": [\n {\n \"name\": \"value to text\",\n \"value\": 1\n },\n {\n \"name\": \"range to text\",\n \"value\": 2\n }\n ],\n \"maxDataPoints\": 100,\n \"nullPointMode\": \"connected\",\n \"nullText\": null,\n \"postfix\": \"\",\n \"postfixFontSize\": \"50%\",\n \"prefix\": \"\",\n \"prefixFontSize\": \"50%\",\n \"rangeMaps\": [\n {\n \"from\": \"null\",\n \"text\": \"N/A\",\n \"to\": \"null\"\n }\n ],\n \"sparkline\": {\n \"fillColor\": \"rgba(31, 118, 189, 0.18)\",\n \"full\": true,\n \"lineColor\": \"rgb(31, 120, 193)\",\n \"show\": true\n },\n \"tableColumn\": \"\",\n \"targets\": [\n {\n \"expr\": \"true_positive\",\n \"format\": \"time_series\",\n \"interval\": \"1s\",\n \"intervalFactor\": 1,\n \"refId\": \"A\",\n \"step\": 2\n }\n ],\n \"thresholds\": \"\",\n \"title\": \"True Positive\",\n \"type\": \"singlestat\",\n \"valueFontSize\": \"80%\",\n \"valueMaps\": [\n {\n \"op\": \"=\",\n \"text\": \"N/A\",\n \"value\": \"null\"\n }\n ],\n \"valueName\": \"current\"\n },\n {\n \"cacheTimeout\": null,\n \"colorBackground\": false,\n \"colorValue\": false,\n \"colors\": [\n \"rgba(50, 172, 45, 0.97)\",\n \"rgba(237, 129, 40, 0.89)\",\n \"rgba(245, 54, 54, 0.9)\"\n ],\n \"datasource\": \"prometheus\",\n \"format\": \"none\",\n \"gauge\": {\n \"maxValue\": 100,\n \"minValue\": 0,\n \"show\": false,\n \"thresholdLabels\": false,\n \"thresholdMarkers\": true\n },\n \"gridPos\": {\n \"h\": 4,\n \"w\": 6,\n \"x\": 6,\n \"y\": 32\n },\n \"id\": 12,\n \"interval\": \"1s\",\n \"links\": [],\n \"mappingType\": 1,\n \"mappingTypes\": [\n {\n \"name\": \"value to text\",\n \"value\": 1\n },\n {\n \"name\": \"range to text\",\n \"value\": 2\n }\n ],\n \"maxDataPoints\": 100,\n \"nullPointMode\": \"connected\",\n \"nullText\": null,\n \"postfix\": \"\",\n \"postfixFontSize\": \"50%\",\n \"prefix\": \"\",\n \"prefixFontSize\": \"50%\",\n \"rangeMaps\": [\n {\n \"from\": \"null\",\n \"text\": \"N/A\",\n \"to\": \"null\"\n }\n ],\n \"sparkline\": {\n \"fillColor\": \"rgba(31, 118, 189, 0.18)\",\n \"full\": true,\n \"lineColor\": \"rgb(31, 120, 193)\",\n \"show\": true\n },\n \"tableColumn\": \"\",\n \"targets\": [\n {\n \"expr\": \"false_positive\\n\",\n \"format\": \"time_series\",\n \"interval\": \"1s\",\n \"intervalFactor\": 1,\n \"refId\": \"A\",\n \"step\": 2\n }\n ],\n \"thresholds\": \"20,50\",\n \"title\": \"False Positive\",\n \"type\": \"singlestat\",\n \"valueFontSize\": \"80%\",\n \"valueMaps\": [\n {\n \"op\": \"=\",\n \"text\": \"N/A\",\n \"value\": \"null\"\n }\n ],\n \"valueName\": \"current\"\n },\n {\n \"cacheTimeout\": null,\n \"colorBackground\": false,\n \"colorValue\": false,\n \"colors\": [\n \"rgba(245, 54, 54, 0.9)\",\n \"rgba(237, 129, 40, 0.89)\",\n \"rgba(50, 172, 45, 0.97)\"\n ],\n \"datasource\": \"prometheus\",\n \"decimals\": 2,\n \"format\": \"none\",\n \"gauge\": {\n \"maxValue\": 1,\n \"minValue\": 0,\n \"show\": true,\n \"thresholdLabels\": false,\n \"thresholdMarkers\": true\n },\n \"gridPos\": {\n \"h\": 4,\n \"w\": 6,\n \"x\": 12,\n \"y\": 32\n },\n \"id\": 21,\n \"interval\": \"1s\",\n \"links\": [],\n \"mappingType\": 1,\n \"mappingTypes\": [\n {\n \"name\": \"value to text\",\n \"value\": 1\n },\n {\n \"name\": \"range to text\",\n \"value\": 2\n }\n ],\n \"maxDataPoints\": 100,\n \"nullPointMode\": \"connected\",\n \"nullText\": null,\n \"postfix\": \"\",\n \"postfixFontSize\": \"50%\",\n \"prefix\": \"\",\n \"prefixFontSize\": \"50%\",\n \"rangeMaps\": [\n {\n \"from\": \"null\",\n \"text\": \"N/A\",\n \"to\": \"null\"\n }\n ],\n \"sparkline\": {\n \"fillColor\": \"rgba(31, 118, 189, 0.18)\",\n \"full\": false,\n \"lineColor\": \"rgb(31, 120, 193)\",\n \"show\": false\n },\n \"tableColumn\": \"\",\n \"targets\": [\n {\n \"expr\": \"f1_tot\",\n \"format\": \"time_series\",\n \"interval\": \"1s\",\n \"intervalFactor\": 1,\n \"refId\": \"A\",\n \"step\": 2\n }\n ],\n \"thresholds\": \"0.75,0.9\",\n \"title\": \"F1 score\",\n \"type\": \"singlestat\",\n \"valueFontSize\": \"80%\",\n \"valueMaps\": [\n {\n \"op\": \"=\",\n \"text\": \"N/A\",\n \"value\": \"null\"\n }\n ],\n \"valueName\": \"current\"\n },\n {\n \"cacheTimeout\": null,\n \"colorBackground\": false,\n \"colorValue\": false,\n \"colors\": [\n \"rgba(245, 54, 54, 0.9)\",\n \"rgba(237, 129, 40, 0.89)\",\n \"rgba(50, 172, 45, 0.97)\"\n ],\n \"datasource\": \"prometheus\",\n \"decimals\": 2,\n \"format\": \"none\",\n \"gauge\": {\n \"maxValue\": 1,\n \"minValue\": 0,\n \"show\": true,\n \"thresholdLabels\": false,\n \"thresholdMarkers\": true\n },\n \"gridPos\": {\n \"h\": 4,\n \"w\": 6,\n \"x\": 18,\n \"y\": 32\n },\n \"id\": 22,\n \"interval\": \"1s\",\n \"links\": [],\n \"mappingType\": 1,\n \"mappingTypes\": [\n {\n \"name\": \"value to text\",\n \"value\": 1\n },\n {\n \"name\": \"range to text\",\n \"value\": 2\n }\n ],\n \"maxDataPoints\": 100,\n \"nullPointMode\": \"connected\",\n \"nullText\": null,\n \"postfix\": \"\",\n \"postfixFontSize\": \"50%\",\n \"prefix\": \"\",\n \"prefixFontSize\": \"50%\",\n \"rangeMaps\": [\n {\n \"from\": \"null\",\n \"text\": \"N/A\",\n \"to\": \"null\"\n }\n ],\n \"sparkline\": {\n \"fillColor\": \"rgba(31, 118, 189, 0.18)\",\n \"full\": false,\n \"lineColor\": \"rgb(31, 120, 193)\",\n \"show\": false\n },\n \"tableColumn\": \"\",\n \"targets\": [\n {\n \"expr\": \"accuracy_tot\",\n \"format\": \"time_series\",\n \"interval\": \"1s\",\n \"intervalFactor\": 1,\n \"refId\": \"A\",\n \"step\": 2\n }\n ],\n \"thresholds\": \"0.9,0.95\",\n \"title\": \"Accuracy\",\n \"type\": \"singlestat\",\n \"valueFontSize\": \"80%\",\n \"valueMaps\": [\n {\n \"op\": \"=\",\n \"text\": \"N/A\",\n \"value\": \"null\"\n }\n ],\n \"valueName\": \"current\"\n },\n {\n \"cacheTimeout\": null,\n \"colorBackground\": false,\n \"colorValue\": false,\n \"colors\": [\n \"rgba(50, 172, 45, 0.97)\",\n \"rgba(237, 129, 40, 0.89)\",\n \"rgba(245, 54, 54, 0.9)\"\n ],\n \"datasource\": \"prometheus\",\n \"format\": \"none\",\n \"gauge\": {\n \"maxValue\": 500,\n \"minValue\": 0,\n \"show\": false,\n \"thresholdLabels\": false,\n \"thresholdMarkers\": true\n },\n \"gridPos\": {\n \"h\": 5,\n \"w\": 6,\n \"x\": 0,\n \"y\": 36\n },\n \"id\": 13,\n \"interval\": \"1s\",\n \"links\": [],\n \"mappingType\": 1,\n \"mappingTypes\": [\n {\n \"name\": \"value to text\",\n \"value\": 1\n },\n {\n \"name\": \"range to text\",\n \"value\": 2\n }\n ],\n \"maxDataPoints\": 100,\n \"nullPointMode\": \"connected\",\n \"nullText\": null,\n \"postfix\": \"\",\n \"postfixFontSize\": \"50%\",\n \"prefix\": \"\",\n \"prefixFontSize\": \"50%\",\n \"rangeMaps\": [\n {\n \"from\": \"null\",\n \"text\": \"N/A\",\n \"to\": \"null\"\n }\n ],\n \"sparkline\": {\n \"fillColor\": \"rgba(31, 118, 189, 0.18)\",\n \"full\": true,\n \"lineColor\": \"rgb(31, 120, 193)\",\n \"show\": true\n },\n \"tableColumn\": \"\",\n \"targets\": [\n {\n \"expr\": \"false_negative\",\n \"format\": \"time_series\",\n \"interval\": \"1s\",\n \"intervalFactor\": 1,\n \"refId\": \"A\",\n \"step\": 2\n }\n ],\n \"thresholds\": \"50,100\",\n \"title\": \"False Negative\",\n \"type\": \"singlestat\",\n \"valueFontSize\": \"80%\",\n \"valueMaps\": [\n {\n \"op\": \"=\",\n \"text\": \"N/A\",\n \"value\": \"null\"\n }\n ],\n \"valueName\": \"current\"\n },\n {\n \"cacheTimeout\": null,\n \"colorBackground\": false,\n \"colorValue\": false,\n \"colors\": [\n \"rgba(245, 54, 54, 0.9)\",\n \"rgba(237, 129, 40, 0.89)\",\n \"rgba(50, 172, 45, 0.97)\"\n ],\n \"datasource\": \"prometheus\",\n \"format\": \"none\",\n \"gauge\": {\n \"maxValue\": 100,\n \"minValue\": 0,\n \"show\": false,\n \"thresholdLabels\": false,\n \"thresholdMarkers\": true\n },\n \"gridPos\": {\n \"h\": 5,\n \"w\": 6,\n \"x\": 6,\n \"y\": 36\n },\n \"id\": 14,\n \"interval\": \"1s\",\n \"links\": [],\n \"mappingType\": 1,\n \"mappingTypes\": [\n {\n \"name\": \"value to text\",\n \"value\": 1\n },\n {\n \"name\": \"range to text\",\n \"value\": 2\n }\n ],\n \"maxDataPoints\": 100,\n \"nullPointMode\": \"connected\",\n \"nullText\": null,\n \"postfix\": \"\",\n \"postfixFontSize\": \"50%\",\n \"prefix\": \"\",\n \"prefixFontSize\": \"50%\",\n \"rangeMaps\": [\n {\n \"from\": \"null\",\n \"text\": \"N/A\",\n \"to\": \"null\"\n }\n ],\n \"sparkline\": {\n \"fillColor\": \"rgba(31, 118, 189, 0.18)\",\n \"full\": true,\n \"lineColor\": \"rgb(31, 120, 193)\",\n \"show\": true\n },\n \"tableColumn\": \"\",\n \"targets\": [\n {\n \"expr\": \"true_negative\",\n \"format\": \"time_series\",\n \"interval\": \"1s\",\n \"intervalFactor\": 1,\n \"refId\": \"A\",\n \"step\": 2\n }\n ],\n \"thresholds\": \"\",\n \"title\": \"True Negative\",\n \"type\": \"singlestat\",\n \"valueFontSize\": \"80%\",\n \"valueMaps\": [\n {\n \"op\": \"=\",\n \"text\": \"N/A\",\n \"value\": \"null\"\n }\n ],\n \"valueName\": \"current\"\n },\n {\n \"cacheTimeout\": null,\n \"colorBackground\": false,\n \"colorValue\": false,\n \"colors\": [\n \"rgba(245, 54, 54, 0.9)\",\n \"rgba(237, 129, 40, 0.89)\",\n \"rgba(50, 172, 45, 0.97)\"\n ],\n \"datasource\": \"prometheus\",\n \"decimals\": 2,\n \"format\": \"none\",\n \"gauge\": {\n \"maxValue\": 1,\n \"minValue\": 0,\n \"show\": true,\n \"thresholdLabels\": false,\n \"thresholdMarkers\": true\n },\n \"gridPos\": {\n \"h\": 5,\n \"w\": 6,\n \"x\": 12,\n \"y\": 36\n },\n \"id\": 23,\n \"interval\": \"1s\",\n \"links\": [],\n \"mappingType\": 1,\n \"mappingTypes\": [\n {\n \"name\": \"value to text\",\n \"value\": 1\n },\n {\n \"name\": \"range to text\",\n \"value\": 2\n }\n ],\n \"maxDataPoints\": 100,\n \"nullPointMode\": \"connected\",\n \"nullText\": null,\n \"postfix\": \"\",\n \"postfixFontSize\": \"50%\",\n \"prefix\": \"\",\n \"prefixFontSize\": \"50%\",\n \"rangeMaps\": [\n {\n \"from\": \"null\",\n \"text\": \"N/A\",\n \"to\": \"null\"\n }\n ],\n \"sparkline\": {\n \"fillColor\": \"rgba(31, 118, 189, 0.18)\",\n \"full\": false,\n \"lineColor\": \"rgb(31, 120, 193)\",\n \"show\": false\n },\n \"tableColumn\": \"\",\n \"targets\": [\n {\n \"expr\": \"precision_tot\",\n \"format\": \"time_series\",\n \"intervalFactor\": 2,\n \"refId\": \"A\",\n \"step\": 4\n }\n ],\n \"thresholds\": \"0.75,0.9\",\n \"title\": \"Precision\",\n \"type\": \"singlestat\",\n \"valueFontSize\": \"80%\",\n \"valueMaps\": [\n {\n \"op\": \"=\",\n \"text\": \"N/A\",\n \"value\": \"null\"\n }\n ],\n \"valueName\": \"current\"\n },\n {\n \"cacheTimeout\": null,\n \"colorBackground\": false,\n \"colorValue\": false,\n \"colors\": [\n \"rgba(245, 54, 54, 0.9)\",\n \"rgba(237, 129, 40, 0.89)\",\n \"rgba(50, 172, 45, 0.97)\"\n ],\n \"datasource\": \"prometheus\",\n \"decimals\": 2,\n \"format\": \"none\",\n \"gauge\": {\n \"maxValue\": 1,\n \"minValue\": 0,\n \"show\": true,\n \"thresholdLabels\": false,\n \"thresholdMarkers\": true\n },\n \"gridPos\": {\n \"h\": 5,\n \"w\": 6,\n \"x\": 18,\n \"y\": 36\n },\n \"id\": 24,\n \"interval\": \"1s\",\n \"links\": [],\n \"mappingType\": 1,\n \"mappingTypes\": [\n {\n \"name\": \"value to text\",\n \"value\": 1\n },\n {\n \"name\": \"range to text\",\n \"value\": 2\n }\n ],\n \"maxDataPoints\": 100,\n \"nullPointMode\": \"connected\",\n \"nullText\": null,\n \"postfix\": \"\",\n \"postfixFontSize\": \"50%\",\n \"prefix\": \"\",\n \"prefixFontSize\": \"50%\",\n \"rangeMaps\": [\n {\n \"from\": \"null\",\n \"text\": \"N/A\",\n \"to\": \"null\"\n }\n ],\n \"sparkline\": {\n \"fillColor\": \"rgba(31, 118, 189, 0.18)\",\n \"full\": false,\n \"lineColor\": \"rgb(31, 120, 193)\",\n \"show\": false\n },\n \"tableColumn\": \"\",\n \"targets\": [\n {\n \"expr\": \"recall_tot\",\n \"format\": \"time_series\",\n \"intervalFactor\": 2,\n \"refId\": \"A\",\n \"step\": 4\n }\n ],\n \"thresholds\": \"0.75,0.9\",\n \"title\": \"Recall\",\n \"type\": \"singlestat\",\n \"valueFontSize\": \"80%\",\n \"valueMaps\": [\n {\n \"op\": \"=\",\n \"text\": \"N/A\",\n \"value\": \"null\"\n }\n ],\n \"valueName\": \"current\"\n },\n {\n \"aliasColors\": {},\n \"bars\": false,\n \"dashLength\": 10,\n \"dashes\": false,\n \"datasource\": \"prometheus\",\n \"description\": \"Rolling window = 100 observations.\",\n \"fill\": 1,\n \"gridPos\": {\n \"h\": 9,\n \"w\": 12,\n \"x\": 0,\n \"y\": 41\n },\n \"id\": 7,\n \"interval\": \"1s\",\n \"legend\": {\n \"alignAsTable\": true,\n \"avg\": true,\n \"current\": true,\n \"max\": false,\n \"min\": false,\n \"rightSide\": false,\n \"show\": true,\n \"total\": false,\n \"values\": true\n },\n \"lines\": true,\n \"linewidth\": 1,\n \"links\": [],\n \"nullPointMode\": \"null\",\n \"percentage\": false,\n \"pointradius\": 5,\n \"points\": false,\n \"renderer\": \"flot\",\n \"seriesOverrides\": [],\n \"spaceLength\": 10,\n \"stack\": false,\n \"steppedLine\": false,\n \"targets\": [\n {\n \"expr\": \"f1_roll\",\n \"format\": \"time_series\",\n \"interval\": \"1s\",\n \"intervalFactor\": 1,\n \"legendFormat\": \"F1 score\",\n \"refId\": \"A\",\n \"step\": 1\n },\n {\n \"expr\": \"f2_roll\",\n \"format\": \"time_series\",\n \"interval\": \"1s\",\n \"intervalFactor\": 1,\n \"legendFormat\": \"F2 score\",\n \"refId\": \"B\",\n \"step\": 1\n }\n ],\n \"thresholds\": [],\n \"timeFrom\": null,\n \"timeShift\": null,\n \"title\": \"Rolling F1 and F2 Scores\",\n \"tooltip\": {\n \"shared\": true,\n \"sort\": 0,\n \"value_type\": \"individual\"\n },\n \"type\": \"graph\",\n \"xaxis\": {\n \"buckets\": null,\n \"mode\": \"time\",\n \"name\": null,\n \"show\": true,\n \"values\": []\n },\n \"yaxes\": [\n {\n \"format\": \"short\",\n \"label\": null,\n \"logBase\": 1,\n \"max\": null,\n \"min\": null,\n \"show\": true\n },\n {\n \"format\": \"short\",\n \"label\": null,\n \"logBase\": 1,\n \"max\": null,\n \"min\": null,\n \"show\": true\n }\n ],\n \"yaxis\": {\n \"align\": false,\n \"alignLevel\": null\n }\n },\n {\n \"aliasColors\": {},\n \"bars\": false,\n \"dashLength\": 10,\n \"dashes\": false,\n \"datasource\": \"prometheus\",\n \"description\": \"Rolling window = 100 observations.\",\n \"fill\": 1,\n \"gridPos\": {\n \"h\": 9,\n \"w\": 12,\n \"x\": 12,\n \"y\": 41\n },\n \"id\": 9,\n \"interval\": \"1s\",\n \"legend\": {\n \"alignAsTable\": true,\n \"avg\": true,\n \"current\": true,\n \"max\": false,\n \"min\": false,\n \"rightSide\": false,\n \"show\": true,\n \"total\": false,\n \"values\": true\n },\n \"lines\": true,\n \"linewidth\": 1,\n \"links\": [],\n \"nullPointMode\": \"null\",\n \"percentage\": false,\n \"pointradius\": 5,\n \"points\": false,\n \"renderer\": \"flot\",\n \"seriesOverrides\": [],\n \"spaceLength\": 10,\n \"stack\": false,\n \"steppedLine\": false,\n \"targets\": [\n {\n \"expr\": \"accuracy_roll\",\n \"format\": \"time_series\",\n \"interval\": \"\",\n \"intervalFactor\": 1,\n \"legendFormat\": \"accuracy\",\n \"refId\": \"A\",\n \"step\": 1\n },\n {\n \"expr\": \"precision_roll\",\n \"format\": \"time_series\",\n \"intervalFactor\": 1,\n \"legendFormat\": \"precision\",\n \"refId\": \"B\",\n \"step\": 1\n },\n {\n \"expr\": \"recall_roll\",\n \"format\": \"time_series\",\n \"intervalFactor\": 2,\n \"legendFormat\": \"recall\",\n \"refId\": \"C\",\n \"step\": 2\n }\n ],\n \"thresholds\": [],\n \"timeFrom\": null,\n \"timeShift\": null,\n \"title\": \"Rolling Accuracy, Precision and Recall Scores\",\n \"tooltip\": {\n \"shared\": true,\n \"sort\": 0,\n \"value_type\": \"individual\"\n },\n \"type\": \"graph\",\n \"xaxis\": {\n \"buckets\": null,\n \"mode\": \"time\",\n \"name\": null,\n \"show\": true,\n \"values\": []\n },\n \"yaxes\": [\n {\n \"format\": \"short\",\n \"label\": null,\n \"logBase\": 1,\n \"max\": null,\n \"min\": null,\n \"show\": true\n },\n {\n \"format\": \"short\",\n \"label\": null,\n \"logBase\": 1,\n \"max\": null,\n \"min\": null,\n \"show\": true\n }\n ],\n \"yaxis\": {\n \"align\": false,\n \"alignLevel\": null\n }\n },\n {\n \"columns\": [],\n \"datasource\": \"prometheus\",\n \"fontSize\": \"100%\",\n \"gridPos\": {\n \"h\": 7,\n \"w\": 24,\n \"x\": 0,\n \"y\": 50\n },\n \"id\": 10,\n \"interval\": \"1s\",\n \"links\": [],\n \"pageSize\": null,\n \"scroll\": true,\n \"showHeader\": true,\n \"sort\": {\n \"col\": 0,\n \"desc\": true\n },\n \"styles\": [\n {\n \"alias\": \"Time\",\n \"dateFormat\": \"YYYY-MM-DD HH:mm:ss\",\n \"pattern\": \"Time\",\n \"type\": \"date\"\n },\n {\n \"alias\": \"\",\n \"colorMode\": null,\n \"colors\": [\n \"rgba(245, 54, 54, 0.9)\",\n \"rgba(237, 129, 40, 0.89)\",\n \"rgba(50, 172, 45, 0.97)\"\n ],\n \"decimals\": 2,\n \"pattern\": \"/.*/\",\n \"thresholds\": [],\n \"type\": \"number\",\n \"unit\": \"short\"\n }\n ],\n \"targets\": [\n {\n \"expr\": \"observation\\n\",\n \"format\": \"time_series\",\n \"intervalFactor\": 2,\n \"legendFormat\": \"Observation\",\n \"metric\": \"\",\n \"refId\": \"A\",\n \"step\": 2\n },\n {\n \"expr\": \"is_outlier\",\n \"format\": \"time_series\",\n \"intervalFactor\": 2,\n \"legendFormat\": \"Outlier Prediction\",\n \"refId\": \"B\",\n \"step\": 2\n },\n {\n \"expr\": \"label\",\n \"format\": \"time_series\",\n \"intervalFactor\": 2,\n \"legendFormat\": \"Outlier Label\",\n \"refId\": \"C\",\n \"step\": 2\n },\n {\n \"expr\": \"mse\",\n \"format\": \"time_series\",\n \"intervalFactor\": 2,\n \"legendFormat\": \"Mean Squared Reconstruction Error\",\n \"refId\": \"D\",\n \"step\": 2\n }\n ],\n \"title\": \"Data\",\n \"transform\": \"timeseries_to_columns\",\n \"type\": \"table\"\n }\n ],\n \"refresh\": \"1s\",\n \"schemaVersion\": 16,\n \"style\": \"dark\",\n \"tags\": [],\n \"templating\": {\n \"list\": []\n },\n \"time\": {\n \"from\": \"now-5m\",\n \"to\": \"now\"\n },\n \"timepicker\": {\n \"refresh_intervals\": [\n \"1s\",\n \"5s\",\n \"10s\",\n \"30s\",\n \"1m\",\n \"5m\",\n \"15m\",\n \"30m\",\n \"1h\",\n \"2h\",\n \"1d\"\n ],\n \"time_options\": [\n \"5m\",\n \"15m\",\n \"1h\",\n \"6h\",\n \"12h\",\n \"24h\",\n \"2d\",\n \"7d\",\n \"30d\"\n ]\n },\n \"timezone\": \"browser\",\n \"title\": \"Outlier Detection\",\n \"uid\": \"bD3l8OLiz\",\n \"version\": 3\n}", + "outlier-detection-md.json": "{\n \"annotations\": {\n \"list\": [\n {\n \"builtIn\": 1,\n \"datasource\": \"-- Grafana --\",\n \"enable\": true,\n \"hide\": true,\n \"iconColor\": \"rgba(0, 211, 255, 1)\",\n \"name\": \"Annotations & Alerts\",\n \"type\": \"dashboard\"\n }\n ]\n },\n \"editable\": true,\n \"gnetId\": null,\n \"graphTooltip\": 0,\n \"id\": 4,\n \"links\": [],\n \"panels\": [\n {\n \"content\": \"# OUTLIER DETECTOR\\n\\n\\n### Monitor predictions and performance of a Mahalanobis outlier detector for network intrusions.\",\n \"gridPos\": {\n \"h\": 4,\n \"w\": 24,\n \"x\": 0,\n \"y\": 0\n },\n \"id\": 20,\n \"links\": [],\n \"mode\": \"markdown\",\n \"title\": \"\",\n \"type\": \"text\"\n },\n {\n \"dashboardFilter\": \"\",\n \"dashboardTags\": [],\n \"folderId\": null,\n \"gridPos\": {\n \"h\": 5,\n \"w\": 4,\n \"x\": 0,\n \"y\": 4\n },\n \"id\": 4,\n \"limit\": 10,\n \"links\": [],\n \"nameFilter\": \"\",\n \"onlyAlertsOnDashboard\": true,\n \"show\": \"current\",\n \"sortOrder\": 1,\n \"stateFilter\": [],\n \"title\": \"Alerts\",\n \"type\": \"alertlist\"\n },\n {\n \"cacheTimeout\": null,\n \"colorBackground\": false,\n \"colorValue\": false,\n \"colors\": [\n \"rgba(245, 54, 54, 0.9)\",\n \"rgba(237, 129, 40, 0.89)\",\n \"rgba(50, 172, 45, 0.97)\"\n ],\n \"datasource\": \"prometheus\",\n \"format\": \"none\",\n \"gauge\": {\n \"maxValue\": 100,\n \"minValue\": 0,\n \"show\": false,\n \"thresholdLabels\": false,\n \"thresholdMarkers\": true\n },\n \"gridPos\": {\n \"h\": 5,\n \"w\": 4,\n \"x\": 4,\n \"y\": 4\n },\n \"id\": 3,\n \"interval\": \"1s\",\n \"links\": [],\n \"mappingType\": 1,\n \"mappingTypes\": [\n {\n \"name\": \"value to text\",\n \"value\": 1\n },\n {\n \"name\": \"range to text\",\n \"value\": 2\n }\n ],\n \"maxDataPoints\": 100,\n \"nullPointMode\": \"connected\",\n \"nullText\": null,\n \"postfix\": \"\",\n \"postfixFontSize\": \"50%\",\n \"prefix\": \"\",\n \"prefixFontSize\": \"50%\",\n \"rangeMaps\": [\n {\n \"from\": \"null\",\n \"text\": \"N/A\",\n \"to\": \"null\"\n }\n ],\n \"sparkline\": {\n \"fillColor\": \"rgba(31, 118, 189, 0.18)\",\n \"full\": true,\n \"lineColor\": \"rgb(31, 120, 193)\",\n \"show\": true\n },\n \"tableColumn\": \"\",\n \"targets\": [\n {\n \"expr\": \"observation\",\n \"format\": \"time_series\",\n \"hide\": false,\n \"intervalFactor\": 2,\n \"refId\": \"A\",\n \"step\": 4\n }\n ],\n \"thresholds\": \"\",\n \"title\": \"Nb observations\",\n \"type\": \"singlestat\",\n \"valueFontSize\": \"80%\",\n \"valueMaps\": [\n {\n \"op\": \"=\",\n \"text\": \"N/A\",\n \"value\": \"null\"\n }\n ],\n \"valueName\": \"current\"\n },\n {\n \"cacheTimeout\": null,\n \"colorBackground\": false,\n \"colorValue\": false,\n \"colors\": [\n \"rgba(245, 54, 54, 0.9)\",\n \"rgba(237, 129, 40, 0.89)\",\n \"rgba(50, 172, 45, 0.97)\"\n ],\n \"datasource\": \"prometheus\",\n \"format\": \"none\",\n \"gauge\": {\n \"maxValue\": 100,\n \"minValue\": 0,\n \"show\": false,\n \"thresholdLabels\": false,\n \"thresholdMarkers\": true\n },\n \"gridPos\": {\n \"h\": 5,\n \"w\": 4,\n \"x\": 8,\n \"y\": 4\n },\n \"id\": 16,\n \"interval\": \"1s\",\n \"links\": [],\n \"mappingType\": 1,\n \"mappingTypes\": [\n {\n \"name\": \"value to text\",\n \"value\": 1\n },\n {\n \"name\": \"range to text\",\n \"value\": 2\n }\n ],\n \"maxDataPoints\": 100,\n \"nullPointMode\": \"connected\",\n \"nullText\": null,\n \"postfix\": \"\",\n \"postfixFontSize\": \"50%\",\n \"prefix\": \"\",\n \"prefixFontSize\": \"50%\",\n \"rangeMaps\": [\n {\n \"from\": \"null\",\n \"text\": \"N/A\",\n \"to\": \"null\"\n }\n ],\n \"sparkline\": {\n \"fillColor\": \"rgba(189, 148, 31, 0.18)\",\n \"full\": true,\n \"lineColor\": \"rgb(193, 74, 31)\",\n \"show\": true\n },\n \"tableColumn\": \"\",\n \"targets\": [\n {\n \"expr\": \"nb_outliers_tot\",\n \"format\": \"time_series\",\n \"intervalFactor\": 1,\n \"refId\": \"A\",\n \"step\": 2\n }\n ],\n \"thresholds\": \"\",\n \"timeFrom\": null,\n \"title\": \"Nb Predicted Outliers\",\n \"type\": \"singlestat\",\n \"valueFontSize\": \"80%\",\n \"valueMaps\": [\n {\n \"op\": \"=\",\n \"text\": \"N/A\",\n \"value\": \"null\"\n }\n ],\n \"valueName\": \"current\"\n },\n {\n \"cacheTimeout\": null,\n \"colorBackground\": false,\n \"colorValue\": false,\n \"colors\": [\n \"rgba(50, 172, 45, 0.97)\",\n \"rgba(237, 129, 40, 0.89)\",\n \"rgba(245, 54, 54, 0.9)\"\n ],\n \"datasource\": \"prometheus\",\n \"format\": \"percent\",\n \"gauge\": {\n \"maxValue\": 100,\n \"minValue\": 0,\n \"show\": true,\n \"thresholdLabels\": false,\n \"thresholdMarkers\": true\n },\n \"gridPos\": {\n \"h\": 5,\n \"w\": 4,\n \"x\": 12,\n \"y\": 4\n },\n \"id\": 17,\n \"interval\": \"1s\",\n \"links\": [],\n \"mappingType\": 1,\n \"mappingTypes\": [\n {\n \"name\": \"value to text\",\n \"value\": 1\n },\n {\n \"name\": \"range to text\",\n \"value\": 2\n }\n ],\n \"maxDataPoints\": 100,\n \"nullPointMode\": \"connected\",\n \"nullText\": null,\n \"postfix\": \"\",\n \"postfixFontSize\": \"50%\",\n \"prefix\": \"\",\n \"prefixFontSize\": \"50%\",\n \"rangeMaps\": [\n {\n \"from\": \"null\",\n \"text\": \"N/A\",\n \"to\": \"null\"\n }\n ],\n \"sparkline\": {\n \"fillColor\": \"rgba(31, 118, 189, 0.18)\",\n \"full\": false,\n \"lineColor\": \"rgb(31, 120, 193)\",\n \"show\": false\n },\n \"tableColumn\": \"\",\n \"targets\": [\n {\n \"expr\": \"100 * nb_outliers_tot / observation\",\n \"format\": \"time_series\",\n \"intervalFactor\": 1,\n \"refId\": \"A\",\n \"step\": 2\n }\n ],\n \"thresholds\": \"10,20\",\n \"title\": \"% Predicted Outliers\",\n \"type\": \"singlestat\",\n \"valueFontSize\": \"80%\",\n \"valueMaps\": [\n {\n \"op\": \"=\",\n \"text\": \"N/A\",\n \"value\": \"null\"\n }\n ],\n \"valueName\": \"current\"\n },\n {\n \"cacheTimeout\": null,\n \"colorBackground\": false,\n \"colorValue\": false,\n \"colors\": [\n \"rgba(245, 54, 54, 0.9)\",\n \"rgba(237, 129, 40, 0.89)\",\n \"rgba(50, 172, 45, 0.97)\"\n ],\n \"datasource\": \"prometheus\",\n \"format\": \"none\",\n \"gauge\": {\n \"maxValue\": 100,\n \"minValue\": 0,\n \"show\": false,\n \"thresholdLabels\": false,\n \"thresholdMarkers\": true\n },\n \"gridPos\": {\n \"h\": 5,\n \"w\": 4,\n \"x\": 16,\n \"y\": 4\n },\n \"id\": 18,\n \"interval\": \"1s\",\n \"links\": [],\n \"mappingType\": 1,\n \"mappingTypes\": [\n {\n \"name\": \"value to text\",\n \"value\": 1\n },\n {\n \"name\": \"range to text\",\n \"value\": 2\n }\n ],\n \"maxDataPoints\": 100,\n \"nullPointMode\": \"connected\",\n \"nullText\": null,\n \"postfix\": \"\",\n \"postfixFontSize\": \"50%\",\n \"prefix\": \"\",\n \"prefixFontSize\": \"50%\",\n \"rangeMaps\": [\n {\n \"from\": \"null\",\n \"text\": \"N/A\",\n \"to\": \"null\"\n }\n ],\n \"sparkline\": {\n \"fillColor\": \"rgba(189, 128, 31, 0.18)\",\n \"full\": true,\n \"lineColor\": \"rgb(193, 94, 31)\",\n \"show\": true\n },\n \"tableColumn\": \"\",\n \"targets\": [\n {\n \"expr\": \"nb_labels_tot\",\n \"format\": \"time_series\",\n \"intervalFactor\": 2,\n \"refId\": \"A\",\n \"step\": 4\n }\n ],\n \"thresholds\": \"\",\n \"title\": \"Nb Labeled Outliers\",\n \"type\": \"singlestat\",\n \"valueFontSize\": \"80%\",\n \"valueMaps\": [\n {\n \"op\": \"=\",\n \"text\": \"N/A\",\n \"value\": \"null\"\n }\n ],\n \"valueName\": \"current\"\n },\n {\n \"cacheTimeout\": null,\n \"colorBackground\": false,\n \"colorValue\": false,\n \"colors\": [\n \"rgba(50, 172, 45, 0.97)\",\n \"rgba(237, 129, 40, 0.89)\",\n \"rgba(245, 54, 54, 0.9)\"\n ],\n \"datasource\": \"prometheus\",\n \"format\": \"percent\",\n \"gauge\": {\n \"maxValue\": 100,\n \"minValue\": 0,\n \"show\": true,\n \"thresholdLabels\": false,\n \"thresholdMarkers\": true\n },\n \"gridPos\": {\n \"h\": 5,\n \"w\": 4,\n \"x\": 20,\n \"y\": 4\n },\n \"id\": 19,\n \"interval\": \"1s\",\n \"links\": [],\n \"mappingType\": 1,\n \"mappingTypes\": [\n {\n \"name\": \"value to text\",\n \"value\": 1\n },\n {\n \"name\": \"range to text\",\n \"value\": 2\n }\n ],\n \"maxDataPoints\": 100,\n \"nullPointMode\": \"connected\",\n \"nullText\": null,\n \"postfix\": \"\",\n \"postfixFontSize\": \"50%\",\n \"prefix\": \"\",\n \"prefixFontSize\": \"50%\",\n \"rangeMaps\": [\n {\n \"from\": \"null\",\n \"text\": \"N/A\",\n \"to\": \"null\"\n }\n ],\n \"sparkline\": {\n \"fillColor\": \"rgba(31, 118, 189, 0.18)\",\n \"full\": false,\n \"lineColor\": \"rgb(31, 120, 193)\",\n \"show\": false\n },\n \"tableColumn\": \"\",\n \"targets\": [\n {\n \"expr\": \"100 * nb_labels_tot / observation\",\n \"format\": \"time_series\",\n \"intervalFactor\": 2,\n \"refId\": \"A\",\n \"step\": 4\n }\n ],\n \"thresholds\": \"10,20\",\n \"title\": \"% Labeled Outliers\",\n \"type\": \"singlestat\",\n \"valueFontSize\": \"80%\",\n \"valueMaps\": [\n {\n \"op\": \"=\",\n \"text\": \"N/A\",\n \"value\": \"null\"\n }\n ],\n \"valueName\": \"current\"\n },\n {\n \"alert\": {\n \"conditions\": [\n {\n \"evaluator\": {\n \"params\": [\n 30\n ],\n \"type\": \"gt\"\n },\n \"operator\": {\n \"type\": \"and\"\n },\n \"query\": {\n \"params\": [\n \"A\",\n \"2m\",\n \"now\"\n ]\n },\n \"reducer\": {\n \"params\": [],\n \"type\": \"sum\"\n },\n \"type\": \"query\"\n }\n ],\n \"executionErrorState\": \"alerting\",\n \"frequency\": \"3s\",\n \"handler\": 1,\n \"message\": \"At least 10 outliers detected over past 5min!\",\n \"name\": \"Outlier Prediction\",\n \"noDataState\": \"no_data\",\n \"notifications\": []\n },\n \"aliasColors\": {},\n \"bars\": false,\n \"dashLength\": 10,\n \"dashes\": false,\n \"datasource\": \"prometheus\",\n \"description\": \"0=normal\\n1=outlier\",\n \"fill\": 1,\n \"gridPos\": {\n \"h\": 8,\n \"w\": 12,\n \"x\": 0,\n \"y\": 9\n },\n \"height\": \"\",\n \"id\": 1,\n \"interval\": \"1s\",\n \"legend\": {\n \"avg\": false,\n \"current\": false,\n \"max\": false,\n \"min\": false,\n \"show\": false,\n \"total\": false,\n \"values\": false\n },\n \"lines\": false,\n \"linewidth\": 1,\n \"links\": [],\n \"nullPointMode\": \"null\",\n \"percentage\": false,\n \"pointradius\": 2,\n \"points\": true,\n \"renderer\": \"flot\",\n \"seriesOverrides\": [],\n \"spaceLength\": 10,\n \"stack\": false,\n \"steppedLine\": false,\n \"targets\": [\n {\n \"expr\": \"is_outlier\",\n \"format\": \"time_series\",\n \"instant\": false,\n \"interval\": \"1s\",\n \"intervalFactor\": 1,\n \"legendFormat\": \"\",\n \"refId\": \"A\",\n \"step\": 1\n }\n ],\n \"thresholds\": [\n {\n \"colorMode\": \"critical\",\n \"fill\": true,\n \"line\": true,\n \"op\": \"gt\",\n \"value\": 30\n }\n ],\n \"timeFrom\": null,\n \"timeShift\": null,\n \"title\": \"Outlier Prediction\",\n \"tooltip\": {\n \"shared\": true,\n \"sort\": 0,\n \"value_type\": \"individual\"\n },\n \"transparent\": false,\n \"type\": \"graph\",\n \"xaxis\": {\n \"buckets\": null,\n \"mode\": \"time\",\n \"name\": null,\n \"show\": true,\n \"values\": []\n },\n \"yaxes\": [\n {\n \"format\": \"short\",\n \"label\": \"Outlier\",\n \"logBase\": 1,\n \"max\": \"1.1\",\n \"min\": null,\n \"show\": true\n },\n {\n \"format\": \"short\",\n \"label\": \"\",\n \"logBase\": 1,\n \"max\": null,\n \"min\": null,\n \"show\": false\n }\n ],\n \"yaxis\": {\n \"align\": false,\n \"alignLevel\": null\n }\n },\n {\n \"aliasColors\": {},\n \"bars\": true,\n \"dashLength\": 10,\n \"dashes\": false,\n \"datasource\": \"prometheus\",\n \"description\": \"Mahalanobis distance as outlier score. Values above the threshold line are outliers.\",\n \"fill\": 1,\n \"gridPos\": {\n \"h\": 8,\n \"w\": 12,\n \"x\": 12,\n \"y\": 9\n },\n \"id\": 2,\n \"interval\": \"1s\",\n \"legend\": {\n \"alignAsTable\": false,\n \"avg\": false,\n \"current\": false,\n \"max\": false,\n \"min\": false,\n \"show\": false,\n \"total\": false,\n \"values\": false\n },\n \"lines\": false,\n \"linewidth\": 1,\n \"links\": [],\n \"nullPointMode\": \"null\",\n \"percentage\": false,\n \"pointradius\": 2,\n \"points\": false,\n \"renderer\": \"flot\",\n \"seriesOverrides\": [],\n \"spaceLength\": 10,\n \"stack\": false,\n \"steppedLine\": false,\n \"targets\": [\n {\n \"expr\": \"outlier_score\",\n \"format\": \"time_series\",\n \"interval\": \"1s\",\n \"intervalFactor\": 1,\n \"refId\": \"A\",\n \"step\": 1\n }\n ],\n \"thresholds\": [\n {\n \"colorMode\": \"critical\",\n \"fill\": true,\n \"line\": true,\n \"op\": \"gt\",\n \"value\": 25,\n \"yaxis\": \"left\"\n }\n ],\n \"timeFrom\": null,\n \"timeShift\": null,\n \"title\": \"Outlier Score\",\n \"tooltip\": {\n \"shared\": true,\n \"sort\": 0,\n \"value_type\": \"individual\"\n },\n \"transparent\": false,\n \"type\": \"graph\",\n \"xaxis\": {\n \"buckets\": null,\n \"mode\": \"time\",\n \"name\": null,\n \"show\": true,\n \"values\": []\n },\n \"yaxes\": [\n {\n \"format\": \"short\",\n \"label\": \"Mahalanobis Distance\",\n \"logBase\": 1,\n \"max\": \"50\",\n \"min\": null,\n \"show\": true\n },\n {\n \"format\": \"short\",\n \"label\": \"\",\n \"logBase\": 1,\n \"max\": null,\n \"min\": null,\n \"show\": true\n }\n ],\n \"yaxis\": {\n \"align\": false,\n \"alignLevel\": null\n }\n },\n {\n \"alert\": {\n \"conditions\": [\n {\n \"evaluator\": {\n \"params\": [\n 30\n ],\n \"type\": \"gt\"\n },\n \"operator\": {\n \"type\": \"and\"\n },\n \"query\": {\n \"params\": [\n \"A\",\n \"2m\",\n \"now\"\n ]\n },\n \"reducer\": {\n \"params\": [],\n \"type\": \"sum\"\n },\n \"type\": \"query\"\n }\n ],\n \"executionErrorState\": \"alerting\",\n \"frequency\": \"3s\",\n \"handler\": 1,\n \"name\": \"Outlier Labels\",\n \"noDataState\": \"no_data\",\n \"notifications\": []\n },\n \"aliasColors\": {},\n \"bars\": false,\n \"dashLength\": 10,\n \"dashes\": false,\n \"datasource\": \"prometheus\",\n \"description\": \"0=normal\\n1=outlier\",\n \"fill\": 1,\n \"gridPos\": {\n \"h\": 9,\n \"w\": 12,\n \"x\": 0,\n \"y\": 17\n },\n \"id\": 5,\n \"interval\": \"1s\",\n \"legend\": {\n \"avg\": false,\n \"current\": false,\n \"max\": false,\n \"min\": false,\n \"show\": false,\n \"total\": false,\n \"values\": false\n },\n \"lines\": false,\n \"linewidth\": 1,\n \"links\": [],\n \"nullPointMode\": \"null\",\n \"percentage\": false,\n \"pointradius\": 2,\n \"points\": true,\n \"renderer\": \"flot\",\n \"seriesOverrides\": [],\n \"spaceLength\": 10,\n \"stack\": false,\n \"steppedLine\": false,\n \"targets\": [\n {\n \"expr\": \"label\",\n \"format\": \"time_series\",\n \"interval\": \"1s\",\n \"intervalFactor\": 1,\n \"legendFormat\": \"\",\n \"refId\": \"A\",\n \"step\": 1\n }\n ],\n \"thresholds\": [\n {\n \"colorMode\": \"critical\",\n \"fill\": true,\n \"line\": true,\n \"op\": \"gt\",\n \"value\": 30\n }\n ],\n \"timeFrom\": null,\n \"timeShift\": null,\n \"title\": \"Outlier Labels\",\n \"tooltip\": {\n \"shared\": true,\n \"sort\": 0,\n \"value_type\": \"individual\"\n },\n \"transparent\": false,\n \"type\": \"graph\",\n \"xaxis\": {\n \"buckets\": null,\n \"mode\": \"time\",\n \"name\": null,\n \"show\": true,\n \"values\": []\n },\n \"yaxes\": [\n {\n \"format\": \"short\",\n \"label\": \"Outlier\",\n \"logBase\": 1,\n \"max\": \"1.1\",\n \"min\": null,\n \"show\": true\n },\n {\n \"format\": \"short\",\n \"label\": null,\n \"logBase\": 1,\n \"max\": null,\n \"min\": null,\n \"show\": true\n }\n ],\n \"yaxis\": {\n \"align\": false,\n \"alignLevel\": null\n }\n },\n {\n \"aliasColors\": {},\n \"bars\": false,\n \"dashLength\": 10,\n \"dashes\": false,\n \"datasource\": \"prometheus\",\n \"description\": \"Rolling window = 100 observations.\",\n \"fill\": 1,\n \"gridPos\": {\n \"h\": 9,\n \"w\": 12,\n \"x\": 12,\n \"y\": 17\n },\n \"id\": 6,\n \"interval\": \"1s\",\n \"legend\": {\n \"alignAsTable\": true,\n \"avg\": true,\n \"current\": true,\n \"max\": false,\n \"min\": false,\n \"show\": true,\n \"total\": false,\n \"values\": true\n },\n \"lines\": true,\n \"linewidth\": 1,\n \"links\": [],\n \"nullPointMode\": \"null\",\n \"percentage\": false,\n \"pointradius\": 5,\n \"points\": false,\n \"renderer\": \"flot\",\n \"seriesOverrides\": [],\n \"spaceLength\": 10,\n \"stack\": false,\n \"steppedLine\": false,\n \"targets\": [\n {\n \"expr\": \"nb_outliers_roll\",\n \"format\": \"time_series\",\n \"interval\": \"1s\",\n \"intervalFactor\": 1,\n \"legendFormat\": \"Predicted outliers\",\n \"refId\": \"A\",\n \"step\": 1\n },\n {\n \"expr\": \"nb_labels_roll\",\n \"format\": \"time_series\",\n \"interval\": \"1s\",\n \"intervalFactor\": 1,\n \"legendFormat\": \"Labeled outliers\",\n \"refId\": \"B\",\n \"step\": 1\n }\n ],\n \"thresholds\": [],\n \"timeFrom\": null,\n \"timeShift\": null,\n \"title\": \"Rolling Number of Predicted and Labeled Outliers\",\n \"tooltip\": {\n \"shared\": true,\n \"sort\": 0,\n \"value_type\": \"individual\"\n },\n \"type\": \"graph\",\n \"xaxis\": {\n \"buckets\": null,\n \"mode\": \"time\",\n \"name\": null,\n \"show\": true,\n \"values\": []\n },\n \"yaxes\": [\n {\n \"format\": \"short\",\n \"label\": \"Number of Outliers\",\n \"logBase\": 1,\n \"max\": null,\n \"min\": null,\n \"show\": true\n },\n {\n \"format\": \"short\",\n \"label\": null,\n \"logBase\": 1,\n \"max\": null,\n \"min\": null,\n \"show\": true\n }\n ],\n \"yaxis\": {\n \"align\": false,\n \"alignLevel\": null\n }\n },\n {\n \"content\": \"# PERFORMANCE METRICS\",\n \"gridPos\": {\n \"h\": 3,\n \"w\": 24,\n \"x\": 0,\n \"y\": 26\n },\n \"id\": 8,\n \"links\": [],\n \"mode\": \"markdown\",\n \"title\": \"\",\n \"type\": \"text\"\n },\n {\n \"content\": \"### CONFUSION MATRIX\",\n \"gridPos\": {\n \"h\": 3,\n \"w\": 12,\n \"x\": 0,\n \"y\": 29\n },\n \"id\": 15,\n \"links\": [],\n \"mode\": \"markdown\",\n \"title\": \"\",\n \"transparent\": false,\n \"type\": \"text\"\n },\n {\n \"content\": \"### OTHER METRICS\",\n \"gridPos\": {\n \"h\": 3,\n \"w\": 12,\n \"x\": 12,\n \"y\": 29\n },\n \"id\": 25,\n \"links\": [],\n \"mode\": \"markdown\",\n \"title\": \"\",\n \"type\": \"text\"\n },\n {\n \"cacheTimeout\": null,\n \"colorBackground\": false,\n \"colorPrefix\": false,\n \"colorValue\": false,\n \"colors\": [\n \"rgba(50, 172, 45, 0.97)\",\n \"rgba(237, 129, 40, 0.89)\",\n \"rgba(245, 54, 54, 0.9)\"\n ],\n \"datasource\": \"prometheus\",\n \"format\": \"none\",\n \"gauge\": {\n \"maxValue\": 100,\n \"minValue\": 0,\n \"show\": false,\n \"thresholdLabels\": false,\n \"thresholdMarkers\": true\n },\n \"gridPos\": {\n \"h\": 4,\n \"w\": 6,\n \"x\": 0,\n \"y\": 32\n },\n \"id\": 11,\n \"interval\": \"1s\",\n \"links\": [],\n \"mappingType\": 1,\n \"mappingTypes\": [\n {\n \"name\": \"value to text\",\n \"value\": 1\n },\n {\n \"name\": \"range to text\",\n \"value\": 2\n }\n ],\n \"maxDataPoints\": 100,\n \"nullPointMode\": \"connected\",\n \"nullText\": null,\n \"postfix\": \"\",\n \"postfixFontSize\": \"50%\",\n \"prefix\": \"\",\n \"prefixFontSize\": \"50%\",\n \"rangeMaps\": [\n {\n \"from\": \"null\",\n \"text\": \"N/A\",\n \"to\": \"null\"\n }\n ],\n \"sparkline\": {\n \"fillColor\": \"rgba(31, 118, 189, 0.18)\",\n \"full\": true,\n \"lineColor\": \"rgb(31, 120, 193)\",\n \"show\": true\n },\n \"tableColumn\": \"\",\n \"targets\": [\n {\n \"expr\": \"true_positive\",\n \"format\": \"time_series\",\n \"interval\": \"1s\",\n \"intervalFactor\": 1,\n \"refId\": \"A\",\n \"step\": 2\n }\n ],\n \"thresholds\": \"\",\n \"title\": \"True Positive\",\n \"type\": \"singlestat\",\n \"valueFontSize\": \"80%\",\n \"valueMaps\": [\n {\n \"op\": \"=\",\n \"text\": \"N/A\",\n \"value\": \"null\"\n }\n ],\n \"valueName\": \"current\"\n },\n {\n \"cacheTimeout\": null,\n \"colorBackground\": false,\n \"colorValue\": false,\n \"colors\": [\n \"rgba(50, 172, 45, 0.97)\",\n \"rgba(237, 129, 40, 0.89)\",\n \"rgba(245, 54, 54, 0.9)\"\n ],\n \"datasource\": \"prometheus\",\n \"format\": \"none\",\n \"gauge\": {\n \"maxValue\": 100,\n \"minValue\": 0,\n \"show\": false,\n \"thresholdLabels\": false,\n \"thresholdMarkers\": true\n },\n \"gridPos\": {\n \"h\": 4,\n \"w\": 6,\n \"x\": 6,\n \"y\": 32\n },\n \"id\": 12,\n \"interval\": \"1s\",\n \"links\": [],\n \"mappingType\": 1,\n \"mappingTypes\": [\n {\n \"name\": \"value to text\",\n \"value\": 1\n },\n {\n \"name\": \"range to text\",\n \"value\": 2\n }\n ],\n \"maxDataPoints\": 100,\n \"nullPointMode\": \"connected\",\n \"nullText\": null,\n \"postfix\": \"\",\n \"postfixFontSize\": \"50%\",\n \"prefix\": \"\",\n \"prefixFontSize\": \"50%\",\n \"rangeMaps\": [\n {\n \"from\": \"null\",\n \"text\": \"N/A\",\n \"to\": \"null\"\n }\n ],\n \"sparkline\": {\n \"fillColor\": \"rgba(31, 118, 189, 0.18)\",\n \"full\": true,\n \"lineColor\": \"rgb(31, 120, 193)\",\n \"show\": true\n },\n \"tableColumn\": \"\",\n \"targets\": [\n {\n \"expr\": \"false_positive\\n\",\n \"format\": \"time_series\",\n \"interval\": \"1s\",\n \"intervalFactor\": 1,\n \"refId\": \"A\",\n \"step\": 2\n }\n ],\n \"thresholds\": \"20,50\",\n \"title\": \"False Positive\",\n \"type\": \"singlestat\",\n \"valueFontSize\": \"80%\",\n \"valueMaps\": [\n {\n \"op\": \"=\",\n \"text\": \"N/A\",\n \"value\": \"null\"\n }\n ],\n \"valueName\": \"current\"\n },\n {\n \"cacheTimeout\": null,\n \"colorBackground\": false,\n \"colorValue\": false,\n \"colors\": [\n \"rgba(245, 54, 54, 0.9)\",\n \"rgba(237, 129, 40, 0.89)\",\n \"rgba(50, 172, 45, 0.97)\"\n ],\n \"datasource\": \"prometheus\",\n \"decimals\": 2,\n \"format\": \"none\",\n \"gauge\": {\n \"maxValue\": 1,\n \"minValue\": 0,\n \"show\": true,\n \"thresholdLabels\": false,\n \"thresholdMarkers\": true\n },\n \"gridPos\": {\n \"h\": 4,\n \"w\": 6,\n \"x\": 12,\n \"y\": 32\n },\n \"id\": 21,\n \"interval\": \"1s\",\n \"links\": [],\n \"mappingType\": 1,\n \"mappingTypes\": [\n {\n \"name\": \"value to text\",\n \"value\": 1\n },\n {\n \"name\": \"range to text\",\n \"value\": 2\n }\n ],\n \"maxDataPoints\": 100,\n \"nullPointMode\": \"connected\",\n \"nullText\": null,\n \"postfix\": \"\",\n \"postfixFontSize\": \"50%\",\n \"prefix\": \"\",\n \"prefixFontSize\": \"50%\",\n \"rangeMaps\": [\n {\n \"from\": \"null\",\n \"text\": \"N/A\",\n \"to\": \"null\"\n }\n ],\n \"sparkline\": {\n \"fillColor\": \"rgba(31, 118, 189, 0.18)\",\n \"full\": false,\n \"lineColor\": \"rgb(31, 120, 193)\",\n \"show\": false\n },\n \"tableColumn\": \"\",\n \"targets\": [\n {\n \"expr\": \"f1_tot\",\n \"format\": \"time_series\",\n \"interval\": \"1s\",\n \"intervalFactor\": 1,\n \"refId\": \"A\",\n \"step\": 2\n }\n ],\n \"thresholds\": \"0.75,0.9\",\n \"title\": \"F1 score\",\n \"type\": \"singlestat\",\n \"valueFontSize\": \"80%\",\n \"valueMaps\": [\n {\n \"op\": \"=\",\n \"text\": \"N/A\",\n \"value\": \"null\"\n }\n ],\n \"valueName\": \"current\"\n },\n {\n \"cacheTimeout\": null,\n \"colorBackground\": false,\n \"colorValue\": false,\n \"colors\": [\n \"rgba(245, 54, 54, 0.9)\",\n \"rgba(237, 129, 40, 0.89)\",\n \"rgba(50, 172, 45, 0.97)\"\n ],\n \"datasource\": \"prometheus\",\n \"decimals\": 2,\n \"format\": \"none\",\n \"gauge\": {\n \"maxValue\": 1,\n \"minValue\": 0,\n \"show\": true,\n \"thresholdLabels\": false,\n \"thresholdMarkers\": true\n },\n \"gridPos\": {\n \"h\": 4,\n \"w\": 6,\n \"x\": 18,\n \"y\": 32\n },\n \"id\": 22,\n \"interval\": \"1s\",\n \"links\": [],\n \"mappingType\": 1,\n \"mappingTypes\": [\n {\n \"name\": \"value to text\",\n \"value\": 1\n },\n {\n \"name\": \"range to text\",\n \"value\": 2\n }\n ],\n \"maxDataPoints\": 100,\n \"nullPointMode\": \"connected\",\n \"nullText\": null,\n \"postfix\": \"\",\n \"postfixFontSize\": \"50%\",\n \"prefix\": \"\",\n \"prefixFontSize\": \"50%\",\n \"rangeMaps\": [\n {\n \"from\": \"null\",\n \"text\": \"N/A\",\n \"to\": \"null\"\n }\n ],\n \"sparkline\": {\n \"fillColor\": \"rgba(31, 118, 189, 0.18)\",\n \"full\": false,\n \"lineColor\": \"rgb(31, 120, 193)\",\n \"show\": false\n },\n \"tableColumn\": \"\",\n \"targets\": [\n {\n \"expr\": \"accuracy_tot\",\n \"format\": \"time_series\",\n \"interval\": \"1s\",\n \"intervalFactor\": 1,\n \"refId\": \"A\",\n \"step\": 2\n }\n ],\n \"thresholds\": \"0.9,0.95\",\n \"title\": \"Accuracy\",\n \"type\": \"singlestat\",\n \"valueFontSize\": \"80%\",\n \"valueMaps\": [\n {\n \"op\": \"=\",\n \"text\": \"N/A\",\n \"value\": \"null\"\n }\n ],\n \"valueName\": \"current\"\n },\n {\n \"cacheTimeout\": null,\n \"colorBackground\": false,\n \"colorValue\": false,\n \"colors\": [\n \"rgba(50, 172, 45, 0.97)\",\n \"rgba(237, 129, 40, 0.89)\",\n \"rgba(245, 54, 54, 0.9)\"\n ],\n \"datasource\": \"prometheus\",\n \"format\": \"none\",\n \"gauge\": {\n \"maxValue\": 500,\n \"minValue\": 0,\n \"show\": false,\n \"thresholdLabels\": false,\n \"thresholdMarkers\": true\n },\n \"gridPos\": {\n \"h\": 5,\n \"w\": 6,\n \"x\": 0,\n \"y\": 36\n },\n \"id\": 13,\n \"interval\": \"1s\",\n \"links\": [],\n \"mappingType\": 1,\n \"mappingTypes\": [\n {\n \"name\": \"value to text\",\n \"value\": 1\n },\n {\n \"name\": \"range to text\",\n \"value\": 2\n }\n ],\n \"maxDataPoints\": 100,\n \"nullPointMode\": \"connected\",\n \"nullText\": null,\n \"postfix\": \"\",\n \"postfixFontSize\": \"50%\",\n \"prefix\": \"\",\n \"prefixFontSize\": \"50%\",\n \"rangeMaps\": [\n {\n \"from\": \"null\",\n \"text\": \"N/A\",\n \"to\": \"null\"\n }\n ],\n \"sparkline\": {\n \"fillColor\": \"rgba(31, 118, 189, 0.18)\",\n \"full\": true,\n \"lineColor\": \"rgb(31, 120, 193)\",\n \"show\": true\n },\n \"tableColumn\": \"\",\n \"targets\": [\n {\n \"expr\": \"false_negative\",\n \"format\": \"time_series\",\n \"interval\": \"1s\",\n \"intervalFactor\": 1,\n \"refId\": \"A\",\n \"step\": 2\n }\n ],\n \"thresholds\": \"50,100\",\n \"title\": \"False Negative\",\n \"type\": \"singlestat\",\n \"valueFontSize\": \"80%\",\n \"valueMaps\": [\n {\n \"op\": \"=\",\n \"text\": \"N/A\",\n \"value\": \"null\"\n }\n ],\n \"valueName\": \"current\"\n },\n {\n \"cacheTimeout\": null,\n \"colorBackground\": false,\n \"colorValue\": false,\n \"colors\": [\n \"rgba(245, 54, 54, 0.9)\",\n \"rgba(237, 129, 40, 0.89)\",\n \"rgba(50, 172, 45, 0.97)\"\n ],\n \"datasource\": \"prometheus\",\n \"format\": \"none\",\n \"gauge\": {\n \"maxValue\": 100,\n \"minValue\": 0,\n \"show\": false,\n \"thresholdLabels\": false,\n \"thresholdMarkers\": true\n },\n \"gridPos\": {\n \"h\": 5,\n \"w\": 6,\n \"x\": 6,\n \"y\": 36\n },\n \"id\": 14,\n \"interval\": \"1s\",\n \"links\": [],\n \"mappingType\": 1,\n \"mappingTypes\": [\n {\n \"name\": \"value to text\",\n \"value\": 1\n },\n {\n \"name\": \"range to text\",\n \"value\": 2\n }\n ],\n \"maxDataPoints\": 100,\n \"nullPointMode\": \"connected\",\n \"nullText\": null,\n \"postfix\": \"\",\n \"postfixFontSize\": \"50%\",\n \"prefix\": \"\",\n \"prefixFontSize\": \"50%\",\n \"rangeMaps\": [\n {\n \"from\": \"null\",\n \"text\": \"N/A\",\n \"to\": \"null\"\n }\n ],\n \"sparkline\": {\n \"fillColor\": \"rgba(31, 118, 189, 0.18)\",\n \"full\": true,\n \"lineColor\": \"rgb(31, 120, 193)\",\n \"show\": true\n },\n \"tableColumn\": \"\",\n \"targets\": [\n {\n \"expr\": \"true_negative\",\n \"format\": \"time_series\",\n \"interval\": \"1s\",\n \"intervalFactor\": 1,\n \"refId\": \"A\",\n \"step\": 2\n }\n ],\n \"thresholds\": \"\",\n \"title\": \"True Negative\",\n \"type\": \"singlestat\",\n \"valueFontSize\": \"80%\",\n \"valueMaps\": [\n {\n \"op\": \"=\",\n \"text\": \"N/A\",\n \"value\": \"null\"\n }\n ],\n \"valueName\": \"current\"\n },\n {\n \"cacheTimeout\": null,\n \"colorBackground\": false,\n \"colorValue\": false,\n \"colors\": [\n \"rgba(245, 54, 54, 0.9)\",\n \"rgba(237, 129, 40, 0.89)\",\n \"rgba(50, 172, 45, 0.97)\"\n ],\n \"datasource\": \"prometheus\",\n \"decimals\": 2,\n \"format\": \"none\",\n \"gauge\": {\n \"maxValue\": 1,\n \"minValue\": 0,\n \"show\": true,\n \"thresholdLabels\": false,\n \"thresholdMarkers\": true\n },\n \"gridPos\": {\n \"h\": 5,\n \"w\": 6,\n \"x\": 12,\n \"y\": 36\n },\n \"id\": 23,\n \"interval\": \"1s\",\n \"links\": [],\n \"mappingType\": 1,\n \"mappingTypes\": [\n {\n \"name\": \"value to text\",\n \"value\": 1\n },\n {\n \"name\": \"range to text\",\n \"value\": 2\n }\n ],\n \"maxDataPoints\": 100,\n \"nullPointMode\": \"connected\",\n \"nullText\": null,\n \"postfix\": \"\",\n \"postfixFontSize\": \"50%\",\n \"prefix\": \"\",\n \"prefixFontSize\": \"50%\",\n \"rangeMaps\": [\n {\n \"from\": \"null\",\n \"text\": \"N/A\",\n \"to\": \"null\"\n }\n ],\n \"sparkline\": {\n \"fillColor\": \"rgba(31, 118, 189, 0.18)\",\n \"full\": false,\n \"lineColor\": \"rgb(31, 120, 193)\",\n \"show\": false\n },\n \"tableColumn\": \"\",\n \"targets\": [\n {\n \"expr\": \"precision_tot\",\n \"format\": \"time_series\",\n \"intervalFactor\": 2,\n \"refId\": \"A\",\n \"step\": 4\n }\n ],\n \"thresholds\": \"0.75,0.9\",\n \"title\": \"Precision\",\n \"type\": \"singlestat\",\n \"valueFontSize\": \"80%\",\n \"valueMaps\": [\n {\n \"op\": \"=\",\n \"text\": \"N/A\",\n \"value\": \"null\"\n }\n ],\n \"valueName\": \"current\"\n },\n {\n \"cacheTimeout\": null,\n \"colorBackground\": false,\n \"colorValue\": false,\n \"colors\": [\n \"rgba(245, 54, 54, 0.9)\",\n \"rgba(237, 129, 40, 0.89)\",\n \"rgba(50, 172, 45, 0.97)\"\n ],\n \"datasource\": \"prometheus\",\n \"decimals\": 2,\n \"format\": \"none\",\n \"gauge\": {\n \"maxValue\": 1,\n \"minValue\": 0,\n \"show\": true,\n \"thresholdLabels\": false,\n \"thresholdMarkers\": true\n },\n \"gridPos\": {\n \"h\": 5,\n \"w\": 6,\n \"x\": 18,\n \"y\": 36\n },\n \"id\": 24,\n \"interval\": \"1s\",\n \"links\": [],\n \"mappingType\": 1,\n \"mappingTypes\": [\n {\n \"name\": \"value to text\",\n \"value\": 1\n },\n {\n \"name\": \"range to text\",\n \"value\": 2\n }\n ],\n \"maxDataPoints\": 100,\n \"nullPointMode\": \"connected\",\n \"nullText\": null,\n \"postfix\": \"\",\n \"postfixFontSize\": \"50%\",\n \"prefix\": \"\",\n \"prefixFontSize\": \"50%\",\n \"rangeMaps\": [\n {\n \"from\": \"null\",\n \"text\": \"N/A\",\n \"to\": \"null\"\n }\n ],\n \"sparkline\": {\n \"fillColor\": \"rgba(31, 118, 189, 0.18)\",\n \"full\": false,\n \"lineColor\": \"rgb(31, 120, 193)\",\n \"show\": false\n },\n \"tableColumn\": \"\",\n \"targets\": [\n {\n \"expr\": \"recall_tot\",\n \"format\": \"time_series\",\n \"intervalFactor\": 2,\n \"refId\": \"A\",\n \"step\": 4\n }\n ],\n \"thresholds\": \"0.75,0.9\",\n \"title\": \"Recall\",\n \"type\": \"singlestat\",\n \"valueFontSize\": \"80%\",\n \"valueMaps\": [\n {\n \"op\": \"=\",\n \"text\": \"N/A\",\n \"value\": \"null\"\n }\n ],\n \"valueName\": \"current\"\n },\n {\n \"aliasColors\": {},\n \"bars\": false,\n \"dashLength\": 10,\n \"dashes\": false,\n \"datasource\": \"prometheus\",\n \"description\": \"Rolling window = 100 observations.\",\n \"fill\": 1,\n \"gridPos\": {\n \"h\": 9,\n \"w\": 12,\n \"x\": 0,\n \"y\": 41\n },\n \"id\": 7,\n \"interval\": \"1s\",\n \"legend\": {\n \"alignAsTable\": true,\n \"avg\": true,\n \"current\": true,\n \"max\": false,\n \"min\": false,\n \"rightSide\": false,\n \"show\": true,\n \"total\": false,\n \"values\": true\n },\n \"lines\": true,\n \"linewidth\": 1,\n \"links\": [],\n \"nullPointMode\": \"null\",\n \"percentage\": false,\n \"pointradius\": 5,\n \"points\": false,\n \"renderer\": \"flot\",\n \"seriesOverrides\": [],\n \"spaceLength\": 10,\n \"stack\": false,\n \"steppedLine\": false,\n \"targets\": [\n {\n \"expr\": \"f1_roll\",\n \"format\": \"time_series\",\n \"interval\": \"1s\",\n \"intervalFactor\": 1,\n \"legendFormat\": \"F1 score\",\n \"refId\": \"A\",\n \"step\": 1\n },\n {\n \"expr\": \"f2_roll\",\n \"format\": \"time_series\",\n \"interval\": \"1s\",\n \"intervalFactor\": 1,\n \"legendFormat\": \"F2 score\",\n \"refId\": \"B\",\n \"step\": 1\n }\n ],\n \"thresholds\": [],\n \"timeFrom\": null,\n \"timeShift\": null,\n \"title\": \"Rolling F1 and F2 Scores\",\n \"tooltip\": {\n \"shared\": true,\n \"sort\": 0,\n \"value_type\": \"individual\"\n },\n \"type\": \"graph\",\n \"xaxis\": {\n \"buckets\": null,\n \"mode\": \"time\",\n \"name\": null,\n \"show\": true,\n \"values\": []\n },\n \"yaxes\": [\n {\n \"format\": \"short\",\n \"label\": null,\n \"logBase\": 1,\n \"max\": null,\n \"min\": null,\n \"show\": true\n },\n {\n \"format\": \"short\",\n \"label\": null,\n \"logBase\": 1,\n \"max\": null,\n \"min\": null,\n \"show\": true\n }\n ],\n \"yaxis\": {\n \"align\": false,\n \"alignLevel\": null\n }\n },\n {\n \"aliasColors\": {},\n \"bars\": false,\n \"dashLength\": 10,\n \"dashes\": false,\n \"datasource\": \"prometheus\",\n \"description\": \"Rolling window = 100 observations.\",\n \"fill\": 1,\n \"gridPos\": {\n \"h\": 9,\n \"w\": 12,\n \"x\": 12,\n \"y\": 41\n },\n \"id\": 9,\n \"interval\": \"1s\",\n \"legend\": {\n \"alignAsTable\": true,\n \"avg\": true,\n \"current\": true,\n \"max\": false,\n \"min\": false,\n \"rightSide\": false,\n \"show\": true,\n \"total\": false,\n \"values\": true\n },\n \"lines\": true,\n \"linewidth\": 1,\n \"links\": [],\n \"nullPointMode\": \"null\",\n \"percentage\": false,\n \"pointradius\": 5,\n \"points\": false,\n \"renderer\": \"flot\",\n \"seriesOverrides\": [],\n \"spaceLength\": 10,\n \"stack\": false,\n \"steppedLine\": false,\n \"targets\": [\n {\n \"expr\": \"accuracy_roll\",\n \"format\": \"time_series\",\n \"interval\": \"\",\n \"intervalFactor\": 1,\n \"legendFormat\": \"accuracy\",\n \"refId\": \"A\",\n \"step\": 1\n },\n {\n \"expr\": \"precision_roll\",\n \"format\": \"time_series\",\n \"intervalFactor\": 1,\n \"legendFormat\": \"precision\",\n \"refId\": \"B\",\n \"step\": 1\n },\n {\n \"expr\": \"recall_roll\",\n \"format\": \"time_series\",\n \"intervalFactor\": 2,\n \"legendFormat\": \"recall\",\n \"refId\": \"C\",\n \"step\": 2\n }\n ],\n \"thresholds\": [],\n \"timeFrom\": null,\n \"timeShift\": null,\n \"title\": \"Rolling Accuracy, Precision and Recall Scores\",\n \"tooltip\": {\n \"shared\": true,\n \"sort\": 0,\n \"value_type\": \"individual\"\n },\n \"type\": \"graph\",\n \"xaxis\": {\n \"buckets\": null,\n \"mode\": \"time\",\n \"name\": null,\n \"show\": true,\n \"values\": []\n },\n \"yaxes\": [\n {\n \"format\": \"short\",\n \"label\": null,\n \"logBase\": 1,\n \"max\": null,\n \"min\": null,\n \"show\": true\n },\n {\n \"format\": \"short\",\n \"label\": null,\n \"logBase\": 1,\n \"max\": null,\n \"min\": null,\n \"show\": true\n }\n ],\n \"yaxis\": {\n \"align\": false,\n \"alignLevel\": null\n }\n }\n ],\n \"refresh\": \"1s\",\n \"schemaVersion\": 16,\n \"style\": \"dark\",\n \"tags\": [],\n \"templating\": {\n \"list\": []\n },\n \"time\": {\n \"from\": \"now-5m\",\n \"to\": \"now\"\n },\n \"timepicker\": {\n \"refresh_intervals\": [\n \"1s\",\n \"5s\",\n \"10s\",\n \"30s\",\n \"1m\",\n \"5m\",\n \"15m\",\n \"30m\",\n \"1h\",\n \"2h\",\n \"1d\"\n ],\n \"time_options\": [\n \"5m\",\n \"15m\",\n \"1h\",\n \"6h\",\n \"12h\",\n \"24h\",\n \"2d\",\n \"7d\",\n \"30d\"\n ]\n },\n \"timezone\": \"browser\",\n \"title\": \"Outlier Detection\",\n \"uid\": \"bD3l8OLiz\",\n \"version\": 3\n}", + "outlier-detection-s2s-lstm.json": "{\n \"annotations\": {\n \"list\": [\n {\n \"builtIn\": 1,\n \"datasource\": \"-- Grafana --\",\n \"enable\": true,\n \"hide\": true,\n \"iconColor\": \"rgba(0, 211, 255, 1)\",\n \"name\": \"Annotations & Alerts\",\n \"type\": \"dashboard\"\n }\n ]\n },\n \"editable\": true,\n \"gnetId\": null,\n \"graphTooltip\": 0,\n \"id\": 4,\n \"links\": [],\n \"panels\": [\n {\n \"content\": \"# OUTLIER DETECTOR\\n\\n\\n### Monitor predictions and performance of a Sequence-to-Sequence LSTM model as outlier detector for ECGs.\",\n \"gridPos\": {\n \"h\": 4,\n \"w\": 24,\n \"x\": 0,\n \"y\": 0\n },\n \"id\": 20,\n \"links\": [],\n \"mode\": \"markdown\",\n \"title\": \"\",\n \"type\": \"text\"\n },\n {\n \"dashboardFilter\": \"\",\n \"dashboardTags\": [],\n \"folderId\": null,\n \"gridPos\": {\n \"h\": 5,\n \"w\": 4,\n \"x\": 0,\n \"y\": 4\n },\n \"id\": 4,\n \"limit\": 10,\n \"links\": [],\n \"nameFilter\": \"\",\n \"onlyAlertsOnDashboard\": true,\n \"show\": \"current\",\n \"sortOrder\": 1,\n \"stateFilter\": [],\n \"title\": \"Alerts\",\n \"type\": \"alertlist\"\n },\n {\n \"cacheTimeout\": null,\n \"colorBackground\": false,\n \"colorValue\": false,\n \"colors\": [\n \"rgba(245, 54, 54, 0.9)\",\n \"rgba(237, 129, 40, 0.89)\",\n \"rgba(50, 172, 45, 0.97)\"\n ],\n \"datasource\": \"prometheus\",\n \"format\": \"none\",\n \"gauge\": {\n \"maxValue\": 100,\n \"minValue\": 0,\n \"show\": false,\n \"thresholdLabels\": false,\n \"thresholdMarkers\": true\n },\n \"gridPos\": {\n \"h\": 5,\n \"w\": 4,\n \"x\": 4,\n \"y\": 4\n },\n \"id\": 3,\n \"interval\": \"1s\",\n \"links\": [],\n \"mappingType\": 1,\n \"mappingTypes\": [\n {\n \"name\": \"value to text\",\n \"value\": 1\n },\n {\n \"name\": \"range to text\",\n \"value\": 2\n }\n ],\n \"maxDataPoints\": 100,\n \"nullPointMode\": \"connected\",\n \"nullText\": null,\n \"postfix\": \"\",\n \"postfixFontSize\": \"50%\",\n \"prefix\": \"\",\n \"prefixFontSize\": \"50%\",\n \"rangeMaps\": [\n {\n \"from\": \"null\",\n \"text\": \"N/A\",\n \"to\": \"null\"\n }\n ],\n \"sparkline\": {\n \"fillColor\": \"rgba(31, 118, 189, 0.18)\",\n \"full\": true,\n \"lineColor\": \"rgb(31, 120, 193)\",\n \"show\": true\n },\n \"tableColumn\": \"\",\n \"targets\": [\n {\n \"expr\": \"observation\",\n \"format\": \"time_series\",\n \"hide\": false,\n \"interval\": \"1s\",\n \"intervalFactor\": 1,\n \"refId\": \"A\",\n \"step\": 4\n }\n ],\n \"thresholds\": \"\",\n \"title\": \"Nb observations\",\n \"type\": \"singlestat\",\n \"valueFontSize\": \"80%\",\n \"valueMaps\": [\n {\n \"op\": \"=\",\n \"text\": \"N/A\",\n \"value\": \"null\"\n }\n ],\n \"valueName\": \"current\"\n },\n {\n \"cacheTimeout\": null,\n \"colorBackground\": false,\n \"colorValue\": false,\n \"colors\": [\n \"rgba(245, 54, 54, 0.9)\",\n \"rgba(237, 129, 40, 0.89)\",\n \"rgba(50, 172, 45, 0.97)\"\n ],\n \"datasource\": \"prometheus\",\n \"format\": \"none\",\n \"gauge\": {\n \"maxValue\": 100,\n \"minValue\": 0,\n \"show\": false,\n \"thresholdLabels\": false,\n \"thresholdMarkers\": true\n },\n \"gridPos\": {\n \"h\": 5,\n \"w\": 4,\n \"x\": 8,\n \"y\": 4\n },\n \"id\": 16,\n \"interval\": \"1s\",\n \"links\": [],\n \"mappingType\": 1,\n \"mappingTypes\": [\n {\n \"name\": \"value to text\",\n \"value\": 1\n },\n {\n \"name\": \"range to text\",\n \"value\": 2\n }\n ],\n \"maxDataPoints\": 100,\n \"nullPointMode\": \"connected\",\n \"nullText\": null,\n \"postfix\": \"\",\n \"postfixFontSize\": \"50%\",\n \"prefix\": \"\",\n \"prefixFontSize\": \"50%\",\n \"rangeMaps\": [\n {\n \"from\": \"null\",\n \"text\": \"N/A\",\n \"to\": \"null\"\n }\n ],\n \"sparkline\": {\n \"fillColor\": \"rgba(189, 148, 31, 0.18)\",\n \"full\": true,\n \"lineColor\": \"rgb(193, 74, 31)\",\n \"show\": true\n },\n \"tableColumn\": \"\",\n \"targets\": [\n {\n \"expr\": \"nb_outliers_tot\",\n \"format\": \"time_series\",\n \"interval\": \"1s\",\n \"intervalFactor\": 1,\n \"refId\": \"A\",\n \"step\": 2\n }\n ],\n \"thresholds\": \"\",\n \"timeFrom\": null,\n \"title\": \"Nb Predicted Outliers\",\n \"type\": \"singlestat\",\n \"valueFontSize\": \"80%\",\n \"valueMaps\": [\n {\n \"op\": \"=\",\n \"text\": \"N/A\",\n \"value\": \"null\"\n }\n ],\n \"valueName\": \"current\"\n },\n {\n \"cacheTimeout\": null,\n \"colorBackground\": false,\n \"colorValue\": false,\n \"colors\": [\n \"rgba(50, 172, 45, 0.97)\",\n \"rgba(237, 129, 40, 0.89)\",\n \"rgba(245, 54, 54, 0.9)\"\n ],\n \"datasource\": \"prometheus\",\n \"format\": \"percent\",\n \"gauge\": {\n \"maxValue\": 100,\n \"minValue\": 0,\n \"show\": true,\n \"thresholdLabels\": false,\n \"thresholdMarkers\": true\n },\n \"gridPos\": {\n \"h\": 5,\n \"w\": 4,\n \"x\": 12,\n \"y\": 4\n },\n \"id\": 17,\n \"interval\": \"1s\",\n \"links\": [],\n \"mappingType\": 1,\n \"mappingTypes\": [\n {\n \"name\": \"value to text\",\n \"value\": 1\n },\n {\n \"name\": \"range to text\",\n \"value\": 2\n }\n ],\n \"maxDataPoints\": 100,\n \"nullPointMode\": \"connected\",\n \"nullText\": null,\n \"postfix\": \"\",\n \"postfixFontSize\": \"50%\",\n \"prefix\": \"\",\n \"prefixFontSize\": \"50%\",\n \"rangeMaps\": [\n {\n \"from\": \"null\",\n \"text\": \"N/A\",\n \"to\": \"null\"\n }\n ],\n \"sparkline\": {\n \"fillColor\": \"rgba(31, 118, 189, 0.18)\",\n \"full\": false,\n \"lineColor\": \"rgb(31, 120, 193)\",\n \"show\": false\n },\n \"tableColumn\": \"\",\n \"targets\": [\n {\n \"expr\": \"100 * nb_outliers_tot / observation\",\n \"format\": \"time_series\",\n \"interval\": \"1s\",\n \"intervalFactor\": 1,\n \"refId\": \"A\",\n \"step\": 2\n }\n ],\n \"thresholds\": \"10,20\",\n \"title\": \"% Predicted Outliers\",\n \"type\": \"singlestat\",\n \"valueFontSize\": \"80%\",\n \"valueMaps\": [\n {\n \"op\": \"=\",\n \"text\": \"N/A\",\n \"value\": \"null\"\n }\n ],\n \"valueName\": \"current\"\n },\n {\n \"cacheTimeout\": null,\n \"colorBackground\": false,\n \"colorValue\": false,\n \"colors\": [\n \"rgba(245, 54, 54, 0.9)\",\n \"rgba(237, 129, 40, 0.89)\",\n \"rgba(50, 172, 45, 0.97)\"\n ],\n \"datasource\": \"prometheus\",\n \"format\": \"none\",\n \"gauge\": {\n \"maxValue\": 100,\n \"minValue\": 0,\n \"show\": false,\n \"thresholdLabels\": false,\n \"thresholdMarkers\": true\n },\n \"gridPos\": {\n \"h\": 5,\n \"w\": 4,\n \"x\": 16,\n \"y\": 4\n },\n \"id\": 18,\n \"interval\": \"1s\",\n \"links\": [],\n \"mappingType\": 1,\n \"mappingTypes\": [\n {\n \"name\": \"value to text\",\n \"value\": 1\n },\n {\n \"name\": \"range to text\",\n \"value\": 2\n }\n ],\n \"maxDataPoints\": 100,\n \"nullPointMode\": \"connected\",\n \"nullText\": null,\n \"postfix\": \"\",\n \"postfixFontSize\": \"50%\",\n \"prefix\": \"\",\n \"prefixFontSize\": \"50%\",\n \"rangeMaps\": [\n {\n \"from\": \"null\",\n \"text\": \"N/A\",\n \"to\": \"null\"\n }\n ],\n \"sparkline\": {\n \"fillColor\": \"rgba(189, 128, 31, 0.18)\",\n \"full\": true,\n \"lineColor\": \"rgb(193, 94, 31)\",\n \"show\": true\n },\n \"tableColumn\": \"\",\n \"targets\": [\n {\n \"expr\": \"nb_labels_tot\",\n \"format\": \"time_series\",\n \"interval\": \"1s\",\n \"intervalFactor\": 1,\n \"refId\": \"A\",\n \"step\": 4\n }\n ],\n \"thresholds\": \"\",\n \"title\": \"Nb Labeled Outliers\",\n \"type\": \"singlestat\",\n \"valueFontSize\": \"80%\",\n \"valueMaps\": [\n {\n \"op\": \"=\",\n \"text\": \"N/A\",\n \"value\": \"null\"\n }\n ],\n \"valueName\": \"current\"\n },\n {\n \"cacheTimeout\": null,\n \"colorBackground\": false,\n \"colorValue\": false,\n \"colors\": [\n \"rgba(50, 172, 45, 0.97)\",\n \"rgba(237, 129, 40, 0.89)\",\n \"rgba(245, 54, 54, 0.9)\"\n ],\n \"datasource\": \"prometheus\",\n \"format\": \"percent\",\n \"gauge\": {\n \"maxValue\": 100,\n \"minValue\": 0,\n \"show\": true,\n \"thresholdLabels\": false,\n \"thresholdMarkers\": true\n },\n \"gridPos\": {\n \"h\": 5,\n \"w\": 4,\n \"x\": 20,\n \"y\": 4\n },\n \"id\": 19,\n \"interval\": \"1s\",\n \"links\": [],\n \"mappingType\": 1,\n \"mappingTypes\": [\n {\n \"name\": \"value to text\",\n \"value\": 1\n },\n {\n \"name\": \"range to text\",\n \"value\": 2\n }\n ],\n \"maxDataPoints\": 100,\n \"nullPointMode\": \"connected\",\n \"nullText\": null,\n \"postfix\": \"\",\n \"postfixFontSize\": \"50%\",\n \"prefix\": \"\",\n \"prefixFontSize\": \"50%\",\n \"rangeMaps\": [\n {\n \"from\": \"null\",\n \"text\": \"N/A\",\n \"to\": \"null\"\n }\n ],\n \"sparkline\": {\n \"fillColor\": \"rgba(31, 118, 189, 0.18)\",\n \"full\": false,\n \"lineColor\": \"rgb(31, 120, 193)\",\n \"show\": false\n },\n \"tableColumn\": \"\",\n \"targets\": [\n {\n \"expr\": \"100 * nb_labels_tot / observation\",\n \"format\": \"time_series\",\n \"interval\": \"1s\",\n \"intervalFactor\": 1,\n \"refId\": \"A\",\n \"step\": 4\n }\n ],\n \"thresholds\": \"10,20\",\n \"title\": \"% Labeled Outliers\",\n \"type\": \"singlestat\",\n \"valueFontSize\": \"80%\",\n \"valueMaps\": [\n {\n \"op\": \"=\",\n \"text\": \"N/A\",\n \"value\": \"null\"\n }\n ],\n \"valueName\": \"current\"\n },\n {\n \"alert\": {\n \"conditions\": [\n {\n \"evaluator\": {\n \"params\": [\n 50\n ],\n \"type\": \"gt\"\n },\n \"operator\": {\n \"type\": \"and\"\n },\n \"query\": {\n \"params\": [\n \"A\",\n \"2m\",\n \"now\"\n ]\n },\n \"reducer\": {\n \"params\": [],\n \"type\": \"sum\"\n },\n \"type\": \"query\"\n }\n ],\n \"executionErrorState\": \"alerting\",\n \"frequency\": \"3s\",\n \"handler\": 1,\n \"message\": \"At least 10 outliers detected over past 5min!\",\n \"name\": \"Outlier Prediction\",\n \"noDataState\": \"no_data\",\n \"notifications\": []\n },\n \"aliasColors\": {},\n \"bars\": false,\n \"dashLength\": 10,\n \"dashes\": false,\n \"datasource\": \"prometheus\",\n \"description\": \"0=normal\\n1=outlier\",\n \"fill\": 1,\n \"gridPos\": {\n \"h\": 8,\n \"w\": 12,\n \"x\": 0,\n \"y\": 9\n },\n \"height\": \"\",\n \"id\": 1,\n \"interval\": \"1s\",\n \"legend\": {\n \"avg\": false,\n \"current\": false,\n \"max\": false,\n \"min\": false,\n \"show\": false,\n \"total\": false,\n \"values\": false\n },\n \"lines\": false,\n \"linewidth\": 1,\n \"links\": [],\n \"nullPointMode\": \"null\",\n \"percentage\": false,\n \"pointradius\": 2,\n \"points\": true,\n \"renderer\": \"flot\",\n \"seriesOverrides\": [],\n \"spaceLength\": 10,\n \"stack\": false,\n \"steppedLine\": false,\n \"targets\": [\n {\n \"expr\": \"is_outlier\",\n \"format\": \"time_series\",\n \"instant\": false,\n \"interval\": \"1s\",\n \"intervalFactor\": 1,\n \"legendFormat\": \"\",\n \"refId\": \"A\",\n \"step\": 1\n }\n ],\n \"thresholds\": [\n {\n \"colorMode\": \"critical\",\n \"fill\": true,\n \"line\": true,\n \"op\": \"gt\",\n \"value\": 50\n }\n ],\n \"timeFrom\": null,\n \"timeShift\": null,\n \"title\": \"Outlier Prediction\",\n \"tooltip\": {\n \"shared\": true,\n \"sort\": 0,\n \"value_type\": \"individual\"\n },\n \"transparent\": false,\n \"type\": \"graph\",\n \"xaxis\": {\n \"buckets\": null,\n \"mode\": \"time\",\n \"name\": null,\n \"show\": true,\n \"values\": []\n },\n \"yaxes\": [\n {\n \"format\": \"short\",\n \"label\": \"Outlier\",\n \"logBase\": 1,\n \"max\": \"1.1\",\n \"min\": null,\n \"show\": true\n },\n {\n \"format\": \"short\",\n \"label\": \"\",\n \"logBase\": 1,\n \"max\": null,\n \"min\": null,\n \"show\": false\n }\n ],\n \"yaxis\": {\n \"align\": false,\n \"alignLevel\": null\n }\n },\n {\n \"aliasColors\": {},\n \"bars\": true,\n \"dashLength\": 10,\n \"dashes\": false,\n \"datasource\": \"prometheus\",\n \"description\": \"Mean squared reconstruction error of input data. Values above the threshold line are outliers.\",\n \"fill\": 1,\n \"gridPos\": {\n \"h\": 8,\n \"w\": 12,\n \"x\": 12,\n \"y\": 9\n },\n \"id\": 2,\n \"interval\": \"1s\",\n \"legend\": {\n \"alignAsTable\": false,\n \"avg\": false,\n \"current\": false,\n \"max\": false,\n \"min\": false,\n \"show\": false,\n \"total\": false,\n \"values\": false\n },\n \"lines\": false,\n \"linewidth\": 1,\n \"links\": [],\n \"nullPointMode\": \"null\",\n \"percentage\": false,\n \"pointradius\": 2,\n \"points\": false,\n \"renderer\": \"flot\",\n \"seriesOverrides\": [],\n \"spaceLength\": 10,\n \"stack\": false,\n \"steppedLine\": false,\n \"targets\": [\n {\n \"expr\": \"mse\",\n \"format\": \"time_series\",\n \"interval\": \"1s\",\n \"intervalFactor\": 1,\n \"refId\": \"A\",\n \"step\": 1\n }\n ],\n \"thresholds\": [\n {\n \"colorMode\": \"critical\",\n \"fill\": true,\n \"line\": true,\n \"op\": \"gt\",\n \"value\": 0.002,\n \"yaxis\": \"left\"\n }\n ],\n \"timeFrom\": null,\n \"timeShift\": null,\n \"title\": \"Mean Squared Reconstruction Error\",\n \"tooltip\": {\n \"shared\": true,\n \"sort\": 0,\n \"value_type\": \"individual\"\n },\n \"transparent\": false,\n \"type\": \"graph\",\n \"xaxis\": {\n \"buckets\": null,\n \"mode\": \"time\",\n \"name\": null,\n \"show\": true,\n \"values\": []\n },\n \"yaxes\": [\n {\n \"format\": \"short\",\n \"label\": \"MSRE\",\n \"logBase\": 1,\n \"max\": \"0.01\",\n \"min\": null,\n \"show\": true\n },\n {\n \"format\": \"short\",\n \"label\": \"\",\n \"logBase\": 1,\n \"max\": null,\n \"min\": null,\n \"show\": true\n }\n ],\n \"yaxis\": {\n \"align\": false,\n \"alignLevel\": null\n }\n },\n {\n \"alert\": {\n \"conditions\": [\n {\n \"evaluator\": {\n \"params\": [\n 50\n ],\n \"type\": \"gt\"\n },\n \"operator\": {\n \"type\": \"and\"\n },\n \"query\": {\n \"params\": [\n \"A\",\n \"2m\",\n \"now\"\n ]\n },\n \"reducer\": {\n \"params\": [],\n \"type\": \"sum\"\n },\n \"type\": \"query\"\n }\n ],\n \"executionErrorState\": \"alerting\",\n \"frequency\": \"3s\",\n \"handler\": 1,\n \"name\": \"Outlier Labels\",\n \"noDataState\": \"no_data\",\n \"notifications\": []\n },\n \"aliasColors\": {},\n \"bars\": false,\n \"dashLength\": 10,\n \"dashes\": false,\n \"datasource\": \"prometheus\",\n \"description\": \"0=normal\\n1=outlier\",\n \"fill\": 1,\n \"gridPos\": {\n \"h\": 9,\n \"w\": 12,\n \"x\": 0,\n \"y\": 17\n },\n \"id\": 5,\n \"interval\": \"1s\",\n \"legend\": {\n \"avg\": false,\n \"current\": false,\n \"max\": false,\n \"min\": false,\n \"show\": false,\n \"total\": false,\n \"values\": false\n },\n \"lines\": false,\n \"linewidth\": 1,\n \"links\": [],\n \"nullPointMode\": \"null\",\n \"percentage\": false,\n \"pointradius\": 2,\n \"points\": true,\n \"renderer\": \"flot\",\n \"seriesOverrides\": [],\n \"spaceLength\": 10,\n \"stack\": false,\n \"steppedLine\": false,\n \"targets\": [\n {\n \"expr\": \"label\",\n \"format\": \"time_series\",\n \"interval\": \"1s\",\n \"intervalFactor\": 1,\n \"legendFormat\": \"\",\n \"refId\": \"A\",\n \"step\": 1\n }\n ],\n \"thresholds\": [\n {\n \"colorMode\": \"critical\",\n \"fill\": true,\n \"line\": true,\n \"op\": \"gt\",\n \"value\": 50\n }\n ],\n \"timeFrom\": null,\n \"timeShift\": null,\n \"title\": \"Outlier Labels\",\n \"tooltip\": {\n \"shared\": true,\n \"sort\": 0,\n \"value_type\": \"individual\"\n },\n \"transparent\": false,\n \"type\": \"graph\",\n \"xaxis\": {\n \"buckets\": null,\n \"mode\": \"time\",\n \"name\": null,\n \"show\": true,\n \"values\": []\n },\n \"yaxes\": [\n {\n \"format\": \"short\",\n \"label\": \"Outlier\",\n \"logBase\": 1,\n \"max\": \"1.1\",\n \"min\": null,\n \"show\": true\n },\n {\n \"format\": \"short\",\n \"label\": null,\n \"logBase\": 1,\n \"max\": null,\n \"min\": null,\n \"show\": true\n }\n ],\n \"yaxis\": {\n \"align\": false,\n \"alignLevel\": null\n }\n },\n {\n \"aliasColors\": {},\n \"bars\": false,\n \"dashLength\": 10,\n \"dashes\": false,\n \"datasource\": \"prometheus\",\n \"description\": \"Rolling window = 100 observations.\",\n \"fill\": 1,\n \"gridPos\": {\n \"h\": 9,\n \"w\": 12,\n \"x\": 12,\n \"y\": 17\n },\n \"id\": 6,\n \"interval\": \"1s\",\n \"legend\": {\n \"alignAsTable\": true,\n \"avg\": true,\n \"current\": true,\n \"max\": false,\n \"min\": false,\n \"show\": true,\n \"total\": false,\n \"values\": true\n },\n \"lines\": true,\n \"linewidth\": 1,\n \"links\": [],\n \"nullPointMode\": \"null\",\n \"percentage\": false,\n \"pointradius\": 5,\n \"points\": false,\n \"renderer\": \"flot\",\n \"seriesOverrides\": [],\n \"spaceLength\": 10,\n \"stack\": false,\n \"steppedLine\": false,\n \"targets\": [\n {\n \"expr\": \"nb_outliers_roll\",\n \"format\": \"time_series\",\n \"interval\": \"1s\",\n \"intervalFactor\": 1,\n \"legendFormat\": \"Predicted outliers\",\n \"refId\": \"A\",\n \"step\": 1\n },\n {\n \"expr\": \"nb_labels_roll\",\n \"format\": \"time_series\",\n \"interval\": \"1s\",\n \"intervalFactor\": 1,\n \"legendFormat\": \"Labeled outliers\",\n \"refId\": \"B\",\n \"step\": 1\n }\n ],\n \"thresholds\": [],\n \"timeFrom\": null,\n \"timeShift\": null,\n \"title\": \"Rolling Number of Predicted and Labeled Outliers\",\n \"tooltip\": {\n \"shared\": true,\n \"sort\": 0,\n \"value_type\": \"individual\"\n },\n \"type\": \"graph\",\n \"xaxis\": {\n \"buckets\": null,\n \"mode\": \"time\",\n \"name\": null,\n \"show\": true,\n \"values\": []\n },\n \"yaxes\": [\n {\n \"format\": \"short\",\n \"label\": \"Number of Outliers\",\n \"logBase\": 1,\n \"max\": null,\n \"min\": null,\n \"show\": true\n },\n {\n \"format\": \"short\",\n \"label\": null,\n \"logBase\": 1,\n \"max\": null,\n \"min\": null,\n \"show\": true\n }\n ],\n \"yaxis\": {\n \"align\": false,\n \"alignLevel\": null\n }\n },\n {\n \"content\": \"# PERFORMANCE METRICS\",\n \"gridPos\": {\n \"h\": 3,\n \"w\": 24,\n \"x\": 0,\n \"y\": 26\n },\n \"id\": 8,\n \"links\": [],\n \"mode\": \"markdown\",\n \"title\": \"\",\n \"type\": \"text\"\n },\n {\n \"content\": \"### CONFUSION MATRIX\",\n \"gridPos\": {\n \"h\": 3,\n \"w\": 12,\n \"x\": 0,\n \"y\": 29\n },\n \"id\": 15,\n \"links\": [],\n \"mode\": \"markdown\",\n \"title\": \"\",\n \"transparent\": false,\n \"type\": \"text\"\n },\n {\n \"content\": \"### OTHER METRICS\",\n \"gridPos\": {\n \"h\": 3,\n \"w\": 12,\n \"x\": 12,\n \"y\": 29\n },\n \"id\": 25,\n \"links\": [],\n \"mode\": \"markdown\",\n \"title\": \"\",\n \"type\": \"text\"\n },\n {\n \"cacheTimeout\": null,\n \"colorBackground\": false,\n \"colorPrefix\": false,\n \"colorValue\": false,\n \"colors\": [\n \"rgba(50, 172, 45, 0.97)\",\n \"rgba(237, 129, 40, 0.89)\",\n \"rgba(245, 54, 54, 0.9)\"\n ],\n \"datasource\": \"prometheus\",\n \"format\": \"none\",\n \"gauge\": {\n \"maxValue\": 100,\n \"minValue\": 0,\n \"show\": false,\n \"thresholdLabels\": false,\n \"thresholdMarkers\": true\n },\n \"gridPos\": {\n \"h\": 4,\n \"w\": 6,\n \"x\": 0,\n \"y\": 32\n },\n \"id\": 11,\n \"interval\": \"1s\",\n \"links\": [],\n \"mappingType\": 1,\n \"mappingTypes\": [\n {\n \"name\": \"value to text\",\n \"value\": 1\n },\n {\n \"name\": \"range to text\",\n \"value\": 2\n }\n ],\n \"maxDataPoints\": 100,\n \"nullPointMode\": \"connected\",\n \"nullText\": null,\n \"postfix\": \"\",\n \"postfixFontSize\": \"50%\",\n \"prefix\": \"\",\n \"prefixFontSize\": \"50%\",\n \"rangeMaps\": [\n {\n \"from\": \"null\",\n \"text\": \"N/A\",\n \"to\": \"null\"\n }\n ],\n \"sparkline\": {\n \"fillColor\": \"rgba(31, 118, 189, 0.18)\",\n \"full\": true,\n \"lineColor\": \"rgb(31, 120, 193)\",\n \"show\": true\n },\n \"tableColumn\": \"\",\n \"targets\": [\n {\n \"expr\": \"true_positive\",\n \"format\": \"time_series\",\n \"interval\": \"1s\",\n \"intervalFactor\": 1,\n \"refId\": \"A\",\n \"step\": 2\n }\n ],\n \"thresholds\": \"\",\n \"title\": \"True Positive\",\n \"type\": \"singlestat\",\n \"valueFontSize\": \"80%\",\n \"valueMaps\": [\n {\n \"op\": \"=\",\n \"text\": \"N/A\",\n \"value\": \"null\"\n }\n ],\n \"valueName\": \"current\"\n },\n {\n \"cacheTimeout\": null,\n \"colorBackground\": false,\n \"colorValue\": false,\n \"colors\": [\n \"rgba(50, 172, 45, 0.97)\",\n \"rgba(237, 129, 40, 0.89)\",\n \"rgba(245, 54, 54, 0.9)\"\n ],\n \"datasource\": \"prometheus\",\n \"format\": \"none\",\n \"gauge\": {\n \"maxValue\": 100,\n \"minValue\": 0,\n \"show\": false,\n \"thresholdLabels\": false,\n \"thresholdMarkers\": true\n },\n \"gridPos\": {\n \"h\": 4,\n \"w\": 6,\n \"x\": 6,\n \"y\": 32\n },\n \"id\": 12,\n \"interval\": \"1s\",\n \"links\": [],\n \"mappingType\": 1,\n \"mappingTypes\": [\n {\n \"name\": \"value to text\",\n \"value\": 1\n },\n {\n \"name\": \"range to text\",\n \"value\": 2\n }\n ],\n \"maxDataPoints\": 100,\n \"nullPointMode\": \"connected\",\n \"nullText\": null,\n \"postfix\": \"\",\n \"postfixFontSize\": \"50%\",\n \"prefix\": \"\",\n \"prefixFontSize\": \"50%\",\n \"rangeMaps\": [\n {\n \"from\": \"null\",\n \"text\": \"N/A\",\n \"to\": \"null\"\n }\n ],\n \"sparkline\": {\n \"fillColor\": \"rgba(31, 118, 189, 0.18)\",\n \"full\": true,\n \"lineColor\": \"rgb(31, 120, 193)\",\n \"show\": true\n },\n \"tableColumn\": \"\",\n \"targets\": [\n {\n \"expr\": \"false_positive\\n\",\n \"format\": \"time_series\",\n \"interval\": \"1s\",\n \"intervalFactor\": 1,\n \"refId\": \"A\",\n \"step\": 2\n }\n ],\n \"thresholds\": \"20,50\",\n \"title\": \"False Positive\",\n \"type\": \"singlestat\",\n \"valueFontSize\": \"80%\",\n \"valueMaps\": [\n {\n \"op\": \"=\",\n \"text\": \"N/A\",\n \"value\": \"null\"\n }\n ],\n \"valueName\": \"current\"\n },\n {\n \"cacheTimeout\": null,\n \"colorBackground\": false,\n \"colorValue\": false,\n \"colors\": [\n \"rgba(245, 54, 54, 0.9)\",\n \"rgba(237, 129, 40, 0.89)\",\n \"rgba(50, 172, 45, 0.97)\"\n ],\n \"datasource\": \"prometheus\",\n \"decimals\": 2,\n \"format\": \"none\",\n \"gauge\": {\n \"maxValue\": 1,\n \"minValue\": 0,\n \"show\": true,\n \"thresholdLabels\": false,\n \"thresholdMarkers\": true\n },\n \"gridPos\": {\n \"h\": 4,\n \"w\": 6,\n \"x\": 12,\n \"y\": 32\n },\n \"id\": 21,\n \"interval\": \"1s\",\n \"links\": [],\n \"mappingType\": 1,\n \"mappingTypes\": [\n {\n \"name\": \"value to text\",\n \"value\": 1\n },\n {\n \"name\": \"range to text\",\n \"value\": 2\n }\n ],\n \"maxDataPoints\": 100,\n \"nullPointMode\": \"connected\",\n \"nullText\": null,\n \"postfix\": \"\",\n \"postfixFontSize\": \"50%\",\n \"prefix\": \"\",\n \"prefixFontSize\": \"50%\",\n \"rangeMaps\": [\n {\n \"from\": \"null\",\n \"text\": \"N/A\",\n \"to\": \"null\"\n }\n ],\n \"sparkline\": {\n \"fillColor\": \"rgba(31, 118, 189, 0.18)\",\n \"full\": false,\n \"lineColor\": \"rgb(31, 120, 193)\",\n \"show\": false\n },\n \"tableColumn\": \"\",\n \"targets\": [\n {\n \"expr\": \"f1_tot\",\n \"format\": \"time_series\",\n \"interval\": \"1s\",\n \"intervalFactor\": 1,\n \"refId\": \"A\",\n \"step\": 2\n }\n ],\n \"thresholds\": \"0.75,0.9\",\n \"title\": \"F1 score\",\n \"type\": \"singlestat\",\n \"valueFontSize\": \"80%\",\n \"valueMaps\": [\n {\n \"op\": \"=\",\n \"text\": \"N/A\",\n \"value\": \"null\"\n }\n ],\n \"valueName\": \"current\"\n },\n {\n \"cacheTimeout\": null,\n \"colorBackground\": false,\n \"colorValue\": false,\n \"colors\": [\n \"rgba(245, 54, 54, 0.9)\",\n \"rgba(237, 129, 40, 0.89)\",\n \"rgba(50, 172, 45, 0.97)\"\n ],\n \"datasource\": \"prometheus\",\n \"decimals\": 2,\n \"format\": \"none\",\n \"gauge\": {\n \"maxValue\": 1,\n \"minValue\": 0,\n \"show\": true,\n \"thresholdLabels\": false,\n \"thresholdMarkers\": true\n },\n \"gridPos\": {\n \"h\": 4,\n \"w\": 6,\n \"x\": 18,\n \"y\": 32\n },\n \"id\": 22,\n \"interval\": \"1s\",\n \"links\": [],\n \"mappingType\": 1,\n \"mappingTypes\": [\n {\n \"name\": \"value to text\",\n \"value\": 1\n },\n {\n \"name\": \"range to text\",\n \"value\": 2\n }\n ],\n \"maxDataPoints\": 100,\n \"nullPointMode\": \"connected\",\n \"nullText\": null,\n \"postfix\": \"\",\n \"postfixFontSize\": \"50%\",\n \"prefix\": \"\",\n \"prefixFontSize\": \"50%\",\n \"rangeMaps\": [\n {\n \"from\": \"null\",\n \"text\": \"N/A\",\n \"to\": \"null\"\n }\n ],\n \"sparkline\": {\n \"fillColor\": \"rgba(31, 118, 189, 0.18)\",\n \"full\": false,\n \"lineColor\": \"rgb(31, 120, 193)\",\n \"show\": false\n },\n \"tableColumn\": \"\",\n \"targets\": [\n {\n \"expr\": \"accuracy_tot\",\n \"format\": \"time_series\",\n \"interval\": \"1s\",\n \"intervalFactor\": 1,\n \"refId\": \"A\",\n \"step\": 2\n }\n ],\n \"thresholds\": \"0.9,0.95\",\n \"title\": \"Accuracy\",\n \"type\": \"singlestat\",\n \"valueFontSize\": \"80%\",\n \"valueMaps\": [\n {\n \"op\": \"=\",\n \"text\": \"N/A\",\n \"value\": \"null\"\n }\n ],\n \"valueName\": \"current\"\n },\n {\n \"cacheTimeout\": null,\n \"colorBackground\": false,\n \"colorValue\": false,\n \"colors\": [\n \"rgba(50, 172, 45, 0.97)\",\n \"rgba(237, 129, 40, 0.89)\",\n \"rgba(245, 54, 54, 0.9)\"\n ],\n \"datasource\": \"prometheus\",\n \"format\": \"none\",\n \"gauge\": {\n \"maxValue\": 500,\n \"minValue\": 0,\n \"show\": false,\n \"thresholdLabels\": false,\n \"thresholdMarkers\": true\n },\n \"gridPos\": {\n \"h\": 5,\n \"w\": 6,\n \"x\": 0,\n \"y\": 36\n },\n \"id\": 13,\n \"interval\": \"1s\",\n \"links\": [],\n \"mappingType\": 1,\n \"mappingTypes\": [\n {\n \"name\": \"value to text\",\n \"value\": 1\n },\n {\n \"name\": \"range to text\",\n \"value\": 2\n }\n ],\n \"maxDataPoints\": 100,\n \"nullPointMode\": \"connected\",\n \"nullText\": null,\n \"postfix\": \"\",\n \"postfixFontSize\": \"50%\",\n \"prefix\": \"\",\n \"prefixFontSize\": \"50%\",\n \"rangeMaps\": [\n {\n \"from\": \"null\",\n \"text\": \"N/A\",\n \"to\": \"null\"\n }\n ],\n \"sparkline\": {\n \"fillColor\": \"rgba(31, 118, 189, 0.18)\",\n \"full\": true,\n \"lineColor\": \"rgb(31, 120, 193)\",\n \"show\": true\n },\n \"tableColumn\": \"\",\n \"targets\": [\n {\n \"expr\": \"false_negative\",\n \"format\": \"time_series\",\n \"interval\": \"1s\",\n \"intervalFactor\": 1,\n \"refId\": \"A\",\n \"step\": 2\n }\n ],\n \"thresholds\": \"50,100\",\n \"title\": \"False Negative\",\n \"type\": \"singlestat\",\n \"valueFontSize\": \"80%\",\n \"valueMaps\": [\n {\n \"op\": \"=\",\n \"text\": \"N/A\",\n \"value\": \"null\"\n }\n ],\n \"valueName\": \"current\"\n },\n {\n \"cacheTimeout\": null,\n \"colorBackground\": false,\n \"colorValue\": false,\n \"colors\": [\n \"rgba(245, 54, 54, 0.9)\",\n \"rgba(237, 129, 40, 0.89)\",\n \"rgba(50, 172, 45, 0.97)\"\n ],\n \"datasource\": \"prometheus\",\n \"format\": \"none\",\n \"gauge\": {\n \"maxValue\": 100,\n \"minValue\": 0,\n \"show\": false,\n \"thresholdLabels\": false,\n \"thresholdMarkers\": true\n },\n \"gridPos\": {\n \"h\": 5,\n \"w\": 6,\n \"x\": 6,\n \"y\": 36\n },\n \"id\": 14,\n \"interval\": \"1s\",\n \"links\": [],\n \"mappingType\": 1,\n \"mappingTypes\": [\n {\n \"name\": \"value to text\",\n \"value\": 1\n },\n {\n \"name\": \"range to text\",\n \"value\": 2\n }\n ],\n \"maxDataPoints\": 100,\n \"nullPointMode\": \"connected\",\n \"nullText\": null,\n \"postfix\": \"\",\n \"postfixFontSize\": \"50%\",\n \"prefix\": \"\",\n \"prefixFontSize\": \"50%\",\n \"rangeMaps\": [\n {\n \"from\": \"null\",\n \"text\": \"N/A\",\n \"to\": \"null\"\n }\n ],\n \"sparkline\": {\n \"fillColor\": \"rgba(31, 118, 189, 0.18)\",\n \"full\": true,\n \"lineColor\": \"rgb(31, 120, 193)\",\n \"show\": true\n },\n \"tableColumn\": \"\",\n \"targets\": [\n {\n \"expr\": \"true_negative\",\n \"format\": \"time_series\",\n \"interval\": \"1s\",\n \"intervalFactor\": 1,\n \"refId\": \"A\",\n \"step\": 2\n }\n ],\n \"thresholds\": \"\",\n \"title\": \"True Negative\",\n \"type\": \"singlestat\",\n \"valueFontSize\": \"80%\",\n \"valueMaps\": [\n {\n \"op\": \"=\",\n \"text\": \"N/A\",\n \"value\": \"null\"\n }\n ],\n \"valueName\": \"current\"\n },\n {\n \"cacheTimeout\": null,\n \"colorBackground\": false,\n \"colorValue\": false,\n \"colors\": [\n \"rgba(245, 54, 54, 0.9)\",\n \"rgba(237, 129, 40, 0.89)\",\n \"rgba(50, 172, 45, 0.97)\"\n ],\n \"datasource\": \"prometheus\",\n \"decimals\": 2,\n \"format\": \"none\",\n \"gauge\": {\n \"maxValue\": 1,\n \"minValue\": 0,\n \"show\": true,\n \"thresholdLabels\": false,\n \"thresholdMarkers\": true\n },\n \"gridPos\": {\n \"h\": 5,\n \"w\": 6,\n \"x\": 12,\n \"y\": 36\n },\n \"id\": 23,\n \"interval\": \"1s\",\n \"links\": [],\n \"mappingType\": 1,\n \"mappingTypes\": [\n {\n \"name\": \"value to text\",\n \"value\": 1\n },\n {\n \"name\": \"range to text\",\n \"value\": 2\n }\n ],\n \"maxDataPoints\": 100,\n \"nullPointMode\": \"connected\",\n \"nullText\": null,\n \"postfix\": \"\",\n \"postfixFontSize\": \"50%\",\n \"prefix\": \"\",\n \"prefixFontSize\": \"50%\",\n \"rangeMaps\": [\n {\n \"from\": \"null\",\n \"text\": \"N/A\",\n \"to\": \"null\"\n }\n ],\n \"sparkline\": {\n \"fillColor\": \"rgba(31, 118, 189, 0.18)\",\n \"full\": false,\n \"lineColor\": \"rgb(31, 120, 193)\",\n \"show\": false\n },\n \"tableColumn\": \"\",\n \"targets\": [\n {\n \"expr\": \"precision_tot\",\n \"format\": \"time_series\",\n \"intervalFactor\": 2,\n \"refId\": \"A\",\n \"step\": 4\n }\n ],\n \"thresholds\": \"0.75,0.9\",\n \"title\": \"Precision\",\n \"type\": \"singlestat\",\n \"valueFontSize\": \"80%\",\n \"valueMaps\": [\n {\n \"op\": \"=\",\n \"text\": \"N/A\",\n \"value\": \"null\"\n }\n ],\n \"valueName\": \"current\"\n },\n {\n \"cacheTimeout\": null,\n \"colorBackground\": false,\n \"colorValue\": false,\n \"colors\": [\n \"rgba(245, 54, 54, 0.9)\",\n \"rgba(237, 129, 40, 0.89)\",\n \"rgba(50, 172, 45, 0.97)\"\n ],\n \"datasource\": \"prometheus\",\n \"decimals\": 2,\n \"format\": \"none\",\n \"gauge\": {\n \"maxValue\": 1,\n \"minValue\": 0,\n \"show\": true,\n \"thresholdLabels\": false,\n \"thresholdMarkers\": true\n },\n \"gridPos\": {\n \"h\": 5,\n \"w\": 6,\n \"x\": 18,\n \"y\": 36\n },\n \"id\": 24,\n \"interval\": \"1s\",\n \"links\": [],\n \"mappingType\": 1,\n \"mappingTypes\": [\n {\n \"name\": \"value to text\",\n \"value\": 1\n },\n {\n \"name\": \"range to text\",\n \"value\": 2\n }\n ],\n \"maxDataPoints\": 100,\n \"nullPointMode\": \"connected\",\n \"nullText\": null,\n \"postfix\": \"\",\n \"postfixFontSize\": \"50%\",\n \"prefix\": \"\",\n \"prefixFontSize\": \"50%\",\n \"rangeMaps\": [\n {\n \"from\": \"null\",\n \"text\": \"N/A\",\n \"to\": \"null\"\n }\n ],\n \"sparkline\": {\n \"fillColor\": \"rgba(31, 118, 189, 0.18)\",\n \"full\": false,\n \"lineColor\": \"rgb(31, 120, 193)\",\n \"show\": false\n },\n \"tableColumn\": \"\",\n \"targets\": [\n {\n \"expr\": \"recall_tot\",\n \"format\": \"time_series\",\n \"intervalFactor\": 2,\n \"refId\": \"A\",\n \"step\": 4\n }\n ],\n \"thresholds\": \"0.75,0.9\",\n \"title\": \"Recall\",\n \"type\": \"singlestat\",\n \"valueFontSize\": \"80%\",\n \"valueMaps\": [\n {\n \"op\": \"=\",\n \"text\": \"N/A\",\n \"value\": \"null\"\n }\n ],\n \"valueName\": \"current\"\n },\n {\n \"aliasColors\": {},\n \"bars\": false,\n \"dashLength\": 10,\n \"dashes\": false,\n \"datasource\": \"prometheus\",\n \"description\": \"Rolling window = 100 observations.\",\n \"fill\": 1,\n \"gridPos\": {\n \"h\": 9,\n \"w\": 12,\n \"x\": 0,\n \"y\": 41\n },\n \"id\": 7,\n \"interval\": \"1s\",\n \"legend\": {\n \"alignAsTable\": true,\n \"avg\": true,\n \"current\": true,\n \"max\": false,\n \"min\": false,\n \"rightSide\": false,\n \"show\": true,\n \"total\": false,\n \"values\": true\n },\n \"lines\": true,\n \"linewidth\": 1,\n \"links\": [],\n \"nullPointMode\": \"null\",\n \"percentage\": false,\n \"pointradius\": 5,\n \"points\": false,\n \"renderer\": \"flot\",\n \"seriesOverrides\": [],\n \"spaceLength\": 10,\n \"stack\": false,\n \"steppedLine\": false,\n \"targets\": [\n {\n \"expr\": \"f1_roll\",\n \"format\": \"time_series\",\n \"interval\": \"1s\",\n \"intervalFactor\": 1,\n \"legendFormat\": \"F1 score\",\n \"refId\": \"A\",\n \"step\": 1\n },\n {\n \"expr\": \"f2_roll\",\n \"format\": \"time_series\",\n \"interval\": \"1s\",\n \"intervalFactor\": 1,\n \"legendFormat\": \"F2 score\",\n \"refId\": \"B\",\n \"step\": 1\n }\n ],\n \"thresholds\": [],\n \"timeFrom\": null,\n \"timeShift\": null,\n \"title\": \"Rolling F1 and F2 Scores\",\n \"tooltip\": {\n \"shared\": true,\n \"sort\": 0,\n \"value_type\": \"individual\"\n },\n \"type\": \"graph\",\n \"xaxis\": {\n \"buckets\": null,\n \"mode\": \"time\",\n \"name\": null,\n \"show\": true,\n \"values\": []\n },\n \"yaxes\": [\n {\n \"format\": \"short\",\n \"label\": null,\n \"logBase\": 1,\n \"max\": null,\n \"min\": null,\n \"show\": true\n },\n {\n \"format\": \"short\",\n \"label\": null,\n \"logBase\": 1,\n \"max\": null,\n \"min\": null,\n \"show\": true\n }\n ],\n \"yaxis\": {\n \"align\": false,\n \"alignLevel\": null\n }\n },\n {\n \"aliasColors\": {},\n \"bars\": false,\n \"dashLength\": 10,\n \"dashes\": false,\n \"datasource\": \"prometheus\",\n \"description\": \"Rolling window = 100 observations.\",\n \"fill\": 1,\n \"gridPos\": {\n \"h\": 9,\n \"w\": 12,\n \"x\": 12,\n \"y\": 41\n },\n \"id\": 9,\n \"interval\": \"1s\",\n \"legend\": {\n \"alignAsTable\": true,\n \"avg\": true,\n \"current\": true,\n \"max\": false,\n \"min\": false,\n \"rightSide\": false,\n \"show\": true,\n \"total\": false,\n \"values\": true\n },\n \"lines\": true,\n \"linewidth\": 1,\n \"links\": [],\n \"nullPointMode\": \"null\",\n \"percentage\": false,\n \"pointradius\": 5,\n \"points\": false,\n \"renderer\": \"flot\",\n \"seriesOverrides\": [],\n \"spaceLength\": 10,\n \"stack\": false,\n \"steppedLine\": false,\n \"targets\": [\n {\n \"expr\": \"accuracy_roll\",\n \"format\": \"time_series\",\n \"interval\": \"\",\n \"intervalFactor\": 1,\n \"legendFormat\": \"accuracy\",\n \"refId\": \"A\",\n \"step\": 1\n },\n {\n \"expr\": \"precision_roll\",\n \"format\": \"time_series\",\n \"intervalFactor\": 1,\n \"legendFormat\": \"precision\",\n \"refId\": \"B\",\n \"step\": 1\n },\n {\n \"expr\": \"recall_roll\",\n \"format\": \"time_series\",\n \"intervalFactor\": 2,\n \"legendFormat\": \"recall\",\n \"refId\": \"C\",\n \"step\": 2\n }\n ],\n \"thresholds\": [],\n \"timeFrom\": null,\n \"timeShift\": null,\n \"title\": \"Rolling Accuracy, Precision and Recall Scores\",\n \"tooltip\": {\n \"shared\": true,\n \"sort\": 0,\n \"value_type\": \"individual\"\n },\n \"type\": \"graph\",\n \"xaxis\": {\n \"buckets\": null,\n \"mode\": \"time\",\n \"name\": null,\n \"show\": true,\n \"values\": []\n },\n \"yaxes\": [\n {\n \"format\": \"short\",\n \"label\": null,\n \"logBase\": 1,\n \"max\": null,\n \"min\": null,\n \"show\": true\n },\n {\n \"format\": \"short\",\n \"label\": null,\n \"logBase\": 1,\n \"max\": null,\n \"min\": null,\n \"show\": true\n }\n ],\n \"yaxis\": {\n \"align\": false,\n \"alignLevel\": null\n }\n }\n ],\n \"refresh\": \"1s\",\n \"schemaVersion\": 16,\n \"style\": \"dark\",\n \"tags\": [],\n \"templating\": {\n \"list\": []\n },\n \"time\": {\n \"from\": \"now-5m\",\n \"to\": \"now\"\n },\n \"timepicker\": {\n \"refresh_intervals\": [\n \"1s\",\n \"5s\",\n \"10s\",\n \"30s\",\n \"1m\",\n \"5m\",\n \"15m\",\n \"30m\",\n \"1h\",\n \"2h\",\n \"1d\"\n ],\n \"time_options\": [\n \"5m\",\n \"15m\",\n \"1h\",\n \"6h\",\n \"12h\",\n \"24h\",\n \"2d\",\n \"7d\",\n \"30d\"\n ]\n },\n \"timezone\": \"browser\",\n \"title\": \"Outlier Detection\",\n \"uid\": \"bD3l8OLiz\",\n \"version\": 4\n}", + "outlier-detection-vae.json": "{\n \"annotations\": {\n \"list\": [\n {\n \"builtIn\": 1,\n \"datasource\": \"-- Grafana --\",\n \"enable\": true,\n \"hide\": true,\n \"iconColor\": \"rgba(0, 211, 255, 1)\",\n \"name\": \"Annotations & Alerts\",\n \"type\": \"dashboard\"\n }\n ]\n },\n \"editable\": true,\n \"gnetId\": null,\n \"graphTooltip\": 0,\n \"id\": 4,\n \"links\": [],\n \"panels\": [\n {\n \"content\": \"# OUTLIER DETECTOR\\n\\n\\n### Monitor predictions and performance of a Variational Auto-Encoder (VAE) as outlier detector for network intrusions.\",\n \"gridPos\": {\n \"h\": 4,\n \"w\": 24,\n \"x\": 0,\n \"y\": 0\n },\n \"id\": 20,\n \"links\": [],\n \"mode\": \"markdown\",\n \"title\": \"\",\n \"type\": \"text\"\n },\n {\n \"dashboardFilter\": \"\",\n \"dashboardTags\": [],\n \"folderId\": null,\n \"gridPos\": {\n \"h\": 5,\n \"w\": 4,\n \"x\": 0,\n \"y\": 4\n },\n \"id\": 4,\n \"limit\": 10,\n \"links\": [],\n \"nameFilter\": \"\",\n \"onlyAlertsOnDashboard\": true,\n \"show\": \"current\",\n \"sortOrder\": 1,\n \"stateFilter\": [],\n \"title\": \"Alerts\",\n \"type\": \"alertlist\"\n },\n {\n \"cacheTimeout\": null,\n \"colorBackground\": false,\n \"colorValue\": false,\n \"colors\": [\n \"rgba(245, 54, 54, 0.9)\",\n \"rgba(237, 129, 40, 0.89)\",\n \"rgba(50, 172, 45, 0.97)\"\n ],\n \"datasource\": \"prometheus\",\n \"format\": \"none\",\n \"gauge\": {\n \"maxValue\": 100,\n \"minValue\": 0,\n \"show\": false,\n \"thresholdLabels\": false,\n \"thresholdMarkers\": true\n },\n \"gridPos\": {\n \"h\": 5,\n \"w\": 4,\n \"x\": 4,\n \"y\": 4\n },\n \"id\": 3,\n \"interval\": \"1s\",\n \"links\": [],\n \"mappingType\": 1,\n \"mappingTypes\": [\n {\n \"name\": \"value to text\",\n \"value\": 1\n },\n {\n \"name\": \"range to text\",\n \"value\": 2\n }\n ],\n \"maxDataPoints\": 100,\n \"nullPointMode\": \"connected\",\n \"nullText\": null,\n \"postfix\": \"\",\n \"postfixFontSize\": \"50%\",\n \"prefix\": \"\",\n \"prefixFontSize\": \"50%\",\n \"rangeMaps\": [\n {\n \"from\": \"null\",\n \"text\": \"N/A\",\n \"to\": \"null\"\n }\n ],\n \"sparkline\": {\n \"fillColor\": \"rgba(31, 118, 189, 0.18)\",\n \"full\": true,\n \"lineColor\": \"rgb(31, 120, 193)\",\n \"show\": true\n },\n \"tableColumn\": \"\",\n \"targets\": [\n {\n \"expr\": \"observation\",\n \"format\": \"time_series\",\n \"hide\": false,\n \"intervalFactor\": 2,\n \"refId\": \"A\",\n \"step\": 4\n }\n ],\n \"thresholds\": \"\",\n \"title\": \"Nb observations\",\n \"type\": \"singlestat\",\n \"valueFontSize\": \"80%\",\n \"valueMaps\": [\n {\n \"op\": \"=\",\n \"text\": \"N/A\",\n \"value\": \"null\"\n }\n ],\n \"valueName\": \"current\"\n },\n {\n \"cacheTimeout\": null,\n \"colorBackground\": false,\n \"colorValue\": false,\n \"colors\": [\n \"rgba(245, 54, 54, 0.9)\",\n \"rgba(237, 129, 40, 0.89)\",\n \"rgba(50, 172, 45, 0.97)\"\n ],\n \"datasource\": \"prometheus\",\n \"format\": \"none\",\n \"gauge\": {\n \"maxValue\": 100,\n \"minValue\": 0,\n \"show\": false,\n \"thresholdLabels\": false,\n \"thresholdMarkers\": true\n },\n \"gridPos\": {\n \"h\": 5,\n \"w\": 4,\n \"x\": 8,\n \"y\": 4\n },\n \"id\": 16,\n \"interval\": \"1s\",\n \"links\": [],\n \"mappingType\": 1,\n \"mappingTypes\": [\n {\n \"name\": \"value to text\",\n \"value\": 1\n },\n {\n \"name\": \"range to text\",\n \"value\": 2\n }\n ],\n \"maxDataPoints\": 100,\n \"nullPointMode\": \"connected\",\n \"nullText\": null,\n \"postfix\": \"\",\n \"postfixFontSize\": \"50%\",\n \"prefix\": \"\",\n \"prefixFontSize\": \"50%\",\n \"rangeMaps\": [\n {\n \"from\": \"null\",\n \"text\": \"N/A\",\n \"to\": \"null\"\n }\n ],\n \"sparkline\": {\n \"fillColor\": \"rgba(189, 148, 31, 0.18)\",\n \"full\": true,\n \"lineColor\": \"rgb(193, 74, 31)\",\n \"show\": true\n },\n \"tableColumn\": \"\",\n \"targets\": [\n {\n \"expr\": \"nb_outliers_tot\",\n \"format\": \"time_series\",\n \"intervalFactor\": 1,\n \"refId\": \"A\",\n \"step\": 2\n }\n ],\n \"thresholds\": \"\",\n \"timeFrom\": null,\n \"title\": \"Nb Predicted Outliers\",\n \"type\": \"singlestat\",\n \"valueFontSize\": \"80%\",\n \"valueMaps\": [\n {\n \"op\": \"=\",\n \"text\": \"N/A\",\n \"value\": \"null\"\n }\n ],\n \"valueName\": \"current\"\n },\n {\n \"cacheTimeout\": null,\n \"colorBackground\": false,\n \"colorValue\": false,\n \"colors\": [\n \"rgba(50, 172, 45, 0.97)\",\n \"rgba(237, 129, 40, 0.89)\",\n \"rgba(245, 54, 54, 0.9)\"\n ],\n \"datasource\": \"prometheus\",\n \"format\": \"percent\",\n \"gauge\": {\n \"maxValue\": 100,\n \"minValue\": 0,\n \"show\": true,\n \"thresholdLabels\": false,\n \"thresholdMarkers\": true\n },\n \"gridPos\": {\n \"h\": 5,\n \"w\": 4,\n \"x\": 12,\n \"y\": 4\n },\n \"id\": 17,\n \"interval\": \"1s\",\n \"links\": [],\n \"mappingType\": 1,\n \"mappingTypes\": [\n {\n \"name\": \"value to text\",\n \"value\": 1\n },\n {\n \"name\": \"range to text\",\n \"value\": 2\n }\n ],\n \"maxDataPoints\": 100,\n \"nullPointMode\": \"connected\",\n \"nullText\": null,\n \"postfix\": \"\",\n \"postfixFontSize\": \"50%\",\n \"prefix\": \"\",\n \"prefixFontSize\": \"50%\",\n \"rangeMaps\": [\n {\n \"from\": \"null\",\n \"text\": \"N/A\",\n \"to\": \"null\"\n }\n ],\n \"sparkline\": {\n \"fillColor\": \"rgba(31, 118, 189, 0.18)\",\n \"full\": false,\n \"lineColor\": \"rgb(31, 120, 193)\",\n \"show\": false\n },\n \"tableColumn\": \"\",\n \"targets\": [\n {\n \"expr\": \"100 * nb_outliers_tot / observation\",\n \"format\": \"time_series\",\n \"intervalFactor\": 1,\n \"refId\": \"A\",\n \"step\": 2\n }\n ],\n \"thresholds\": \"10,20\",\n \"title\": \"% Predicted Outliers\",\n \"type\": \"singlestat\",\n \"valueFontSize\": \"80%\",\n \"valueMaps\": [\n {\n \"op\": \"=\",\n \"text\": \"N/A\",\n \"value\": \"null\"\n }\n ],\n \"valueName\": \"current\"\n },\n {\n \"cacheTimeout\": null,\n \"colorBackground\": false,\n \"colorValue\": false,\n \"colors\": [\n \"rgba(245, 54, 54, 0.9)\",\n \"rgba(237, 129, 40, 0.89)\",\n \"rgba(50, 172, 45, 0.97)\"\n ],\n \"datasource\": \"prometheus\",\n \"format\": \"none\",\n \"gauge\": {\n \"maxValue\": 100,\n \"minValue\": 0,\n \"show\": false,\n \"thresholdLabels\": false,\n \"thresholdMarkers\": true\n },\n \"gridPos\": {\n \"h\": 5,\n \"w\": 4,\n \"x\": 16,\n \"y\": 4\n },\n \"id\": 18,\n \"interval\": \"1s\",\n \"links\": [],\n \"mappingType\": 1,\n \"mappingTypes\": [\n {\n \"name\": \"value to text\",\n \"value\": 1\n },\n {\n \"name\": \"range to text\",\n \"value\": 2\n }\n ],\n \"maxDataPoints\": 100,\n \"nullPointMode\": \"connected\",\n \"nullText\": null,\n \"postfix\": \"\",\n \"postfixFontSize\": \"50%\",\n \"prefix\": \"\",\n \"prefixFontSize\": \"50%\",\n \"rangeMaps\": [\n {\n \"from\": \"null\",\n \"text\": \"N/A\",\n \"to\": \"null\"\n }\n ],\n \"sparkline\": {\n \"fillColor\": \"rgba(189, 128, 31, 0.18)\",\n \"full\": true,\n \"lineColor\": \"rgb(193, 94, 31)\",\n \"show\": true\n },\n \"tableColumn\": \"\",\n \"targets\": [\n {\n \"expr\": \"nb_labels_tot\",\n \"format\": \"time_series\",\n \"intervalFactor\": 2,\n \"refId\": \"A\",\n \"step\": 4\n }\n ],\n \"thresholds\": \"\",\n \"title\": \"Nb Labeled Outliers\",\n \"type\": \"singlestat\",\n \"valueFontSize\": \"80%\",\n \"valueMaps\": [\n {\n \"op\": \"=\",\n \"text\": \"N/A\",\n \"value\": \"null\"\n }\n ],\n \"valueName\": \"current\"\n },\n {\n \"cacheTimeout\": null,\n \"colorBackground\": false,\n \"colorValue\": false,\n \"colors\": [\n \"rgba(50, 172, 45, 0.97)\",\n \"rgba(237, 129, 40, 0.89)\",\n \"rgba(245, 54, 54, 0.9)\"\n ],\n \"datasource\": \"prometheus\",\n \"format\": \"percent\",\n \"gauge\": {\n \"maxValue\": 100,\n \"minValue\": 0,\n \"show\": true,\n \"thresholdLabels\": false,\n \"thresholdMarkers\": true\n },\n \"gridPos\": {\n \"h\": 5,\n \"w\": 4,\n \"x\": 20,\n \"y\": 4\n },\n \"id\": 19,\n \"interval\": \"1s\",\n \"links\": [],\n \"mappingType\": 1,\n \"mappingTypes\": [\n {\n \"name\": \"value to text\",\n \"value\": 1\n },\n {\n \"name\": \"range to text\",\n \"value\": 2\n }\n ],\n \"maxDataPoints\": 100,\n \"nullPointMode\": \"connected\",\n \"nullText\": null,\n \"postfix\": \"\",\n \"postfixFontSize\": \"50%\",\n \"prefix\": \"\",\n \"prefixFontSize\": \"50%\",\n \"rangeMaps\": [\n {\n \"from\": \"null\",\n \"text\": \"N/A\",\n \"to\": \"null\"\n }\n ],\n \"sparkline\": {\n \"fillColor\": \"rgba(31, 118, 189, 0.18)\",\n \"full\": false,\n \"lineColor\": \"rgb(31, 120, 193)\",\n \"show\": false\n },\n \"tableColumn\": \"\",\n \"targets\": [\n {\n \"expr\": \"100 * nb_labels_tot / observation\",\n \"format\": \"time_series\",\n \"intervalFactor\": 2,\n \"refId\": \"A\",\n \"step\": 4\n }\n ],\n \"thresholds\": \"10,20\",\n \"title\": \"% Labeled Outliers\",\n \"type\": \"singlestat\",\n \"valueFontSize\": \"80%\",\n \"valueMaps\": [\n {\n \"op\": \"=\",\n \"text\": \"N/A\",\n \"value\": \"null\"\n }\n ],\n \"valueName\": \"current\"\n },\n {\n \"alert\": {\n \"conditions\": [\n {\n \"evaluator\": {\n \"params\": [\n 30\n ],\n \"type\": \"gt\"\n },\n \"operator\": {\n \"type\": \"and\"\n },\n \"query\": {\n \"params\": [\n \"A\",\n \"2m\",\n \"now\"\n ]\n },\n \"reducer\": {\n \"params\": [],\n \"type\": \"sum\"\n },\n \"type\": \"query\"\n }\n ],\n \"executionErrorState\": \"alerting\",\n \"frequency\": \"3s\",\n \"handler\": 1,\n \"message\": \"At least 10 outliers detected over past 5min!\",\n \"name\": \"Outlier Prediction\",\n \"noDataState\": \"no_data\",\n \"notifications\": []\n },\n \"aliasColors\": {},\n \"bars\": false,\n \"dashLength\": 10,\n \"dashes\": false,\n \"datasource\": \"prometheus\",\n \"description\": \"0=normal\\n1=outlier\",\n \"fill\": 1,\n \"gridPos\": {\n \"h\": 8,\n \"w\": 12,\n \"x\": 0,\n \"y\": 9\n },\n \"height\": \"\",\n \"id\": 1,\n \"interval\": \"1s\",\n \"legend\": {\n \"avg\": false,\n \"current\": false,\n \"max\": false,\n \"min\": false,\n \"show\": false,\n \"total\": false,\n \"values\": false\n },\n \"lines\": false,\n \"linewidth\": 1,\n \"links\": [],\n \"nullPointMode\": \"null\",\n \"percentage\": false,\n \"pointradius\": 2,\n \"points\": true,\n \"renderer\": \"flot\",\n \"seriesOverrides\": [],\n \"spaceLength\": 10,\n \"stack\": false,\n \"steppedLine\": false,\n \"targets\": [\n {\n \"expr\": \"is_outlier\",\n \"format\": \"time_series\",\n \"instant\": false,\n \"interval\": \"3s\",\n \"intervalFactor\": 1,\n \"legendFormat\": \"\",\n \"refId\": \"A\",\n \"step\": 1\n }\n ],\n \"thresholds\": [\n {\n \"colorMode\": \"critical\",\n \"fill\": true,\n \"line\": true,\n \"op\": \"gt\",\n \"value\": 30\n }\n ],\n \"timeFrom\": null,\n \"timeShift\": null,\n \"title\": \"Outlier Prediction\",\n \"tooltip\": {\n \"shared\": true,\n \"sort\": 0,\n \"value_type\": \"individual\"\n },\n \"transparent\": false,\n \"type\": \"graph\",\n \"xaxis\": {\n \"buckets\": null,\n \"mode\": \"time\",\n \"name\": null,\n \"show\": true,\n \"values\": []\n },\n \"yaxes\": [\n {\n \"format\": \"short\",\n \"label\": \"Outlier\",\n \"logBase\": 1,\n \"max\": \"1.1\",\n \"min\": null,\n \"show\": true\n },\n {\n \"format\": \"short\",\n \"label\": \"\",\n \"logBase\": 1,\n \"max\": null,\n \"min\": null,\n \"show\": false\n }\n ],\n \"yaxis\": {\n \"align\": false,\n \"alignLevel\": null\n }\n },\n {\n \"aliasColors\": {},\n \"bars\": true,\n \"dashLength\": 10,\n \"dashes\": false,\n \"datasource\": \"prometheus\",\n \"description\": \"Mean squared reconstruction error of input data. Values above the threshold line are outliers.\",\n \"fill\": 1,\n \"gridPos\": {\n \"h\": 8,\n \"w\": 12,\n \"x\": 12,\n \"y\": 9\n },\n \"id\": 2,\n \"interval\": \"1s\",\n \"legend\": {\n \"alignAsTable\": false,\n \"avg\": false,\n \"current\": false,\n \"max\": false,\n \"min\": false,\n \"show\": false,\n \"total\": false,\n \"values\": false\n },\n \"lines\": false,\n \"linewidth\": 1,\n \"links\": [],\n \"nullPointMode\": \"null\",\n \"percentage\": false,\n \"pointradius\": 2,\n \"points\": false,\n \"renderer\": \"flot\",\n \"seriesOverrides\": [],\n \"spaceLength\": 10,\n \"stack\": false,\n \"steppedLine\": false,\n \"targets\": [\n {\n \"expr\": \"mse\",\n \"format\": \"time_series\",\n \"interval\": \"3s\",\n \"intervalFactor\": 1,\n \"refId\": \"A\",\n \"step\": 1\n }\n ],\n \"thresholds\": [\n {\n \"colorMode\": \"critical\",\n \"fill\": true,\n \"line\": true,\n \"op\": \"gt\",\n \"value\": 10\n }\n ],\n \"timeFrom\": null,\n \"timeShift\": null,\n \"title\": \"Mean Squared Reconstruction Error\",\n \"tooltip\": {\n \"shared\": true,\n \"sort\": 0,\n \"value_type\": \"individual\"\n },\n \"transparent\": false,\n \"type\": \"graph\",\n \"xaxis\": {\n \"buckets\": null,\n \"mode\": \"time\",\n \"name\": null,\n \"show\": true,\n \"values\": []\n },\n \"yaxes\": [\n {\n \"format\": \"short\",\n \"label\": \"MSRE\",\n \"logBase\": 1,\n \"max\": \"20\",\n \"min\": null,\n \"show\": true\n },\n {\n \"format\": \"short\",\n \"label\": \"\",\n \"logBase\": 1,\n \"max\": null,\n \"min\": null,\n \"show\": true\n }\n ],\n \"yaxis\": {\n \"align\": false,\n \"alignLevel\": null\n }\n },\n {\n \"alert\": {\n \"conditions\": [\n {\n \"evaluator\": {\n \"params\": [\n 30\n ],\n \"type\": \"gt\"\n },\n \"operator\": {\n \"type\": \"and\"\n },\n \"query\": {\n \"params\": [\n \"A\",\n \"2m\",\n \"now\"\n ]\n },\n \"reducer\": {\n \"params\": [],\n \"type\": \"sum\"\n },\n \"type\": \"query\"\n }\n ],\n \"executionErrorState\": \"alerting\",\n \"frequency\": \"3s\",\n \"handler\": 1,\n \"name\": \"Outlier Labels\",\n \"noDataState\": \"no_data\",\n \"notifications\": []\n },\n \"aliasColors\": {},\n \"bars\": false,\n \"dashLength\": 10,\n \"dashes\": false,\n \"datasource\": \"prometheus\",\n \"description\": \"0=normal\\n1=outlier\",\n \"fill\": 1,\n \"gridPos\": {\n \"h\": 9,\n \"w\": 12,\n \"x\": 0,\n \"y\": 17\n },\n \"id\": 5,\n \"interval\": \"1s\",\n \"legend\": {\n \"avg\": false,\n \"current\": false,\n \"max\": false,\n \"min\": false,\n \"show\": false,\n \"total\": false,\n \"values\": false\n },\n \"lines\": false,\n \"linewidth\": 1,\n \"links\": [],\n \"nullPointMode\": \"null\",\n \"percentage\": false,\n \"pointradius\": 2,\n \"points\": true,\n \"renderer\": \"flot\",\n \"seriesOverrides\": [],\n \"spaceLength\": 10,\n \"stack\": false,\n \"steppedLine\": false,\n \"targets\": [\n {\n \"expr\": \"label\",\n \"format\": \"time_series\",\n \"interval\": \"3s\",\n \"intervalFactor\": 1,\n \"legendFormat\": \"\",\n \"refId\": \"A\",\n \"step\": 1\n }\n ],\n \"thresholds\": [\n {\n \"colorMode\": \"critical\",\n \"fill\": true,\n \"line\": true,\n \"op\": \"gt\",\n \"value\": 30\n }\n ],\n \"timeFrom\": null,\n \"timeShift\": null,\n \"title\": \"Outlier Labels\",\n \"tooltip\": {\n \"shared\": true,\n \"sort\": 0,\n \"value_type\": \"individual\"\n },\n \"transparent\": false,\n \"type\": \"graph\",\n \"xaxis\": {\n \"buckets\": null,\n \"mode\": \"time\",\n \"name\": null,\n \"show\": true,\n \"values\": []\n },\n \"yaxes\": [\n {\n \"format\": \"short\",\n \"label\": \"Outlier\",\n \"logBase\": 1,\n \"max\": \"1.1\",\n \"min\": null,\n \"show\": true\n },\n {\n \"format\": \"short\",\n \"label\": null,\n \"logBase\": 1,\n \"max\": null,\n \"min\": null,\n \"show\": true\n }\n ],\n \"yaxis\": {\n \"align\": false,\n \"alignLevel\": null\n }\n },\n {\n \"aliasColors\": {},\n \"bars\": false,\n \"dashLength\": 10,\n \"dashes\": false,\n \"datasource\": \"prometheus\",\n \"description\": \"Rolling window = 100 observations.\",\n \"fill\": 1,\n \"gridPos\": {\n \"h\": 9,\n \"w\": 12,\n \"x\": 12,\n \"y\": 17\n },\n \"id\": 6,\n \"interval\": \"1s\",\n \"legend\": {\n \"alignAsTable\": true,\n \"avg\": true,\n \"current\": true,\n \"max\": false,\n \"min\": false,\n \"show\": true,\n \"total\": false,\n \"values\": true\n },\n \"lines\": true,\n \"linewidth\": 1,\n \"links\": [],\n \"nullPointMode\": \"null\",\n \"percentage\": false,\n \"pointradius\": 5,\n \"points\": false,\n \"renderer\": \"flot\",\n \"seriesOverrides\": [],\n \"spaceLength\": 10,\n \"stack\": false,\n \"steppedLine\": false,\n \"targets\": [\n {\n \"expr\": \"nb_outliers_roll\",\n \"format\": \"time_series\",\n \"interval\": \"1s\",\n \"intervalFactor\": 1,\n \"legendFormat\": \"Predicted outliers\",\n \"refId\": \"A\",\n \"step\": 1\n },\n {\n \"expr\": \"nb_labels_roll\",\n \"format\": \"time_series\",\n \"interval\": \"1s\",\n \"intervalFactor\": 1,\n \"legendFormat\": \"Labeled outliers\",\n \"refId\": \"B\",\n \"step\": 1\n }\n ],\n \"thresholds\": [],\n \"timeFrom\": null,\n \"timeShift\": null,\n \"title\": \"Rolling Number of Predicted and Labeled Outliers\",\n \"tooltip\": {\n \"shared\": true,\n \"sort\": 0,\n \"value_type\": \"individual\"\n },\n \"type\": \"graph\",\n \"xaxis\": {\n \"buckets\": null,\n \"mode\": \"time\",\n \"name\": null,\n \"show\": true,\n \"values\": []\n },\n \"yaxes\": [\n {\n \"format\": \"short\",\n \"label\": \"Number of Outliers\",\n \"logBase\": 1,\n \"max\": null,\n \"min\": null,\n \"show\": true\n },\n {\n \"format\": \"short\",\n \"label\": null,\n \"logBase\": 1,\n \"max\": null,\n \"min\": null,\n \"show\": true\n }\n ],\n \"yaxis\": {\n \"align\": false,\n \"alignLevel\": null\n }\n },\n {\n \"content\": \"# PERFORMANCE METRICS\",\n \"gridPos\": {\n \"h\": 3,\n \"w\": 24,\n \"x\": 0,\n \"y\": 26\n },\n \"id\": 8,\n \"links\": [],\n \"mode\": \"markdown\",\n \"title\": \"\",\n \"type\": \"text\"\n },\n {\n \"content\": \"### CONFUSION MATRIX\",\n \"gridPos\": {\n \"h\": 3,\n \"w\": 12,\n \"x\": 0,\n \"y\": 29\n },\n \"id\": 15,\n \"links\": [],\n \"mode\": \"markdown\",\n \"title\": \"\",\n \"transparent\": false,\n \"type\": \"text\"\n },\n {\n \"content\": \"### OTHER METRICS\",\n \"gridPos\": {\n \"h\": 3,\n \"w\": 12,\n \"x\": 12,\n \"y\": 29\n },\n \"id\": 25,\n \"links\": [],\n \"mode\": \"markdown\",\n \"title\": \"\",\n \"type\": \"text\"\n },\n {\n \"cacheTimeout\": null,\n \"colorBackground\": false,\n \"colorPrefix\": false,\n \"colorValue\": false,\n \"colors\": [\n \"rgba(50, 172, 45, 0.97)\",\n \"rgba(237, 129, 40, 0.89)\",\n \"rgba(245, 54, 54, 0.9)\"\n ],\n \"datasource\": \"prometheus\",\n \"format\": \"none\",\n \"gauge\": {\n \"maxValue\": 100,\n \"minValue\": 0,\n \"show\": false,\n \"thresholdLabels\": false,\n \"thresholdMarkers\": true\n },\n \"gridPos\": {\n \"h\": 4,\n \"w\": 6,\n \"x\": 0,\n \"y\": 32\n },\n \"id\": 11,\n \"interval\": \"1s\",\n \"links\": [],\n \"mappingType\": 1,\n \"mappingTypes\": [\n {\n \"name\": \"value to text\",\n \"value\": 1\n },\n {\n \"name\": \"range to text\",\n \"value\": 2\n }\n ],\n \"maxDataPoints\": 100,\n \"nullPointMode\": \"connected\",\n \"nullText\": null,\n \"postfix\": \"\",\n \"postfixFontSize\": \"50%\",\n \"prefix\": \"\",\n \"prefixFontSize\": \"50%\",\n \"rangeMaps\": [\n {\n \"from\": \"null\",\n \"text\": \"N/A\",\n \"to\": \"null\"\n }\n ],\n \"sparkline\": {\n \"fillColor\": \"rgba(31, 118, 189, 0.18)\",\n \"full\": true,\n \"lineColor\": \"rgb(31, 120, 193)\",\n \"show\": true\n },\n \"tableColumn\": \"\",\n \"targets\": [\n {\n \"expr\": \"true_positive\",\n \"format\": \"time_series\",\n \"interval\": \"1s\",\n \"intervalFactor\": 1,\n \"refId\": \"A\",\n \"step\": 2\n }\n ],\n \"thresholds\": \"\",\n \"title\": \"True Positive\",\n \"type\": \"singlestat\",\n \"valueFontSize\": \"80%\",\n \"valueMaps\": [\n {\n \"op\": \"=\",\n \"text\": \"N/A\",\n \"value\": \"null\"\n }\n ],\n \"valueName\": \"current\"\n },\n {\n \"cacheTimeout\": null,\n \"colorBackground\": false,\n \"colorValue\": false,\n \"colors\": [\n \"rgba(50, 172, 45, 0.97)\",\n \"rgba(237, 129, 40, 0.89)\",\n \"rgba(245, 54, 54, 0.9)\"\n ],\n \"datasource\": \"prometheus\",\n \"format\": \"none\",\n \"gauge\": {\n \"maxValue\": 100,\n \"minValue\": 0,\n \"show\": false,\n \"thresholdLabels\": false,\n \"thresholdMarkers\": true\n },\n \"gridPos\": {\n \"h\": 4,\n \"w\": 6,\n \"x\": 6,\n \"y\": 32\n },\n \"id\": 12,\n \"interval\": \"1s\",\n \"links\": [],\n \"mappingType\": 1,\n \"mappingTypes\": [\n {\n \"name\": \"value to text\",\n \"value\": 1\n },\n {\n \"name\": \"range to text\",\n \"value\": 2\n }\n ],\n \"maxDataPoints\": 100,\n \"nullPointMode\": \"connected\",\n \"nullText\": null,\n \"postfix\": \"\",\n \"postfixFontSize\": \"50%\",\n \"prefix\": \"\",\n \"prefixFontSize\": \"50%\",\n \"rangeMaps\": [\n {\n \"from\": \"null\",\n \"text\": \"N/A\",\n \"to\": \"null\"\n }\n ],\n \"sparkline\": {\n \"fillColor\": \"rgba(31, 118, 189, 0.18)\",\n \"full\": true,\n \"lineColor\": \"rgb(31, 120, 193)\",\n \"show\": true\n },\n \"tableColumn\": \"\",\n \"targets\": [\n {\n \"expr\": \"false_positive\\n\",\n \"format\": \"time_series\",\n \"interval\": \"1s\",\n \"intervalFactor\": 1,\n \"refId\": \"A\",\n \"step\": 2\n }\n ],\n \"thresholds\": \"20,50\",\n \"title\": \"False Positive\",\n \"type\": \"singlestat\",\n \"valueFontSize\": \"80%\",\n \"valueMaps\": [\n {\n \"op\": \"=\",\n \"text\": \"N/A\",\n \"value\": \"null\"\n }\n ],\n \"valueName\": \"current\"\n },\n {\n \"cacheTimeout\": null,\n \"colorBackground\": false,\n \"colorValue\": false,\n \"colors\": [\n \"rgba(245, 54, 54, 0.9)\",\n \"rgba(237, 129, 40, 0.89)\",\n \"rgba(50, 172, 45, 0.97)\"\n ],\n \"datasource\": \"prometheus\",\n \"decimals\": 2,\n \"format\": \"none\",\n \"gauge\": {\n \"maxValue\": 1,\n \"minValue\": 0,\n \"show\": true,\n \"thresholdLabels\": false,\n \"thresholdMarkers\": true\n },\n \"gridPos\": {\n \"h\": 4,\n \"w\": 6,\n \"x\": 12,\n \"y\": 32\n },\n \"id\": 21,\n \"interval\": \"1s\",\n \"links\": [],\n \"mappingType\": 1,\n \"mappingTypes\": [\n {\n \"name\": \"value to text\",\n \"value\": 1\n },\n {\n \"name\": \"range to text\",\n \"value\": 2\n }\n ],\n \"maxDataPoints\": 100,\n \"nullPointMode\": \"connected\",\n \"nullText\": null,\n \"postfix\": \"\",\n \"postfixFontSize\": \"50%\",\n \"prefix\": \"\",\n \"prefixFontSize\": \"50%\",\n \"rangeMaps\": [\n {\n \"from\": \"null\",\n \"text\": \"N/A\",\n \"to\": \"null\"\n }\n ],\n \"sparkline\": {\n \"fillColor\": \"rgba(31, 118, 189, 0.18)\",\n \"full\": false,\n \"lineColor\": \"rgb(31, 120, 193)\",\n \"show\": false\n },\n \"tableColumn\": \"\",\n \"targets\": [\n {\n \"expr\": \"f1_tot\",\n \"format\": \"time_series\",\n \"interval\": \"1s\",\n \"intervalFactor\": 1,\n \"refId\": \"A\",\n \"step\": 2\n }\n ],\n \"thresholds\": \"0.75,0.9\",\n \"title\": \"F1 score\",\n \"type\": \"singlestat\",\n \"valueFontSize\": \"80%\",\n \"valueMaps\": [\n {\n \"op\": \"=\",\n \"text\": \"N/A\",\n \"value\": \"null\"\n }\n ],\n \"valueName\": \"current\"\n },\n {\n \"cacheTimeout\": null,\n \"colorBackground\": false,\n \"colorValue\": false,\n \"colors\": [\n \"rgba(245, 54, 54, 0.9)\",\n \"rgba(237, 129, 40, 0.89)\",\n \"rgba(50, 172, 45, 0.97)\"\n ],\n \"datasource\": \"prometheus\",\n \"decimals\": 2,\n \"format\": \"none\",\n \"gauge\": {\n \"maxValue\": 1,\n \"minValue\": 0,\n \"show\": true,\n \"thresholdLabels\": false,\n \"thresholdMarkers\": true\n },\n \"gridPos\": {\n \"h\": 4,\n \"w\": 6,\n \"x\": 18,\n \"y\": 32\n },\n \"id\": 22,\n \"interval\": \"1s\",\n \"links\": [],\n \"mappingType\": 1,\n \"mappingTypes\": [\n {\n \"name\": \"value to text\",\n \"value\": 1\n },\n {\n \"name\": \"range to text\",\n \"value\": 2\n }\n ],\n \"maxDataPoints\": 100,\n \"nullPointMode\": \"connected\",\n \"nullText\": null,\n \"postfix\": \"\",\n \"postfixFontSize\": \"50%\",\n \"prefix\": \"\",\n \"prefixFontSize\": \"50%\",\n \"rangeMaps\": [\n {\n \"from\": \"null\",\n \"text\": \"N/A\",\n \"to\": \"null\"\n }\n ],\n \"sparkline\": {\n \"fillColor\": \"rgba(31, 118, 189, 0.18)\",\n \"full\": false,\n \"lineColor\": \"rgb(31, 120, 193)\",\n \"show\": false\n },\n \"tableColumn\": \"\",\n \"targets\": [\n {\n \"expr\": \"accuracy_tot\",\n \"format\": \"time_series\",\n \"interval\": \"1s\",\n \"intervalFactor\": 1,\n \"refId\": \"A\",\n \"step\": 2\n }\n ],\n \"thresholds\": \"0.9,0.95\",\n \"title\": \"Accuracy\",\n \"type\": \"singlestat\",\n \"valueFontSize\": \"80%\",\n \"valueMaps\": [\n {\n \"op\": \"=\",\n \"text\": \"N/A\",\n \"value\": \"null\"\n }\n ],\n \"valueName\": \"current\"\n },\n {\n \"cacheTimeout\": null,\n \"colorBackground\": false,\n \"colorValue\": false,\n \"colors\": [\n \"rgba(50, 172, 45, 0.97)\",\n \"rgba(237, 129, 40, 0.89)\",\n \"rgba(245, 54, 54, 0.9)\"\n ],\n \"datasource\": \"prometheus\",\n \"format\": \"none\",\n \"gauge\": {\n \"maxValue\": 500,\n \"minValue\": 0,\n \"show\": false,\n \"thresholdLabels\": false,\n \"thresholdMarkers\": true\n },\n \"gridPos\": {\n \"h\": 5,\n \"w\": 6,\n \"x\": 0,\n \"y\": 36\n },\n \"id\": 13,\n \"interval\": \"1s\",\n \"links\": [],\n \"mappingType\": 1,\n \"mappingTypes\": [\n {\n \"name\": \"value to text\",\n \"value\": 1\n },\n {\n \"name\": \"range to text\",\n \"value\": 2\n }\n ],\n \"maxDataPoints\": 100,\n \"nullPointMode\": \"connected\",\n \"nullText\": null,\n \"postfix\": \"\",\n \"postfixFontSize\": \"50%\",\n \"prefix\": \"\",\n \"prefixFontSize\": \"50%\",\n \"rangeMaps\": [\n {\n \"from\": \"null\",\n \"text\": \"N/A\",\n \"to\": \"null\"\n }\n ],\n \"sparkline\": {\n \"fillColor\": \"rgba(31, 118, 189, 0.18)\",\n \"full\": true,\n \"lineColor\": \"rgb(31, 120, 193)\",\n \"show\": true\n },\n \"tableColumn\": \"\",\n \"targets\": [\n {\n \"expr\": \"false_negative\",\n \"format\": \"time_series\",\n \"interval\": \"1s\",\n \"intervalFactor\": 1,\n \"refId\": \"A\",\n \"step\": 2\n }\n ],\n \"thresholds\": \"50,100\",\n \"title\": \"False Negative\",\n \"type\": \"singlestat\",\n \"valueFontSize\": \"80%\",\n \"valueMaps\": [\n {\n \"op\": \"=\",\n \"text\": \"N/A\",\n \"value\": \"null\"\n }\n ],\n \"valueName\": \"current\"\n },\n {\n \"cacheTimeout\": null,\n \"colorBackground\": false,\n \"colorValue\": false,\n \"colors\": [\n \"rgba(245, 54, 54, 0.9)\",\n \"rgba(237, 129, 40, 0.89)\",\n \"rgba(50, 172, 45, 0.97)\"\n ],\n \"datasource\": \"prometheus\",\n \"format\": \"none\",\n \"gauge\": {\n \"maxValue\": 100,\n \"minValue\": 0,\n \"show\": false,\n \"thresholdLabels\": false,\n \"thresholdMarkers\": true\n },\n \"gridPos\": {\n \"h\": 5,\n \"w\": 6,\n \"x\": 6,\n \"y\": 36\n },\n \"id\": 14,\n \"interval\": \"1s\",\n \"links\": [],\n \"mappingType\": 1,\n \"mappingTypes\": [\n {\n \"name\": \"value to text\",\n \"value\": 1\n },\n {\n \"name\": \"range to text\",\n \"value\": 2\n }\n ],\n \"maxDataPoints\": 100,\n \"nullPointMode\": \"connected\",\n \"nullText\": null,\n \"postfix\": \"\",\n \"postfixFontSize\": \"50%\",\n \"prefix\": \"\",\n \"prefixFontSize\": \"50%\",\n \"rangeMaps\": [\n {\n \"from\": \"null\",\n \"text\": \"N/A\",\n \"to\": \"null\"\n }\n ],\n \"sparkline\": {\n \"fillColor\": \"rgba(31, 118, 189, 0.18)\",\n \"full\": true,\n \"lineColor\": \"rgb(31, 120, 193)\",\n \"show\": true\n },\n \"tableColumn\": \"\",\n \"targets\": [\n {\n \"expr\": \"true_negative\",\n \"format\": \"time_series\",\n \"interval\": \"1s\",\n \"intervalFactor\": 1,\n \"refId\": \"A\",\n \"step\": 2\n }\n ],\n \"thresholds\": \"\",\n \"title\": \"True Negative\",\n \"type\": \"singlestat\",\n \"valueFontSize\": \"80%\",\n \"valueMaps\": [\n {\n \"op\": \"=\",\n \"text\": \"N/A\",\n \"value\": \"null\"\n }\n ],\n \"valueName\": \"current\"\n },\n {\n \"cacheTimeout\": null,\n \"colorBackground\": false,\n \"colorValue\": false,\n \"colors\": [\n \"rgba(245, 54, 54, 0.9)\",\n \"rgba(237, 129, 40, 0.89)\",\n \"rgba(50, 172, 45, 0.97)\"\n ],\n \"datasource\": \"prometheus\",\n \"decimals\": 2,\n \"format\": \"none\",\n \"gauge\": {\n \"maxValue\": 1,\n \"minValue\": 0,\n \"show\": true,\n \"thresholdLabels\": false,\n \"thresholdMarkers\": true\n },\n \"gridPos\": {\n \"h\": 5,\n \"w\": 6,\n \"x\": 12,\n \"y\": 36\n },\n \"id\": 23,\n \"interval\": \"1s\",\n \"links\": [],\n \"mappingType\": 1,\n \"mappingTypes\": [\n {\n \"name\": \"value to text\",\n \"value\": 1\n },\n {\n \"name\": \"range to text\",\n \"value\": 2\n }\n ],\n \"maxDataPoints\": 100,\n \"nullPointMode\": \"connected\",\n \"nullText\": null,\n \"postfix\": \"\",\n \"postfixFontSize\": \"50%\",\n \"prefix\": \"\",\n \"prefixFontSize\": \"50%\",\n \"rangeMaps\": [\n {\n \"from\": \"null\",\n \"text\": \"N/A\",\n \"to\": \"null\"\n }\n ],\n \"sparkline\": {\n \"fillColor\": \"rgba(31, 118, 189, 0.18)\",\n \"full\": false,\n \"lineColor\": \"rgb(31, 120, 193)\",\n \"show\": false\n },\n \"tableColumn\": \"\",\n \"targets\": [\n {\n \"expr\": \"precision_tot\",\n \"format\": \"time_series\",\n \"intervalFactor\": 2,\n \"refId\": \"A\",\n \"step\": 4\n }\n ],\n \"thresholds\": \"0.75,0.9\",\n \"title\": \"Precision\",\n \"type\": \"singlestat\",\n \"valueFontSize\": \"80%\",\n \"valueMaps\": [\n {\n \"op\": \"=\",\n \"text\": \"N/A\",\n \"value\": \"null\"\n }\n ],\n \"valueName\": \"current\"\n },\n {\n \"cacheTimeout\": null,\n \"colorBackground\": false,\n \"colorValue\": false,\n \"colors\": [\n \"rgba(245, 54, 54, 0.9)\",\n \"rgba(237, 129, 40, 0.89)\",\n \"rgba(50, 172, 45, 0.97)\"\n ],\n \"datasource\": \"prometheus\",\n \"decimals\": 2,\n \"format\": \"none\",\n \"gauge\": {\n \"maxValue\": 1,\n \"minValue\": 0,\n \"show\": true,\n \"thresholdLabels\": false,\n \"thresholdMarkers\": true\n },\n \"gridPos\": {\n \"h\": 5,\n \"w\": 6,\n \"x\": 18,\n \"y\": 36\n },\n \"id\": 24,\n \"interval\": \"1s\",\n \"links\": [],\n \"mappingType\": 1,\n \"mappingTypes\": [\n {\n \"name\": \"value to text\",\n \"value\": 1\n },\n {\n \"name\": \"range to text\",\n \"value\": 2\n }\n ],\n \"maxDataPoints\": 100,\n \"nullPointMode\": \"connected\",\n \"nullText\": null,\n \"postfix\": \"\",\n \"postfixFontSize\": \"50%\",\n \"prefix\": \"\",\n \"prefixFontSize\": \"50%\",\n \"rangeMaps\": [\n {\n \"from\": \"null\",\n \"text\": \"N/A\",\n \"to\": \"null\"\n }\n ],\n \"sparkline\": {\n \"fillColor\": \"rgba(31, 118, 189, 0.18)\",\n \"full\": false,\n \"lineColor\": \"rgb(31, 120, 193)\",\n \"show\": false\n },\n \"tableColumn\": \"\",\n \"targets\": [\n {\n \"expr\": \"recall_tot\",\n \"format\": \"time_series\",\n \"intervalFactor\": 2,\n \"refId\": \"A\",\n \"step\": 4\n }\n ],\n \"thresholds\": \"0.75,0.9\",\n \"title\": \"Recall\",\n \"type\": \"singlestat\",\n \"valueFontSize\": \"80%\",\n \"valueMaps\": [\n {\n \"op\": \"=\",\n \"text\": \"N/A\",\n \"value\": \"null\"\n }\n ],\n \"valueName\": \"current\"\n },\n {\n \"aliasColors\": {},\n \"bars\": false,\n \"dashLength\": 10,\n \"dashes\": false,\n \"datasource\": \"prometheus\",\n \"description\": \"Rolling window = 100 observations.\",\n \"fill\": 1,\n \"gridPos\": {\n \"h\": 9,\n \"w\": 12,\n \"x\": 0,\n \"y\": 41\n },\n \"id\": 7,\n \"interval\": \"1s\",\n \"legend\": {\n \"alignAsTable\": true,\n \"avg\": true,\n \"current\": true,\n \"max\": false,\n \"min\": false,\n \"rightSide\": false,\n \"show\": true,\n \"total\": false,\n \"values\": true\n },\n \"lines\": true,\n \"linewidth\": 1,\n \"links\": [],\n \"nullPointMode\": \"null\",\n \"percentage\": false,\n \"pointradius\": 5,\n \"points\": false,\n \"renderer\": \"flot\",\n \"seriesOverrides\": [],\n \"spaceLength\": 10,\n \"stack\": false,\n \"steppedLine\": false,\n \"targets\": [\n {\n \"expr\": \"f1_roll\",\n \"format\": \"time_series\",\n \"interval\": \"1s\",\n \"intervalFactor\": 1,\n \"legendFormat\": \"F1 score\",\n \"refId\": \"A\",\n \"step\": 1\n },\n {\n \"expr\": \"f2_roll\",\n \"format\": \"time_series\",\n \"interval\": \"1s\",\n \"intervalFactor\": 1,\n \"legendFormat\": \"F2 score\",\n \"refId\": \"B\",\n \"step\": 1\n }\n ],\n \"thresholds\": [],\n \"timeFrom\": null,\n \"timeShift\": null,\n \"title\": \"Rolling F1 and F2 Scores\",\n \"tooltip\": {\n \"shared\": true,\n \"sort\": 0,\n \"value_type\": \"individual\"\n },\n \"type\": \"graph\",\n \"xaxis\": {\n \"buckets\": null,\n \"mode\": \"time\",\n \"name\": null,\n \"show\": true,\n \"values\": []\n },\n \"yaxes\": [\n {\n \"format\": \"short\",\n \"label\": null,\n \"logBase\": 1,\n \"max\": null,\n \"min\": null,\n \"show\": true\n },\n {\n \"format\": \"short\",\n \"label\": null,\n \"logBase\": 1,\n \"max\": null,\n \"min\": null,\n \"show\": true\n }\n ],\n \"yaxis\": {\n \"align\": false,\n \"alignLevel\": null\n }\n },\n {\n \"aliasColors\": {},\n \"bars\": false,\n \"dashLength\": 10,\n \"dashes\": false,\n \"datasource\": \"prometheus\",\n \"description\": \"Rolling window = 100 observations.\",\n \"fill\": 1,\n \"gridPos\": {\n \"h\": 9,\n \"w\": 12,\n \"x\": 12,\n \"y\": 41\n },\n \"id\": 9,\n \"interval\": \"1s\",\n \"legend\": {\n \"alignAsTable\": true,\n \"avg\": true,\n \"current\": true,\n \"max\": false,\n \"min\": false,\n \"rightSide\": false,\n \"show\": true,\n \"total\": false,\n \"values\": true\n },\n \"lines\": true,\n \"linewidth\": 1,\n \"links\": [],\n \"nullPointMode\": \"null\",\n \"percentage\": false,\n \"pointradius\": 5,\n \"points\": false,\n \"renderer\": \"flot\",\n \"seriesOverrides\": [],\n \"spaceLength\": 10,\n \"stack\": false,\n \"steppedLine\": false,\n \"targets\": [\n {\n \"expr\": \"accuracy_roll\",\n \"format\": \"time_series\",\n \"interval\": \"\",\n \"intervalFactor\": 1,\n \"legendFormat\": \"accuracy\",\n \"refId\": \"A\",\n \"step\": 1\n },\n {\n \"expr\": \"precision_roll\",\n \"format\": \"time_series\",\n \"intervalFactor\": 1,\n \"legendFormat\": \"precision\",\n \"refId\": \"B\",\n \"step\": 1\n },\n {\n \"expr\": \"recall_roll\",\n \"format\": \"time_series\",\n \"intervalFactor\": 2,\n \"legendFormat\": \"recall\",\n \"refId\": \"C\",\n \"step\": 2\n }\n ],\n \"thresholds\": [],\n \"timeFrom\": null,\n \"timeShift\": null,\n \"title\": \"Rolling Accuracy, Precision and Recall Scores\",\n \"tooltip\": {\n \"shared\": true,\n \"sort\": 0,\n \"value_type\": \"individual\"\n },\n \"type\": \"graph\",\n \"xaxis\": {\n \"buckets\": null,\n \"mode\": \"time\",\n \"name\": null,\n \"show\": true,\n \"values\": []\n },\n \"yaxes\": [\n {\n \"format\": \"short\",\n \"label\": null,\n \"logBase\": 1,\n \"max\": null,\n \"min\": null,\n \"show\": true\n },\n {\n \"format\": \"short\",\n \"label\": null,\n \"logBase\": 1,\n \"max\": null,\n \"min\": null,\n \"show\": true\n }\n ],\n \"yaxis\": {\n \"align\": false,\n \"alignLevel\": null\n }\n },\n {\n \"columns\": [],\n \"datasource\": \"prometheus\",\n \"fontSize\": \"100%\",\n \"gridPos\": {\n \"h\": 7,\n \"w\": 24,\n \"x\": 0,\n \"y\": 50\n },\n \"id\": 10,\n \"interval\": \"1s\",\n \"links\": [],\n \"pageSize\": null,\n \"scroll\": true,\n \"showHeader\": true,\n \"sort\": {\n \"col\": 0,\n \"desc\": true\n },\n \"styles\": [\n {\n \"alias\": \"Time\",\n \"dateFormat\": \"YYYY-MM-DD HH:mm:ss\",\n \"pattern\": \"Time\",\n \"type\": \"date\"\n },\n {\n \"alias\": \"\",\n \"colorMode\": null,\n \"colors\": [\n \"rgba(245, 54, 54, 0.9)\",\n \"rgba(237, 129, 40, 0.89)\",\n \"rgba(50, 172, 45, 0.97)\"\n ],\n \"decimals\": 2,\n \"pattern\": \"/.*/\",\n \"thresholds\": [],\n \"type\": \"number\",\n \"unit\": \"short\"\n }\n ],\n \"targets\": [\n {\n \"expr\": \"observation\\n\",\n \"format\": \"time_series\",\n \"intervalFactor\": 2,\n \"legendFormat\": \"Observation\",\n \"metric\": \"\",\n \"refId\": \"A\",\n \"step\": 2\n },\n {\n \"expr\": \"is_outlier\",\n \"format\": \"time_series\",\n \"intervalFactor\": 2,\n \"legendFormat\": \"Outlier Prediction\",\n \"refId\": \"B\",\n \"step\": 2\n },\n {\n \"expr\": \"label\",\n \"format\": \"time_series\",\n \"intervalFactor\": 2,\n \"legendFormat\": \"Outlier Label\",\n \"refId\": \"C\",\n \"step\": 2\n },\n {\n \"expr\": \"mse\",\n \"format\": \"time_series\",\n \"intervalFactor\": 2,\n \"legendFormat\": \"Mean Squared Reconstruction Error\",\n \"refId\": \"D\",\n \"step\": 2\n }\n ],\n \"title\": \"Data\",\n \"transform\": \"timeseries_to_columns\",\n \"type\": \"table\"\n }\n ],\n \"refresh\": \"1s\",\n \"schemaVersion\": 16,\n \"style\": \"dark\",\n \"tags\": [],\n \"templating\": {\n \"list\": []\n },\n \"time\": {\n \"from\": \"now-5m\",\n \"to\": \"now\"\n },\n \"timepicker\": {\n \"refresh_intervals\": [\n \"1s\",\n \"5s\",\n \"10s\",\n \"30s\",\n \"1m\",\n \"5m\",\n \"15m\",\n \"30m\",\n \"1h\",\n \"2h\",\n \"1d\"\n ],\n \"time_options\": [\n \"5m\",\n \"15m\",\n \"1h\",\n \"6h\",\n \"12h\",\n \"24h\",\n \"2d\",\n \"7d\",\n \"30d\"\n ]\n },\n \"timezone\": \"browser\",\n \"title\": \"Outlier Detection\",\n \"uid\": \"bD3l8OLiz\",\n \"version\": 4\n}", + "predictions-analytics-dashboard.json": "{\n \"__inputs\": [\n {\n \"name\": \"DS_PROM\",\n \"label\": \"prometheus\",\n \"description\": \"\",\n \"type\": \"datasource\",\n \"pluginId\": \"prometheus\",\n \"pluginName\": \"Prometheus\"\n }\n ],\n \"__requires\": [\n {\n \"type\": \"grafana\",\n \"id\": \"grafana\",\n \"name\": \"Grafana\",\n \"version\": \"4.3.2\"\n },\n {\n \"type\": \"panel\",\n \"id\": \"graph\",\n \"name\": \"Graph\",\n \"version\": \"\"\n },\n {\n \"type\": \"datasource\",\n \"id\": \"prometheus\",\n \"name\": \"Prometheus\",\n \"version\": \"1.0.0\"\n },\n {\n \"type\": \"panel\",\n \"id\": \"singlestat\",\n \"name\": \"Singlestat\",\n \"version\": \"\"\n },\n {\n \"type\": \"panel\",\n \"id\": \"text\",\n \"name\": \"Text\",\n \"version\": \"\"\n }\n ],\n \"annotations\": {\n \"list\": []\n },\n \"editable\": true,\n \"gnetId\": null,\n \"graphTooltip\": 0,\n \"hideControls\": false,\n \"id\": null,\n \"links\": [],\n \"refresh\": \"5s\",\n \"rows\": [\n {\n \"collapse\": false,\n \"height\": 67,\n \"panels\": [\n {\n \"content\": \"
\\n Seldon Core API Dashboard\\n
\",\n \"id\": 27,\n \"links\": [],\n \"mode\": \"html\",\n \"span\": 12,\n \"title\": \"\",\n \"type\": \"text\"\n }\n ],\n \"repeat\": null,\n \"repeatIteration\": null,\n \"repeatRowId\": null,\n \"showTitle\": false,\n \"title\": \"Heading\",\n \"titleSize\": \"h6\"\n },\n {\n \"collapse\": false,\n \"height\": \"93\",\n \"panels\": [\n {\n \"cacheTimeout\": null,\n \"colorBackground\": false,\n \"colorValue\": false,\n \"colors\": [\n \"rgba(245, 54, 54, 0.9)\",\n \"rgba(237, 129, 40, 0.89)\",\n \"rgba(50, 172, 45, 0.97)\"\n ],\n \"datasource\": \"prometheus\",\n \"format\": \"ops\",\n \"gauge\": {\n \"maxValue\": 100,\n \"minValue\": 0,\n \"show\": false,\n \"thresholdLabels\": false,\n \"thresholdMarkers\": true\n },\n \"id\": 16,\n \"interval\": null,\n \"links\": [],\n \"mappingType\": 1,\n \"mappingTypes\": [\n {\n \"name\": \"value to text\",\n \"value\": 1\n },\n {\n \"name\": \"range to text\",\n \"value\": 2\n }\n ],\n \"maxDataPoints\": 100,\n \"nullPointMode\": \"connected\",\n \"nullText\": null,\n \"postfix\": \"\",\n \"postfixFontSize\": \"50%\",\n \"prefix\": \"\",\n \"prefixFontSize\": \"50%\",\n \"rangeMaps\": [\n {\n \"from\": \"null\",\n \"text\": \"N/A\",\n \"to\": \"null\"\n }\n ],\n \"span\": 3,\n \"sparkline\": {\n \"fillColor\": \"rgba(31, 118, 189, 0.18)\",\n \"full\": true,\n \"lineColor\": \"rgb(31, 120, 193)\",\n \"show\": true\n },\n \"tableColumn\": \"\",\n \"targets\": [\n {\n \"expr\": \"round(sum(irate(seldon_api_engine_server_requests_seconds_count[1m])), 0.001)\",\n \"format\": \"time_series\",\n \"intervalFactor\": 2,\n \"refId\": \"A\",\n \"step\": 20\n }\n ],\n \"thresholds\": \"\",\n \"title\": \"Global Request Rate\",\n \"type\": \"singlestat\",\n \"valueFontSize\": \"80%\",\n \"valueMaps\": [\n {\n \"op\": \"=\",\n \"text\": \"N/A\",\n \"value\": \"null\"\n }\n ],\n \"valueName\": \"avg\"\n },\n {\n \"cacheTimeout\": null,\n \"colorBackground\": false,\n \"colorValue\": false,\n \"colors\": [\n \"rgba(245, 54, 54, 0.9)\",\n \"rgba(237, 129, 40, 0.89)\",\n \"rgba(50, 172, 45, 0.97)\"\n ],\n \"datasource\": \"prometheus\",\n \"format\": \"percentunit\",\n \"gauge\": {\n \"maxValue\": 100,\n \"minValue\": 0,\n \"show\": false,\n \"thresholdLabels\": false,\n \"thresholdMarkers\": true\n },\n \"id\": 17,\n \"interval\": null,\n \"links\": [],\n \"mappingType\": 1,\n \"mappingTypes\": [\n {\n \"name\": \"value to text\",\n \"value\": 1\n },\n {\n \"name\": \"range to text\",\n \"value\": 2\n }\n ],\n \"maxDataPoints\": 100,\n \"nullPointMode\": \"connected\",\n \"nullText\": null,\n \"postfix\": \"\",\n \"postfixFontSize\": \"50%\",\n \"prefix\": \"\",\n \"prefixFontSize\": \"50%\",\n \"rangeMaps\": [\n {\n \"from\": \"null\",\n \"text\": \"N/A\",\n \"to\": \"null\"\n }\n ],\n \"span\": 3,\n \"sparkline\": {\n \"fillColor\": \"rgba(31, 118, 189, 0.18)\",\n \"full\": true,\n \"lineColor\": \"rgb(31, 120, 193)\",\n \"show\": true\n },\n \"tableColumn\": \"\",\n \"targets\": [\n {\n \"expr\": \"sum(rate(seldon_api_engine_server_requests_seconds_count{status!~\\\"5.*\\\"}[1m])) / sum(rate(seldon_api_engine_server_requests_seconds_count[1m]))\",\n \"format\": \"time_series\",\n \"intervalFactor\": 2,\n \"refId\": \"A\",\n \"step\": 20\n }\n ],\n \"thresholds\": \"\",\n \"title\": \"Success\",\n \"type\": \"singlestat\",\n \"valueFontSize\": \"80%\",\n \"valueMaps\": [\n {\n \"op\": \"=\",\n \"text\": \"N/A\",\n \"value\": \"null\"\n }\n ],\n \"valueName\": \"avg\"\n },\n {\n \"cacheTimeout\": null,\n \"colorBackground\": false,\n \"colorValue\": false,\n \"colors\": [\n \"rgba(245, 54, 54, 0.9)\",\n \"rgba(237, 129, 40, 0.89)\",\n \"rgba(50, 172, 45, 0.97)\"\n ],\n \"datasource\": \"prometheus\",\n \"format\": \"ops\",\n \"gauge\": {\n \"maxValue\": 100,\n \"minValue\": 0,\n \"show\": false,\n \"thresholdLabels\": false,\n \"thresholdMarkers\": true\n },\n \"id\": 18,\n \"interval\": null,\n \"links\": [],\n \"mappingType\": 1,\n \"mappingTypes\": [\n {\n \"name\": \"value to text\",\n \"value\": 1\n },\n {\n \"name\": \"range to text\",\n \"value\": 2\n }\n ],\n \"maxDataPoints\": 100,\n \"nullPointMode\": \"connected\",\n \"nullText\": null,\n \"postfix\": \"\",\n \"postfixFontSize\": \"50%\",\n \"prefix\": \"\",\n \"prefixFontSize\": \"50%\",\n \"rangeMaps\": [\n {\n \"from\": \"null\",\n \"text\": \"N/A\",\n \"to\": \"null\"\n }\n ],\n \"span\": 3,\n \"sparkline\": {\n \"fillColor\": \"rgba(31, 118, 189, 0.18)\",\n \"full\": true,\n \"lineColor\": \"rgb(31, 120, 193)\",\n \"show\": true\n },\n \"tableColumn\": \"\",\n \"targets\": [\n {\n \"expr\": \"sum(irate(seldon_api_engine_server_requests_seconds_count{status=~\\\"4.*\\\"}[1m])) \",\n \"format\": \"time_series\",\n \"intervalFactor\": 2,\n \"refId\": \"A\",\n \"step\": 20\n }\n ],\n \"thresholds\": \"\",\n \"title\": \"4xxs\",\n \"type\": \"singlestat\",\n \"valueFontSize\": \"80%\",\n \"valueMaps\": [\n {\n \"op\": \"=\",\n \"text\": \"N/A\",\n \"value\": \"null\"\n }\n ],\n \"valueName\": \"avg\"\n },\n {\n \"cacheTimeout\": null,\n \"colorBackground\": false,\n \"colorValue\": false,\n \"colors\": [\n \"rgba(245, 54, 54, 0.9)\",\n \"rgba(237, 129, 40, 0.89)\",\n \"rgba(50, 172, 45, 0.97)\"\n ],\n \"datasource\": \"prometheus\",\n \"format\": \"ops\",\n \"gauge\": {\n \"maxValue\": 100,\n \"minValue\": 0,\n \"show\": false,\n \"thresholdLabels\": false,\n \"thresholdMarkers\": true\n },\n \"id\": 19,\n \"interval\": null,\n \"links\": [],\n \"mappingType\": 1,\n \"mappingTypes\": [\n {\n \"name\": \"value to text\",\n \"value\": 1\n },\n {\n \"name\": \"range to text\",\n \"value\": 2\n }\n ],\n \"maxDataPoints\": 100,\n \"nullPointMode\": \"connected\",\n \"nullText\": null,\n \"postfix\": \"\",\n \"postfixFontSize\": \"50%\",\n \"prefix\": \"\",\n \"prefixFontSize\": \"50%\",\n \"rangeMaps\": [\n {\n \"from\": \"null\",\n \"text\": \"N/A\",\n \"to\": \"null\"\n }\n ],\n \"span\": 3,\n \"sparkline\": {\n \"fillColor\": \"rgba(31, 118, 189, 0.18)\",\n \"full\": true,\n \"lineColor\": \"rgb(31, 120, 193)\",\n \"show\": true\n },\n \"tableColumn\": \"\",\n \"targets\": [\n {\n \"expr\": \"sum(irate(seldon_api_engine_server_requests_seconds_count{status=~\\\"5.*\\\"}[1m])) \",\n \"format\": \"time_series\",\n \"hide\": false,\n \"intervalFactor\": 2,\n \"refId\": \"A\",\n \"step\": 20\n }\n ],\n \"thresholds\": \"\",\n \"title\": \"5xxs\",\n \"type\": \"singlestat\",\n \"valueFontSize\": \"80%\",\n \"valueMaps\": [\n {\n \"op\": \"=\",\n \"text\": \"N/A\",\n \"value\": \"null\"\n }\n ],\n \"valueName\": \"avg\"\n }\n ],\n \"repeat\": null,\n \"repeatIteration\": null,\n \"repeatRowId\": null,\n \"showTitle\": false,\n \"title\": \"Global Counts\",\n \"titleSize\": \"h6\"\n },\n {\n \"collapse\": false,\n \"height\": \"50\",\n \"panels\": [\n {\n \"content\": \"
\\n Models\\n
\",\n \"id\": 8,\n \"links\": [],\n \"mode\": \"html\",\n \"span\": 12,\n \"title\": \"\",\n \"type\": \"text\"\n }\n ],\n \"repeat\": null,\n \"repeatIteration\": null,\n \"repeatRowId\": null,\n \"showTitle\": false,\n \"title\": \"Predictive Units\",\n \"titleSize\": \"h6\"\n },\n {\n \"collapse\": false,\n \"height\": 334,\n \"panels\": [\n {\n \"aliasColors\": {},\n \"bars\": false,\n \"dashLength\": 10,\n \"dashes\": false,\n \"datasource\": \"prometheus\",\n \"fill\": 1,\n \"id\": 7,\n \"legend\": {\n \"avg\": false,\n \"current\": false,\n \"max\": false,\n \"min\": false,\n \"show\": true,\n \"total\": false,\n \"values\": false\n },\n \"lines\": true,\n \"linewidth\": 1,\n \"links\": [],\n \"nullPointMode\": \"null\",\n \"percentage\": false,\n \"pointradius\": 5,\n \"points\": false,\n \"renderer\": \"flot\",\n \"seriesOverrides\": [],\n \"spaceLength\": 10,\n \"span\": 4,\n \"stack\": false,\n \"steppedLine\": false,\n \"targets\": [\n {\n \"expr\": \"sum(rate(seldon_api_engine_client_requests_seconds_count{model_name=~\\\"$model_name\\\",model_version=~\\\"$model_version\\\",model_image=~\\\"$model_image\\\",predictor_name=~\\\"$predictor\\\",predictor_version=~\\\"$version\\\"}[1m])) by (model_name,predictor_name,predictor_version,model_image,model_version)\",\n \"format\": \"time_series\",\n \"hide\": false,\n \"intervalFactor\": 2,\n \"legendFormat\": \"{{predictor_name}}:{{predictor_version}} ({{model_name}} {{model_image}} : {{model_version}})\",\n \"metric\": \"io_seldon_apife_api_rest_RestClientController_home_snapshot_75thPercentile\",\n \"refId\": \"A\",\n \"step\": 2\n }\n ],\n \"thresholds\": [],\n \"timeFrom\": null,\n \"timeShift\": null,\n \"title\": \"Reqs/sec to $model_image\",\n \"tooltip\": {\n \"shared\": true,\n \"sort\": 0,\n \"value_type\": \"individual\"\n },\n \"type\": \"graph\",\n \"xaxis\": {\n \"buckets\": null,\n \"mode\": \"time\",\n \"name\": null,\n \"show\": true,\n \"values\": []\n },\n \"yaxes\": [\n {\n \"format\": \"short\",\n \"label\": null,\n \"logBase\": 1,\n \"max\": null,\n \"min\": \"0\",\n \"show\": true\n },\n {\n \"format\": \"short\",\n \"label\": null,\n \"logBase\": 1,\n \"max\": null,\n \"min\": null,\n \"show\": true\n }\n ]\n },\n {\n \"aliasColors\": {},\n \"bars\": false,\n \"dashLength\": 10,\n \"dashes\": false,\n \"datasource\": \"prometheus\",\n \"fill\": 1,\n \"id\": 28,\n \"legend\": {\n \"alignAsTable\": true,\n \"avg\": false,\n \"current\": false,\n \"max\": false,\n \"min\": false,\n \"rightSide\": false,\n \"show\": true,\n \"total\": false,\n \"values\": false\n },\n \"lines\": true,\n \"linewidth\": 1,\n \"links\": [],\n \"nullPointMode\": \"null\",\n \"percentage\": false,\n \"pointradius\": 5,\n \"points\": false,\n \"renderer\": \"flot\",\n \"seriesOverrides\": [],\n \"spaceLength\": 10,\n \"span\": 4,\n \"stack\": false,\n \"steppedLine\": false,\n \"targets\": [\n {\n \"expr\": \"rate(seldon_api_model_feedback_reward_total{deployment_name=~\\\"$deployment\\\",predictor_name=~\\\"$predictor\\\",predictor_version=~\\\"$version\\\",model_image=~\\\"$model_image\\\",model_version=~\\\"$model_version\\\",model_name=~\\\"$model_name\\\"}[1m])/rate(seldon_api_model_feedback_total{deployment_name=~\\\"$deployment\\\",predictor_name=~\\\"$predictor\\\",predictor_version=~\\\"$version\\\",model_image=~\\\"$model_image\\\",model_version=~\\\"$model_version\\\",model_name=~\\\"$model_name\\\"}[1m])\",\n \"format\": \"time_series\",\n \"hide\": false,\n \"intervalFactor\": 2,\n \"legendFormat\": \"{{deployment_name}}/{{predictor_name}}:{{predictor_version}} {{model_name}} {{model_image}} : {{model_version}}\",\n \"metric\": \"\",\n \"refId\": \"A\",\n \"step\": 2\n }\n ],\n \"thresholds\": [],\n \"timeFrom\": null,\n \"timeShift\": null,\n \"title\": \"$model_image Reward\",\n \"tooltip\": {\n \"shared\": true,\n \"sort\": 0,\n \"value_type\": \"individual\"\n },\n \"type\": \"graph\",\n \"xaxis\": {\n \"buckets\": null,\n \"mode\": \"time\",\n \"name\": null,\n \"show\": true,\n \"values\": []\n },\n \"yaxes\": [\n {\n \"format\": \"short\",\n \"label\": null,\n \"logBase\": 1,\n \"max\": null,\n \"min\": \"0\",\n \"show\": true\n },\n {\n \"format\": \"short\",\n \"label\": null,\n \"logBase\": 1,\n \"max\": null,\n \"min\": null,\n \"show\": true\n }\n ]\n },\n {\n \"aliasColors\": {},\n \"bars\": false,\n \"dashLength\": 10,\n \"dashes\": false,\n \"datasource\": \"prometheus\",\n \"fill\": 1,\n \"id\": 11,\n \"legend\": {\n \"alignAsTable\": true,\n \"avg\": false,\n \"current\": false,\n \"max\": false,\n \"min\": false,\n \"show\": true,\n \"total\": false,\n \"values\": false\n },\n \"lines\": true,\n \"linewidth\": 1,\n \"links\": [],\n \"nullPointMode\": \"null\",\n \"percentage\": false,\n \"pointradius\": 5,\n \"points\": false,\n \"renderer\": \"flot\",\n \"seriesOverrides\": [],\n \"spaceLength\": 10,\n \"span\": 4,\n \"stack\": false,\n \"steppedLine\": false,\n \"targets\": [\n {\n \"expr\": \"histogram_quantile(0.5, sum(rate(seldon_api_engine_client_requests_seconds_bucket{uri=\\\"/predict\\\",model_image=~\\\"$model_image\\\",predictor_name=~\\\"$predictor\\\",predictor_version=~\\\"$version\\\",model_name=~\\\"$model_name\\\",model_version=~\\\"$model_version\\\"}[20s])) by (predictor_name,predictor_version,model_name,model_image,model_version,le))\",\n \"format\": \"time_series\",\n \"hide\": false,\n \"intervalFactor\": 2,\n \"legendFormat\": \"{{predictor_name}}:{{predictor_version}} {{model_name}} {{model_image}}: {{model_version}} (p50)\",\n \"metric\": \"\",\n \"refId\": \"E\",\n \"step\": 2\n },\n {\n \"expr\": \"histogram_quantile(0.75, sum(rate(seldon_api_engine_client_requests_seconds_bucket{uri=\\\"/predict\\\",model_image=~\\\"$model_image\\\",predictor_name=~\\\"$predictor\\\",predictor_version=~\\\"$version\\\",model_name=~\\\"$model_name\\\",model_version=~\\\"$model_version\\\"}[20s])) by (predictor_name,predictor_version,model_name,model_image,model_version,le))\",\n \"format\": \"time_series\",\n \"hide\": false,\n \"intervalFactor\": 2,\n \"legendFormat\": \"{{predictor_name}}:{{predictor_version}} {{model_name}} {{model_image}}:{{model_version}} (p75)\",\n \"metric\": \"\",\n \"refId\": \"B\",\n \"step\": 2\n },\n {\n \"expr\": \"histogram_quantile(0.9, sum(rate(seldon_api_engine_client_requests_seconds_bucket{uri=\\\"/predict\\\",model_image=~\\\"$model_image\\\",predictor_name=~\\\"$predictor\\\",predictor_version=~\\\"$version\\\",model_name=~\\\"$model_name\\\",model_version=~\\\"$model_version\\\"}[20s])) by (predictor_name,predictor_version,model_name,model_image,model_version,le))\",\n \"format\": \"time_series\",\n \"hide\": false,\n \"intervalFactor\": 2,\n \"legendFormat\": \"{{predictor_name}}:{{predictor_version}} {{model_name}} {{model_image}}:{{model_version}} (p90)\",\n \"metric\": \"\",\n \"refId\": \"A\",\n \"step\": 2\n },\n {\n \"expr\": \"histogram_quantile(0.95, sum(rate(seldon_api_engine_client_requests_seconds_bucket{uri=\\\"/predict\\\",model_image=~\\\"$model_image\\\",predictor_name=~\\\"$predictor\\\",predictor_version=~\\\"$version\\\",model_name=~\\\"$model_name\\\",model_version=~\\\"$model_version\\\"}[20s])) by (predictor_name,predictor_version,model_name,model_image,model_version,le))\",\n \"format\": \"time_series\",\n \"hide\": false,\n \"intervalFactor\": 2,\n \"legendFormat\": \"{{predictor_name}}:{{predictor_version}} {{model_name}} {{model_image}}:{{model_version}} (p95)\",\n \"metric\": \"\",\n \"refId\": \"C\",\n \"step\": 2\n },\n {\n \"expr\": \"histogram_quantile(0.99, sum(rate(seldon_api_engine_client_requests_seconds_bucket{uri=\\\"/predict\\\",model_image=~\\\"$model_image\\\",predictor_name=~\\\"$predictor\\\",predictor_version=~\\\"$version\\\",model_name=~\\\"$model_name\\\",model_version=~\\\"$model_version\\\"}[20s])) by (predictor_name,predictor_version,model_name,model_image,model_version,le))\",\n \"format\": \"time_series\",\n \"hide\": false,\n \"intervalFactor\": 2,\n \"legendFormat\": \"{{predictor_name}}:{{predictor_version}} {{model_name}} {{model_image}}:{{model_version}} (p99)\",\n \"metric\": \"\",\n \"refId\": \"D\",\n \"step\": 2\n }\n ],\n \"thresholds\": [],\n \"timeFrom\": null,\n \"timeShift\": null,\n \"title\": \"$model_image Latency\",\n \"tooltip\": {\n \"shared\": false,\n \"sort\": 0,\n \"value_type\": \"individual\"\n },\n \"type\": \"graph\",\n \"xaxis\": {\n \"buckets\": null,\n \"mode\": \"time\",\n \"name\": null,\n \"show\": true,\n \"values\": []\n },\n \"yaxes\": [\n {\n \"format\": \"short\",\n \"label\": null,\n \"logBase\": 1,\n \"max\": null,\n \"min\": \"0\",\n \"show\": true\n },\n {\n \"format\": \"short\",\n \"label\": null,\n \"logBase\": 1,\n \"max\": null,\n \"min\": null,\n \"show\": true\n }\n ]\n }\n ],\n \"repeat\": \"model_image\",\n \"repeatIteration\": null,\n \"repeatRowId\": null,\n \"showTitle\": false,\n \"title\": \"Model Metrics\",\n \"titleSize\": \"h6\"\n }\n ],\n \"schemaVersion\": 14,\n \"style\": \"dark\",\n \"tags\": [],\n \"templating\": {\n \"list\": [\n {\n \"allValue\": \".*\",\n \"current\": {},\n \"datasource\": \"prometheus\",\n \"hide\": 0,\n \"includeAll\": true,\n \"label\": null,\n \"multi\": true,\n \"name\": \"deployment\",\n \"options\": [],\n \"query\": \"label_values(seldon_api_engine_client_requests_seconds_count,deployment_name)\",\n \"refresh\": 1,\n \"regex\": \"\",\n \"sort\": 0,\n \"tagValuesQuery\": \"\",\n \"tags\": [],\n \"tagsQuery\": \"\",\n \"type\": \"query\",\n \"useTags\": false\n },\n {\n \"allValue\": \".*\",\n \"current\": {},\n \"datasource\": \"prometheus\",\n \"hide\": 0,\n \"includeAll\": true,\n \"label\": null,\n \"multi\": true,\n \"name\": \"predictor\",\n \"options\": [],\n \"query\": \"label_values(seldon_api_engine_client_requests_seconds_count,predictor_name)\",\n \"refresh\": 1,\n \"regex\": \"\",\n \"sort\": 0,\n \"tagValuesQuery\": \"\",\n \"tags\": [],\n \"tagsQuery\": \"\",\n \"type\": \"query\",\n \"useTags\": false\n },\n {\n \"allValue\": \".*\",\n \"current\": {},\n \"datasource\": \"prometheus\",\n \"hide\": 0,\n \"includeAll\": true,\n \"label\": null,\n \"multi\": true,\n \"name\": \"version\",\n \"options\": [],\n \"query\": \"label_values(seldon_api_engine_client_requests_seconds_count,predictor_version)\",\n \"refresh\": 1,\n \"regex\": \"\",\n \"sort\": 0,\n \"tagValuesQuery\": \"\",\n \"tags\": [],\n \"tagsQuery\": \"\",\n \"type\": \"query\",\n \"useTags\": false\n },\n {\n \"allValue\": \".*\",\n \"current\": {},\n \"datasource\": \"prometheus\",\n \"hide\": 0,\n \"includeAll\": true,\n \"label\": null,\n \"multi\": true,\n \"name\": \"model_name\",\n \"options\": [],\n \"query\": \"label_values(seldon_api_engine_client_requests_seconds_count,model_name)\",\n \"refresh\": 1,\n \"regex\": \"\",\n \"sort\": 0,\n \"tagValuesQuery\": \"\",\n \"tags\": [],\n \"tagsQuery\": \"\",\n \"type\": \"query\",\n \"useTags\": false\n },\n {\n \"allValue\": \".*\",\n \"current\": {},\n \"datasource\": \"prometheus\",\n \"hide\": 0,\n \"includeAll\": true,\n \"label\": null,\n \"multi\": true,\n \"name\": \"model_image\",\n \"options\": [],\n \"query\": \"label_values(seldon_api_engine_client_requests_seconds_count,model_image)\",\n \"refresh\": 1,\n \"regex\": \"\",\n \"sort\": 0,\n \"tagValuesQuery\": \"\",\n \"tags\": [],\n \"tagsQuery\": \"\",\n \"type\": \"query\",\n \"useTags\": false\n },\n {\n \"allValue\": \".*\",\n \"current\": {},\n \"datasource\": \"prometheus\",\n \"hide\": 0,\n \"includeAll\": true,\n \"label\": null,\n \"multi\": true,\n \"name\": \"model_version\",\n \"options\": [],\n \"query\": \"label_values(seldon_api_engine_client_requests_seconds_count,model_version)\",\n \"refresh\": 1,\n \"regex\": \"\",\n \"sort\": 0,\n \"tagValuesQuery\": \"\",\n \"tags\": [],\n \"tagsQuery\": \"\",\n \"type\": \"query\",\n \"useTags\": false\n }\n ]\n },\n \"time\": {\n \"from\": \"now-15m\",\n \"to\": \"now\"\n },\n \"timepicker\": {\n \"refresh_intervals\": [\n \"5s\",\n \"10s\",\n \"30s\",\n \"1m\",\n \"5m\",\n \"15m\",\n \"30m\",\n \"1h\",\n \"2h\",\n \"1d\"\n ],\n \"time_options\": [\n \"5m\",\n \"15m\",\n \"1h\",\n \"6h\",\n \"12h\",\n \"24h\",\n \"2d\",\n \"7d\",\n \"30d\"\n ]\n },\n \"timezone\": \"browser\",\n \"title\": \"Prediction Analytics\",\n \"version\": 1\n}\n", + "prometheus-datasource.json": "{\n \"access\": \"proxy\",\n \"basicAuth\": false,\n \"name\": \"prometheus\",\n \"type\": \"prometheus\",\n \"url\": \"http://prometheus-seldon\"\n}\n" + }, + "kind": "ConfigMap", + "metadata": { + "creationTimestamp": null, + "name": "grafana-import-dashboards", + "namespace": "default" + } + }, + { + "apiVersion": "v1", + "data": {}, + "kind": "ConfigMap", + "metadata": { + "creationTimestamp": null, + "name": "prometheus-rules", + "namespace": "default" + } + }, + { + "apiVersion": "v1", + "data": { + "prometheus-config.yaml": "---\nglobal:\n scrape_interval: 1s\n scrape_timeout: 1s\n evaluation_interval: 1s\nrule_files:\n- /etc/prometheus-rules/*.rules\nalerting:\n alertmanagers:\n - static_configs:\n - targets:\n - alertmanager\nscrape_configs:\n- job_name: kubernetes-nodes\n tls_config:\n ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt\n bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token\n kubernetes_sd_configs:\n - role: node\n relabel_configs:\n - source_labels:\n - __address__\n regex: (.*):10250\n replacement: ${1}:10255\n target_label: __address__\n- job_name: kubernetes-endpoints\n kubernetes_sd_configs:\n - role: endpoints\n relabel_configs:\n - source_labels:\n - __meta_kubernetes_service_annotation_prometheus_io_scrape\n action: keep\n regex: true\n - source_labels:\n - __meta_kubernetes_service_annotation_prometheus_io_scheme\n action: replace\n target_label: __scheme__\n regex: (https?)\n - source_labels:\n - __meta_kubernetes_service_annotation_prometheus_io_path\n action: replace\n target_label: __metrics_path__\n regex: (.+)\n - source_labels:\n - __address__\n - __meta_kubernetes_service_annotation_prometheus_io_port\n action: replace\n target_label: __address__\n regex: (.+)(?::\\d+);(\\d+)\n replacement: $1:$2\n - action: labelmap\n regex: __meta_kubernetes_service_label_(.+)\n - source_labels:\n - __meta_kubernetes_namespace\n action: replace\n target_label: kubernetes_namespace\n - source_labels:\n - __meta_kubernetes_service_name\n action: replace\n target_label: kubernetes_name\n- job_name: kubernetes-services\n metrics_path: /probe\n params:\n module:\n - http_2xx\n kubernetes_sd_configs:\n - role: service\n relabel_configs:\n - source_labels:\n - __meta_kubernetes_service_annotation_prometheus_io_probe\n action: keep\n regex: true\n - source_labels:\n - __address__\n target_label: __param_target\n - target_label: __address__\n replacement: blackbox\n - source_labels:\n - __param_target\n target_label: instance\n - action: labelmap\n regex: __meta_kubernetes_service_label_(.+)\n - source_labels:\n - __meta_kubernetes_namespace\n target_label: kubernetes_namespace\n - source_labels:\n - __meta_kubernetes_service_name\n target_label: kubernetes_name\n- job_name: kubernetes-pods\n kubernetes_sd_configs:\n - role: pod\n relabel_configs:\n - source_labels:\n - __meta_kubernetes_pod_annotation_prometheus_io_scrape\n action: keep\n regex: true\n - source_labels:\n - __meta_kubernetes_pod_annotation_prometheus_io_path\n action: replace\n target_label: __metrics_path__\n regex: (.+)\n - source_labels:\n - __address__\n - __meta_kubernetes_pod_annotation_prometheus_io_port\n action: replace\n regex: (.+):(?:\\d+);(\\d+)\n replacement: ${1}:${2}\n target_label: __address__\n - action: labelmap\n regex: __meta_kubernetes_pod_label_(.+)\n - source_labels:\n - __meta_kubernetes_namespace\n action: replace\n target_label: kubernetes_namespace\n - source_labels:\n - __meta_kubernetes_pod_name\n action: replace\n target_label: kubernetes_pod_name\n\n# Scrape config for Kubelet cAdvisor.\n# This is required for Kubernetes 1.7.3 and later, where cAdvisor metrics\n# (those whose names begin with 'container_') have been removed from the\n# Kubelet metrics endpoint. This job scrapes the cAdvisor endpoint to\n# retrieve those metrics.\n- job_name: 'kubernetes-cadvisor'\n # Default to scraping over https. If required, just disable this or change to\n # `http`.\n scheme: https\n tls_config:\n ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt\n bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token\n kubernetes_sd_configs:\n - role: node\n relabel_configs:\n - action: labelmap\n regex: __meta_kubernetes_node_label_(.+)\n - target_label: __address__\n replacement: kubernetes.default.svc:443\n - source_labels: [__meta_kubernetes_node_name]\n regex: (.+)\n target_label: __metrics_path__\n replacement: /api/v1/nodes/${1}/proxy/metrics/cadvisor\n\n\n" + }, + "kind": "ConfigMap", + "metadata": { + "creationTimestamp": null, + "name": "prometheus-server-conf", + "namespace": "default" + } + }, + { + "apiVersion": "rbac.authorization.k8s.io/v1beta1", + "kind": "ClusterRole", + "metadata": { + "name": "prometheus" + }, + "rules": [ + { + "apiGroups": [ + "" + ], + "resources": [ + "nodes", + "nodes/proxy", + "services", + "endpoints", + "pods" + ], + "verbs": [ + "get", + "list", + "watch" + ] + }, + { + "apiGroups": [ + "extensions" + ], + "resources": [ + "ingresses" + ], + "verbs": [ + "get", + "list", + "watch" + ] + }, + { + "nonResourceURLs": [ + "/metrics" + ], + "verbs": [ + "get" + ] + } + ] + }, + { + "apiVersion": "v1", + "kind": "ServiceAccount", + "metadata": { + "name": "prometheus", + "namespace": "default" + } + }, + { + "apiVersion": "rbac.authorization.k8s.io/v1beta1", + "kind": "ClusterRoleBinding", + "metadata": { + "name": "prometheus" + }, + "roleRef": { + "apiGroup": "rbac.authorization.k8s.io", + "kind": "ClusterRole", + "name": "prometheus" + }, + "subjects": [ + { + "kind": "ServiceAccount", + "name": "prometheus", + "namespace": "default" + } + ] + }, + { + "apiVersion": "extensions/v1beta1", + "kind": "Deployment", + "metadata": { + "name": "alertmanager-deployment", + "namespace": "default" + }, + "spec": { + "replicas": 1, + "template": { + "metadata": { + "annotations": { + "checksum/config-1": "fac3fe765942737059d486d209b1ece9cff9a4999ce30748345ba753602efe69" + }, + "labels": { + "app": "alertmanager-server" + } + }, + "spec": { + "containers": [ + { + "args": [ + "--config.file=/etc/alertmanager/conf/config.yaml", + "--storage.path=/seldon-data/alertmanager" + ], + "image": "prom/alertmanager:v0.15.3", + "name": "alertmanager", + "ports": [ + { + "containerPort": 9093, + "protocol": "TCP" + } + ], + "volumeMounts": [ + { + "mountPath": "/etc/alertmanager/conf/", + "name": "alertmanager-config-volume" + }, + { + "mountPath": "/seldon-data", + "name": "alertmanager-storage-volume" + } + ] + } + ], + "volumes": [ + { + "configMap": { + "name": "alertmanager-server-conf" + }, + "name": "alertmanager-config-volume" + }, + { + "name": "alertmanager-storage-volume", + "emptyDir": {} + } + ] + } + } + } + }, + { + "apiVersion": "v1", + "kind": "Service", + "metadata": { + "name": "alertmanager", + "namespace": "default" + }, + "spec": { + "ports": [ + { + "port": 80, + "protocol": "TCP", + "targetPort": 9093 + } + ], + "selector": { + "app": "alertmanager-server" + }, + "type": "ClusterIP" + } + }, + { + "apiVersion": "extensions/v1beta1", + "kind": "Deployment", + "metadata": { + "name": "grafana-prom-deployment", + "namespace": "default" + }, + "spec": { + "replicas": 1, + "template": { + "metadata": { + "labels": { + "app": "grafana-prom-server" + } + }, + "spec": { + "containers": [ + { + "env": [ + { + "name": "GF_SECURITY_ADMIN_PASSWORD", + "valueFrom": { + "secretKeyRef": { + "key": "grafana-prom-admin-password", + "name": "grafana-prom-secret" + } + } + } + ], + "image": "grafana/grafana:5.3.4", + "name": "grafana", + "ports": [ + { + "containerPort": 3000, + "protocol": "TCP" + } + ] + } + ] + } + } + } + }, + { + "apiVersion": "v1", + "kind": "Service", + "metadata": { + "name": "grafana-prom", + "namespace": "default" + }, + "spec": { + "ports": [ + { + "port": 80, + "protocol": "TCP", + "targetPort": 3000 + } + ], + "selector": { + "app": "grafana-prom-server" + }, + "type": "NodePort" + } + }, + { + "apiVersion": "batch/v1", + "kind": "Job", + "metadata": { + "name": "grafana-prom-import-dashboards", + "namespace": "default" + }, + "spec": { + "template": { + "metadata": { + "name": "import-dashboards" + }, + "spec": { + "containers": [ + { + "command": [ + "/bin/sh", + "import-dashboards-job.sh" + ], + "env": [ + { + "name": "GF_SECURITY_ADMIN_PASSWORD", + "valueFrom": { + "secretKeyRef": { + "key": "grafana-prom-admin-password", + "name": "grafana-prom-secret" + } + } + } + ], + "image": "giantswarm/tiny-tools:0.2.0", + "name": "tools", + "volumeMounts": [ + { + "mountPath": "/opt/grafana-import-dashboards", + "name": "config-volume" + } + ], + "workingDir": "/opt/grafana-import-dashboards" + } + ], + "restartPolicy": "Never", + "volumes": [ + { + "configMap": { + "name": "grafana-import-dashboards" + }, + "name": "config-volume" + } + ] + } + } + } + }, + { + "apiVersion": "extensions/v1beta1", + "kind": "DaemonSet", + "metadata": { + "labels": { + "app": "prometheus", + "component": "node-exporter" + }, + "name": "prometheus-node-exporter", + "namespace": "default" + }, + "spec": { + "template": { + "metadata": { + "labels": { + "app": "prometheus", + "component": "node-exporter" + }, + "name": "prometheus-node-exporter" + }, + "spec": { + "containers": [ + { + "image": "prom/node-exporter:v0.16.0", + "name": "prometheus-node-exporter", + "ports": [ + { + "containerPort": 9100, + "hostPort": 9100, + "name": "prom-node-exp" + } + ] + } + ], + "hostNetwork": true, + "hostPID": true + } + } + } + }, + { + "apiVersion": "v1", + "kind": "Service", + "metadata": { + "annotations": { + "prometheus.io/scrape": "true" + }, + "labels": { + "app": "prometheus", + "component": "node-exporter" + }, + "name": "prometheus-node-exporter", + "namespace": "default" + }, + "spec": { + "clusterIP": "None", + "ports": [ + { + "name": "prometheus-node-exporter", + "port": 9100, + "protocol": "TCP" + } + ], + "selector": { + "app": "prometheus", + "component": "node-exporter" + }, + "type": "ClusterIP" + } + }, + { + "apiVersion": "extensions/v1beta1", + "kind": "Deployment", + "metadata": { + "name": "prometheus-deployment", + "namespace": "default" + }, + "spec": { + "replicas": 1, + "template": { + "metadata": { + "annotations": { + "checksum/config-1": "aa8ae46fb637c3d3ae93c5fb2a888a7d1c91edae110ed8724b37fa06bedff3a4", + "checksum/config-2": "0481e22f3f995280d5f6a5fc86c1fc3b2960f2341068285be4cb81ec8f3b0190" + }, + "labels": { + "app": "prometheus-server" + } + }, + "spec": { + "serviceAccountName": "prometheus", + "containers": [ + { + "args": [ + "--config.file=/etc/prometheus/conf/prometheus-config.yaml", + "--storage.tsdb.path=/seldon-data/prometheus/data" + ], + "image": "prom/prometheus:v2.5.0", + "name": "prometheus", + "ports": [ + { + "containerPort": 9090, + "protocol": "TCP" + } + ], + "volumeMounts": [ + { + "mountPath": "/etc/prometheus/conf/", + "name": "prometheus-config-volume" + }, + { + "mountPath": "/etc/prometheus-rules", + "name": "prometheus-rules-volume" + }, + { + "mountPath": "/seldon-data", + "name": "prometheus-storage-volume" + } + ] + } + ], + "volumes": [ + { + "configMap": { + "name": "prometheus-server-conf" + }, + "name": "prometheus-config-volume" + }, + { + "configMap": { + "name": "prometheus-rules" + }, + "name": "prometheus-rules-volume" + }, + { + "name": "prometheus-storage-volume", + "emptyDir": {} + } + ] + } + } + } + }, + { + "apiVersion": "v1", + "kind": "Service", + "metadata": { + "name": "prometheus-seldon", + "namespace": "default" + }, + "spec": { + "ports": [ + { + "port": 80, + "protocol": "TCP", + "targetPort": 9090 + } + ], + "selector": { + "app": "prometheus-server" + }, + "type": "ClusterIP" + } + } + ] +} diff --git a/seldon-core/seldon-core-analytics/parts.yaml b/seldon-core/seldon-core-analytics/parts.yaml new file mode 100644 index 0000000000..56ea1ea76e --- /dev/null +++ b/seldon-core/seldon-core-analytics/parts.yaml @@ -0,0 +1,37 @@ +{ + "name": "seldon-core-analytics", + "apiVersion": "0.0.1", + "kind": "ksonnet.io/parts", + "description": "Seldon Core Analytics\n", + "author": "seldon-core team ", + "contributors": [ + { + "name": "Clive Cox", + "email": "cc@seldon.io" + } + ], + "repository": { + "type": "git", + "url": "https://github.com/SeldonIO/seldon-core/ksonnet/registry" + }, + "bugs": { + "url": "https://github.com/SeldonIO/seldon-core/issues" + }, + "keywords": [ + "kubernetes", + "machine learning", + "deployment", + "grafana", + "prometheus" + ], + "quickStart": { + "prototype": "io.ksonnet.pkg.seldon-core", + "componentName": "seldon-core-analytics", + "flags": { + "name": "seldon-core", + "namespace": "default" + }, + "comment": "Seldon Core Analytics" + }, + "license": "Apache 2.0" +} diff --git a/seldon-core/seldon-core-analytics/prototypes/analytics.jsonnet b/seldon-core/seldon-core-analytics/prototypes/analytics.jsonnet new file mode 100644 index 0000000000..ee286666d2 --- /dev/null +++ b/seldon-core/seldon-core-analytics/prototypes/analytics.jsonnet @@ -0,0 +1,47 @@ +// @apiVersion 0.1 +// @name io.ksonnet.pkg.seldon-core-analytics +// @description Seldon Core example Grafana and Prometheus installation +// @shortDescription Seldon Core Grafana amd Prometheus with example dashboards. +// @param name string seldon Name to give seldon analytics +// @optionalParam namespace string null Namespace to use for the components. It is automatically inherited from the environment if not set. +// @optionalParam password string admin Admin password for Grafana +// @optionalParam prometheusServiceType string ClusterIP Prometheus service type +// @optionalParam grafanaServiceType string NodePort Grafana service type + +local k = import "k.libsonnet"; +local analytics = import "seldon-core/seldon-core-analytics/analytics.libsonnet"; + +// updatedParams uses the environment namespace if +// the namespace parameter is not explicitly set +local updatedParams = params { + namespace: if params.namespace == "null" then env.namespace else params.namespace, +}; + +local name = import "param://name"; +local namespace = updatedParams.namespace; +local password = import "param://password"; +local prometheusServiceType = import "param://prometheusServiceType"; +local grafanaServiceType = import "param://grafanaServiceType"; + +// Analytics Resources +local resources = [ + analytics.parts(name, namespace).grafanaPromSecret(password), + analytics.parts(name, namespace).alertManagerServerConf(), + analytics.parts(name, namespace).grafanaImportDashboards(), + analytics.parts(name, namespace).prometheusRules(), + analytics.parts(name, namespace).prometheusServerConf(), + analytics.parts(name, namespace).prometheusClusterRole(), + analytics.parts(name, namespace).prometheusServiceAccount(), + analytics.parts(name, namespace).prometheusClusterRoleBinding(), + analytics.parts(name, namespace).alertManagerDeployment(), + analytics.parts(name, namespace).alertManagerService(), + analytics.parts(name, namespace).grafanaPromDeployment(), + analytics.parts(name, namespace).grafanaPromService(grafanaServiceType), + analytics.parts(name, namespace).grafanaPromJob(), + analytics.parts(name, namespace).prometheusExporter(), + analytics.parts(name, namespace).prometheusExporterService(), + analytics.parts(name, namespace).prometheusDeployment(), + analytics.parts(name, namespace).prometheusService(prometheusServiceType), +]; + +resources diff --git a/util/ksonnet/Makefile b/util/ksonnet/Makefile index 548d47937b..7facffedfb 100644 --- a/util/ksonnet/Makefile +++ b/util/ksonnet/Makefile @@ -1,4 +1,5 @@ -KSONNET_FOLDER=../../seldon-core/seldon-core/json +SC_KSONNET_FOLDER=../../seldon-core/seldon-core/json +SCA_KSONNET_FOLDER=../../seldon-core/seldon-core-analytics/json .PHONY: start-minikube start-minikube: @@ -29,14 +30,27 @@ template_0.1.yaml: seldon-core-release-0.1 template_0.1.json: template_0.1.yaml kubectl ./kubectl convert -f template_0.1.yaml -o json > template_0.1.json + +template_analytics.txt: + helm template ../../helm-charts/seldon-core-analytics > template_analytics.txt + +analytics.json: template_analytics.txt + python yj2j.py template_analytics.txt > analytics.json + +###### + .PHONY: build build: template_0.2_single_namespace.json template_0.2_cluster_wide.json template_0.1.json +.PHONY: release_analytics +release_analytics: + cp analytics.json ${SCA_KSONNET_FOLDER} + .PHONY: release release: - cp template_0.2_single_namespace.json ${KSONNET_FOLDER} - cp template_0.2_cluster_wide.json ${KSONNET_FOLDER} - cp template_0.1.json ${KSONNET_FOLDER} + cp template_0.2_single_namespace.json ${SC_KSONNET_FOLDER} + cp template_0.2_cluster_wide.json ${SC_KSONNET_FOLDER} + cp template_0.1.json ${SC_KSONNET_FOLDER} .PHONY: clean clean: @@ -44,3 +58,6 @@ clean: rm -f *.yaml rm -rf seldon-core-release-0.1 rm -f kubectl + rm -f template_analytics.txt + rm -f analytics.json + diff --git a/util/ksonnet/yj2j.py b/util/ksonnet/yj2j.py new file mode 100644 index 0000000000..2d8466c13c --- /dev/null +++ b/util/ksonnet/yj2j.py @@ -0,0 +1,38 @@ +import sys, yaml, json +import argparse + + +def main(): + parser = argparse.ArgumentParser() + parser.add_argument("input", type=str,help="Input file which contains list of json and yaml from helm template") + + args = parser.parse_args() + + with open(args.input, 'r') as myfile: + data=myfile.read() + + parts = data.split("---\n# Source") + + resources = [] + + for part in parts[1:]: + name = part.split("\n")[0] + lines = part.split("\n")[1:] + jory = "\n".join(lines) + if name.endswith(".yaml"): + items = yaml.load_all(jory) + for item in items: + resources.append(item) + else: + j = json.loads(jory) + if "kind" in j and j["kind"] == "List": + for item in j["items"]: + resources.append(item) + else: + resources.append(j) + + jlist = {"kind": "List","apiVersion": "v1","metadata": {},"items": resources} + json.dump(jlist, sys.stdout, indent=4) + +if __name__ == "__main__": + main() From 174c41e3cbef8cdbc076f69c59373d9d53de002e Mon Sep 17 00:00:00 2001 From: Clive Cox Date: Sat, 19 Jan 2019 15:30:29 +0000 Subject: [PATCH 2/2] Add analytics docs --- docs/install.md | 5 ++++- seldon-core/seldon-core-analytics/README.md | 23 +++++++++++++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) create mode 100644 seldon-core/seldon-core-analytics/README.md diff --git a/docs/install.md b/docs/install.md index 59d9cf6148..aca7de75c4 100644 --- a/docs/install.md +++ b/docs/install.md @@ -87,4 +87,7 @@ Notes # Next Steps - * [Jupyter notebooks showing worked examples](../readme.md#quick-start) \ No newline at end of file + * [Jupyter notebooks showing worked examples](../readme.md#quick-start) + * Seldon Core Analytics (example Prometheus and Grafana) + * [Helm Chart](../helm-charts/seldon-core-analytics) + * [Ksonnet Package](../seldon-core/seldon-core-analytics) \ No newline at end of file diff --git a/seldon-core/seldon-core-analytics/README.md b/seldon-core/seldon-core-analytics/README.md new file mode 100644 index 0000000000..cb2ae0b69b --- /dev/null +++ b/seldon-core/seldon-core-analytics/README.md @@ -0,0 +1,23 @@ +# Seldon Core Analytics + +This package provides an example Prometheus and Grafana install with default dashboard for Seldon Core. Its only intended for demonstration. In production you should create your own Prometheus and Grafana installation. + +## Install + + * Install seldon-core as described [here](../../docs/install.md#with-ksonnet) + * Install seldon-core-analytics. Parameters: + * ```password``` set the Grafana dashboard password - default 'admin' + * ```prometheusServiceType``` the Prometheus service type - default 'ClusterIP' + * ```grafanaServiceType``` the Grafama service type - default `NodePort` + +``` + ks pkg install seldon-core/seldon-core-analytics@master + ks generate seldon-core-analytics seldon-core-analytics +``` + * Launch components onto cluster + ``` + ks apply default + ``` +Notes + + * You can use ```--namespace``` to install seldon-core to a particular namespace