From 2ea98c7df9d19ef5fb6517159606b1415d6f05e2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan-Otto=20Kr=C3=B6pke?= Date: Fri, 26 Jul 2024 10:58:59 +0200 Subject: [PATCH] fix: Error "multiple matches for labels: many-to-one matching must be explicit (group_left/group_right)" on Kubernetes/Networking Dashboards MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Jan-Otto Kröpke --- .../network-usage/cluster-total.libsonnet | 204 +++++++++++++++--- 1 file changed, 180 insertions(+), 24 deletions(-) diff --git a/dashboards/network-usage/cluster-total.libsonnet b/dashboards/network-usage/cluster-total.libsonnet index 3bcfe1d28..14f6941ff 100644 --- a/dashboards/network-usage/cluster-total.libsonnet +++ b/dashboards/network-usage/cluster-total.libsonnet @@ -66,8 +66,16 @@ local var = g.dashboard.variable; + tsPanel.standardOptions.withUnit('binBps') + tsPanel.queryOptions.withTargets([ prometheus.new( - '${datasource}', - 'sum by (namespace) (rate(container_network_receive_bytes_total{%(clusterLabel)s="$cluster",namespace!=""}[%(grafanaIntervalVar)s]) * on (%(clusterLabel)s,namespace,pod) kube_pod_info{host_network="false"})' % $._config + '${datasource}', ||| + sum by (namespace) ( + rate(container_network_receive_bytes_total{%(clusterLabel)s="$cluster",namespace!=""}[%(grafanaIntervalVar)s]) + * on (%(clusterLabel)s,namespace,pod) group_left () + topk by (%(clusterLabel)s,namespace,pod) ( + 1, + max by (%(clusterLabel)s,namespace,pod) (kube_pod_info{host_network="false"}) + ) + ) + ||| % $._config ) + prometheus.withLegendFormat('__auto'), ]), @@ -76,8 +84,16 @@ local var = g.dashboard.variable; + tsPanel.standardOptions.withUnit('binBps') + tsPanel.queryOptions.withTargets([ prometheus.new( - '${datasource}', - 'sum by (namespace) (rate(container_network_transmit_bytes_total{%(clusterLabel)s="$cluster",namespace!=""}[%(grafanaIntervalVar)s]) * on (%(clusterLabel)s,namespace,pod) kube_pod_info{host_network="false"})' % $._config + '${datasource}', ||| + sum by (namespace) ( + rate(container_network_transmit_bytes_total{%(clusterLabel)s="$cluster",namespace!=""}[%(grafanaIntervalVar)s]) + * on (%(clusterLabel)s,namespace,pod) group_left () + topk by (%(clusterLabel)s,namespace,pod) ( + 1, + max by (%(clusterLabel)s,namespace,pod) (kube_pod_info{host_network="false"}) + ) + ) + ||| % $._config ) + prometheus.withLegendFormat('__auto'), ]), @@ -85,35 +101,107 @@ local var = g.dashboard.variable; table.new('Current Status') + table.gridPos.withW(24) + table.queryOptions.withTargets([ - prometheus.new('${datasource}', 'sum by (namespace) (rate(container_network_receive_bytes_total{%(clusterLabel)s="$cluster",namespace!=""}[%(grafanaIntervalVar)s]) * on (%(clusterLabel)s,namespace,pod) kube_pod_info{host_network="false"})' % $._config) + prometheus.new('${datasource}', ||| + sum by (namespace) ( + rate(container_network_receive_bytes_total{%(clusterLabel)s="$cluster",namespace!=""}[%(grafanaIntervalVar)s]) + * on (%(clusterLabel)s,namespace,pod) group_left () + topk by (%(clusterLabel)s,namespace,pod) ( + 1, + max by (%(clusterLabel)s,namespace,pod) (kube_pod_info{host_network="false"}) + ) + ) + ||| % $._config) + prometheus.withInstant(true) + prometheus.withFormat('table'), - prometheus.new('${datasource}', 'sum by (namespace) (rate(container_network_transmit_bytes_total{%(clusterLabel)s="$cluster",namespace!=""}[%(grafanaIntervalVar)s]) * on (%(clusterLabel)s,namespace,pod) kube_pod_info{host_network="false"})' % $._config) + prometheus.new('${datasource}', ||| + sum by (namespace) ( + rate(container_network_transmit_bytes_total{%(clusterLabel)s="$cluster",namespace!=""}[%(grafanaIntervalVar)s]) + * on (%(clusterLabel)s,namespace,pod) group_left () + topk by (%(clusterLabel)s,namespace,pod) ( + 1, + max by (%(clusterLabel)s,namespace,pod) (kube_pod_info{host_network="false"}) + ) + ) + ||| % $._config) + prometheus.withInstant(true) + prometheus.withFormat('table'), - prometheus.new('${datasource}', 'avg by (namespace) (rate(container_network_receive_bytes_total{%(clusterLabel)s="$cluster",namespace!=""}[%(grafanaIntervalVar)s]) * on (%(clusterLabel)s,namespace,pod) kube_pod_info{host_network="false"})' % $._config) + prometheus.new('${datasource}', ||| + avg by (namespace) ( + rate(container_network_receive_bytes_total{%(clusterLabel)s="$cluster",namespace!=""}[%(grafanaIntervalVar)s]) + * on (%(clusterLabel)s,namespace,pod) group_left () + topk by (%(clusterLabel)s,namespace,pod) ( + 1, + max by (%(clusterLabel)s,namespace,pod) (kube_pod_info{host_network="false"}) + ) + ) + ||| % $._config) + prometheus.withInstant(true) + prometheus.withFormat('table'), - prometheus.new('${datasource}', 'avg by (namespace) (rate(container_network_transmit_bytes_total{%(clusterLabel)s="$cluster",namespace!=""}[%(grafanaIntervalVar)s]) * on (%(clusterLabel)s,namespace,pod) kube_pod_info{host_network="false"})' % $._config) + prometheus.new('${datasource}', ||| + avg by (namespace) ( + rate(container_network_transmit_bytes_total{%(clusterLabel)s="$cluster",namespace!=""}[%(grafanaIntervalVar)s]) + * on (%(clusterLabel)s,namespace,pod) group_left () + topk by (%(clusterLabel)s,namespace,pod) ( + 1, + max by (%(clusterLabel)s,namespace,pod) (kube_pod_info{host_network="false"}) + ) + ) + ||| % $._config) + prometheus.withInstant(true) + prometheus.withFormat('table'), - prometheus.new('${datasource}', 'sum by (namespace) (rate(container_network_receive_packets_total{%(clusterLabel)s="$cluster",namespace!=""}[%(grafanaIntervalVar)s]) * on (%(clusterLabel)s,namespace,pod) kube_pod_info{host_network="false"})' % $._config) + prometheus.new('${datasource}', ||| + sum by (namespace) ( + rate(container_network_receive_packets_total{%(clusterLabel)s="$cluster",namespace!=""}[%(grafanaIntervalVar)s]) + * on (%(clusterLabel)s,namespace,pod) group_left () + topk by (%(clusterLabel)s,namespace,pod) ( + 1, + max by (%(clusterLabel)s,namespace,pod) (kube_pod_info{host_network="false"}) + ) + ) + ||| % $._config) + prometheus.withInstant(true) + prometheus.withFormat('table'), - prometheus.new('${datasource}', 'sum by (namespace) (rate(container_network_transmit_packets_total{%(clusterLabel)s="$cluster",namespace!=""}[%(grafanaIntervalVar)s]) * on (%(clusterLabel)s,namespace,pod) kube_pod_info{host_network="false"})' % $._config) + prometheus.new('${datasource}', ||| + sum by (namespace) ( + rate(container_network_transmit_packets_total{%(clusterLabel)s="$cluster",namespace!=""}[%(grafanaIntervalVar)s]) + * on (%(clusterLabel)s,namespace,pod) group_left () + topk by (%(clusterLabel)s,namespace,pod) ( + 1, + max by (%(clusterLabel)s,namespace,pod) (kube_pod_info{host_network="false"}) + ) + ) + ||| % $._config) + prometheus.withInstant(true) + prometheus.withFormat('table'), - prometheus.new('${datasource}', 'sum by (namespace) (rate(container_network_receive_packets_dropped_total{%(clusterLabel)s="$cluster",namespace!=""}[%(grafanaIntervalVar)s]) * on (%(clusterLabel)s,namespace,pod) kube_pod_info{host_network="false"})' % $._config) + prometheus.new('${datasource}', ||| + sum by (namespace) ( + rate(container_network_receive_packets_dropped_total{%(clusterLabel)s="$cluster",namespace!=""}[%(grafanaIntervalVar)s]) + * on (%(clusterLabel)s,namespace,pod) group_left () + topk by (%(clusterLabel)s,namespace,pod) ( + 1, + max by (%(clusterLabel)s,namespace,pod) (kube_pod_info{host_network="false"}) + ) + ) + ||| % $._config) + prometheus.withInstant(true) + prometheus.withFormat('table'), - prometheus.new('${datasource}', 'sum by (namespace) (rate(container_network_transmit_packets_dropped_total{%(clusterLabel)s="$cluster",namespace!=""}[%(grafanaIntervalVar)s]) * on (%(clusterLabel)s,namespace,pod) kube_pod_info{host_network="false"})' % $._config) + prometheus.new('${datasource}', ||| + sum by (namespace) ( + rate(container_network_transmit_packets_dropped_total{%(clusterLabel)s="$cluster",namespace!=""}[%(grafanaIntervalVar)s]) + * on (%(clusterLabel)s,namespace,pod) group_left () + topk by (%(clusterLabel)s,namespace,pod) ( + 1, + max by (%(clusterLabel)s,namespace,pod) (kube_pod_info{host_network="false"}) + ) + ) + ||| % $._config) + prometheus.withInstant(true) + prometheus.withFormat('table'), ]) @@ -213,8 +301,16 @@ local var = g.dashboard.variable; + tsPanel.standardOptions.withUnit('binBps') + tsPanel.queryOptions.withTargets([ prometheus.new( - '${datasource}', - 'avg by (namespace) (rate(container_network_receive_bytes_total{%(clusterLabel)s="$cluster",namespace!=""}[%(grafanaIntervalVar)s]) * on (%(clusterLabel)s,namespace,pod) kube_pod_info{host_network="false"})' % $._config + '${datasource}', ||| + avg by (namespace) ( + rate(container_network_receive_bytes_total{%(clusterLabel)s="$cluster",namespace!=""}[%(grafanaIntervalVar)s]) + * on (%(clusterLabel)s,namespace,pod) group_left () + topk by (%(clusterLabel)s,namespace,pod) ( + 1, + max by (%(clusterLabel)s,namespace,pod) (kube_pod_info{host_network="false"}) + ) + ) + ||| % $._config ) + prometheus.withLegendFormat('__auto'), ]), @@ -223,8 +319,16 @@ local var = g.dashboard.variable; + tsPanel.standardOptions.withUnit('binBps') + tsPanel.queryOptions.withTargets([ prometheus.new( - '${datasource}', - 'avg by (namespace) (rate(container_network_transmit_bytes_total{%(clusterLabel)s="$cluster",namespace!=""}[%(grafanaIntervalVar)s]) * on (%(clusterLabel)s,namespace,pod) kube_pod_info{host_network="false"})' % $._config + '${datasource}', ||| + avg by (namespace) ( + rate(container_network_transmit_bytes_total{%(clusterLabel)s="$cluster",namespace!=""}[%(grafanaIntervalVar)s]) + * on (%(clusterLabel)s,namespace,pod) group_left () + topk by (%(clusterLabel)s,namespace,pod) ( + 1, + max by (%(clusterLabel)s,namespace,pod) (kube_pod_info{host_network="false"}) + ) + ) + ||| % $._config ) + prometheus.withLegendFormat('__auto'), ]), @@ -233,8 +337,16 @@ local var = g.dashboard.variable; + tsPanel.standardOptions.withUnit('binBps') + tsPanel.queryOptions.withTargets([ prometheus.new( - '${datasource}', - 'sum by (namespace) (rate(container_network_receive_bytes_total{%(clusterLabel)s="$cluster",namespace!=""}[%(grafanaIntervalVar)s]) * on (%(clusterLabel)s,namespace,pod) kube_pod_info{host_network="false"})' % $._config + '${datasource}', ||| + sum by (namespace) ( + rate(container_network_receive_bytes_total{%(clusterLabel)s="$cluster",namespace!=""}[%(grafanaIntervalVar)s]) + * on (%(clusterLabel)s,namespace,pod) group_left () + topk by (%(clusterLabel)s,namespace,pod) ( + 1, + max by (%(clusterLabel)s,namespace,pod) (kube_pod_info{host_network="false"}) + ) + ) + ||| % $._config ) + prometheus.withLegendFormat('__auto'), ]), @@ -243,8 +355,16 @@ local var = g.dashboard.variable; + tsPanel.standardOptions.withUnit('binBps') + tsPanel.queryOptions.withTargets([ prometheus.new( - '${datasource}', - 'sum by (namespace) (rate(container_network_transmit_bytes_total{%(clusterLabel)s="$cluster",namespace!=""}[%(grafanaIntervalVar)s]) * on (%(clusterLabel)s,namespace,pod) kube_pod_info{host_network="false"})' % $._config + '${datasource}', ||| + sum by (namespace) ( + rate(container_network_transmit_bytes_total{%(clusterLabel)s="$cluster",namespace!=""}[%(grafanaIntervalVar)s]) + * on (%(clusterLabel)s,namespace,pod) group_left () + topk by (%(clusterLabel)s,namespace,pod) ( + 1, + max by (%(clusterLabel)s,namespace,pod) (kube_pod_info{host_network="false"}) + ) + ) + ||| % $._config ) + prometheus.withLegendFormat('__auto'), ]), @@ -252,28 +372,64 @@ local var = g.dashboard.variable; tsPanel.new('Rate of Received Packets') + tsPanel.standardOptions.withUnit('pps') + tsPanel.queryOptions.withTargets([ - prometheus.new('${datasource}', 'sum by (namespace) (rate(container_network_receive_packets_total{%(clusterLabel)s="$cluster",namespace!=""}[%(grafanaIntervalVar)s]) * on (%(clusterLabel)s,namespace,pod) kube_pod_info{host_network="false"})' % $._config) + prometheus.new('${datasource}', ||| + sum by (namespace) ( + rate(container_network_receive_packets_total{%(clusterLabel)s="$cluster",namespace!=""}[%(grafanaIntervalVar)s]) + * on (%(clusterLabel)s,namespace,pod) group_left () + topk by (%(clusterLabel)s,namespace,pod) ( + 1, + max by (%(clusterLabel)s,namespace,pod) (kube_pod_info{host_network="false"}) + ) + ) + ||| % $._config) + prometheus.withLegendFormat('__auto'), ]), tsPanel.new('Rate of Transmitted Packets') + tsPanel.standardOptions.withUnit('pps') + tsPanel.queryOptions.withTargets([ - prometheus.new('${datasource}', 'sum by (namespace) (rate(container_network_transmit_packets_total{%(clusterLabel)s="$cluster",namespace!=""}[%(grafanaIntervalVar)s]) * on (%(clusterLabel)s,namespace,pod) kube_pod_info{host_network="false"})' % $._config) + prometheus.new('${datasource}', ||| + sum by (namespace) ( + rate(container_network_transmit_packets_total{%(clusterLabel)s="$cluster",namespace!=""}[%(grafanaIntervalVar)s]) + * on (%(clusterLabel)s,namespace,pod) group_left () + topk by (%(clusterLabel)s,namespace,pod) ( + 1, + max by (%(clusterLabel)s,namespace,pod) (kube_pod_info{host_network="false"}) + ) + ) + ||| % $._config) + prometheus.withLegendFormat('__auto'), ]), tsPanel.new('Rate of Received Packets Dropped') + tsPanel.standardOptions.withUnit('pps') + tsPanel.queryOptions.withTargets([ - prometheus.new('${datasource}', 'sum by (namespace) (rate(container_network_receive_packets_dropped_total{%(clusterLabel)s="$cluster",namespace!=""}[%(grafanaIntervalVar)s]) * on (%(clusterLabel)s,namespace,pod) kube_pod_info{host_network="false"})' % $._config) + prometheus.new('${datasource}', ||| + sum by (namespace) ( + rate(container_network_receive_packets_dropped_total{%(clusterLabel)s="$cluster",namespace!=""}[%(grafanaIntervalVar)s]) + * on (%(clusterLabel)s,namespace,pod) group_left () + topk by (%(clusterLabel)s,namespace,pod) ( + 1, + max by (%(clusterLabel)s,namespace,pod) (kube_pod_info{host_network="false"}) + ) + ) + ||| % $._config) + prometheus.withLegendFormat('__auto'), ]), tsPanel.new('Rate of Transmitted Packets Dropped') + tsPanel.standardOptions.withUnit('pps') + tsPanel.queryOptions.withTargets([ - prometheus.new('${datasource}', 'sum by (namespace) (rate(container_network_transmit_packets_dropped_total{%(clusterLabel)s="$cluster",namespace!=""}[%(grafanaIntervalVar)s]) * on (%(clusterLabel)s,namespace,pod) kube_pod_info{host_network="false"})' % $._config) + prometheus.new('${datasource}', ||| + sum by (namespace) ( + rate(container_network_transmit_packets_dropped_total{%(clusterLabel)s="$cluster",namespace!=""}[%(grafanaIntervalVar)s]) + * on (%(clusterLabel)s,namespace,pod) group_left () + topk by (%(clusterLabel)s,namespace,pod) ( + 1, + max by (%(clusterLabel)s,namespace,pod) (kube_pod_info{host_network="false"}) + ) + ) + ||| % $._config) + prometheus.withLegendFormat('__auto'), ]),