From 760d173a1904589bca343adb52ede599a97dcffa Mon Sep 17 00:00:00 2001 From: Stefan Reimer Date: Tue, 20 Apr 2021 12:49:29 +0200 Subject: [PATCH 01/21] feat: improved update strategy and timing to reduce 5XX during istio ingress deployments --- charts/kubezero-istio-ingress/Chart.yaml | 2 +- .../bootstrap-config.yaml | 48 +++++++++++++++++++ .../istio-ingress/templates/deployment.yaml | 9 +++- .../templates/deployment.yaml | 9 +++- charts/kubezero-istio-ingress/values.yaml | 22 ++++++--- charts/kubezero-istio/.gitignore | 2 +- charts/kubezero-istio/Chart.yaml | 2 +- .../ingress-terminationgraceperiod.patch | 12 ----- charts/kubezero-istio/istio-discovery.patch | 16 ------- charts/kubezero-istio/update.sh | 41 ++++++++-------- charts/kubezero-istio/values.yaml | 6 +-- charts/kubezero-istio/zdt.patch | 47 ++++++++++++++++++ 12 files changed, 150 insertions(+), 66 deletions(-) create mode 100644 charts/kubezero-istio-ingress/bootstrap-config.yaml delete mode 100644 charts/kubezero-istio/ingress-terminationgraceperiod.patch delete mode 100644 charts/kubezero-istio/istio-discovery.patch create mode 100644 charts/kubezero-istio/zdt.patch diff --git a/charts/kubezero-istio-ingress/Chart.yaml b/charts/kubezero-istio-ingress/Chart.yaml index a2d0f39..a478d3a 100644 --- a/charts/kubezero-istio-ingress/Chart.yaml +++ b/charts/kubezero-istio-ingress/Chart.yaml @@ -2,7 +2,7 @@ apiVersion: v2 name: kubezero-istio-ingress description: KubeZero Umbrella Chart for Istio based Ingress type: application -version: 0.5.2 +version: 0.5.4 appVersion: 1.9.3 home: https://kubezero.com icon: https://cdn.zero-downtime.net/assets/kubezero/logo-small-64.png diff --git a/charts/kubezero-istio-ingress/bootstrap-config.yaml b/charts/kubezero-istio-ingress/bootstrap-config.yaml new file mode 100644 index 0000000..fb39ddc --- /dev/null +++ b/charts/kubezero-istio-ingress/bootstrap-config.yaml @@ -0,0 +1,48 @@ +# https://www.envoyproxy.io/docs/envoy/v1.17.1/configuration/best_practices/edge#configuring-envoy-as-an-edge-proxy +# https://github.com/istio/istio/issues/24715 + +apiVersion: v1 +kind: ConfigMap +metadata: + name: istio-gateway-bootstrap-config + namespace: {{ .Release.Namespace }} +data: + custom_bootstrap.json: | + { + "overload_manager": { + "actions": [ + { + "name": "envoy.overload_actions.shrink_heap", + "triggers": [ + { + "name": "envoy.resource_monitors.fixed_heap", + "threshold": { + "value": 0.9 + } + } + ] + }, + { + "name": "envoy.overload_actions.stop_accepting_requests", + "triggers": [ + { + "name": "envoy.resource_monitors.fixed_heap", + "threshold": { + "value": 0.99 + } + } + ] + } + ], + "refresh_interval": "0.25s", + "resource_monitors": [ + { + "name": "envoy.resource_monitors.fixed_heap", + "typed_config": { + "@type": "type.googleapis.com/envoy.extensions.resource_monitors.fixed_heap.v3.FixedHeapConfig", + "max_heap_size_bytes": 536870912 + } + } + ] + } + } diff --git a/charts/kubezero-istio-ingress/charts/istio-ingress/templates/deployment.yaml b/charts/kubezero-istio-ingress/charts/istio-ingress/templates/deployment.yaml index 70af55a..0c10978 100644 --- a/charts/kubezero-istio-ingress/charts/istio-ingress/templates/deployment.yaml +++ b/charts/kubezero-istio-ingress/charts/istio-ingress/templates/deployment.yaml @@ -17,6 +17,8 @@ spec: {{- if $gateway.replicaCount }} replicas: {{ $gateway.replicaCount }} {{- end }} + # Give the LB 120s to detect and take into service, should only be 40s by we are on AWS so ?? + minReadySeconds: 120 {{- end }} selector: matchLabels: @@ -69,7 +71,7 @@ spec: {{- if .Values.global.priorityClassName }} priorityClassName: "{{ .Values.global.priorityClassName }}" {{- end }} - terminationGracePeriodSeconds: 90 + terminationGracePeriodSeconds: 120 {{- if .Values.global.proxy.enableCoreDump }} initContainers: - name: enable-core-dump @@ -141,6 +143,11 @@ spec: privileged: false readOnlyRootFilesystem: true {{- end }} + #This needs kube-proxy support coming with 1.22 hopefully, cilium ? + #lifecycle: + # preStop: + # exec: + # command: ["/bin/sh","-c","sleep 30"] readinessProbe: failureThreshold: 30 httpGet: diff --git a/charts/kubezero-istio-ingress/charts/istio-private-ingress/templates/deployment.yaml b/charts/kubezero-istio-ingress/charts/istio-private-ingress/templates/deployment.yaml index 70af55a..0c10978 100644 --- a/charts/kubezero-istio-ingress/charts/istio-private-ingress/templates/deployment.yaml +++ b/charts/kubezero-istio-ingress/charts/istio-private-ingress/templates/deployment.yaml @@ -17,6 +17,8 @@ spec: {{- if $gateway.replicaCount }} replicas: {{ $gateway.replicaCount }} {{- end }} + # Give the LB 120s to detect and take into service, should only be 40s by we are on AWS so ?? + minReadySeconds: 120 {{- end }} selector: matchLabels: @@ -69,7 +71,7 @@ spec: {{- if .Values.global.priorityClassName }} priorityClassName: "{{ .Values.global.priorityClassName }}" {{- end }} - terminationGracePeriodSeconds: 90 + terminationGracePeriodSeconds: 120 {{- if .Values.global.proxy.enableCoreDump }} initContainers: - name: enable-core-dump @@ -141,6 +143,11 @@ spec: privileged: false readOnlyRootFilesystem: true {{- end }} + #This needs kube-proxy support coming with 1.22 hopefully, cilium ? + #lifecycle: + # preStop: + # exec: + # command: ["/bin/sh","-c","sleep 30"] readinessProbe: failureThreshold: 30 httpGet: diff --git a/charts/kubezero-istio-ingress/values.yaml b/charts/kubezero-istio-ingress/values.yaml index c26f8a6..79642a1 100644 --- a/charts/kubezero-istio-ingress/values.yaml +++ b/charts/kubezero-istio-ingress/values.yaml @@ -21,6 +21,8 @@ istio-ingress: istio-ingressgateway: autoscaleEnabled: false replicaCount: 1 + rollingMaxSurge: 1 + rollingMaxUnavailable: 0 resources: requests: cpu: 50m @@ -35,9 +37,8 @@ istio-ingress: topologyKey: kubernetes.io/hostname values: istio-ingressgateway type: NodePort - env: - TERMINATION_DRAIN_DURATION_SECONDS: '"60"' - # ISTIO_META_HTTP10: '"1"' + #podAnnotations: + # sidecar.istio.io/bootstrapOverride: istio-gateway-bootstrap-config # The node selector is normally the list of nodeports, see CloudBender nodeSelector: node.kubernetes.io/ingress.public: "30080_30443" @@ -72,6 +73,11 @@ istio-ingress: dnsNames: [] # - '*.example.com' + meshConfig: + defaultConfig: + proxyMetadata: + # ISTIO_META_HTTP10: 1 + istio-private-ingress: enabled: false @@ -85,6 +91,8 @@ istio-private-ingress: autoscaleEnabled: false replicaCount: 1 + rollingMaxSurge: 1 + rollingMaxUnavailable: 0 resources: requests: cpu: 50m @@ -99,13 +107,9 @@ istio-private-ingress: topologyKey: kubernetes.io/hostname values: istio-private-ingressgateway type: NodePort - env: - TERMINATION_DRAIN_DURATION_SECONDS: '"60"' - # ISTIO_META_HTTP10: '"1"' nodeSelector: node.kubernetes.io/ingress.private: "31080_31443" #nodeSelector: "31080_31443_31671_31672_31224" - ports: - name: status-port port: 15021 @@ -149,3 +153,7 @@ istio-private-ingress: dnsNames: [] # - '*.example.com' + meshConfig: + defaultConfig: + proxyMetadata: + # ISTIO_META_HTTP10: 1 diff --git a/charts/kubezero-istio/.gitignore b/charts/kubezero-istio/.gitignore index b4a6b6b..3c48b60 100644 --- a/charts/kubezero-istio/.gitignore +++ b/charts/kubezero-istio/.gitignore @@ -1,2 +1,2 @@ istioctl -istio-?.?.? +istio diff --git a/charts/kubezero-istio/Chart.yaml b/charts/kubezero-istio/Chart.yaml index f65d058..6710665 100644 --- a/charts/kubezero-istio/Chart.yaml +++ b/charts/kubezero-istio/Chart.yaml @@ -2,7 +2,7 @@ apiVersion: v2 name: kubezero-istio description: KubeZero Umbrella Chart for Istio type: application -version: 0.5.3 +version: 0.5.4 appVersion: 1.9.3 home: https://kubezero.com icon: https://cdn.zero-downtime.net/assets/kubezero/logo-small-64.png diff --git a/charts/kubezero-istio/ingress-terminationgraceperiod.patch b/charts/kubezero-istio/ingress-terminationgraceperiod.patch deleted file mode 100644 index 0d3e465..0000000 --- a/charts/kubezero-istio/ingress-terminationgraceperiod.patch +++ /dev/null @@ -1,12 +0,0 @@ -diff --git a/charts/kubezero-istio-ingress/charts/istio-ingress/templates/deployment.yaml b/charts/kubezero-istio-ingress/charts/istio-ingress/templates/deployment.yaml -index b69da65..b5137a4 100644 ---- a/charts/kubezero-istio-ingress/charts/istio-ingress/templates/deployment.yaml -+++ b/charts/kubezero-istio-ingress/charts/istio-ingress/templates/deployment.yaml -@@ -63,6 +63,7 @@ spec: - {{- if .Values.global.priorityClassName }} - priorityClassName: "{{ .Values.global.priorityClassName }}" - {{- end }} -+ terminationGracePeriodSeconds: 90 - {{- if .Values.global.proxy.enableCoreDump }} - initContainers: - - name: enable-core-dump diff --git a/charts/kubezero-istio/istio-discovery.patch b/charts/kubezero-istio/istio-discovery.patch deleted file mode 100644 index 9a1940c..0000000 --- a/charts/kubezero-istio/istio-discovery.patch +++ /dev/null @@ -1,16 +0,0 @@ -diff --git a/charts/kubezero-istio/charts/istio-discovery/templates/deployment.yaml b/charts/kubezero-istio/charts/istio-discovery/templates/deployment.yaml -index e4a983a..ba586de 100644 ---- a/charts/kubezero-istio/charts/istio-discovery/templates/deployment.yaml -+++ b/charts/kubezero-istio/charts/istio-discovery/templates/deployment.yaml -@@ -59,6 +59,11 @@ spec: - {{- end }} - securityContext: - fsGroup: 1337 -+ nodeSelector: -+ node-role.kubernetes.io/master: "" -+ tolerations: -+ - effect: NoSchedule -+ key: node-role.kubernetes.io/master - containers: - - name: discovery - {{- if contains "/" .Values.pilot.image }} diff --git a/charts/kubezero-istio/update.sh b/charts/kubezero-istio/update.sh index 16df9f1..98b2ca3 100755 --- a/charts/kubezero-istio/update.sh +++ b/charts/kubezero-istio/update.sh @@ -3,35 +3,32 @@ set -ex export ISTIO_VERSION=1.9.3 -if [ ! -d istio-$ISTIO_VERSION ]; then - NAME="istio-$ISTIO_VERSION" - URL="https://github.com/istio/istio/releases/download/${ISTIO_VERSION}/istio-${ISTIO_VERSION}-linux-amd64.tar.gz" - - curl -sL "$URL" | tar xz -fi - -# Extract control plane charts -rm -rf charts/base charts/istio-* -cp -r istio-${ISTIO_VERSION}/manifests/charts/base charts/ -cp -r istio-${ISTIO_VERSION}/manifests/charts/istio-control/istio-discovery charts/ - -# Patch for istiod to control plane -patch -p3 -i istio-discovery.patch --no-backup-if-mismatch +rm -rf istio +curl -sL "https://github.com/istio/istio/releases/download/${ISTIO_VERSION}/istio-${ISTIO_VERSION}-linux-amd64.tar.gz" | tar xz +mv istio-${ISTIO_VERSION} istio # remove unused old telemetry filters -rm -f charts/istio-discovery/templates/telemetryv2_1.[678].yaml +rm -f istio/manifests/charts/istio-control/istio-discovery/templates/telemetryv2_1.[678].yaml -# Ingress charts +# Patch +patch -p0 -i zdt.patch --no-backup-if-mismatch + +### Create kubezero istio charts + +# remove previous charts +rm -rf charts/base charts/istio-* + +# create istio main chart +cp -r istio/manifests/charts/base charts/ +cp -r istio/manifests/charts/istio-control/istio-discovery charts/ + +# Create ingress charts rm -rf ../kubezero-istio-ingress/charts/istio-* -cp -r istio-${ISTIO_VERSION}/manifests/charts/gateways/istio-ingress ../kubezero-istio-ingress/charts/ -cp -r istio-${ISTIO_VERSION}/manifests/charts/gateways/istio-ingress ../kubezero-istio-ingress/charts/istio-private-ingress +cp -r istio/manifests/charts/gateways/istio-ingress ../kubezero-istio-ingress/charts/ +cp -r istio/manifests/charts/gateways/istio-ingress ../kubezero-istio-ingress/charts/istio-private-ingress # Rename private chart sed -i -e 's/name: istio-ingress/name: istio-private-ingress/' ../kubezero-istio-ingress/charts/istio-private-ingress/Chart.yaml -# Patch for ingress for extended termination grace period -patch -i ingress-terminationgraceperiod.patch ../kubezero-istio-ingress/charts/istio-ingress/templates/deployment.yaml --no-backup-if-mismatch -patch -i ingress-terminationgraceperiod.patch ../kubezero-istio-ingress/charts/istio-private-ingress/templates/deployment.yaml --no-backup-if-mismatch - # Get matching istioctl [ -x istioctl ] && [ "$(./istioctl version --remote=false)" == $ISTIO_VERSION ] || { curl -sL https://github.com/istio/istio/releases/download/${ISTIO_VERSION}/istioctl-${ISTIO_VERSION}-linux-amd64.tar.gz | tar xz; chmod +x istioctl; } diff --git a/charts/kubezero-istio/values.yaml b/charts/kubezero-istio/values.yaml index 7b5c7b6..ad1fe62 100644 --- a/charts/kubezero-istio/values.yaml +++ b/charts/kubezero-istio/values.yaml @@ -1,6 +1,6 @@ global: # hub: docker.io/istio - # tag: 1.9.0 + # tag: 1.9.3 logAsJson: true jwtPolicy: first-party-jwt @@ -36,9 +36,7 @@ istio-discovery: meshConfig: defaultConfig: - terminationDrainDuration: 60s -# proxyMetadata: -# ISTIO_META_HTTP10: '"1"' + terminationDrainDuration: 20s accessLogFile: /dev/stdout accessLogEncoding: 'JSON' h2UpgradePolicy: 'DO_NOT_UPGRADE' diff --git a/charts/kubezero-istio/zdt.patch b/charts/kubezero-istio/zdt.patch new file mode 100644 index 0000000..0a15bb9 --- /dev/null +++ b/charts/kubezero-istio/zdt.patch @@ -0,0 +1,47 @@ +diff -turN istio/manifests/charts/gateways/istio-ingress/templates/deployment.yaml istio.zdt/manifests/charts/gateways/istio-ingress/templates/deployment.yaml +--- istio/manifests/charts/gateways/istio-ingress/templates/deployment.yaml 2021-04-11 01:57:29.000000000 +0200 ++++ istio.zdt/manifests/charts/gateways/istio-ingress/templates/deployment.yaml 2021-04-20 12:20:04.401862116 +0200 +@@ -17,6 +17,8 @@ + {{- if $gateway.replicaCount }} + replicas: {{ $gateway.replicaCount }} + {{- end }} ++ # Give the LB 120s to detect and take into service, should only be 40s by we are on AWS so ?? ++ minReadySeconds: 120 + {{- end }} + selector: + matchLabels: +@@ -69,6 +71,7 @@ + {{- if .Values.global.priorityClassName }} + priorityClassName: "{{ .Values.global.priorityClassName }}" + {{- end }} ++ terminationGracePeriodSeconds: 120 + {{- if .Values.global.proxy.enableCoreDump }} + initContainers: + - name: enable-core-dump +@@ -140,6 +143,11 @@ + privileged: false + readOnlyRootFilesystem: true + {{- end }} ++ #This needs kube-proxy support coming with 1.22 hopefully, cilium ? ++ #lifecycle: ++ # preStop: ++ # exec: ++ # command: ["/bin/sh","-c","sleep 30"] + readinessProbe: + failureThreshold: 30 + httpGet: +diff -turN istio/manifests/charts/istio-control/istio-discovery/templates/deployment.yaml istio.zdt/manifests/charts/istio-control/istio-discovery/templates/deployment.yaml +--- istio/manifests/charts/istio-control/istio-discovery/templates/deployment.yaml 2021-04-11 01:57:29.000000000 +0200 ++++ istio.zdt/manifests/charts/istio-control/istio-discovery/templates/deployment.yaml 2021-04-19 21:55:45.461749267 +0200 +@@ -60,6 +60,11 @@ + {{- end }} + securityContext: + fsGroup: 1337 ++ nodeSelector: ++ node-role.kubernetes.io/master: "" ++ tolerations: ++ - effect: NoSchedule ++ key: node-role.kubernetes.io/master + containers: + - name: discovery + {{- if contains "/" .Values.pilot.image }} -- 2.40.1 From 155ae6f719fce9d90b580f19308423b17d74da2d Mon Sep 17 00:00:00 2001 From: Stefan Reimer Date: Tue, 20 Apr 2021 16:33:45 +0200 Subject: [PATCH 02/21] feat: introduce ingress proxy recommended hardening/uning settings --- .../{ => templates}/bootstrap-config.yaml | 15 +++- .../templates/envoyfilter-hardening.yaml | 36 ++++++++++ .../templates/envoyfilter-keepalive-nlb.yaml | 31 ++++++++ .../templates/envoyfilter.yaml | 70 ------------------- charts/kubezero-istio-ingress/values.yaml | 16 ++++- charts/kubezero-istio/.gitignore | 1 + charts/kubezero-istio/values.yaml | 6 -- 7 files changed, 95 insertions(+), 80 deletions(-) rename charts/kubezero-istio-ingress/{ => templates}/bootstrap-config.yaml (72%) create mode 100644 charts/kubezero-istio-ingress/templates/envoyfilter-hardening.yaml create mode 100644 charts/kubezero-istio-ingress/templates/envoyfilter-keepalive-nlb.yaml delete mode 100644 charts/kubezero-istio-ingress/templates/envoyfilter.yaml diff --git a/charts/kubezero-istio-ingress/bootstrap-config.yaml b/charts/kubezero-istio-ingress/templates/bootstrap-config.yaml similarity index 72% rename from charts/kubezero-istio-ingress/bootstrap-config.yaml rename to charts/kubezero-istio-ingress/templates/bootstrap-config.yaml index fb39ddc..bf2c386 100644 --- a/charts/kubezero-istio-ingress/bootstrap-config.yaml +++ b/charts/kubezero-istio-ingress/templates/bootstrap-config.yaml @@ -1,6 +1,6 @@ # https://www.envoyproxy.io/docs/envoy/v1.17.1/configuration/best_practices/edge#configuring-envoy-as-an-edge-proxy # https://github.com/istio/istio/issues/24715 - +{{- if or (index .Values "istio-ingress" "enabled") (index .Values "istio-private-ingress" "enabled") }} apiVersion: v1 kind: ConfigMap metadata: @@ -39,10 +39,21 @@ data: { "name": "envoy.resource_monitors.fixed_heap", "typed_config": { - "@type": "type.googleapis.com/envoy.extensions.resource_monitors.fixed_heap.v3.FixedHeapConfig", + "@type": "type.googleapis.com/envoy.config.resource_monitor.fixed_heap.v2alpha.FixedHeapConfig", "max_heap_size_bytes": 536870912 } } ] + }, + "layeredRuntime": { + "layers": [ + { + "name": "static_layer_0", + "staticLayer": { + "overload.global_downstream_max_connections": 50000 + } + } + ] } } +{{- end }} diff --git a/charts/kubezero-istio-ingress/templates/envoyfilter-hardening.yaml b/charts/kubezero-istio-ingress/templates/envoyfilter-hardening.yaml new file mode 100644 index 0000000..5d6a29a --- /dev/null +++ b/charts/kubezero-istio-ingress/templates/envoyfilter-hardening.yaml @@ -0,0 +1,36 @@ +{{- if or (index .Values "istio-ingress" "enabled") (index .Values "istio-private-ingress" "enabled") }} +apiVersion: networking.istio.io/v1alpha3 +kind: EnvoyFilter +metadata: + name: ingressgateway-hardening + namespace: {{ .Release.Namespace }} +spec: + configPatches: + - applyTo: CLUSTER + patch: + operation: MERGE + value: + connect_timeout: 15s + per_connection_buffer_limit_bytes: 32768 # 32 KiB + - applyTo: NETWORK_FILTER + match: + listener: + filterChain: + filter: + name: "envoy.filters.network.http_connection_manager" + patch: + operation: MERGE + value: + name: "envoy.filters.network.http_connection_manager" + typed_config: + "@type": "type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager" + common_http_protocol_options: + idle_timeout: 3600s # 1 hour + # headers_with_underscores_action: REJECT_REQUEST + http2_protocol_options: + max_concurrent_streams: 500 + initial_stream_window_size: 65536 # 64 KiB + initial_connection_window_size: 1048576 # 1 MiB + #stream_idle_timeout: 300s # 5 mins, must be disabled for long-lived and streaming requests + #request_timeout: 300s # 5 mins, must be disabled for long-lived and streaming requests +{{- end }} diff --git a/charts/kubezero-istio-ingress/templates/envoyfilter-keepalive-nlb.yaml b/charts/kubezero-istio-ingress/templates/envoyfilter-keepalive-nlb.yaml new file mode 100644 index 0000000..da8feea --- /dev/null +++ b/charts/kubezero-istio-ingress/templates/envoyfilter-keepalive-nlb.yaml @@ -0,0 +1,31 @@ +{{- if or (index .Values "istio-ingress" "enabled") (index .Values "istio-private-ingress" "enabled") }} +apiVersion: networking.istio.io/v1alpha3 +kind: EnvoyFilter +metadata: + name: ingressgateway-listener-tcp-keepalive + namespace: {{ .Release.Namespace }} +spec: + configPatches: + - applyTo: LISTENER + patch: + operation: MERGE + value: + socket_options: + # SOL_SOCKET = 1 + # SO_KEEPALIVE = 9 + - level: 1 + name: 9 + int_value: 1 + state: STATE_LISTENING + # IPPROTO_TCP = 6 + # TCP_KEEPIDLE = 4 + - level: 6 + name: 4 + int_value: 60 + state: STATE_LISTENING + # TCP_KEEPINTVL = 5 + - level: 6 + name: 5 + int_value: 60 + state: STATE_LISTENING +{{- end }} diff --git a/charts/kubezero-istio-ingress/templates/envoyfilter.yaml b/charts/kubezero-istio-ingress/templates/envoyfilter.yaml deleted file mode 100644 index f11e290..0000000 --- a/charts/kubezero-istio-ingress/templates/envoyfilter.yaml +++ /dev/null @@ -1,70 +0,0 @@ -{{- if index .Values "istio-ingress" "enabled" }} -apiVersion: networking.istio.io/v1alpha3 -kind: EnvoyFilter -metadata: - name: ingressgateway-listener-tcp-keepalive - namespace: {{ .Release.Namespace }} -spec: - workloadSelector: - labels: - istio: ingressgateway - configPatches: - - applyTo: LISTENER - patch: - operation: MERGE - value: - socket_options: - # SOL_SOCKET = 1 - # SO_KEEPALIVE = 9 - - level: 1 - name: 9 - int_value: 1 - state: STATE_LISTENING - # IPPROTO_TCP = 6 - # TCP_KEEPIDLE = 4 - - level: 6 - name: 4 - int_value: 60 - state: STATE_LISTENING - # TCP_KEEPINTVL = 5 - - level: 6 - name: 5 - int_value: 60 - state: STATE_LISTENING -{{- end }} - -{{- if index .Values "istio-private-ingress" "enabled" }} ---- -apiVersion: networking.istio.io/v1alpha3 -kind: EnvoyFilter -metadata: - name: private-ingressgateway-listener-tcp-keepalive - namespace: {{ .Release.Namespace }} -spec: - workloadSelector: - labels: - istio: private-ingressgateway - configPatches: - - applyTo: LISTENER - patch: - operation: MERGE - value: - socket_options: - # SOL_SOCKET = 1 - # SO_KEEPALIVE = 9 - - level: 1 - name: 9 - int_value: 1 - state: STATE_LISTENING - # IPPROTO_TCP = 6 - # TCP_KEEPIDLE = 4 - - level: 6 - name: 4 - int_value: 60 - state: STATE_LISTENING - # TCP_KEEPINTVL = 5 - - level: 6 - name: 5 - int_value: 60 - state: STATE_LISTENING -{{- end }} diff --git a/charts/kubezero-istio-ingress/values.yaml b/charts/kubezero-istio-ingress/values.yaml index 79642a1..0cf503a 100644 --- a/charts/kubezero-istio-ingress/values.yaml +++ b/charts/kubezero-istio-ingress/values.yaml @@ -37,8 +37,17 @@ istio-ingress: topologyKey: kubernetes.io/hostname values: istio-ingressgateway type: NodePort - #podAnnotations: - # sidecar.istio.io/bootstrapOverride: istio-gateway-bootstrap-config + podAnnotations: + proxy.istio.io/config: '{ "terminationDrainDuration": "20s" }' + + # custom hardened bootstrap config + env: + ISTIO_BOOTSTRAP_OVERRIDE: /etc/istio/custom-bootstrap/custom_bootstrap.json + configVolumes: + - name: custom-bootstrap-volume + mountPath: /etc/istio/custom-bootstrap + configMapName: istio-gateway-bootstrap-config + # The node selector is normally the list of nodeports, see CloudBender nodeSelector: node.kubernetes.io/ingress.public: "30080_30443" @@ -107,6 +116,9 @@ istio-private-ingress: topologyKey: kubernetes.io/hostname values: istio-private-ingressgateway type: NodePort + podAnnotations: + # sidecar.istio.io/bootstrapOverride: istio-gateway-bootstrap-config + proxy.istio.io/config: '{ "terminationDrainDuration": "20s" }' nodeSelector: node.kubernetes.io/ingress.private: "31080_31443" #nodeSelector: "31080_31443_31671_31672_31224" diff --git a/charts/kubezero-istio/.gitignore b/charts/kubezero-istio/.gitignore index 3c48b60..07f190b 100644 --- a/charts/kubezero-istio/.gitignore +++ b/charts/kubezero-istio/.gitignore @@ -1,2 +1,3 @@ istioctl istio +istio.zdt diff --git a/charts/kubezero-istio/values.yaml b/charts/kubezero-istio/values.yaml index ad1fe62..04e34d5 100644 --- a/charts/kubezero-istio/values.yaml +++ b/charts/kubezero-istio/values.yaml @@ -35,11 +35,5 @@ istio-discovery: enabled: false meshConfig: - defaultConfig: - terminationDrainDuration: 20s accessLogFile: /dev/stdout accessLogEncoding: 'JSON' - h2UpgradePolicy: 'DO_NOT_UPGRADE' - tcpKeepalive: - interval: 30s - time: 60s -- 2.40.1 From 4fdf4a10b0b142226557ba064d6cafa7c0657d74 Mon Sep 17 00:00:00 2001 From: Stefan Reimer Date: Wed, 21 Apr 2021 16:13:40 +0200 Subject: [PATCH 03/21] chore: Rename timemachine to timecapsule --- .../Chart.yaml | 2 +- .../README.md | 2 +- .../charts/gemini/Chart.yaml | 0 .../charts/gemini/README.md | 0 .../charts/gemini/README.md.gotmpl | 0 .../charts/gemini/ci/test-values.yaml | 0 .../charts/gemini/logo.png | Bin .../charts/gemini/templates/NOTES.txt | 0 .../charts/gemini/templates/_helpers.tpl | 0 .../charts/gemini/templates/deployment.yaml | 0 .../charts/gemini/templates/rbac.yaml | 0 .../charts/gemini/templates/test_crd.yaml | 0 .../charts/gemini/values.yaml | 0 .../run-on-controller.patch | 0 .../update.sh | 0 .../values.yaml | 0 charts/kubezero/bootstrap.sh | 9 +++++++++ charts/kubezero/templates/argoless.yaml | 2 +- charts/kubezero/templates/timecapsule.yaml | 8 ++++++++ charts/kubezero/templates/timemachine.yaml | 8 -------- charts/kubezero/values.yaml | 2 +- 21 files changed, 21 insertions(+), 12 deletions(-) rename charts/{kubezero-timemachine => kubezero-timecapsule}/Chart.yaml (93%) rename charts/{kubezero-timemachine => kubezero-timecapsule}/README.md (97%) rename charts/{kubezero-timemachine => kubezero-timecapsule}/charts/gemini/Chart.yaml (100%) rename charts/{kubezero-timemachine => kubezero-timecapsule}/charts/gemini/README.md (100%) rename charts/{kubezero-timemachine => kubezero-timecapsule}/charts/gemini/README.md.gotmpl (100%) rename charts/{kubezero-timemachine => kubezero-timecapsule}/charts/gemini/ci/test-values.yaml (100%) rename charts/{kubezero-timemachine => kubezero-timecapsule}/charts/gemini/logo.png (100%) rename charts/{kubezero-timemachine => kubezero-timecapsule}/charts/gemini/templates/NOTES.txt (100%) rename charts/{kubezero-timemachine => kubezero-timecapsule}/charts/gemini/templates/_helpers.tpl (100%) rename charts/{kubezero-timemachine => kubezero-timecapsule}/charts/gemini/templates/deployment.yaml (100%) rename charts/{kubezero-timemachine => kubezero-timecapsule}/charts/gemini/templates/rbac.yaml (100%) rename charts/{kubezero-timemachine => kubezero-timecapsule}/charts/gemini/templates/test_crd.yaml (100%) rename charts/{kubezero-timemachine => kubezero-timecapsule}/charts/gemini/values.yaml (100%) rename charts/{kubezero-timemachine => kubezero-timecapsule}/run-on-controller.patch (100%) rename charts/{kubezero-timemachine => kubezero-timecapsule}/update.sh (100%) rename charts/{kubezero-timemachine => kubezero-timecapsule}/values.yaml (100%) create mode 100644 charts/kubezero/templates/timecapsule.yaml delete mode 100644 charts/kubezero/templates/timemachine.yaml diff --git a/charts/kubezero-timemachine/Chart.yaml b/charts/kubezero-timecapsule/Chart.yaml similarity index 93% rename from charts/kubezero-timemachine/Chart.yaml rename to charts/kubezero-timecapsule/Chart.yaml index 42b2930..85de2fd 100644 --- a/charts/kubezero-timemachine/Chart.yaml +++ b/charts/kubezero-timecapsule/Chart.yaml @@ -1,5 +1,5 @@ apiVersion: v2 -name: kubezero-timemachine +name: kubezero-timecapsule description: KubeZero umbrella chart for all things backup type: application version: 0.1.0 diff --git a/charts/kubezero-timemachine/README.md b/charts/kubezero-timecapsule/README.md similarity index 97% rename from charts/kubezero-timemachine/README.md rename to charts/kubezero-timecapsule/README.md index 4a885b3..83a0581 100644 --- a/charts/kubezero-timemachine/README.md +++ b/charts/kubezero-timecapsule/README.md @@ -1,4 +1,4 @@ -# kubezero-timemachine +# kubezero-timecapsule ![Version: 0.1.0](https://img.shields.io/badge/Version-0.1.0-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) diff --git a/charts/kubezero-timemachine/charts/gemini/Chart.yaml b/charts/kubezero-timecapsule/charts/gemini/Chart.yaml similarity index 100% rename from charts/kubezero-timemachine/charts/gemini/Chart.yaml rename to charts/kubezero-timecapsule/charts/gemini/Chart.yaml diff --git a/charts/kubezero-timemachine/charts/gemini/README.md b/charts/kubezero-timecapsule/charts/gemini/README.md similarity index 100% rename from charts/kubezero-timemachine/charts/gemini/README.md rename to charts/kubezero-timecapsule/charts/gemini/README.md diff --git a/charts/kubezero-timemachine/charts/gemini/README.md.gotmpl b/charts/kubezero-timecapsule/charts/gemini/README.md.gotmpl similarity index 100% rename from charts/kubezero-timemachine/charts/gemini/README.md.gotmpl rename to charts/kubezero-timecapsule/charts/gemini/README.md.gotmpl diff --git a/charts/kubezero-timemachine/charts/gemini/ci/test-values.yaml b/charts/kubezero-timecapsule/charts/gemini/ci/test-values.yaml similarity index 100% rename from charts/kubezero-timemachine/charts/gemini/ci/test-values.yaml rename to charts/kubezero-timecapsule/charts/gemini/ci/test-values.yaml diff --git a/charts/kubezero-timemachine/charts/gemini/logo.png b/charts/kubezero-timecapsule/charts/gemini/logo.png similarity index 100% rename from charts/kubezero-timemachine/charts/gemini/logo.png rename to charts/kubezero-timecapsule/charts/gemini/logo.png diff --git a/charts/kubezero-timemachine/charts/gemini/templates/NOTES.txt b/charts/kubezero-timecapsule/charts/gemini/templates/NOTES.txt similarity index 100% rename from charts/kubezero-timemachine/charts/gemini/templates/NOTES.txt rename to charts/kubezero-timecapsule/charts/gemini/templates/NOTES.txt diff --git a/charts/kubezero-timemachine/charts/gemini/templates/_helpers.tpl b/charts/kubezero-timecapsule/charts/gemini/templates/_helpers.tpl similarity index 100% rename from charts/kubezero-timemachine/charts/gemini/templates/_helpers.tpl rename to charts/kubezero-timecapsule/charts/gemini/templates/_helpers.tpl diff --git a/charts/kubezero-timemachine/charts/gemini/templates/deployment.yaml b/charts/kubezero-timecapsule/charts/gemini/templates/deployment.yaml similarity index 100% rename from charts/kubezero-timemachine/charts/gemini/templates/deployment.yaml rename to charts/kubezero-timecapsule/charts/gemini/templates/deployment.yaml diff --git a/charts/kubezero-timemachine/charts/gemini/templates/rbac.yaml b/charts/kubezero-timecapsule/charts/gemini/templates/rbac.yaml similarity index 100% rename from charts/kubezero-timemachine/charts/gemini/templates/rbac.yaml rename to charts/kubezero-timecapsule/charts/gemini/templates/rbac.yaml diff --git a/charts/kubezero-timemachine/charts/gemini/templates/test_crd.yaml b/charts/kubezero-timecapsule/charts/gemini/templates/test_crd.yaml similarity index 100% rename from charts/kubezero-timemachine/charts/gemini/templates/test_crd.yaml rename to charts/kubezero-timecapsule/charts/gemini/templates/test_crd.yaml diff --git a/charts/kubezero-timemachine/charts/gemini/values.yaml b/charts/kubezero-timecapsule/charts/gemini/values.yaml similarity index 100% rename from charts/kubezero-timemachine/charts/gemini/values.yaml rename to charts/kubezero-timecapsule/charts/gemini/values.yaml diff --git a/charts/kubezero-timemachine/run-on-controller.patch b/charts/kubezero-timecapsule/run-on-controller.patch similarity index 100% rename from charts/kubezero-timemachine/run-on-controller.patch rename to charts/kubezero-timecapsule/run-on-controller.patch diff --git a/charts/kubezero-timemachine/update.sh b/charts/kubezero-timecapsule/update.sh similarity index 100% rename from charts/kubezero-timemachine/update.sh rename to charts/kubezero-timecapsule/update.sh diff --git a/charts/kubezero-timemachine/values.yaml b/charts/kubezero-timecapsule/values.yaml similarity index 100% rename from charts/kubezero-timemachine/values.yaml rename to charts/kubezero-timecapsule/values.yaml diff --git a/charts/kubezero/bootstrap.sh b/charts/kubezero/bootstrap.sh index b1eb0ae..bdebbf6 100755 --- a/charts/kubezero/bootstrap.sh +++ b/charts/kubezero/bootstrap.sh @@ -193,6 +193,15 @@ function kiam-post() { } +########### +# Metrics # +########### +# Cleanup patch jobs from previous runs , ArgoCD does this automatically +function metrics-pre() { + kubectl delete jobs --field-selector status.successful=1 -n monitoring +} + + ########### # Logging # ########### diff --git a/charts/kubezero/templates/argoless.yaml b/charts/kubezero/templates/argoless.yaml index 9a733d1..b6796fa 100644 --- a/charts/kubezero/templates/argoless.yaml +++ b/charts/kubezero/templates/argoless.yaml @@ -1,6 +1,6 @@ {{- if not .Values.argo }} -{{- $artifacts := list "calico" "cert-manager" "kiam" "aws-node-termination-handler" "aws-ebs-csi-driver" "aws-efs-csi-driver" "local-volume-provisioner" "local-path-provisioner" "istio" "istio-ingress" "metrics" "logging" "argocd" "timemachine" }} +{{- $artifacts := list "calico" "cert-manager" "kiam" "aws-node-termination-handler" "aws-ebs-csi-driver" "aws-efs-csi-driver" "local-volume-provisioner" "local-path-provisioner" "istio" "istio-ingress" "metrics" "logging" "argocd" "timecapsule" }} {{- if .Values.global }} global: diff --git a/charts/kubezero/templates/timecapsule.yaml b/charts/kubezero/templates/timecapsule.yaml new file mode 100644 index 0000000..61e8994 --- /dev/null +++ b/charts/kubezero/templates/timecapsule.yaml @@ -0,0 +1,8 @@ +{{- define "timecapsule-values" }} +{{- end }} + + +{{- define "timecapsule-argo" }} +{{- end }} + +{{ include "kubezero-app.app" . }} diff --git a/charts/kubezero/templates/timemachine.yaml b/charts/kubezero/templates/timemachine.yaml deleted file mode 100644 index 5a55717..0000000 --- a/charts/kubezero/templates/timemachine.yaml +++ /dev/null @@ -1,8 +0,0 @@ -{{- define "timemachine-values" }} -{{- end }} - - -{{- define "timemachine-argo" }} -{{- end }} - -{{ include "kubezero-app.app" . }} diff --git a/charts/kubezero/values.yaml b/charts/kubezero/values.yaml index 7fd05c5..826642b 100644 --- a/charts/kubezero/values.yaml +++ b/charts/kubezero/values.yaml @@ -23,7 +23,7 @@ kiam: aws-node-termination-handler: enabled: false -timemachine: +timecapsule: enabled: false local-volume-provisioner: -- 2.40.1 From 92d7a56004993ec40349395a2d644122a599bef6 Mon Sep 17 00:00:00 2001 From: Stefan Reimer Date: Thu, 22 Apr 2021 11:59:18 +0200 Subject: [PATCH 04/21] feat: First version of KubeZero NATS module --- charts/kubezero-nats/Chart.yaml | 17 + charts/kubezero-nats/README.md | 24 + charts/kubezero-nats/README.md.gotmpl | 19 + charts/kubezero-nats/charts/nats/Chart.yaml | 21 + charts/kubezero-nats/charts/nats/README.md | 586 ++++++++++++++++++ .../charts/nats/templates/NOTES.txt | 26 + .../charts/nats/templates/_helpers.tpl | 95 +++ .../charts/nats/templates/configmap.yaml | 337 ++++++++++ .../charts/nats/templates/nats-box.yaml | 75 +++ .../charts/nats/templates/pdb.yaml | 21 + .../charts/nats/templates/rbac.yaml | 31 + .../charts/nats/templates/service.yaml | 38 ++ .../charts/nats/templates/serviceMonitor.yaml | 40 ++ .../charts/nats/templates/statefulset.yaml | 449 ++++++++++++++ charts/kubezero-nats/charts/nats/values.yaml | 347 +++++++++++ charts/kubezero-nats/update.sh | 9 + charts/kubezero-nats/values.yaml | 21 + charts/kubezero/templates/argoless.yaml | 2 +- charts/kubezero/templates/nats.yaml | 8 + charts/kubezero/values.yaml | 4 + 20 files changed, 2169 insertions(+), 1 deletion(-) create mode 100644 charts/kubezero-nats/Chart.yaml create mode 100644 charts/kubezero-nats/README.md create mode 100644 charts/kubezero-nats/README.md.gotmpl create mode 100644 charts/kubezero-nats/charts/nats/Chart.yaml create mode 100644 charts/kubezero-nats/charts/nats/README.md create mode 100644 charts/kubezero-nats/charts/nats/templates/NOTES.txt create mode 100644 charts/kubezero-nats/charts/nats/templates/_helpers.tpl create mode 100644 charts/kubezero-nats/charts/nats/templates/configmap.yaml create mode 100644 charts/kubezero-nats/charts/nats/templates/nats-box.yaml create mode 100644 charts/kubezero-nats/charts/nats/templates/pdb.yaml create mode 100644 charts/kubezero-nats/charts/nats/templates/rbac.yaml create mode 100644 charts/kubezero-nats/charts/nats/templates/service.yaml create mode 100644 charts/kubezero-nats/charts/nats/templates/serviceMonitor.yaml create mode 100644 charts/kubezero-nats/charts/nats/templates/statefulset.yaml create mode 100644 charts/kubezero-nats/charts/nats/values.yaml create mode 100755 charts/kubezero-nats/update.sh create mode 100644 charts/kubezero-nats/values.yaml create mode 100644 charts/kubezero/templates/nats.yaml diff --git a/charts/kubezero-nats/Chart.yaml b/charts/kubezero-nats/Chart.yaml new file mode 100644 index 0000000..67b2eed --- /dev/null +++ b/charts/kubezero-nats/Chart.yaml @@ -0,0 +1,17 @@ +apiVersion: v2 +name: kubezero-nats +description: KubeZero umbrella chart for NATS +type: application +version: 0.1.0 +home: https://kubezero.com +icon: https://cdn.zero-downtime.net/assets/kubezero/logo-small-64.png +keywords: + - kubezero + - nats +maintainers: + - name: Quarky9 +dependencies: + - name: nats + version: 0.8.3 + #repository: https://nats-io.github.io/k8s/helm/charts/ +kubeVersion: ">= 1.18.0" diff --git a/charts/kubezero-nats/README.md b/charts/kubezero-nats/README.md new file mode 100644 index 0000000..d294049 --- /dev/null +++ b/charts/kubezero-nats/README.md @@ -0,0 +1,24 @@ +# kubezero-nats + +![Version: 0.1.0](https://img.shields.io/badge/Version-0.1.0-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) + +KubeZero umbrella chart for NATS + +**Homepage:** + +## Maintainers + +| Name | Email | Url | +| ---- | ------ | --- | +| Quarky9 | | | + +## Requirements + +Kubernetes: `>= 1.18.0` + +| Repository | Name | Version | +|------------|------|---------| +| | nats | 0.8.3 | + +---------------------------------------------- +Autogenerated from chart metadata using [helm-docs v1.5.0](https://github.com/norwoodj/helm-docs/releases/v1.5.0) diff --git a/charts/kubezero-nats/README.md.gotmpl b/charts/kubezero-nats/README.md.gotmpl new file mode 100644 index 0000000..099d661 --- /dev/null +++ b/charts/kubezero-nats/README.md.gotmpl @@ -0,0 +1,19 @@ +{{ template "chart.header" . }} +{{ template "chart.deprecationWarning" . }} + +{{ template "chart.versionBadge" . }}{{ template "chart.typeBadge" . }}{{ template "chart.appVersionBadge" . }} + +{{ template "chart.description" . }} + +{{ template "chart.homepageLine" . }} + +{{ template "chart.maintainersSection" . }} + +{{ template "chart.sourcesSection" . }} + +{{ template "chart.requirementsSection" . }} + +{{ template "chart.valuesSection" . }} + +## Resources +- https://grafana.com/grafana/dashboards/13707 diff --git a/charts/kubezero-nats/charts/nats/Chart.yaml b/charts/kubezero-nats/charts/nats/Chart.yaml new file mode 100644 index 0000000..9684e5a --- /dev/null +++ b/charts/kubezero-nats/charts/nats/Chart.yaml @@ -0,0 +1,21 @@ +apiVersion: v2 +appVersion: "2.1.9" +description: A Helm chart for the NATS.io High Speed Cloud Native Distributed Communications Technology. +name: nats +keywords: + - nats + - messaging + - cncf +version: 0.8.3 +home: http://github.com/nats-io/k8s +maintainers: + - name: Waldemar Quevedo + github: https://github.com/wallyqs + email: wally@nats.io + - name: Colin Sullivan + github: https://github.com/ColinSullivan1 + email: colin@nats.io + - name: Jaime PiƱa + github: https://github.com/variadico + email: jaime@nats.io +icon: https://nats.io/img/nats-icon-color.png diff --git a/charts/kubezero-nats/charts/nats/README.md b/charts/kubezero-nats/charts/nats/README.md new file mode 100644 index 0000000..d358961 --- /dev/null +++ b/charts/kubezero-nats/charts/nats/README.md @@ -0,0 +1,586 @@ +# NATS Server + +[NATS](https://nats.io) is a simple, secure and performant communications system for digital systems, services and devices. NATS is part of the Cloud Native Computing Foundation ([CNCF](https://cncf.io)). NATS has over [30 client language implementations](https://nats.io/download/), and its server can run on-premise, in the cloud, at the edge, and even on a Raspberry Pi. NATS can secure and simplify design and operation of modern distributed systems. + +## TL;DR; + +```console +helm repo add nats https://nats-io.github.io/k8s/helm/charts/ +helm install my-nats nats/nats +``` + +## Configuration + +### Server Image + +```yaml +nats: + image: nats:2.1.7-alpine3.11 + pullPolicy: IfNotPresent +``` + +### Limits + +```yaml +nats: + # The number of connect attempts against discovered routes. + connectRetries: 30 + + # How many seconds should pass before sending a PING + # to a client that has no activity. + pingInterval: + + # Server settings. + limits: + maxConnections: + maxSubscriptions: + maxControlLine: + maxPayload: + + writeDeadline: + maxPending: + maxPings: + lameDuckDuration: + + # Number of seconds to wait for client connections to end after the pod termination is requested + terminationGracePeriodSeconds: 60 +``` + +### Logging + +*Note*: It is not recommended to enable trace or debug in production since enabling it will significantly degrade performance. + +```yaml +nats: + logging: + debug: + trace: + logtime: + connectErrorReports: + reconnectErrorReports: +``` + +### TLS setup for client connections + +You can find more on how to setup and trouble shoot TLS connnections at: +https://docs.nats.io/nats-server/configuration/securing_nats/tls + +```yaml +nats: + tls: + secret: + name: nats-client-tls + ca: "ca.crt" + cert: "tls.crt" + key: "tls.key" +``` + +## Clustering + +If clustering is enabled, then a 3-node cluster will be setup. More info at: +https://docs.nats.io/nats-server/configuration/clustering#nats-server-clustering + +```yaml +cluster: + enabled: true + replicas: 3 + + tls: + secret: + name: nats-server-tls + ca: "ca.crt" + cert: "tls.crt" + key: "tls.key" +``` + +Example: + +```sh +$ helm install nats nats/nats --set cluster.enabled=true +``` + +## Leafnodes + +Leafnode connections to extend a cluster. More info at: +https://docs.nats.io/nats-server/configuration/leafnodes + +```yaml +leafnodes: + enabled: true + remotes: + - url: "tls://connect.ngs.global:7422" + + ####################### + # # + # TLS Configuration # + # # + ####################### + # + # # You can find more on how to setup and trouble shoot TLS connnections at: + # + # # https://docs.nats.io/nats-server/configuration/securing_nats/tls + # + tls: + secret: + name: nats-client-tls + ca: "ca.crt" + cert: "tls.crt" + key: "tls.key" +``` + +## Setting up External Access + +### Using HostPorts + +In case of both external access and advertisements being enabled, an +initializer container will be used to gather the public ips. This +container will required to have enough RBAC policy to be able to make a +look up of the public ip of the node where it is running. + +For example, to setup external access for a cluster and advertise the public ip to clients: + +```yaml +nats: + # Toggle whether to enable external access. + # This binds a host port for clients, gateways and leafnodes. + externalAccess: true + + # Toggle to disable client advertisements (connect_urls), + # in case of running behind a load balancer (which is not recommended) + # it might be required to disable advertisements. + advertise: true + + # In case both external access and advertise are enabled + # then a service account would be required to be able to + # gather the public ip from a node. + serviceAccount: "nats-server" +``` + +Where the service account named `nats-server` has the following RBAC policy for example: + +```yaml +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + name: nats-server + namespace: default +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: nats-server +rules: +- apiGroups: [""] + resources: + - nodes + verbs: ["get"] +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: nats-server-binding +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: nats-server +subjects: +- kind: ServiceAccount + name: nats-server + namespace: default +``` + +The container image of the initializer can be customized via: + +```yaml +bootconfig: + image: connecteverything/nats-boot-config:0.5.2 + pullPolicy: IfNotPresent +``` + +### Using LoadBalancers + +In case of using a load balancer for external access, it is recommended to disable no advertise +so that internal ips from the NATS Servers are not advertised to the clients connecting through +the load balancer. + +```yaml +nats: + image: nats:alpine + +cluster: + enabled: true + noAdvertise: true + +leafnodes: + enabled: true + noAdvertise: true + +natsbox: + enabled: true +``` + +Then could use an L4 enabled load balancer to connect to NATS, for example: + +```yaml +apiVersion: v1 +kind: Service +metadata: + name: nats-lb +spec: + type: LoadBalancer + selector: + app: nats + ports: + - protocol: TCP + port: 4222 + targetPort: 4222 + name: nats + - protocol: TCP + port: 7422 + targetPort: 7422 + name: leafnodes + - protocol: TCP + port: 7522 + targetPort: 7522 + name: gateways +``` + +## Gateways + +A super cluster can be formed by pointing to remote gateways. +You can find more about gateways in the NATS documentation: +https://docs.nats.io/nats-server/configuration/gateways + +```yaml +gateway: + enabled: false + name: 'default' + + ############################# + # # + # List of remote gateways # + # # + ############################# + # gateways: + # - name: other + # url: nats://my-gateway-url:7522 + + ####################### + # # + # TLS Configuration # + # # + ####################### + # + # # You can find more on how to setup and trouble shoot TLS connnections at: + # + # # https://docs.nats.io/nats-server/configuration/securing_nats/tls + # + # tls: + # secret: + # name: nats-client-tls + # ca: "ca.crt" + # cert: "tls.crt" + # key: "tls.key" +``` + +## Auth setup + +### Auth with a Memory Resolver + +```yaml +auth: + enabled: true + + # Reference to the Operator JWT. + operatorjwt: + configMap: + name: operator-jwt + key: KO.jwt + + # Public key of the System Account + systemAccount: + + resolver: + ############################ + # # + # Memory resolver settings # + # # + ############################## + type: memory + + # + # Use a configmap reference which will be mounted + # into the container. + # + configMap: + name: nats-accounts + key: resolver.conf +``` + +### Auth using an Account Server Resolver + +```yaml +auth: + enabled: true + + # Reference to the Operator JWT. + operatorjwt: + configMap: + name: operator-jwt + key: KO.jwt + + # Public key of the System Account + systemAccount: + + resolver: + ########################## + # # + # URL resolver settings # + # # + ########################## + type: URL + url: "http://nats-account-server:9090/jwt/v1/accounts/" +``` + +## JetStream + +### Setting up Memory and File Storage + +```yaml +nats: + image: synadia/nats-server:nightly + + jetstream: + enabled: true + + memStorage: + enabled: true + size: 2Gi + + fileStorage: + enabled: true + size: 1Gi + storageDirectory: /data/ + storageClassName: default +``` + +### Using with an existing PersistentVolumeClaim + +For example, given the following `PersistentVolumeClaim`: + +```yaml +--- +kind: PersistentVolumeClaim +apiVersion: v1 +metadata: + name: nats-js-disk + annotations: + volume.beta.kubernetes.io/storage-class: "default" +spec: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 3Gi +``` + +You can start JetStream so that one pod is bounded to it: + +```yaml +nats: + image: synadia/nats-server:nightly + + jetstream: + enabled: true + + fileStorage: + enabled: true + storageDirectory: /data/ + existingClaim: nats-js-disk + claimStorageSize: 3Gi +``` + +### Clustering example + +```yaml + +nats: + image: synadia/nats-server:nightly + + jetstream: + enabled: true + + memStorage: + enabled: true + size: "2Gi" + + fileStorage: + enabled: true + size: "1Gi" + storageDirectory: /data/ + storageClassName: default + +cluster: + enabled: true + # Cluster name is required, by default will be release name. + # name: "nats" + replicas: 3 +``` + +## Misc + +### NATS Box + +A lightweight container with NATS and NATS Streaming utilities that is deployed along the cluster to confirm the setup. +You can find the image at: https://github.com/nats-io/nats-box + +```yaml +natsbox: + enabled: true + image: synadia/nats-box:latest + pullPolicy: IfNotPresent + + # credentials: + # secret: + # name: nats-sys-creds + # key: sys.creds +``` + +### Configuration Reload sidecar + +The NATS config reloader image to use: + +```yaml +reloader: + enabled: true + image: connecteverything/nats-server-config-reloader:0.6.0 + pullPolicy: IfNotPresent +``` + +### Prometheus Exporter sidecar + +You can toggle whether to start the sidecar that can be used to feed metrics to Prometheus: + +```yaml +exporter: + enabled: true + image: synadia/prometheus-nats-exporter:0.5.0 + pullPolicy: IfNotPresent +``` + +### Prometheus operator ServiceMonitor support + +You can enable prometheus operator ServiceMonitor: + +```yaml +exporter: + # You have to enable exporter first + enabled: true + serviceMonitor: + enabled: true + ## Specify the namespace where Prometheus Operator is running + # namespace: monitoring + # ... +``` + +### Pod Customizations + +#### Security Context + +```yaml + # Toggle whether to use setup a Pod Security Context + # ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/ +securityContext: + fsGroup: 1000 + runAsUser: 1000 + runAsNonRoot: true +``` + +#### Affinity + + + +`matchExpressions` must be configured according to your setup + +```yaml +affinity: + nodeAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + nodeSelectorTerms: + - matchExpressions: + - key: node.kubernetes.io/purpose + operator: In + values: + - nats + podAntiAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + - labelSelector: + matchExpressions: + - key: app + operator: In + values: + - nats + - stan + topologyKey: "kubernetes.io/hostname" +``` + +#### Service topology + +[Service topology](https://kubernetes.io/docs/concepts/services-networking/service-topology/) is disabled by default, but can be enabled by setting `topologyKeys`. For example: + +```yaml +topologyKeys: + - "kubernetes.io/hostname" + - "topology.kubernetes.io/zone" + - "topology.kubernetes.io/region" +``` + +#### CPU/Memory Resource Requests/Limits +Sets the pods cpu/memory requests/limits + +```yaml +nats: + resources: + requests: + cpu: 2 + memory: 4Gi + limits: + cpu: 4 + memory: 6Gi +``` + +No resources are set by default. + +#### Annotations + + + +```yaml +podAnnotations: + key1 : "value1", + key2 : "value2" +``` + +### Name Overides + +Can change the name of the resources as needed with: + +```yaml +nameOverride: "my-nats" +``` + +### Image Pull Secrets + +```yaml +imagePullSecrets: +- name: myRegistry +``` + +Adds this to the StatefulSet: + +```yaml +spec: + imagePullSecrets: + - name: myRegistry +``` diff --git a/charts/kubezero-nats/charts/nats/templates/NOTES.txt b/charts/kubezero-nats/charts/nats/templates/NOTES.txt new file mode 100644 index 0000000..313886a --- /dev/null +++ b/charts/kubezero-nats/charts/nats/templates/NOTES.txt @@ -0,0 +1,26 @@ + +{{- if or .Values.nats.logging.debug .Values.nats.logging.trace }} +*WARNING*: Keep in mind that running the server with +debug and/or trace enabled significantly affects the +performance of the server! +{{- end }} + +You can find more information about running NATS on Kubernetes +in the NATS documentation website: + + https://docs.nats.io/nats-on-kubernetes/nats-kubernetes + +{{- if .Values.natsbox.enabled }} + +NATS Box has been deployed into your cluster, you can +now use the NATS tools within the container as follows: + + kubectl exec -n {{ .Release.Namespace }} -it deployment/{{ template "nats.fullname" . }}-box -- /bin/sh -l + + nats-box:~# nats-sub test & + nats-box:~# nats-pub test hi + nats-box:~# nc {{ template "nats.fullname" . }} 4222 + +{{- end }} + +Thanks for using NATS! diff --git a/charts/kubezero-nats/charts/nats/templates/_helpers.tpl b/charts/kubezero-nats/charts/nats/templates/_helpers.tpl new file mode 100644 index 0000000..9a55091 --- /dev/null +++ b/charts/kubezero-nats/charts/nats/templates/_helpers.tpl @@ -0,0 +1,95 @@ +{{/* +Expand the name of the chart. +*/}} +{{- define "nats.name" -}} +{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}} +{{- end -}} + + +{{- define "nats.fullname" -}} +{{- if .Values.fullnameOverride -}} +{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- $name := default .Chart.Name .Values.nameOverride -}} +{{- if contains $name .Release.Name -}} +{{- .Release.Name | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} +{{- end -}} +{{- end -}} +{{- end -}} + +{{/* +Create chart name and version as used by the chart label. +*/}} +{{- define "nats.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }} +{{- end }} + +{{/* +Common labels +*/}} +{{- define "nats.labels" -}} +helm.sh/chart: {{ include "nats.chart" . }} +{{ include "nats.selectorLabels" . }} +{{- if .Chart.AppVersion }} +app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} +{{- end }} +app.kubernetes.io/managed-by: {{ .Release.Service }} +{{- end }} + +{{/* +Selector labels +*/}} +{{- define "nats.selectorLabels" -}} +app.kubernetes.io/name: {{ include "nats.name" . }} +app.kubernetes.io/instance: {{ .Release.Name }} +{{- end }} + + +{{/* +Return the proper NATS image name +*/}} +{{- define "nats.clusterAdvertise" -}} +{{- printf "$(POD_NAME).%s.$(POD_NAMESPACE).svc" (include "nats.fullname" . ) }} +{{- end }} + +{{/* +Return the NATS cluster routes. +*/}} +{{- define "nats.clusterRoutes" -}} +{{- $name := default .Release.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}} +{{- range $i, $e := until (.Values.cluster.replicas | int) -}} +{{- printf "nats://%s-%d.%s.%s.svc:6222," $name $i $name $.Release.Namespace -}} +{{- end -}} +{{- end }} + + +{{- define "nats.tlsConfig" -}} +tls { +{{- if .cert }} + cert_file: {{ .secretPath }}/{{ .secret.name }}/{{ .cert }} +{{- end }} +{{- if .key }} + key_file: {{ .secretPath }}/{{ .secret.name }}/{{ .key }} +{{- end }} +{{- if .ca }} + ca_file: {{ .secretPath }}/{{ .secret.name }}/{{ .ca }} +{{- end }} +{{- if .insecure }} + insecure: {{ .insecure }} +{{- end }} +{{- if .verify }} + verify: {{ .verify }} +{{- end }} +{{- if .verifyAndMap }} + verify_and_map: {{ .verifyAndMap }} +{{- end }} +{{- if .curvePreferences }} + curve_preferences: {{ .curvePreferences }} +{{- end }} +{{- if .timeout }} + timeout: {{ .timeout }} +{{- end }} +} +{{- end }} \ No newline at end of file diff --git a/charts/kubezero-nats/charts/nats/templates/configmap.yaml b/charts/kubezero-nats/charts/nats/templates/configmap.yaml new file mode 100644 index 0000000..0c7d797 --- /dev/null +++ b/charts/kubezero-nats/charts/nats/templates/configmap.yaml @@ -0,0 +1,337 @@ +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: {{ include "nats.fullname" . }}-config + labels: + {{- include "nats.labels" . | nindent 4 }} +data: + nats.conf: | + # PID file shared with configuration reloader. + pid_file: "/var/run/nats/nats.pid" + + ############### + # # + # Monitoring # + # # + ############### + http: 8222 + server_name: $POD_NAME + + {{- if .Values.nats.tls }} + ##################### + # # + # TLS Configuration # + # # + ##################### + {{- with .Values.nats.tls }} + {{- $nats_tls := merge (dict) . }} + {{- $_ := set $nats_tls "secretPath" "/etc/nats-certs/clients" }} + {{- include "nats.tlsConfig" $nats_tls | nindent 4}} + {{- end }} + {{- end }} + + {{- if .Values.nats.jetstream.enabled }} + ################################### + # # + # NATS JetStream # + # # + ################################### + jetstream { + {{- if .Values.nats.jetstream.memStorage.enabled }} + max_mem: {{ .Values.nats.jetstream.memStorage.size }} + {{- end }} + + {{- if .Values.nats.jetstream.fileStorage.enabled }} + store_dir: {{ .Values.nats.jetstream.fileStorage.storageDirectory }} + + max_file: + {{- if .Values.nats.jetstream.fileStorage.existingClaim }} + {{- .Values.nats.jetstream.fileStorage.claimStorageSize }} + {{- else }} + {{- .Values.nats.jetstream.fileStorage.size }} + {{- end }} + + {{- end }} + } + {{- end }} + + {{- if .Values.cluster.enabled }} + ################################### + # # + # NATS Full Mesh Clustering Setup # + # # + ################################### + cluster { + port: 6222 + + {{- if .Values.nats.jetstream.enabled }} + {{- if .Values.cluster.name }} + name: {{ .Values.cluster.name }} + {{- else }} + name: {{ template "nats.name" . }} + {{- end }} + {{- else }} + {{- with .Values.cluster.name }} + name: {{ . }} + {{- end }} + {{- end }} + + {{- with .Values.cluster.tls }} + {{- $cluster_tls := merge (dict) . }} + {{- $_ := set $cluster_tls "secretPath" "/etc/nats-certs/cluster" }} + {{- include "nats.tlsConfig" $cluster_tls | nindent 6}} + {{- end }} + + routes = [ + {{ include "nats.clusterRoutes" . }} + ] + cluster_advertise: $CLUSTER_ADVERTISE + + {{- with .Values.cluster.noAdvertise }} + no_advertise: {{ . }} + {{- end }} + + connect_retries: {{ .Values.nats.connectRetries }} + } + {{ end }} + + {{- if and .Values.nats.advertise .Values.nats.externalAccess }} + include "advertise/client_advertise.conf" + {{- end }} + + {{- if or .Values.leafnodes.enabled .Values.leafnodes.remotes }} + ################# + # # + # NATS Leafnode # + # # + ################# + leafnodes { + {{- if .Values.leafnodes.enabled }} + listen: "0.0.0.0:7422" + {{- end }} + + {{ if and .Values.nats.advertise .Values.nats.externalAccess }} + include "advertise/gateway_advertise.conf" + {{ end }} + + {{- with .Values.leafnodes.noAdvertise }} + no_advertise: {{ . }} + {{- end }} + + {{- with .Values.leafnodes.tls }} + {{- $leafnode_tls := merge (dict) . }} + {{- $_ := set $leafnode_tls "secretPath" "/etc/nats-certs/leafnodes" }} + {{- include "nats.tlsConfig" $leafnode_tls | nindent 6}} + {{- end }} + + remotes: [ + {{- range .Values.leafnodes.remotes }} + { + {{- with .url }} + url: {{ . }} + {{- end }} + + {{- with .credentials }} + credentials: "/etc/nats-creds/{{ .secret.name }}/{{ .secret.key }}" + {{- end }} + } + {{- end }} + ] + } + {{ end }} + + {{- if .Values.gateway.enabled }} + ################# + # # + # NATS Gateways # + # # + ################# + gateway { + name: {{ .Values.gateway.name }} + port: 7522 + + {{ if and .Values.nats.advertise .Values.nats.externalAccess }} + include "advertise/gateway_advertise.conf" + {{ end }} + + {{- with .Values.gateway.tls }} + {{- $gateway_tls := merge (dict) . }} + {{- $_ := set $gateway_tls "secretPath" "/etc/nats-certs/gateway" }} + {{- include "nats.tlsConfig" $gateway_tls | nindent 6}} + {{- end }} + + # Gateways array here + gateways: [ + {{- range .Values.gateway.gateways }} + { + {{- with .name }} + name: {{ . }} + {{- end }} + + {{- with .url }} + url: {{ . | quote }} + {{- end }} + + {{- with .urls }} + urls: [{{ join "," . }}] + {{- end }} + }, + {{- end }} + ] + } + {{ end }} + + {{- with .Values.nats.logging.debug }} + debug: {{ . }} + {{- end }} + + {{- with .Values.nats.logging.trace }} + trace: {{ . }} + {{- end }} + + {{- with .Values.nats.logging.logtime }} + logtime: {{ . }} + {{- end }} + + {{- with .Values.nats.logging.connectErrorReports }} + connect_error_reports: {{ . }} + {{- end }} + + {{- with .Values.nats.logging.reconnectErrorReports }} + reconnect_error_reports: {{ . }} + {{- end }} + + {{- with .Values.nats.limits.maxConnections }} + max_connections: {{ . }} + {{- end }} + {{- with .Values.nats.limits.maxSubscriptions }} + max_subscriptions: {{ . }} + {{- end }} + {{- with .Values.nats.limits.maxPending }} + max_pending: {{ . }} + {{- end }} + {{- with .Values.nats.limits.maxControlLine }} + max_control_line: {{ . }} + {{- end }} + {{- with .Values.nats.limits.maxPayload }} + max_payload: {{ . }} + {{- end }} + {{- with .Values.nats.pingInterval }} + ping_interval: {{ . }} + {{- end }} + {{- with .Values.nats.maxPings }} + ping_max: {{ . }} + {{- end }} + {{- with .Values.nats.writeDeadline }} + write_deadline: {{ . | quote }} + {{- end }} + {{- with .Values.nats.writeDeadline }} + lame_duck_duration: {{ . | quote }} + {{- end }} + + {{- if .Values.websocket.enabled }} + ################## + # # + # Websocket # + # # + ################## + ws { + port: {{ .Values.websocket.port }} + {{- if .Values.websocket.tls }} + {{ $secretName := .secret.name }} + tls { + {{- with .cert }} + cert_file: /etc/nats-certs/ws/{{ $secretName }}/{{ . }} + {{- end }} + + {{- with .key }} + key_file: /etc/nats-certs/ws/{{ $secretName }}/{{ . }} + {{- end }} + + {{- with .ca }} + ca_file: /etc/nats-certs/ws/{{ $secretName }}/{{ . }} + {{- end }} + } + {{- else }} + no_tls: {{ .Values.websocket.noTLS }} + {{- end }} + } + {{- end }} + + {{- if .Values.auth.enabled }} + ################## + # # + # Authorization # + # # + ################## + {{- if .Values.auth.resolver }} + {{- if eq .Values.auth.resolver.type "memory" }} + resolver: MEMORY + include "accounts/{{ .Values.auth.resolver.configMap.key }}" + {{- end }} + + {{- if eq .Values.auth.resolver.type "full" }} + + {{- if .Values.auth.resolver.configMap }} + include "accounts/{{ .Values.auth.resolver.configMap.key }}" + {{- else }} + + {{- with .Values.auth.resolver }} + operator: {{ .operator }} + + system_account: {{ .systemAccount }} + {{- end }} + + resolver: { + type: full + {{- with .Values.auth.resolver }} + dir: {{ .store.dir | quote }} + + allow_delete: {{ .allowDelete }} + + interval: {{ .interval | quote }} + {{- end }} + } + {{- end }} + {{- end }} + + {{- if .Values.auth.resolver.resolverPreload }} + resolver_preload: {{ toRawJson .Values.auth.resolver.resolverPreload }} + {{- end }} + + {{- if eq .Values.auth.resolver.type "URL" }} + {{- with .Values.auth.resolver.url }} + resolver: URL({{ . }}) + {{- end }} + operator: /etc/nats-config/operator/{{ .Values.auth.operatorjwt.configMap.key }} + {{- end }} + {{- end }} + + {{- with .Values.auth.systemAccount }} + system_account: {{ . }} + {{- end }} + + {{- with .Values.auth.basic }} + + {{- with .noAuthUser }} + no_auth_user: {{ . }} + {{- end }} + + {{- with .users }} + authorization { + users: [ + {{- range . }} + {{- toRawJson . | nindent 4 }}, + {{- end }} + ] + } + {{- end }} + + {{- with .accounts }} + accounts: {{- toRawJson . }} + {{- end }} + + {{- end }} + + {{- end }} diff --git a/charts/kubezero-nats/charts/nats/templates/nats-box.yaml b/charts/kubezero-nats/charts/nats/templates/nats-box.yaml new file mode 100644 index 0000000..60e61d1 --- /dev/null +++ b/charts/kubezero-nats/charts/nats/templates/nats-box.yaml @@ -0,0 +1,75 @@ +{{- if .Values.natsbox.enabled }} +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: {{ include "nats.fullname" . }}-box + labels: + app: {{ include "nats.fullname" . }}-box + chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }} +spec: + replicas: 1 + selector: + matchLabels: + app: {{ include "nats.fullname" . }}-box + template: + metadata: + labels: + app: {{ include "nats.fullname" . }}-box + spec: + volumes: + {{- if .Values.natsbox.credentials }} + - name: nats-sys-creds + secret: + secretName: {{ .Values.natsbox.credentials.secret.name }} + {{- end }} + {{- with .Values.nats.tls }} + {{ $secretName := .secret.name }} + - name: {{ $secretName }}-clients-volume + secret: + secretName: {{ $secretName }} + {{- end }} + + containers: + - name: nats-box + image: {{ .Values.natsbox.image }} + imagePullPolicy: {{ .Values.natsbox.pullPolicy }} + env: + - name: NATS_URL + value: {{ template "nats.fullname" . }} + {{- if .Values.natsbox.credentials }} + - name: USER_CREDS + value: /etc/nats-config/creds/{{ .Values.natsbox.credentials.secret.key }} + - name: USER2_CREDS + value: /etc/nats-config/creds/{{ .Values.natsbox.credentials.secret.key }} + {{- end }} + {{- with .Values.nats.tls }} + {{ $secretName := .secret.name }} + lifecycle: + postStart: + exec: + command: + - /bin/sh + - -c + - cp /etc/nats-certs/clients/{{ $secretName }}/* /usr/local/share/ca-certificates && update-ca-certificates + {{- end }} + command: + - "tail" + - "-f" + - "/dev/null" + volumeMounts: + {{- if .Values.natsbox.credentials }} + - name: nats-sys-creds + mountPath: /etc/nats-config/creds + {{- end }} + {{- with .Values.nats.tls }} + ####################### + # # + # TLS Volumes Mounts # + # # + ####################### + {{ $secretName := .secret.name }} + - name: {{ $secretName }}-clients-volume + mountPath: /etc/nats-certs/clients/{{ $secretName }} + {{- end }} +{{- end }} diff --git a/charts/kubezero-nats/charts/nats/templates/pdb.yaml b/charts/kubezero-nats/charts/nats/templates/pdb.yaml new file mode 100644 index 0000000..f901734 --- /dev/null +++ b/charts/kubezero-nats/charts/nats/templates/pdb.yaml @@ -0,0 +1,21 @@ +{{- if .Values.podDisruptionBudget }} +--- +apiVersion: policy/v1beta1 +kind: PodDisruptionBudget +metadata: + labels: + name: {{ include "nats.fullname" . }} + labels: + {{- include "nats.labels" . | nindent 4 }} +spec: + {{- if .Values.podDisruptionBudget.minAvailable }} + minAvailable: {{ .Values.podDisruptionBudget.minAvailable }} + {{- end }} + {{- if .Values.podDisruptionBudget.maxUnavailable }} + maxUnavailable: {{ .Values.podDisruptionBudget.maxUnavailable }} + {{- end }} + selector: + matchLabels: + {{- include "nats.selectorLabels" . | nindent 6 }} +{{- end }} + diff --git a/charts/kubezero-nats/charts/nats/templates/rbac.yaml b/charts/kubezero-nats/charts/nats/templates/rbac.yaml new file mode 100644 index 0000000..0b596f1 --- /dev/null +++ b/charts/kubezero-nats/charts/nats/templates/rbac.yaml @@ -0,0 +1,31 @@ +{{ if and .Values.nats.externalAccess .Values.nats.advertise }} +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + name: {{ .Values.nats.serviceAccount }} + namespace: {{ .Release.Namespace }} +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: {{ .Values.nats.serviceAccount }} +rules: +- apiGroups: [""] + resources: + - nodes + verbs: ["get"] +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: {{ .Values.nats.serviceAccount }}-binding +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: {{ .Values.nats.serviceAccount }} +subjects: +- kind: ServiceAccount + name: {{ .Values.nats.serviceAccount }} + namespace: {{ .Release.Namespace }} +{{ end }} diff --git a/charts/kubezero-nats/charts/nats/templates/service.yaml b/charts/kubezero-nats/charts/nats/templates/service.yaml new file mode 100644 index 0000000..f165b4e --- /dev/null +++ b/charts/kubezero-nats/charts/nats/templates/service.yaml @@ -0,0 +1,38 @@ +--- +apiVersion: v1 +kind: Service +metadata: + name: {{ include "nats.fullname" . }} + labels: + {{- include "nats.labels" . | nindent 4 }} + {{- if .Values.serviceAnnotations}} + annotations: + {{- range $key, $value := .Values.serviceAnnotations }} + {{ $key }}: {{ $value | quote }} + {{- end }} + {{- end }} +spec: + selector: + {{- include "nats.selectorLabels" . | nindent 4 }} + clusterIP: None + {{- if .Values.topologyKeys }} + topologyKeys: + {{- .Values.topologyKeys | toYaml | nindent 4 }} + {{- end }} + ports: + {{- if .Values.websocket.enabled }} + - name: websocket + port: {{ .Values.websocket.port }} + {{- end }} + - name: client + port: 4222 + - name: cluster + port: 6222 + - name: monitor + port: 8222 + - name: metrics + port: 7777 + - name: leafnodes + port: 7422 + - name: gateways + port: 7522 diff --git a/charts/kubezero-nats/charts/nats/templates/serviceMonitor.yaml b/charts/kubezero-nats/charts/nats/templates/serviceMonitor.yaml new file mode 100644 index 0000000..1b4a626 --- /dev/null +++ b/charts/kubezero-nats/charts/nats/templates/serviceMonitor.yaml @@ -0,0 +1,40 @@ +{{ if and .Values.exporter.enabled .Values.exporter.serviceMonitor.enabled }} +apiVersion: monitoring.coreos.com/v1 +kind: ServiceMonitor +metadata: + name: {{ template "nats.fullname" . }} + {{- if .Values.exporter.serviceMonitor.namespace }} + namespace: {{ .Values.exporter.serviceMonitor.namespace }} + {{- else }} + namespace: {{ .Release.Namespace | quote }} + {{- end }} + {{- if .Values.exporter.serviceMonitor.labels }} + labels: + {{- range $key, $value := .Values.exporter.serviceMonitor.labels }} + {{ $key }}: {{ $value | quote }} + {{- end }} + {{- end }} + {{- if .Values.exporter.serviceMonitor.annotations }} + annotations: + {{- range $key, $value := .Values.exporter.serviceMonitor.annotations }} + {{ $key }}: {{ $value | quote }} + {{- end }} + {{- end }} +spec: + endpoints: + - port: metrics + {{- if .Values.exporter.serviceMonitor.path }} + path: {{ .Values.exporter.serviceMonitor.path }} + {{- end }} + {{- if .Values.exporter.serviceMonitor.interval }} + interval: {{ .Values.exporter.serviceMonitor.interval }} + {{- end }} + {{- if .Values.exporter.serviceMonitor.scrapeTimeout }} + scrapeTimeout: {{ .Values.exporter.serviceMonitor.scrapeTimeout }} + {{- end }} + namespaceSelector: + any: true + selector: + matchLabels: + {{- include "nats.selectorLabels" . | nindent 6 }} +{{- end }} diff --git a/charts/kubezero-nats/charts/nats/templates/statefulset.yaml b/charts/kubezero-nats/charts/nats/templates/statefulset.yaml new file mode 100644 index 0000000..3159c74 --- /dev/null +++ b/charts/kubezero-nats/charts/nats/templates/statefulset.yaml @@ -0,0 +1,449 @@ +--- +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: {{ include "nats.fullname" . }} + labels: + {{- include "nats.labels" . | nindent 4 }} + {{- if .Values.statefulSetAnnotations}} + annotations: + {{- range $key, $value := .Values.statefulSetAnnotations }} + {{ $key }}: {{ $value | quote }} + {{- end }} + {{- end }} +spec: + selector: + matchLabels: + {{- include "nats.selectorLabels" . | nindent 6 }} + {{- if .Values.cluster.enabled }} + replicas: {{ .Values.cluster.replicas }} + {{- else }} + replicas: 1 + {{- end }} + serviceName: {{ include "nats.fullname" . }} + template: + metadata: + {{- if or .Values.podAnnotations .Values.exporter.enabled }} + annotations: + {{- if .Values.exporter.enabled }} + prometheus.io/path: /metrics + prometheus.io/port: "7777" + prometheus.io/scrape: "true" + {{- end }} + {{- range $key, $value := .Values.podAnnotations }} + {{ $key }}: {{ $value | quote }} + {{- end }} + {{- end }} + labels: + {{- include "nats.selectorLabels" . | nindent 8 }} + spec: +{{- with .Values.imagePullSecrets }} + imagePullSecrets: +{{- toYaml . | nindent 8 }} +{{- end }} +{{- with .Values.securityContext }} + securityContext: +{{ toYaml . | indent 8 }} +{{- end }} +{{- with .Values.affinity }} + affinity: +{{- tpl (toYaml .) $ | nindent 8 }} +{{- end }} +{{- if .Values.topologySpreadConstraints }} + topologySpreadConstraints: + {{- range .Values.topologySpreadConstraints }} + {{- if and .maxSkew .topologyKey }} + - maxSkew: {{ .maxSkew }} + topologyKey: {{ .topologyKey }} + {{- if .whenUnsatisfiable }} + whenUnsatisfiable: {{ .whenUnsatisfiable }} + {{- end }} + labelSelector: + matchLabels: + {{- include "nats.selectorLabels" $ | nindent 12 }} + {{- end}} + {{- end }} +{{- end }} +{{- if .Values.priorityClassName }} + priorityClassName: {{ .Values.priorityClassName | quote }} +{{- end }} + # Common volumes for the containers. + volumes: + - name: config-volume + configMap: + name: {{ include "nats.fullname" . }}-config + + # Local volume shared with the reloader. + - name: pid + emptyDir: {} + + {{- if and .Values.auth.enabled .Values.auth.resolver }} + {{- if .Values.auth.resolver.configMap }} + - name: resolver-volume + configMap: + name: {{ .Values.auth.resolver.configMap.name }} + {{- end }} + + {{- if eq .Values.auth.resolver.type "URL" }} + - name: operator-jwt-volume + configMap: + name: {{ .Values.auth.operatorjwt.configMap.name }} + {{- end }} + {{- end }} + + {{- if and .Values.nats.externalAccess .Values.nats.advertise }} + # Local volume shared with the advertise config initializer. + - name: advertiseconfig + emptyDir: {} + {{- end }} + + {{- if and .Values.nats.jetstream.fileStorage.enabled .Values.nats.jetstream.fileStorage.existingClaim }} + # Persistent volume for jetstream running with file storage option + - name: {{ include "nats.fullname" . }}-js-pvc + persistentVolumeClaim: + claimName: {{ .Values.nats.jetstream.fileStorage.existingClaim | quote }} + {{- end }} + + ################# + # # + # TLS Volumes # + # # + ################# + {{- with .Values.nats.tls }} + {{ $secretName := .secret.name }} + - name: {{ $secretName }}-clients-volume + secret: + secretName: {{ $secretName }} + {{- end }} + {{- with .Values.cluster.tls }} + {{ $secretName := .secret.name }} + - name: {{ $secretName }}-cluster-volume + secret: + secretName: {{ $secretName }} + {{- end }} + {{- with .Values.leafnodes.tls }} + {{ $secretName := .secret.name }} + - name: {{ $secretName }}-leafnodes-volume + secret: + secretName: {{ $secretName }} + {{- end }} + {{- with .Values.gateway.tls }} + {{ $secretName := .secret.name }} + - name: {{ $secretName }}-gateways-volume + secret: + secretName: {{ $secretName }} + {{- end }} + {{- with .Values.websocket.tls }} + {{ $secretName := .secret.name }} + - name: {{ $secretName }}-ws-volume + secret: + secretName: {{ $secretName }} + {{- end }} + {{- if .Values.leafnodes.enabled }} + # + # Leafnode credential volumes + # + {{- range .Values.leafnodes.remotes }} + {{- with .credentials }} + - name: {{ .secret.name }}-volume + secret: + secretName: {{ .secret.name }} + {{- end }} + {{- end }} + {{- end }} + + {{ if and .Values.nats.externalAccess .Values.nats.advertise }} + # Assume that we only use the service account in case we want to + # figure out what is the current external public IP from the server + # in order to be able to advertise correctly. + serviceAccountName: {{ .Values.nats.serviceAccount }} + {{ end }} + + # Required to be able to HUP signal and apply config + # reload to the server without restarting the pod. + shareProcessNamespace: true + + {{- if and .Values.nats.externalAccess .Values.nats.advertise }} + # Initializer container required to be able to lookup + # the external ip on which this node is running. + initContainers: + - name: bootconfig + command: + - nats-pod-bootconfig + - -f + - /etc/nats-config/advertise/client_advertise.conf + - -gf + - /etc/nats-config/advertise/gateway_advertise.conf + env: + - name: KUBERNETES_NODE_NAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: spec.nodeName + image: {{ .Values.bootconfig.image }} + imagePullPolicy: {{ .Values.bootconfig.pullPolicy }} + volumeMounts: + - mountPath: /etc/nats-config/advertise + name: advertiseconfig + subPath: advertise + {{- end }} + + ################# + # # + # NATS Server # + # # + ################# + terminationGracePeriodSeconds: {{ .Values.nats.terminationGracePeriodSeconds }} + containers: + - name: nats + image: {{ .Values.nats.image }} + imagePullPolicy: {{ .Values.nats.pullPolicy }} + resources: + {{- toYaml .Values.nats.resources | nindent 10 }} + ports: + - containerPort: 4222 + name: client + {{- if .Values.nats.externalAccess }} + hostPort: 4222 + {{- end }} + - containerPort: 7422 + name: leafnodes + {{- if .Values.nats.externalAccess }} + hostPort: 7422 + {{- end }} + - containerPort: 7522 + name: gateways + {{- if .Values.nats.externalAccess }} + hostPort: 7522 + {{- end }} + - containerPort: 6222 + name: cluster + - containerPort: 8222 + name: monitor + - containerPort: 7777 + name: metrics + {{- if .Values.websocket.enabled }} + - containerPort: {{ .Values.websocket.port }} + name: websocket + {{- if .Values.nats.externalAccess }} + hostPort: {{ .Values.websocket.port }} + {{- end }} + {{- end }} + command: + - "nats-server" + - "--config" + - "/etc/nats-config/nats.conf" + + # Required to be able to define an environment variable + # that refers to other environment variables. This env var + # is later used as part of the configuration file. + env: + - name: POD_NAME + valueFrom: + fieldRef: + fieldPath: metadata.name + - name: POD_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: CLUSTER_ADVERTISE + value: {{ include "nats.clusterAdvertise" . }} + volumeMounts: + - name: config-volume + mountPath: /etc/nats-config + - name: pid + mountPath: /var/run/nats + {{- if and .Values.nats.externalAccess .Values.nats.advertise }} + - mountPath: /etc/nats-config/advertise + name: advertiseconfig + subPath: advertise + {{- end }} + + {{- if and .Values.auth.enabled .Values.auth.resolver }} + {{- if eq .Values.auth.resolver.type "memory" }} + - name: resolver-volume + mountPath: /etc/nats-config/accounts + {{- end }} + + {{- if eq .Values.auth.resolver.type "full" }} + {{- if .Values.auth.resolver.configMap }} + - name: resolver-volume + mountPath: /etc/nats-config/accounts + {{- end }} + {{- if and .Values.auth.resolver .Values.auth.resolver.store }} + - name: nats-jwt-pvc + mountPath: {{ .Values.auth.resolver.store.dir }} + {{- end }} + {{- end }} + + {{- if eq .Values.auth.resolver.type "URL" }} + - name: operator-jwt-volume + mountPath: /etc/nats-config/operator + {{- end }} + {{- end }} + + {{- if .Values.nats.jetstream.fileStorage.enabled }} + - name: {{ include "nats.fullname" . }}-js-pvc + mountPath: {{ .Values.nats.jetstream.fileStorage.storageDirectory }} + {{- end }} + + {{- with .Values.nats.tls }} + ####################### + # # + # TLS Volumes Mounts # + # # + ####################### + {{ $secretName := .secret.name }} + - name: {{ $secretName }}-clients-volume + mountPath: /etc/nats-certs/clients/{{ $secretName }} + {{- end }} + {{- with .Values.cluster.tls }} + {{ $secretName := .secret.name }} + - name: {{ $secretName }}-cluster-volume + mountPath: /etc/nats-certs/cluster/{{ $secretName }} + {{- end }} + {{- with .Values.leafnodes.tls }} + {{ $secretName := .secret.name }} + - name: {{ $secretName }}-leafnodes-volume + mountPath: /etc/nats-certs/leafnodes/{{ $secretName }} + {{- end }} + {{- with .Values.gateway.tls }} + {{ $secretName := .secret.name }} + - name: {{ $secretName }}-gateways-volume + mountPath: /etc/nats-certs/gateways/{{ $secretName }} + {{- end }} + + {{- with .Values.websocket.tls }} + {{ $secretName := .secret.name }} + - name: {{ $secretName }}-ws-volume + mountPath: /etc/nats-certs/ws/{{ $secretName }} + {{- end }} + + {{- if .Values.leafnodes.enabled }} + # + # Leafnode credential volumes + # + {{- range .Values.leafnodes.remotes }} + {{- with .credentials }} + - name: {{ .secret.name }}-volume + mountPath: /etc/nats-creds/{{ .secret.name }} + {{- end }} + {{- end }} + {{- end }} + + # Liveness/Readiness probes against the monitoring. + # + livenessProbe: + httpGet: + path: / + port: 8222 + initialDelaySeconds: 10 + timeoutSeconds: 5 + readinessProbe: + httpGet: + path: / + port: 8222 + initialDelaySeconds: 10 + timeoutSeconds: 5 + + # Gracefully stop NATS Server on pod deletion or image upgrade. + # + lifecycle: + preStop: + exec: + # Using the alpine based NATS image, we add an extra sleep that is + # the same amount as the terminationGracePeriodSeconds to allow + # the NATS Server to gracefully terminate the client connections. + # + command: + - "/bin/sh" + - "-c" + - "nats-server -sl=ldm=/var/run/nats/nats.pid && /bin/sleep {{ .Values.nats.terminationGracePeriodSeconds }}" + + ################################# + # # + # NATS Configuration Reloader # + # # + ################################# + {{ if .Values.reloader.enabled }} + - name: reloader + image: {{ .Values.reloader.image }} + imagePullPolicy: {{ .Values.reloader.pullPolicy }} + command: + - "nats-server-config-reloader" + - "-pid" + - "/var/run/nats/nats.pid" + - "-config" + - "/etc/nats-config/nats.conf" + volumeMounts: + - name: config-volume + mountPath: /etc/nats-config + - name: pid + mountPath: /var/run/nats + {{ end }} + + ############################## + # # + # NATS Prometheus Exporter # + # # + ############################## + {{ if .Values.exporter.enabled }} + - name: metrics + image: {{ .Values.exporter.image }} + imagePullPolicy: {{ .Values.exporter.pullPolicy }} + args: + - -connz + - -routez + - -subz + - -varz + - -prefix=nats + - -use_internal_server_id + - http://localhost:8222/ + ports: + - containerPort: 7777 + name: metrics + {{ end }} + + volumeClaimTemplates: + {{- if eq .Values.auth.resolver.type "full" }} + {{- if and .Values.auth.resolver .Values.auth.resolver.store }} + ##################################### + # # + # Account Server Embedded JWT # + # # + ##################################### + - metadata: + name: nats-jwt-pvc + spec: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: {{ .Values.auth.resolver.store.size }} + {{- end }} + {{- end }} + + {{- if and .Values.nats.jetstream.fileStorage.enabled (not .Values.nats.jetstream.fileStorage.existingClaim) }} + ##################################### + # # + # Jetstream New Persistent Volume # + # # + ##################################### + - metadata: + name: {{ include "nats.fullname" . }}-js-pvc + {{- if .Values.nats.jetstream.fileStorage.annotations }} + annotations: + {{- range $key, $value := .Values.nats.jetstream.fileStorage.annotations }} + {{ $key }}: {{ $value | quote }} + {{- end }} + {{- end }} + spec: + accessModes: + {{- range .Values.nats.jetstream.fileStorage.accessModes }} + - {{ . | quote }} + {{- end }} + resources: + requests: + storage: {{ .Values.nats.jetstream.fileStorage.size }} + storageClassName: {{ .Values.nats.jetstream.fileStorage.storageClassName | quote }} + {{- end }} diff --git a/charts/kubezero-nats/charts/nats/values.yaml b/charts/kubezero-nats/charts/nats/values.yaml new file mode 100644 index 0000000..9121e81 --- /dev/null +++ b/charts/kubezero-nats/charts/nats/values.yaml @@ -0,0 +1,347 @@ +############################### +# # +# NATS Server Configuration # +# # +############################### +nats: + image: nats:2.1.9-alpine3.12 + pullPolicy: IfNotPresent + + # Toggle whether to enable external access. + # This binds a host port for clients, gateways and leafnodes. + externalAccess: false + + # Toggle to disable client advertisements (connect_urls), + # in case of running behind a load balancer (which is not recommended) + # it might be required to disable advertisements. + advertise: true + + # In case both external access and advertise are enabled + # then a service account would be required to be able to + # gather the public ip from a node. + serviceAccount: "nats-server" + + # The number of connect attempts against discovered routes. + connectRetries: 30 + + # How many seconds should pass before sending a PING + # to a client that has no activity. + pingInterval: + + resources: {} + + # Server settings. + limits: + maxConnections: + maxSubscriptions: + maxControlLine: + maxPayload: + + writeDeadline: + maxPending: + maxPings: + lameDuckDuration: + + terminationGracePeriodSeconds: 60 + + logging: + debug: + trace: + logtime: + connectErrorReports: + reconnectErrorReports: + + jetstream: + enabled: false + + ############################# + # # + # Jetstream Memory Storage # + # # + ############################# + memStorage: + enabled: true + size: 1Gi + + ############################ + # # + # Jetstream File Storage # + # # + ############################ + fileStorage: + enabled: false + storageDirectory: /data + + # Set for use with existing PVC + # existingClaim: jetstream-pvc + # claimStorageSize: 1Gi + + # Use below block to create new persistent volume + # only used if existingClaim is not specified + size: 1Gi + storageClassName: default + accessModes: + - ReadWriteOnce + annotations: + # key: "value" + + ####################### + # # + # TLS Configuration # + # # + ####################### + # + # # You can find more on how to setup and trouble shoot TLS connnections at: + # + # # https://docs.nats.io/nats-server/configuration/securing_nats/tls + # + + # tls: + # secret: + # name: nats-client-tls + # ca: "ca.crt" + # cert: "tls.crt" + # key: "tls.key" + +nameOverride: "" +imagePullSecrets: [] + +# Toggle whether to use setup a Pod Security Context +# ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/ +securityContext: {} +# securityContext: +# fsGroup: 1000 +# runAsUser: 1000 +# runAsNonRoot: true + +# Affinity for pod assignment +# ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity +affinity: {} + +## Pod priority class name +## ref: https://kubernetes.io/docs/concepts/configuration/pod-priority-preemption/#priorityclass +priorityClassName: null + +# Service topology +# ref: https://kubernetes.io/docs/concepts/services-networking/service-topology/ +topologyKeys: [] + +# Pod Topology Spread Constraints +# ref https://kubernetes.io/docs/concepts/workloads/pods/pod-topology-spread-constraints/ +topologySpreadConstraints: [] +# - maxSkew: 1 +# topologyKey: zone +# whenUnsatisfiable: DoNotSchedule + +# Annotations to add to the NATS pods +# ref: https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/ +podAnnotations: {} +# key: "value" + +## Define a Pod Disruption Budget for the stateful set +## ref: https://kubernetes.io/docs/concepts/workloads/pods/disruptions/ +podDisruptionBudget: null + # minAvailable: 1 + # maxUnavailable: 1 + +# Annotations to add to the NATS StatefulSet +statefulSetAnnotations: {} + +# Annotations to add to the NATS Service +serviceAnnotations: {} + +cluster: + enabled: false + replicas: 3 + noAdvertise: false + +# Leafnode connections to extend a cluster: +# +# https://docs.nats.io/nats-server/configuration/leafnodes +# +leafnodes: + enabled: false + noAdvertise: false + # remotes: + # - url: "tls://connect.ngs.global:7422" + + ####################### + # # + # TLS Configuration # + # # + ####################### + # + # # You can find more on how to setup and trouble shoot TLS connnections at: + # + # # https://docs.nats.io/nats-server/configuration/securing_nats/tls + # + + # + # tls: + # secret: + # name: nats-client-tls + # ca: "ca.crt" + # cert: "tls.crt" + # key: "tls.key" + +# Gateway connections to create a super cluster +# +# https://docs.nats.io/nats-server/configuration/gateways +# +gateway: + enabled: false + name: 'default' + + ############################# + # # + # List of remote gateways # + # # + ############################# + # gateways: + # - name: other + # url: nats://my-gateway-url:7522 + + ####################### + # # + # TLS Configuration # + # # + ####################### + # + # # You can find more on how to setup and trouble shoot TLS connnections at: + # + # # https://docs.nats.io/nats-server/configuration/securing_nats/tls + # + # tls: + # secret: + # name: nats-client-tls + # ca: "ca.crt" + # cert: "tls.crt" + # key: "tls.key" + +# In case of both external access and advertisements being +# enabled, an initializer container will be used to gather +# the public ips. +bootconfig: + image: connecteverything/nats-boot-config:0.5.2 + pullPolicy: IfNotPresent + +# NATS Box +# +# https://github.com/nats-io/nats-box +# +natsbox: + enabled: true + image: synadia/nats-box:0.4.0 + pullPolicy: IfNotPresent + + # credentials: + # secret: + # name: nats-sys-creds + # key: sys.creds + +# The NATS config reloader image to use. +reloader: + enabled: true + image: connecteverything/nats-server-config-reloader:0.6.0 + pullPolicy: IfNotPresent + +# Prometheus NATS Exporter configuration. +exporter: + enabled: true + image: synadia/prometheus-nats-exporter:0.5.0 + pullPolicy: IfNotPresent + # Prometheus operator ServiceMonitor support. Exporter has to be enabled + serviceMonitor: + enabled: false + ## Specify the namespace where Prometheus Operator is running + ## + # namespace: monitoring + labels: {} + annotations: {} + path: /metrics + # interval: + # scrapeTimeout: + +# Authentication setup +auth: + enabled: false + + # basic: + # noAuthUser: + # # List of users that can connect with basic auth, + # # that belong to the global account. + # users: + + # # List of accounts with users that can connect + # # using basic auth. + # accounts: + + # Reference to the Operator JWT. + # operatorjwt: + # configMap: + # name: operator-jwt + # key: KO.jwt + + # Public key of the System Account + # systemAccount: + + resolver: + # Disables the resolver by default + type: none + + ########################################## + # # + # Embedded NATS Account Server Resolver # + # # + ########################################## + # type: full + + # If the resolver type is 'full', delete when enabled will rename the jwt. + allowDelete: false + + # Interval at which a nats-server with a nats based account resolver will compare + # it's state with one random nats based account resolver in the cluster and if needed, + # exchange jwt and converge on the same set of jwt. + interval: 2m + + # Operator JWT + operator: + + # System Account Public NKEY + systemAccount: + + # resolverPreload: + # : + + # Directory in which the account JWTs will be stored. + store: + dir: "/accounts/jwt" + + # Size of the account JWT storage. + size: 1Gi + + ############################## + # # + # Memory resolver settings # + # # + ############################## + # type: memory + # + # Use a configmap reference which will be mounted + # into the container. + # + # configMap: + # name: nats-accounts + # key: resolver.conf + + ########################## + # # + # URL resolver settings # + # # + ########################## + # type: URL + # url: "http://nats-account-server:9090/jwt/v1/accounts/" + +websocket: + enabled: false + port: 443 diff --git a/charts/kubezero-nats/update.sh b/charts/kubezero-nats/update.sh new file mode 100755 index 0000000..0e89e6f --- /dev/null +++ b/charts/kubezero-nats/update.sh @@ -0,0 +1,9 @@ +#!/bin/bash +set -ex + +# get latest chart until they have upstream repo fixed +rm -rf charts/nats && mkdir -p charts/nats + +git clone --depth=1 https://github.com/nats-io/k8s.git +cp -r k8s/helm/charts/nats/* charts/nats/ +rm -rf k8s diff --git a/charts/kubezero-nats/values.yaml b/charts/kubezero-nats/values.yaml new file mode 100644 index 0000000..8af407c --- /dev/null +++ b/charts/kubezero-nats/values.yaml @@ -0,0 +1,21 @@ +nats: + nats: + image: nats:2.2.1-alpine3.13 + + advertise: false + + jetstream: + enabled: true + + memStorage: + enabled: true + size: 128Mi + + natsbox: + enabled: false + + exporter: + serviceMonitor: + enabled: true + labels: + release: metrics diff --git a/charts/kubezero/templates/argoless.yaml b/charts/kubezero/templates/argoless.yaml index b6796fa..6fb2f25 100644 --- a/charts/kubezero/templates/argoless.yaml +++ b/charts/kubezero/templates/argoless.yaml @@ -1,6 +1,6 @@ {{- if not .Values.argo }} -{{- $artifacts := list "calico" "cert-manager" "kiam" "aws-node-termination-handler" "aws-ebs-csi-driver" "aws-efs-csi-driver" "local-volume-provisioner" "local-path-provisioner" "istio" "istio-ingress" "metrics" "logging" "argocd" "timecapsule" }} +{{- $artifacts := list "calico" "cert-manager" "kiam" "aws-node-termination-handler" "aws-ebs-csi-driver" "aws-efs-csi-driver" "local-volume-provisioner" "local-path-provisioner" "istio" "istio-ingress" "metrics" "logging" "argocd" "timecapsule" "nats" }} {{- if .Values.global }} global: diff --git a/charts/kubezero/templates/nats.yaml b/charts/kubezero/templates/nats.yaml new file mode 100644 index 0000000..9d1bc42 --- /dev/null +++ b/charts/kubezero/templates/nats.yaml @@ -0,0 +1,8 @@ +{{- define "nats-values" }} +{{- end }} + + +{{- define "nats-argo" }} +{{- end }} + +{{ include "kubezero-app.app" . }} diff --git a/charts/kubezero/values.yaml b/charts/kubezero/values.yaml index 826642b..eb266c6 100644 --- a/charts/kubezero/values.yaml +++ b/charts/kubezero/values.yaml @@ -69,3 +69,7 @@ argocd: enabled: false argo: {} + +nats: + enabled: false + namespace: nats -- 2.40.1 From 6b2e248f5d534201ac9262ecc0ff485e53ba917f Mon Sep 17 00:00:00 2001 From: Stefan Reimer Date: Thu, 22 Apr 2021 12:00:13 +0200 Subject: [PATCH 05/21] fix: add missing standard labels to custom Istio resources --- charts/kubezero-istio-ingress/templates/bootstrap-config.yaml | 2 ++ .../templates/envoyfilter-hardening.yaml | 2 ++ .../templates/envoyfilter-keepalive-nlb.yaml | 2 ++ charts/kubezero-istio/update.sh | 3 +++ 4 files changed, 9 insertions(+) diff --git a/charts/kubezero-istio-ingress/templates/bootstrap-config.yaml b/charts/kubezero-istio-ingress/templates/bootstrap-config.yaml index bf2c386..7117673 100644 --- a/charts/kubezero-istio-ingress/templates/bootstrap-config.yaml +++ b/charts/kubezero-istio-ingress/templates/bootstrap-config.yaml @@ -6,6 +6,8 @@ kind: ConfigMap metadata: name: istio-gateway-bootstrap-config namespace: {{ .Release.Namespace }} + labels: +{{ include "kubezero-lib.labels" . | indent 4 }} data: custom_bootstrap.json: | { diff --git a/charts/kubezero-istio-ingress/templates/envoyfilter-hardening.yaml b/charts/kubezero-istio-ingress/templates/envoyfilter-hardening.yaml index 5d6a29a..dd1d9d3 100644 --- a/charts/kubezero-istio-ingress/templates/envoyfilter-hardening.yaml +++ b/charts/kubezero-istio-ingress/templates/envoyfilter-hardening.yaml @@ -4,6 +4,8 @@ kind: EnvoyFilter metadata: name: ingressgateway-hardening namespace: {{ .Release.Namespace }} + labels: +{{ include "kubezero-lib.labels" . | indent 4 }} spec: configPatches: - applyTo: CLUSTER diff --git a/charts/kubezero-istio-ingress/templates/envoyfilter-keepalive-nlb.yaml b/charts/kubezero-istio-ingress/templates/envoyfilter-keepalive-nlb.yaml index da8feea..6bc89a9 100644 --- a/charts/kubezero-istio-ingress/templates/envoyfilter-keepalive-nlb.yaml +++ b/charts/kubezero-istio-ingress/templates/envoyfilter-keepalive-nlb.yaml @@ -4,6 +4,8 @@ kind: EnvoyFilter metadata: name: ingressgateway-listener-tcp-keepalive namespace: {{ .Release.Namespace }} + labels: +{{ include "kubezero-lib.labels" . | indent 4 }} spec: configPatches: - applyTo: LISTENER diff --git a/charts/kubezero-istio/update.sh b/charts/kubezero-istio/update.sh index 98b2ca3..0bece09 100755 --- a/charts/kubezero-istio/update.sh +++ b/charts/kubezero-istio/update.sh @@ -1,3 +1,6 @@ +### TODO +- https://istio.io/latest/docs/ops/configuration/security/harden-docker-images/ + #!/bin/bash set -ex -- 2.40.1 From 2dc64d7b1bb84b105ee00b8e44684c3f70359984 Mon Sep 17 00:00:00 2001 From: Stefan Reimer Date: Thu, 22 Apr 2021 15:43:10 +0200 Subject: [PATCH 06/21] feat: integrating metrics support for Istio with KubeZero metrics --- charts/kubezero-istio-ingress/Chart.yaml | 2 +- .../templates/podmonitor.yaml | 36 +++++++++++++++++++ charts/kubezero-istio-ingress/values.yaml | 6 ++++ charts/kubezero-istio/Chart.yaml | 2 +- charts/kubezero-istio/README.md.gotmpl | 6 ++++ .../templates/servicemonitor.yaml | 18 ++++++++++ charts/kubezero-metrics/values.yaml | 2 ++ charts/kubezero/templates/istio-ingress.yaml | 4 +++ charts/kubezero/templates/istio.yaml | 3 ++ 9 files changed, 77 insertions(+), 2 deletions(-) create mode 100644 charts/kubezero-istio-ingress/templates/podmonitor.yaml create mode 100644 charts/kubezero-istio/templates/servicemonitor.yaml diff --git a/charts/kubezero-istio-ingress/Chart.yaml b/charts/kubezero-istio-ingress/Chart.yaml index a478d3a..dd1d7de 100644 --- a/charts/kubezero-istio-ingress/Chart.yaml +++ b/charts/kubezero-istio-ingress/Chart.yaml @@ -2,7 +2,7 @@ apiVersion: v2 name: kubezero-istio-ingress description: KubeZero Umbrella Chart for Istio based Ingress type: application -version: 0.5.4 +version: 0.5.5 appVersion: 1.9.3 home: https://kubezero.com icon: https://cdn.zero-downtime.net/assets/kubezero/logo-small-64.png diff --git a/charts/kubezero-istio-ingress/templates/podmonitor.yaml b/charts/kubezero-istio-ingress/templates/podmonitor.yaml new file mode 100644 index 0000000..cfe5d51 --- /dev/null +++ b/charts/kubezero-istio-ingress/templates/podmonitor.yaml @@ -0,0 +1,36 @@ +{{- if or ( index .Values "istio-ingress" "telemetry" "enabled" ) ( index .Values "istio-private-ingress" "telemetry" "enabled" )}} +apiVersion: monitoring.coreos.com/v1 +kind: PodMonitor +metadata: + name: envoy-stats-monitor + namespace: istio-ingress + labels: + release: metrics +spec: + selector: + matchExpressions: + - {key: istio-prometheus-ignore, operator: DoesNotExist} + jobLabel: envoy-stats + podMetricsEndpoints: + - path: /stats/prometheus + interval: 30s + relabelings: + - action: keep + sourceLabels: [__meta_kubernetes_pod_container_name] + regex: "istio-proxy" + - action: keep + sourceLabels: [__meta_kubernetes_pod_annotationpresent_prometheus_io_scrape] + - sourceLabels: [__address__, __meta_kubernetes_pod_annotation_prometheus_io_port] + action: replace + regex: ([^:]+)(?::\d+)?;(\d+) + replacement: $1:$2 + targetLabel: __address__ + - action: labeldrop + regex: "__meta_kubernetes_pod_label_(.+)" + - sourceLabels: [__meta_kubernetes_namespace] + action: replace + targetLabel: namespace + - sourceLabels: [__meta_kubernetes_pod_name] + action: replace + targetLabel: pod_name +{{- end }} diff --git a/charts/kubezero-istio-ingress/values.yaml b/charts/kubezero-istio-ingress/values.yaml index 0cf503a..5583418 100644 --- a/charts/kubezero-istio-ingress/values.yaml +++ b/charts/kubezero-istio-ingress/values.yaml @@ -17,6 +17,9 @@ global: istio-ingress: enabled: false + telemetry: + enabled: false + gateways: istio-ingressgateway: autoscaleEnabled: false @@ -90,6 +93,9 @@ istio-ingress: istio-private-ingress: enabled: false + telemetry: + enabled: false + gateways: istio-ingressgateway: # name and labels make the ingress private diff --git a/charts/kubezero-istio/Chart.yaml b/charts/kubezero-istio/Chart.yaml index 6710665..fcc2d7a 100644 --- a/charts/kubezero-istio/Chart.yaml +++ b/charts/kubezero-istio/Chart.yaml @@ -2,7 +2,7 @@ apiVersion: v2 name: kubezero-istio description: KubeZero Umbrella Chart for Istio type: application -version: 0.5.4 +version: 0.5.5 appVersion: 1.9.3 home: https://kubezero.com icon: https://cdn.zero-downtime.net/assets/kubezero/logo-small-64.png diff --git a/charts/kubezero-istio/README.md.gotmpl b/charts/kubezero-istio/README.md.gotmpl index 1b4d30f..3b91ba2 100644 --- a/charts/kubezero-istio/README.md.gotmpl +++ b/charts/kubezero-istio/README.md.gotmpl @@ -22,3 +22,9 @@ Installs the Istio control plane - https://istio.io/latest/docs/reference/config/istio.operator.v1alpha1/#IstioOperatorSpec - https://github.com/istio/istio/blob/master/manifests/profiles/default.yaml - https://istio.io/latest/docs/setup/install/standalone-operator/ + +### Grafana +- https://grafana.com/grafana/dashboards/7645 +- https://grafana.com/grafana/dashboards/7639 +- https://grafana.com/grafana/dashboards/7636 +- https://grafana.com/grafana/dashboards/7630 diff --git a/charts/kubezero-istio/templates/servicemonitor.yaml b/charts/kubezero-istio/templates/servicemonitor.yaml new file mode 100644 index 0000000..b645186 --- /dev/null +++ b/charts/kubezero-istio/templates/servicemonitor.yaml @@ -0,0 +1,18 @@ +{{- if index .Values "istio-discovery" "telemetry" "enabled" }} +apiVersion: monitoring.coreos.com/v1 +kind: ServiceMonitor +metadata: + name: istio-component-monitor + namespace: istio-system + labels: + release: metrics +spec: + jobLabel: istio + targetLabels: [app] + selector: + matchExpressions: + - {key: istio, operator: In, values: [pilot]} + endpoints: + - port: http-monitoring + interval: 30s +{{- end }} diff --git a/charts/kubezero-metrics/values.yaml b/charts/kubezero-metrics/values.yaml index 5a533d4..2e4f52a 100644 --- a/charts/kubezero-metrics/values.yaml +++ b/charts/kubezero-metrics/values.yaml @@ -65,6 +65,8 @@ kube-prometheus-stack: releaseNamespace: true additional: - kube-system + - istio-system + - istio-ingress - logging admissionWebhooks: diff --git a/charts/kubezero/templates/istio-ingress.yaml b/charts/kubezero/templates/istio-ingress.yaml index 4e8d5c8..0520737 100644 --- a/charts/kubezero/templates/istio-ingress.yaml +++ b/charts/kubezero/templates/istio-ingress.yaml @@ -8,6 +8,8 @@ global: {{- if index .Values "istio-ingress" "public" }} istio-ingress: enabled: {{ index .Values "istio-ingress" "public" "enabled" }} + telemetry: + enabled: {{ .Values.metrics.enabled }} {{- with index .Values "istio-ingress" "public" "gateway" }} gateways: istio-ingressgateway: @@ -22,6 +24,8 @@ istio-ingress: {{- if index .Values "istio-ingress" "private" }} istio-private-ingress: enabled: {{ index .Values "istio-ingress" "private" "enabled" }} + telemetry: + enabled: {{ .Values.metrics.enabled }} {{- with index .Values "istio-ingress" "private" "gateway" }} gateways: istio-ingressgateway: diff --git a/charts/kubezero/templates/istio.yaml b/charts/kubezero/templates/istio.yaml index ac750b8..ecaba88 100644 --- a/charts/kubezero/templates/istio.yaml +++ b/charts/kubezero/templates/istio.yaml @@ -8,6 +8,9 @@ global: istio-discovery: pilot: replicaCount: 2 + + telemetry: + enabled: {{ .Values.metrics.enabled }} {{- end }} {{- end }} -- 2.40.1 From 11f75449125416c4aca49611fa464bc94e5a22b7 Mon Sep 17 00:00:00 2001 From: Stefan Reimer Date: Sun, 25 Apr 2021 11:58:17 +0200 Subject: [PATCH 07/21] feat: Add Istio Grafana dashboards, enable metrics --- charts/kubezero-istio-ingress/.helmignore | 1 + charts/kubezero-istio-ingress/Chart.yaml | 2 +- .../templates/podmonitor.yaml | 5 ++-- charts/kubezero-istio/.helmignore | 29 +++++++++++++++++++ charts/kubezero-istio/Chart.yaml | 2 +- charts/kubezero-istio/dashboards.yaml | 21 ++++++++++++++ .../templates/grafana-dashboards.yaml | 21 ++++++++++++++ .../templates/servicemonitor.yaml | 5 ++-- charts/kubezero-istio/update.sh | 9 ++++-- 9 files changed, 84 insertions(+), 11 deletions(-) create mode 120000 charts/kubezero-istio-ingress/.helmignore create mode 100644 charts/kubezero-istio/dashboards.yaml create mode 100644 charts/kubezero-istio/templates/grafana-dashboards.yaml diff --git a/charts/kubezero-istio-ingress/.helmignore b/charts/kubezero-istio-ingress/.helmignore new file mode 120000 index 0000000..1ff0487 --- /dev/null +++ b/charts/kubezero-istio-ingress/.helmignore @@ -0,0 +1 @@ +../kubezero-istio/.helmignore \ No newline at end of file diff --git a/charts/kubezero-istio-ingress/Chart.yaml b/charts/kubezero-istio-ingress/Chart.yaml index dd1d7de..645462c 100644 --- a/charts/kubezero-istio-ingress/Chart.yaml +++ b/charts/kubezero-istio-ingress/Chart.yaml @@ -2,7 +2,7 @@ apiVersion: v2 name: kubezero-istio-ingress description: KubeZero Umbrella Chart for Istio based Ingress type: application -version: 0.5.5 +version: 0.5.6 appVersion: 1.9.3 home: https://kubezero.com icon: https://cdn.zero-downtime.net/assets/kubezero/logo-small-64.png diff --git a/charts/kubezero-istio-ingress/templates/podmonitor.yaml b/charts/kubezero-istio-ingress/templates/podmonitor.yaml index cfe5d51..e3d26ef 100644 --- a/charts/kubezero-istio-ingress/templates/podmonitor.yaml +++ b/charts/kubezero-istio-ingress/templates/podmonitor.yaml @@ -3,9 +3,9 @@ apiVersion: monitoring.coreos.com/v1 kind: PodMonitor metadata: name: envoy-stats-monitor - namespace: istio-ingress + namespace: {{ .Release.Namespace }} labels: - release: metrics +{{ include "kubezero-lib.labels" . | indent 4 }} spec: selector: matchExpressions: @@ -13,7 +13,6 @@ spec: jobLabel: envoy-stats podMetricsEndpoints: - path: /stats/prometheus - interval: 30s relabelings: - action: keep sourceLabels: [__meta_kubernetes_pod_container_name] diff --git a/charts/kubezero-istio/.helmignore b/charts/kubezero-istio/.helmignore index b4a6b6b..aef2d38 100644 --- a/charts/kubezero-istio/.helmignore +++ b/charts/kubezero-istio/.helmignore @@ -1,2 +1,31 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*.orig +*~ +# Various IDEs +.project +.idea/ +*.tmproj +.vscode/ + +README.md.gotmpl +*.patch +*.sh +*.py + istioctl istio-?.?.? diff --git a/charts/kubezero-istio/Chart.yaml b/charts/kubezero-istio/Chart.yaml index fcc2d7a..5c2a70a 100644 --- a/charts/kubezero-istio/Chart.yaml +++ b/charts/kubezero-istio/Chart.yaml @@ -2,7 +2,7 @@ apiVersion: v2 name: kubezero-istio description: KubeZero Umbrella Chart for Istio type: application -version: 0.5.5 +version: 0.5.6 appVersion: 1.9.3 home: https://kubezero.com icon: https://cdn.zero-downtime.net/assets/kubezero/logo-small-64.png diff --git a/charts/kubezero-istio/dashboards.yaml b/charts/kubezero-istio/dashboards.yaml new file mode 100644 index 0000000..e8c9234 --- /dev/null +++ b/charts/kubezero-istio/dashboards.yaml @@ -0,0 +1,21 @@ +configmap: grafana-dashboards +gzip: true +folder: Istio +condition: 'index .Values "istio-discovery" "telemetry" "enabled"' +dashboards: +- name: istio-control-plane + url: https://grafana.com/api/dashboards/7645/revisions/60/download + tags: + - Istio +- name: istio-mesh + url: https://grafana.com/api/dashboards/7639/revisions/60/download + tags: + - Istio +- name: istio-service + url: https://grafana.com/api/dashboards/7636/revisions/60/download + tags: + - Istio +- name: istio-workload + url: https://grafana.com/api/dashboards/7630/revisions/60/download + tags: + - Istio diff --git a/charts/kubezero-istio/templates/grafana-dashboards.yaml b/charts/kubezero-istio/templates/grafana-dashboards.yaml new file mode 100644 index 0000000..f90eacf --- /dev/null +++ b/charts/kubezero-istio/templates/grafana-dashboards.yaml @@ -0,0 +1,21 @@ +{{- if index .Values "istio-discovery" "telemetry" "enabled" }} +apiVersion: v1 +kind: ConfigMap +metadata: + name: {{ printf "%s-%s" (include "kubezero-lib.fullname" $) "grafana-dashboards" | trunc 63 | trimSuffix "-" }} + namespace: {{ .Release.Namespace }} + labels: + grafana_dashboard: "1" +{{ include "kubezero-lib.labels" . | indent 4 }} + annotations: + k8s-sidecar-target-directory: Istio +binaryData: + istio-control-plane.json.gz: + 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 + istio-mesh.json.gz: + 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 + istio-service.json.gz: + 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 + istio-workload.json.gz: + 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 +{{- end }} diff --git a/charts/kubezero-istio/templates/servicemonitor.yaml b/charts/kubezero-istio/templates/servicemonitor.yaml index b645186..b168a1d 100644 --- a/charts/kubezero-istio/templates/servicemonitor.yaml +++ b/charts/kubezero-istio/templates/servicemonitor.yaml @@ -3,9 +3,9 @@ apiVersion: monitoring.coreos.com/v1 kind: ServiceMonitor metadata: name: istio-component-monitor - namespace: istio-system + namespace: {{ .Release.Namespace }} labels: - release: metrics +{{ include "kubezero-lib.labels" . | indent 4 }} spec: jobLabel: istio targetLabels: [app] @@ -14,5 +14,4 @@ spec: - {key: istio, operator: In, values: [pilot]} endpoints: - port: http-monitoring - interval: 30s {{- end }} diff --git a/charts/kubezero-istio/update.sh b/charts/kubezero-istio/update.sh index 0bece09..f7b2313 100755 --- a/charts/kubezero-istio/update.sh +++ b/charts/kubezero-istio/update.sh @@ -1,9 +1,9 @@ -### TODO -- https://istio.io/latest/docs/ops/configuration/security/harden-docker-images/ - #!/bin/bash set -ex +### TODO +# - https://istio.io/latest/docs/ops/configuration/security/harden-docker-images/ + export ISTIO_VERSION=1.9.3 rm -rf istio @@ -35,3 +35,6 @@ sed -i -e 's/name: istio-ingress/name: istio-private-ingress/' ../kubezero-istio # Get matching istioctl [ -x istioctl ] && [ "$(./istioctl version --remote=false)" == $ISTIO_VERSION ] || { curl -sL https://github.com/istio/istio/releases/download/${ISTIO_VERSION}/istioctl-${ISTIO_VERSION}-linux-amd64.tar.gz | tar xz; chmod +x istioctl; } + +# Fetch dashboards from Grafana.com and update ZDT CM +../kubezero-metrics/sync_grafana_dashboards.py dashboards.yaml templates/grafana-dashboards.yaml -- 2.40.1 From 5c1643e7ef9f84443ed3583ac6b6edbe1d81f16f Mon Sep 17 00:00:00 2001 From: Stefan Reimer Date: Sun, 25 Apr 2021 11:59:54 +0200 Subject: [PATCH 08/21] feat: kubezero-metrics version bump, new Grafana dashboard management tooling for KubeZero, add ability to for compressed dashboards in configmaps --- charts/kubezero-metrics/.helmignore | 5 + charts/kubezero-metrics/Chart.yaml | 4 +- .../charts/kube-prometheus-stack/Chart.yaml | 6 +- .../charts/kube-prometheus-stack/README.md | 13 ++ .../charts/grafana/Chart.yaml | 2 +- .../charts/grafana/README.md | 2 + .../charts/grafana/templates/_pod.tpl | 5 + .../charts/grafana/templates/configmap.yaml | 4 +- .../templates/image-renderer-service.yaml | 2 + .../charts/grafana/templates/service.yaml | 3 +- .../charts/grafana/values.yaml | 3 + .../crds/crd-alertmanagerconfigs.yaml | 2 +- .../crds/crd-alertmanagers.yaml | 2 +- .../crds/crd-podmonitors.yaml | 4 +- .../crds/crd-probes.yaml | 144 +++++++++++++++++- .../crds/crd-prometheuses.yaml | 21 ++- .../crds/crd-prometheusrules.yaml | 2 +- .../crds/crd-servicemonitors.yaml | 4 +- .../crds/crd-thanosrulers.yaml | 4 +- .../templates/_helpers.tpl | 4 + .../templates/alertmanager/alertmanager.yaml | 2 +- .../templates/alertmanager/ingress.yaml | 24 ++- .../alertmanager/ingressperreplica.yaml | 17 ++- .../alertmanager/serviceaccount.yaml | 2 + .../prometheus-operator/serviceaccount.yaml | 2 + .../templates/prometheus/ingress.yaml | 36 +++-- .../prometheus/ingressThanosSidecar.yaml | 24 ++- .../prometheus/ingressperreplica.yaml | 17 ++- .../templates/prometheus/prometheus.yaml | 6 + .../templates/prometheus/serviceaccount.yaml | 2 + .../charts/kube-prometheus-stack/values.yaml | 9 +- .../{adjust_alarms.patch => metrics-zdt.path} | 28 +++- .../sync_grafana_dashboards.py | 97 ++++++++++++ .../templates/dashboard-gunzip-cm.yaml | 11 ++ charts/kubezero-metrics/update.sh | 4 +- charts/kubezero-metrics/values.yaml | 77 ++++++++-- 36 files changed, 522 insertions(+), 72 deletions(-) rename charts/kubezero-metrics/{adjust_alarms.patch => metrics-zdt.path} (77%) create mode 100755 charts/kubezero-metrics/sync_grafana_dashboards.py create mode 100644 charts/kubezero-metrics/templates/dashboard-gunzip-cm.yaml diff --git a/charts/kubezero-metrics/.helmignore b/charts/kubezero-metrics/.helmignore index 0e8a0eb..5299ab4 100644 --- a/charts/kubezero-metrics/.helmignore +++ b/charts/kubezero-metrics/.helmignore @@ -21,3 +21,8 @@ .idea/ *.tmproj .vscode/ + +README.md.gotmpl +*.patch +*.sh +*.py diff --git a/charts/kubezero-metrics/Chart.yaml b/charts/kubezero-metrics/Chart.yaml index 316bea9..28f7890 100644 --- a/charts/kubezero-metrics/Chart.yaml +++ b/charts/kubezero-metrics/Chart.yaml @@ -2,7 +2,7 @@ apiVersion: v2 name: kubezero-metrics description: KubeZero Umbrella Chart for prometheus-operator type: application -version: 0.3.5 +version: 0.4.0 home: https://kubezero.com icon: https://cdn.zero-downtime.net/assets/kubezero/logo-small-64.png keywords: @@ -16,7 +16,7 @@ dependencies: version: ">= 0.1.3" repository: https://zero-down-time.github.io/kubezero/ - name: kube-prometheus-stack - version: 14.9.0 + version: 15.2.0 # Switch back to upstream once all alerts are fixed eg. etcd gpcr # repository: https://prometheus-community.github.io/helm-charts - name: prometheus-adapter diff --git a/charts/kubezero-metrics/charts/kube-prometheus-stack/Chart.yaml b/charts/kubezero-metrics/charts/kube-prometheus-stack/Chart.yaml index 3523fba..2973939 100644 --- a/charts/kubezero-metrics/charts/kube-prometheus-stack/Chart.yaml +++ b/charts/kubezero-metrics/charts/kube-prometheus-stack/Chart.yaml @@ -6,7 +6,7 @@ annotations: url: https://github.com/prometheus-operator/kube-prometheus artifacthub.io/operator: "true" apiVersion: v2 -appVersion: 0.46.0 +appVersion: 0.47.0 dependencies: - condition: kubeStateMetrics.enabled name: kube-state-metrics @@ -19,7 +19,7 @@ dependencies: - condition: grafana.enabled name: grafana repository: https://grafana.github.io/helm-charts - version: 6.7.* + version: 6.8.* description: kube-prometheus-stack collects Kubernetes manifests, Grafana dashboards, and Prometheus rules combined with documentation and scripts to provide easy to operate end-to-end Kubernetes cluster monitoring with Prometheus using the Prometheus Operator. home: https://github.com/prometheus-operator/kube-prometheus icon: https://raw.githubusercontent.com/prometheus/prometheus.github.io/master/assets/prometheus_logo-cb55bb5c346.png @@ -44,4 +44,4 @@ sources: - https://github.com/prometheus-community/helm-charts - https://github.com/prometheus-operator/kube-prometheus type: application -version: 14.9.0 +version: 15.2.0 diff --git a/charts/kubezero-metrics/charts/kube-prometheus-stack/README.md b/charts/kubezero-metrics/charts/kube-prometheus-stack/README.md index 2d19cbb..93b23c0 100644 --- a/charts/kubezero-metrics/charts/kube-prometheus-stack/README.md +++ b/charts/kubezero-metrics/charts/kube-prometheus-stack/README.md @@ -83,6 +83,19 @@ _See [helm upgrade](https://helm.sh/docs/helm/helm_upgrade/) for command documen A major chart version change (like v1.2.3 -> v2.0.0) indicates that there is an incompatible breaking change needing manual actions. +### From 14.x to 15.x +Version 15 upgrades prometheus-operator from 0.46.x to 0.47.x. Helm does not automatically upgrade or install new CRDs on a chart upgrade, so you have to install the CRDs manually before updating: + +```console +kubectl apply -f https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.47.0/example/prometheus-operator-crd/monitoring.coreos.com_alertmanagerconfigs.yaml +kubectl apply -f https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.47.0/example/prometheus-operator-crd/monitoring.coreos.com_alertmanagers.yaml +kubectl apply -f https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.47.0/example/prometheus-operator-crd/monitoring.coreos.com_podmonitors.yaml +kubectl apply -f https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.47.0/example/prometheus-operator-crd/monitoring.coreos.com_probes.yaml +kubectl apply -f https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.47.0/example/prometheus-operator-crd/monitoring.coreos.com_prometheuses.yaml +kubectl apply -f https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.47.0/example/prometheus-operator-crd/monitoring.coreos.com_servicemonitors.yaml +kubectl apply -f https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.47.0/example/prometheus-operator-crd/monitoring.coreos.com_thanosrulers.yaml +``` + ### From 13.x to 14.x Version 14 upgrades prometheus-operator from 0.45.x to 0.46.x. Helm does not automatically upgrade or install new CRDs on a chart upgrade, so you have to install the CRDs manually before updating: diff --git a/charts/kubezero-metrics/charts/kube-prometheus-stack/charts/grafana/Chart.yaml b/charts/kubezero-metrics/charts/kube-prometheus-stack/charts/grafana/Chart.yaml index e9466a3..7b52c49 100644 --- a/charts/kubezero-metrics/charts/kube-prometheus-stack/charts/grafana/Chart.yaml +++ b/charts/kubezero-metrics/charts/kube-prometheus-stack/charts/grafana/Chart.yaml @@ -19,4 +19,4 @@ name: grafana sources: - https://github.com/grafana/grafana type: application -version: 6.7.4 +version: 6.8.0 diff --git a/charts/kubezero-metrics/charts/kube-prometheus-stack/charts/grafana/README.md b/charts/kubezero-metrics/charts/kube-prometheus-stack/charts/grafana/README.md index 76a4acb..c2513a8 100644 --- a/charts/kubezero-metrics/charts/kube-prometheus-stack/charts/grafana/README.md +++ b/charts/kubezero-metrics/charts/kube-prometheus-stack/charts/grafana/README.md @@ -63,6 +63,7 @@ This version requires Helm >= 3.1.0. | `image.sha` | Image sha (optional) | `2b56f6106ddc376bb46d974230d530754bf65a640dfbc5245191d72d3b49efc6` | | `image.pullPolicy` | Image pull policy | `IfNotPresent` | | `image.pullSecrets` | Image pull secrets | `{}` | +| `service.enabled` | Enable grafana service | `true` | | `service.type` | Kubernetes service type | `ClusterIP` | | `service.port` | Kubernetes port where service is exposed | `80` | | `service.portName` | Name of the port on the service | `service` | @@ -215,6 +216,7 @@ This version requires Helm >= 3.1.0. | `imageRenderer.securityContext` | image-renderer deployment securityContext | `{}` | | `imageRenderer.hostAliases` | image-renderer deployment Host Aliases | `[]` | | `imageRenderer.priorityClassName` | image-renderer deployment priority class | `''` | +| `imageRenderer.service.enabled` | Enable the image-renderer service | `true` | | `imageRenderer.service.portName` | image-renderer service port name | `'http'` | | `imageRenderer.service.port` | image-renderer service port used by both service and deployment | `8081` | | `imageRenderer.grafanaSubPath` | Grafana sub path to use for image renderer callback url | `''` | diff --git a/charts/kubezero-metrics/charts/kube-prometheus-stack/charts/grafana/templates/_pod.tpl b/charts/kubezero-metrics/charts/kube-prometheus-stack/charts/grafana/templates/_pod.tpl index 9af7717..4d55ac9 100644 --- a/charts/kubezero-metrics/charts/kube-prometheus-stack/charts/grafana/templates/_pod.tpl +++ b/charts/kubezero-metrics/charts/kube-prometheus-stack/charts/grafana/templates/_pod.tpl @@ -197,11 +197,16 @@ containers: - name: FOLDER_ANNOTATION value: "{{ .Values.sidecar.dashboards.folderAnnotation }}" {{- end }} + - name: SCRIPT + value: /opt/script.sh resources: {{ toYaml .Values.sidecar.resources | indent 6 }} volumeMounts: - name: sc-dashboard-volume mountPath: {{ .Values.sidecar.dashboards.folder | quote }} + - name: script-volume + mountPath: /opt/script.sh + subPath: script.sh {{- end}} - name: {{ .Chart.Name }} {{- if .Values.image.sha }} diff --git a/charts/kubezero-metrics/charts/kube-prometheus-stack/charts/grafana/templates/configmap.yaml b/charts/kubezero-metrics/charts/kube-prometheus-stack/charts/grafana/templates/configmap.yaml index de32b7a..c72219f 100644 --- a/charts/kubezero-metrics/charts/kube-prometheus-stack/charts/grafana/templates/configmap.yaml +++ b/charts/kubezero-metrics/charts/kube-prometheus-stack/charts/grafana/templates/configmap.yaml @@ -19,8 +19,10 @@ data: {{- range $elem, $elemVal := $value }} {{- if kindIs "invalid" $elemVal }} {{ $elem }} = + {{- else if kindIs "string" $elemVal }} + {{ $elem }} = {{ tpl $elemVal $ }} {{- else }} - {{ $elem }} = {{ tpl (toYaml $elemVal) $ }} + {{ $elem }} = {{ $elemVal }} {{- end }} {{- end }} {{- end }} diff --git a/charts/kubezero-metrics/charts/kube-prometheus-stack/charts/grafana/templates/image-renderer-service.yaml b/charts/kubezero-metrics/charts/kube-prometheus-stack/charts/grafana/templates/image-renderer-service.yaml index f5d3eb0..f29586c 100644 --- a/charts/kubezero-metrics/charts/kube-prometheus-stack/charts/grafana/templates/image-renderer-service.yaml +++ b/charts/kubezero-metrics/charts/kube-prometheus-stack/charts/grafana/templates/image-renderer-service.yaml @@ -1,4 +1,5 @@ {{ if .Values.imageRenderer.enabled }} +{{ if .Values.imageRenderer.service.enabled }} apiVersion: v1 kind: Service metadata: @@ -26,3 +27,4 @@ spec: selector: {{- include "grafana.imageRenderer.selectorLabels" . | nindent 4 }} {{ end }} +{{ end }} diff --git a/charts/kubezero-metrics/charts/kube-prometheus-stack/charts/grafana/templates/service.yaml b/charts/kubezero-metrics/charts/kube-prometheus-stack/charts/grafana/templates/service.yaml index 2764566..ba84ef9 100644 --- a/charts/kubezero-metrics/charts/kube-prometheus-stack/charts/grafana/templates/service.yaml +++ b/charts/kubezero-metrics/charts/kube-prometheus-stack/charts/grafana/templates/service.yaml @@ -1,3 +1,4 @@ +{{ if .Values.service.enabled }} apiVersion: v1 kind: Service metadata: @@ -47,4 +48,4 @@ spec: {{- end }} selector: {{- include "grafana.selectorLabels" . | nindent 4 }} - +{{ end }} diff --git a/charts/kubezero-metrics/charts/kube-prometheus-stack/charts/grafana/values.yaml b/charts/kubezero-metrics/charts/kube-prometheus-stack/charts/grafana/values.yaml index d826343..40f6a26 100644 --- a/charts/kubezero-metrics/charts/kube-prometheus-stack/charts/grafana/values.yaml +++ b/charts/kubezero-metrics/charts/kube-prometheus-stack/charts/grafana/values.yaml @@ -125,6 +125,7 @@ podPortName: grafana ## ref: http://kubernetes.io/docs/user-guide/services/ ## service: + enabled: true type: ClusterIP port: 80 targetPort: 3000 @@ -688,6 +689,8 @@ imageRenderer: # image-renderer deployment priority class priorityClassName: '' service: + # Enable the image-renderer service + enabled: true # image-renderer service port name portName: 'http' # image-renderer service port used by both service and deployment diff --git a/charts/kubezero-metrics/charts/kube-prometheus-stack/crds/crd-alertmanagerconfigs.yaml b/charts/kubezero-metrics/charts/kube-prometheus-stack/crds/crd-alertmanagerconfigs.yaml index b2ed161..e8c2828 100644 --- a/charts/kubezero-metrics/charts/kube-prometheus-stack/crds/crd-alertmanagerconfigs.yaml +++ b/charts/kubezero-metrics/charts/kube-prometheus-stack/crds/crd-alertmanagerconfigs.yaml @@ -1,4 +1,4 @@ -# https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.46.0/example/prometheus-operator-crd/monitoring.coreos.com_alertmanagerconfigs.yaml +# https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.47.0/example/prometheus-operator-crd/monitoring.coreos.com_alertmanagerconfigs.yaml --- apiVersion: apiextensions.k8s.io/v1 diff --git a/charts/kubezero-metrics/charts/kube-prometheus-stack/crds/crd-alertmanagers.yaml b/charts/kubezero-metrics/charts/kube-prometheus-stack/crds/crd-alertmanagers.yaml index 724d488..41128a6 100644 --- a/charts/kubezero-metrics/charts/kube-prometheus-stack/crds/crd-alertmanagers.yaml +++ b/charts/kubezero-metrics/charts/kube-prometheus-stack/crds/crd-alertmanagers.yaml @@ -1,4 +1,4 @@ -# https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.46.0/example/prometheus-operator-crd/monitoring.coreos.com_alertmanagers.yaml +# https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.47.0/example/prometheus-operator-crd/monitoring.coreos.com_alertmanagers.yaml --- apiVersion: apiextensions.k8s.io/v1 diff --git a/charts/kubezero-metrics/charts/kube-prometheus-stack/crds/crd-podmonitors.yaml b/charts/kubezero-metrics/charts/kube-prometheus-stack/crds/crd-podmonitors.yaml index d474a0c..4529496 100644 --- a/charts/kubezero-metrics/charts/kube-prometheus-stack/crds/crd-podmonitors.yaml +++ b/charts/kubezero-metrics/charts/kube-prometheus-stack/crds/crd-podmonitors.yaml @@ -1,4 +1,4 @@ -# https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.46.0/example/prometheus-operator-crd/monitoring.coreos.com_podmonitors.yaml +# https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.47.0/example/prometheus-operator-crd/monitoring.coreos.com_podmonitors.yaml --- apiVersion: apiextensions.k8s.io/v1 @@ -161,7 +161,7 @@ spec: description: ProxyURL eg http://proxyserver:2195 Directs scrapes to proxy through this endpoint. type: string relabelings: - description: 'RelabelConfigs to apply to samples before ingestion. More info: https://prometheus.io/docs/prometheus/latest/configuration/configuration/#relabel_config' + description: 'RelabelConfigs to apply to samples before scraping. Prometheus Operator automatically adds relabelings for a few standard Kubernetes fields and replaces original scrape job name with __tmp_prometheus_job_name. More info: https://prometheus.io/docs/prometheus/latest/configuration/configuration/#relabel_config' items: description: 'RelabelConfig allows dynamic rewriting of the label set, being applied to samples before ingestion. It defines ``-section of Prometheus configuration. More info: https://prometheus.io/docs/prometheus/latest/configuration/configuration/#metric_relabel_configs' properties: diff --git a/charts/kubezero-metrics/charts/kube-prometheus-stack/crds/crd-probes.yaml b/charts/kubezero-metrics/charts/kube-prometheus-stack/crds/crd-probes.yaml index 7fd658e..6e5af51 100644 --- a/charts/kubezero-metrics/charts/kube-prometheus-stack/crds/crd-probes.yaml +++ b/charts/kubezero-metrics/charts/kube-prometheus-stack/crds/crd-probes.yaml @@ -1,4 +1,4 @@ -# https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.46.0/example/prometheus-operator-crd/monitoring.coreos.com_probes.yaml +# https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.47.0/example/prometheus-operator-crd/monitoring.coreos.com_probes.yaml --- apiVersion: apiextensions.k8s.io/v1 @@ -35,6 +35,55 @@ spec: spec: description: Specification of desired Ingress selection for target discovery by Prometheus. properties: + basicAuth: + description: 'BasicAuth allow an endpoint to authenticate over basic authentication. More info: https://prometheus.io/docs/operating/configuration/#endpoint' + properties: + password: + description: The secret in the service monitor namespace that contains the password for authentication. + properties: + key: + description: The key of the secret to select from. Must be a valid secret key. + type: string + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names TODO: Add other useful fields. apiVersion, kind, uid?' + type: string + optional: + description: Specify whether the Secret or its key must be defined + type: boolean + required: + - key + type: object + username: + description: The secret in the service monitor namespace that contains the username for authentication. + properties: + key: + description: The key of the secret to select from. Must be a valid secret key. + type: string + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names TODO: Add other useful fields. apiVersion, kind, uid?' + type: string + optional: + description: Specify whether the Secret or its key must be defined + type: boolean + required: + - key + type: object + type: object + bearerTokenSecret: + description: Secret to mount to read bearer token for scraping targets. The secret needs to be in the same namespace as the probe and accessible by the Prometheus Operator. + properties: + key: + description: The key of the secret to select from. Must be a valid secret key. + type: string + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names TODO: Add other useful fields. apiVersion, kind, uid?' + type: string + optional: + description: Specify whether the Secret or its key must be defined + type: boolean + required: + - key + type: object interval: description: Interval at which targets are probed using the configured prober. If not specified Prometheus' global scrape interval is used. type: string @@ -188,6 +237,99 @@ spec: type: array type: object type: object + tlsConfig: + description: TLS configuration to use when scraping the endpoint. + properties: + ca: + description: Struct containing the CA cert to use for the targets. + properties: + configMap: + description: ConfigMap containing data to use for the targets. + properties: + key: + description: The key to select. + type: string + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names TODO: Add other useful fields. apiVersion, kind, uid?' + type: string + optional: + description: Specify whether the ConfigMap or its key must be defined + type: boolean + required: + - key + type: object + secret: + description: Secret containing data to use for the targets. + properties: + key: + description: The key of the secret to select from. Must be a valid secret key. + type: string + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names TODO: Add other useful fields. apiVersion, kind, uid?' + type: string + optional: + description: Specify whether the Secret or its key must be defined + type: boolean + required: + - key + type: object + type: object + cert: + description: Struct containing the client cert file for the targets. + properties: + configMap: + description: ConfigMap containing data to use for the targets. + properties: + key: + description: The key to select. + type: string + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names TODO: Add other useful fields. apiVersion, kind, uid?' + type: string + optional: + description: Specify whether the ConfigMap or its key must be defined + type: boolean + required: + - key + type: object + secret: + description: Secret containing data to use for the targets. + properties: + key: + description: The key of the secret to select from. Must be a valid secret key. + type: string + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names TODO: Add other useful fields. apiVersion, kind, uid?' + type: string + optional: + description: Specify whether the Secret or its key must be defined + type: boolean + required: + - key + type: object + type: object + insecureSkipVerify: + description: Disable target certificate validation. + type: boolean + keySecret: + description: Secret containing the client key file for the targets. + properties: + key: + description: The key of the secret to select from. Must be a valid secret key. + type: string + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names TODO: Add other useful fields. apiVersion, kind, uid?' + type: string + optional: + description: Specify whether the Secret or its key must be defined + type: boolean + required: + - key + type: object + serverName: + description: Used to verify the hostname for the targets. + type: string + type: object type: object required: - spec diff --git a/charts/kubezero-metrics/charts/kube-prometheus-stack/crds/crd-prometheuses.yaml b/charts/kubezero-metrics/charts/kube-prometheus-stack/crds/crd-prometheuses.yaml index c3f13d9..be23c9f 100644 --- a/charts/kubezero-metrics/charts/kube-prometheus-stack/crds/crd-prometheuses.yaml +++ b/charts/kubezero-metrics/charts/kube-prometheus-stack/crds/crd-prometheuses.yaml @@ -1,4 +1,4 @@ -# https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.46.0/example/prometheus-operator-crd/monitoring.coreos.com_prometheuses.yaml +# https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.47.0/example/prometheus-operator-crd/monitoring.coreos.com_prometheuses.yaml --- apiVersion: apiextensions.k8s.io/v1 @@ -1467,6 +1467,11 @@ spec: enableAdminAPI: description: 'Enable access to prometheus web admin API. Defaults to the value of `false`. WARNING: Enabling the admin APIs enables mutating endpoints, to delete data, shutdown Prometheus, and more. Enabling this should be done with care and the user is advised to add additional authentication authorization via a proxy to ensure only clients authorized to perform these actions can do so. For more information see https://prometheus.io/docs/prometheus/latest/querying/api/#tsdb-admin-apis' type: boolean + enableFeatures: + description: Enable access to Prometheus disabled features. By default, no features are enabled. Enabling disabled features is entirely outside the scope of what the maintainers will support and by doing so, you accept that this behaviour may break at any time without notice. For more information see https://prometheus.io/docs/prometheus/latest/disabled_features/ + items: + type: string + type: array enforcedNamespaceLabel: description: EnforcedNamespaceLabel enforces adding a namespace label of origin for each alert and metric that is user created. The label value will always be the namespace of the object that is being created. type: string @@ -2465,7 +2470,7 @@ spec: type: object type: object bearerToken: - description: bearer token for remote read. + description: Bearer token for remote read. type: string bearerTokenFile: description: File to read bearer token for remote read. @@ -2636,7 +2641,7 @@ spec: type: object type: object bearerToken: - description: File to read bearer token for remote write. + description: Bearer token for remote write. type: string bearerTokenFile: description: File to read bearer token for remote write. @@ -2646,6 +2651,16 @@ spec: type: string description: Custom HTTP headers to be sent along with each remote write request. Be aware that headers that are set by Prometheus itself can't be overwritten. Only valid in Prometheus versions 2.25.0 and newer. type: object + metadataConfig: + description: MetadataConfig configures the sending of series metadata to remote storage. + properties: + send: + description: Whether metric metadata is sent to remote storage or not. + type: boolean + sendInterval: + description: How frequently metric metadata is sent to remote storage. + type: string + type: object name: description: The name of the remote write queue, must be unique if specified. The name is used in metrics and logging in order to differentiate queues. Only valid in Prometheus versions 2.15.0 and newer. type: string diff --git a/charts/kubezero-metrics/charts/kube-prometheus-stack/crds/crd-prometheusrules.yaml b/charts/kubezero-metrics/charts/kube-prometheus-stack/crds/crd-prometheusrules.yaml index 07a24df..cd8705a 100644 --- a/charts/kubezero-metrics/charts/kube-prometheus-stack/crds/crd-prometheusrules.yaml +++ b/charts/kubezero-metrics/charts/kube-prometheus-stack/crds/crd-prometheusrules.yaml @@ -1,4 +1,4 @@ -# https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.46.0/example/prometheus-operator-crd/monitoring.coreos.com_prometheusrules.yaml +# https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.47.0/example/prometheus-operator-crd/monitoring.coreos.com_prometheusrules.yaml --- apiVersion: apiextensions.k8s.io/v1 diff --git a/charts/kubezero-metrics/charts/kube-prometheus-stack/crds/crd-servicemonitors.yaml b/charts/kubezero-metrics/charts/kube-prometheus-stack/crds/crd-servicemonitors.yaml index 9dee64f..543546a 100644 --- a/charts/kubezero-metrics/charts/kube-prometheus-stack/crds/crd-servicemonitors.yaml +++ b/charts/kubezero-metrics/charts/kube-prometheus-stack/crds/crd-servicemonitors.yaml @@ -1,4 +1,4 @@ -# https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.46.0/example/prometheus-operator-crd/monitoring.coreos.com_servicemonitors.yaml +# https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.47.0/example/prometheus-operator-crd/monitoring.coreos.com_servicemonitors.yaml --- apiVersion: apiextensions.k8s.io/v1 @@ -149,7 +149,7 @@ spec: description: ProxyURL eg http://proxyserver:2195 Directs scrapes to proxy through this endpoint. type: string relabelings: - description: 'RelabelConfigs to apply to samples before scraping. More info: https://prometheus.io/docs/prometheus/latest/configuration/configuration/#relabel_config' + description: 'RelabelConfigs to apply to samples before scraping. Prometheus Operator automatically adds relabelings for a few standard Kubernetes fields and replaces original scrape job name with __tmp_prometheus_job_name. More info: https://prometheus.io/docs/prometheus/latest/configuration/configuration/#relabel_config' items: description: 'RelabelConfig allows dynamic rewriting of the label set, being applied to samples before ingestion. It defines ``-section of Prometheus configuration. More info: https://prometheus.io/docs/prometheus/latest/configuration/configuration/#metric_relabel_configs' properties: diff --git a/charts/kubezero-metrics/charts/kube-prometheus-stack/crds/crd-thanosrulers.yaml b/charts/kubezero-metrics/charts/kube-prometheus-stack/crds/crd-thanosrulers.yaml index a470d4b..aae4b9e 100644 --- a/charts/kubezero-metrics/charts/kube-prometheus-stack/crds/crd-thanosrulers.yaml +++ b/charts/kubezero-metrics/charts/kube-prometheus-stack/crds/crd-thanosrulers.yaml @@ -1,4 +1,4 @@ -# https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.46.0/example/prometheus-operator-crd/monitoring.coreos.com_thanosrulers.yaml +# https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.47.0/example/prometheus-operator-crd/monitoring.coreos.com_thanosrulers.yaml --- apiVersion: apiextensions.k8s.io/v1 @@ -3339,4 +3339,4 @@ status: kind: "" plural: "" conditions: [] - storedVersions: [] \ No newline at end of file + storedVersions: [] diff --git a/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/_helpers.tpl b/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/_helpers.tpl index 8a3d1b7..66299eb 100644 --- a/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/_helpers.tpl +++ b/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/_helpers.tpl @@ -46,6 +46,10 @@ The longest name that gets created adds and extra 37 characters, so truncation s {{/* Generate basic labels */}} {{- define "kube-prometheus-stack.labels" }} +app.kubernetes.io/managed-by: {{ .Release.Service }} +app.kubernetes.io/instance: {{ .Release.Name }} +app.kubernetes.io/version: "{{ .Chart.Version }}" +app.kubernetes.io/part-of: {{ template "kube-prometheus-stack.name" . }} chart: {{ template "kube-prometheus-stack.chartref" . }} release: {{ $.Release.Name | quote }} heritage: {{ $.Release.Service | quote }} diff --git a/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/alertmanager/alertmanager.yaml b/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/alertmanager/alertmanager.yaml index cd3b10b..c550bee 100644 --- a/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/alertmanager/alertmanager.yaml +++ b/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/alertmanager/alertmanager.yaml @@ -91,7 +91,7 @@ spec: labelSelector: matchExpressions: - {key: app, operator: In, values: [alertmanager]} - - {key: prometheus, operator: In, values: [{{ template "kube-prometheus-stack.fullname" . }}-alertmanager]} + - {key: alertmanager, operator: In, values: [{{ template "kube-prometheus-stack.fullname" . }}-alertmanager]} {{- else if eq .Values.alertmanager.alertmanagerSpec.podAntiAffinity "soft" }} podAntiAffinity: preferredDuringSchedulingIgnoredDuringExecution: diff --git a/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/alertmanager/ingress.yaml b/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/alertmanager/ingress.yaml index 50fab14..0085e73 100644 --- a/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/alertmanager/ingress.yaml +++ b/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/alertmanager/ingress.yaml @@ -4,11 +4,13 @@ {{- $servicePort := .Values.alertmanager.service.port -}} {{- $routePrefix := list .Values.alertmanager.alertmanagerSpec.routePrefix }} {{- $paths := .Values.alertmanager.ingress.paths | default $routePrefix -}} -{{- if .Capabilities.APIVersions.Has "networking.k8s.io/v1beta1" }} +{{- if .Capabilities.APIVersions.Has "networking.k8s.io/v1" -}} +apiVersion: networking.k8s.io/v1 + {{- else if .Capabilities.APIVersions.Has "networking.k8s.io/v1beta1" -}} apiVersion: networking.k8s.io/v1beta1 -{{ else }} + {{- else -}} apiVersion: extensions/v1beta1 -{{ end -}} + {{- end }} kind: Ingress metadata: name: {{ $serviceName }} @@ -41,9 +43,16 @@ spec: pathType: {{ $pathType }} {{- end }} backend: + {{- if $.Capabilities.APIVersions.Has "networking.k8s.io/v1" }} + service: + name: {{ $serviceName }} + port: + number: {{ $servicePort }} + {{- else }} serviceName: {{ $serviceName }} servicePort: {{ $servicePort }} - {{- end -}} + {{- end }} + {{- end -}} {{- end -}} {{- else }} - http: @@ -54,8 +63,15 @@ spec: pathType: {{ $pathType }} {{- end }} backend: + {{- if $.Capabilities.APIVersions.Has "networking.k8s.io/v1" }} + service: + name: {{ $serviceName }} + port: + number: {{ $servicePort }} + {{- else }} serviceName: {{ $serviceName }} servicePort: {{ $servicePort }} + {{- end }} {{- end -}} {{- end -}} {{- if .Values.alertmanager.ingress.tls }} diff --git a/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/alertmanager/ingressperreplica.yaml b/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/alertmanager/ingressperreplica.yaml index 3d673b2..51aabaa 100644 --- a/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/alertmanager/ingressperreplica.yaml +++ b/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/alertmanager/ingressperreplica.yaml @@ -11,17 +11,19 @@ metadata: items: {{ range $i, $e := until $count }} - kind: Ingress - {{- if $.Capabilities.APIVersions.Has "networking.k8s.io/v1beta1" }} + {{- if $.Capabilities.APIVersions.Has "networking.k8s.io/v1" }} + apiVersion: networking.k8s.io/v1 + {{- else if $.Capabilities.APIVersions.Has "networking.k8s.io/v1beta1" }} apiVersion: networking.k8s.io/v1beta1 - {{ else }} + {{- else }} apiVersion: extensions/v1beta1 - {{ end -}} + {{- end }} metadata: name: {{ include "kube-prometheus-stack.fullname" $ }}-alertmanager-{{ $i }} namespace: {{ template "kube-prometheus-stack.namespace" $ }} labels: app: {{ include "kube-prometheus-stack.name" $ }}-alertmanager -{{ include "kube-prometheus-stack.labels" $ | indent 8 }} + {{ include "kube-prometheus-stack.labels" $ | indent 8 }} {{- if $ingressValues.labels }} {{ toYaml $ingressValues.labels | indent 8 }} {{- end }} @@ -45,8 +47,15 @@ items: pathType: {{ $pathType }} {{- end }} backend: + {{- if $.Capabilities.APIVersions.Has "networking.k8s.io/v1" }} + service: + name: {{ include "kube-prometheus-stack.fullname" $ }}-alertmanager-{{ $i }} + port: + number: {{ $servicePort }} + {{- else }} serviceName: {{ include "kube-prometheus-stack.fullname" $ }}-alertmanager-{{ $i }} servicePort: {{ $servicePort }} + {{- end }} {{- end -}} {{- if or $ingressValues.tlsSecretName $ingressValues.tlsSecretPerReplica.enabled }} tls: diff --git a/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/alertmanager/serviceaccount.yaml b/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/alertmanager/serviceaccount.yaml index c5e6e92..c5f1230 100644 --- a/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/alertmanager/serviceaccount.yaml +++ b/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/alertmanager/serviceaccount.yaml @@ -6,6 +6,8 @@ metadata: namespace: {{ template "kube-prometheus-stack.namespace" . }} labels: app: {{ template "kube-prometheus-stack.name" . }}-alertmanager + app.kubernetes.io/name: {{ template "kube-prometheus-stack.name" . }}-alertmanager + app.kubernetes.io/component: alertmanager {{ include "kube-prometheus-stack.labels" . | indent 4 }} {{- if .Values.alertmanager.serviceAccount.annotations }} annotations: diff --git a/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/prometheus-operator/serviceaccount.yaml b/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/prometheus-operator/serviceaccount.yaml index ab41797..f0292e9 100644 --- a/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/prometheus-operator/serviceaccount.yaml +++ b/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/prometheus-operator/serviceaccount.yaml @@ -6,6 +6,8 @@ metadata: namespace: {{ template "kube-prometheus-stack.namespace" . }} labels: app: {{ template "kube-prometheus-stack.name" . }}-operator + app.kubernetes.io/name: {{ template "kube-prometheus-stack.name" . }}-prometheus-operator + app.kubernetes.io/component: prometheus-operator {{ include "kube-prometheus-stack.labels" . | indent 4 }} imagePullSecrets: {{ toYaml .Values.global.imagePullSecrets | indent 2 }} diff --git a/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/prometheus/ingress.yaml b/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/prometheus/ingress.yaml index 4d45873..9e881f8 100644 --- a/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/prometheus/ingress.yaml +++ b/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/prometheus/ingress.yaml @@ -1,14 +1,16 @@ -{{- if and .Values.prometheus.enabled .Values.prometheus.ingress.enabled }} -{{- $pathType := .Values.prometheus.ingress.pathType | default "" }} -{{- $serviceName := printf "%s-%s" (include "kube-prometheus-stack.fullname" .) "prometheus" }} -{{- $servicePort := .Values.prometheus.service.port -}} -{{- $routePrefix := list .Values.prometheus.prometheusSpec.routePrefix }} -{{- $paths := .Values.prometheus.ingress.paths | default $routePrefix -}} -{{- if .Capabilities.APIVersions.Has "networking.k8s.io/v1beta1" }} +{{- if and .Values.prometheus.enabled .Values.prometheus.ingress.enabled -}} + {{- $pathType := .Values.prometheus.ingress.pathType | default "" -}} + {{- $serviceName := printf "%s-%s" (include "kube-prometheus-stack.fullname" .) "prometheus" -}} + {{- $servicePort := .Values.prometheus.service.port -}} + {{- $routePrefix := list .Values.prometheus.prometheusSpec.routePrefix -}} + {{- $paths := .Values.prometheus.ingress.paths | default $routePrefix -}} + {{- if .Capabilities.APIVersions.Has "networking.k8s.io/v1" -}} +apiVersion: networking.k8s.io/v1 + {{- else if .Capabilities.APIVersions.Has "networking.k8s.io/v1beta1" -}} apiVersion: networking.k8s.io/v1beta1 -{{ else }} + {{- else -}} apiVersion: extensions/v1beta1 -{{ end -}} + {{- end }} kind: Ingress metadata: {{- if .Values.prometheus.ingress.annotations }} @@ -41,9 +43,16 @@ spec: pathType: {{ $pathType }} {{- end }} backend: + {{- if $.Capabilities.APIVersions.Has "networking.k8s.io/v1" }} + service: + name: {{ $serviceName }} + port: + number: {{ $servicePort }} + {{- else }} serviceName: {{ $serviceName }} servicePort: {{ $servicePort }} - {{- end -}} + {{- end }} + {{- end -}} {{- end -}} {{- else }} - http: @@ -54,8 +63,15 @@ spec: pathType: {{ $pathType }} {{- end }} backend: + {{- if $.Capabilities.APIVersions.Has "networking.k8s.io/v1" }} + service: + name: {{ $serviceName }} + port: + number: {{ $servicePort }} + {{- else }} serviceName: {{ $serviceName }} servicePort: {{ $servicePort }} + {{- end }} {{- end -}} {{- end -}} {{- if .Values.prometheus.ingress.tls }} diff --git a/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/prometheus/ingressThanosSidecar.yaml b/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/prometheus/ingressThanosSidecar.yaml index 69de0f6..b09819e 100644 --- a/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/prometheus/ingressThanosSidecar.yaml +++ b/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/prometheus/ingressThanosSidecar.yaml @@ -4,11 +4,13 @@ {{- $thanosPort := .Values.prometheus.thanosIngress.servicePort -}} {{- $routePrefix := list .Values.prometheus.prometheusSpec.routePrefix }} {{- $paths := .Values.prometheus.thanosIngress.paths | default $routePrefix -}} -{{- if .Capabilities.APIVersions.Has "networking.k8s.io/v1beta1" }} +{{- if .Capabilities.APIVersions.Has "networking.k8s.io/v1" -}} +apiVersion: networking.k8s.io/v1 + {{- else if .Capabilities.APIVersions.Has "networking.k8s.io/v1beta1" -}} apiVersion: networking.k8s.io/v1beta1 -{{ else }} + {{- else -}} apiVersion: extensions/v1beta1 -{{ end -}} + {{- end }} kind: Ingress metadata: {{- if .Values.prometheus.thanosIngress.annotations }} @@ -40,9 +42,16 @@ spec: pathType: {{ $pathType }} {{- end }} backend: + {{- if $.Capabilities.APIVersions.Has "networking.k8s.io/v1" }} + service: + name: {{ $serviceName }} + port: + number: {{ $thanosPort }} + {{- else }} serviceName: {{ $serviceName }} servicePort: {{ $thanosPort }} - {{- end -}} + {{- end }} + {{- end -}} {{- end -}} {{- else }} - http: @@ -53,8 +62,15 @@ spec: pathType: {{ $pathType }} {{- end }} backend: + {{- if $.Capabilities.APIVersions.Has "networking.k8s.io/v1" }} + service: + name: {{ $serviceName }} + port: + number: {{ $thanosPort }} + {{- else }} serviceName: {{ $serviceName }} servicePort: {{ $thanosPort }} + {{- end }} {{- end -}} {{- end -}} {{- if .Values.prometheus.thanosIngress.tls }} diff --git a/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/prometheus/ingressperreplica.yaml b/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/prometheus/ingressperreplica.yaml index 3314377..fe74f29 100644 --- a/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/prometheus/ingressperreplica.yaml +++ b/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/prometheus/ingressperreplica.yaml @@ -11,17 +11,19 @@ metadata: items: {{ range $i, $e := until $count }} - kind: Ingress - {{- if $.Capabilities.APIVersions.Has "networking.k8s.io/v1beta1" }} + {{- if $.Capabilities.APIVersions.Has "networking.k8s.io/v1" }} + apiVersion: networking.k8s.io/v1 + {{- else if $.Capabilities.APIVersions.Has "networking.k8s.io/v1beta1" }} apiVersion: networking.k8s.io/v1beta1 - {{ else }} + {{- else }} apiVersion: extensions/v1beta1 - {{ end -}} + {{- end }} metadata: name: {{ include "kube-prometheus-stack.fullname" $ }}-prometheus-{{ $i }} namespace: {{ template "kube-prometheus-stack.namespace" $ }} labels: app: {{ include "kube-prometheus-stack.name" $ }}-prometheus -{{ include "kube-prometheus-stack.labels" $ | indent 8 }} + {{ include "kube-prometheus-stack.labels" $ | indent 8 }} {{- if $ingressValues.labels }} {{ toYaml $ingressValues.labels | indent 8 }} {{- end }} @@ -45,8 +47,15 @@ items: pathType: {{ $pathType }} {{- end }} backend: + {{- if $.Capabilities.APIVersions.Has "networking.k8s.io/v1" }} + service: + name: {{ include "kube-prometheus-stack.fullname" $ }}-prometheus-{{ $i }} + port: + number: {{ $servicePort }} + {{- else }} serviceName: {{ include "kube-prometheus-stack.fullname" $ }}-prometheus-{{ $i }} servicePort: {{ $servicePort }} + {{- end }} {{- end -}} {{- if or $ingressValues.tlsSecretName $ingressValues.tlsSecretPerReplica.enabled }} tls: diff --git a/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/prometheus/prometheus.yaml b/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/prometheus/prometheus.yaml index fdab5f5..124399e 100644 --- a/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/prometheus/prometheus.yaml +++ b/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/prometheus/prometheus.yaml @@ -70,6 +70,12 @@ spec: logFormat: {{ .Values.prometheus.prometheusSpec.logFormat }} listenLocal: {{ .Values.prometheus.prometheusSpec.listenLocal }} enableAdminAPI: {{ .Values.prometheus.prometheusSpec.enableAdminAPI }} +{{- if .Values.prometheus.prometheusSpec.enableFeatures }} + enableFeatures: +{{- range $enableFeatures := .Values.prometheus.prometheusSpec.enableFeatures }} + - {{ tpl $enableFeatures $ }} +{{- end }} +{{- end }} {{- if .Values.prometheus.prometheusSpec.scrapeInterval }} scrapeInterval: {{ .Values.prometheus.prometheusSpec.scrapeInterval }} {{- end }} diff --git a/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/prometheus/serviceaccount.yaml b/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/prometheus/serviceaccount.yaml index 862d5f8..7657831 100644 --- a/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/prometheus/serviceaccount.yaml +++ b/charts/kubezero-metrics/charts/kube-prometheus-stack/templates/prometheus/serviceaccount.yaml @@ -6,6 +6,8 @@ metadata: namespace: {{ template "kube-prometheus-stack.namespace" . }} labels: app: {{ template "kube-prometheus-stack.name" . }}-prometheus + app.kubernetes.io/name: {{ template "kube-prometheus-stack.name" . }}-prometheus + app.kubernetes.io/component: prometheus {{ include "kube-prometheus-stack.labels" . | indent 4 }} {{- if .Values.prometheus.serviceAccount.annotations }} annotations: diff --git a/charts/kubezero-metrics/charts/kube-prometheus-stack/values.yaml b/charts/kubezero-metrics/charts/kube-prometheus-stack/values.yaml index c7abeef..6b210fa 100644 --- a/charts/kubezero-metrics/charts/kube-prometheus-stack/values.yaml +++ b/charts/kubezero-metrics/charts/kube-prometheus-stack/values.yaml @@ -1536,7 +1536,7 @@ prometheusOperator: ## image: repository: quay.io/prometheus-operator/prometheus-operator - tag: v0.46.0 + tag: v0.47.0 sha: "" pullPolicy: IfNotPresent @@ -1552,7 +1552,7 @@ prometheusOperator: ## prometheusConfigReloaderImage: repository: quay.io/prometheus-operator/prometheus-config-reloader - tag: v0.46.0 + tag: v0.47.0 sha: "" ## Set the prometheus config reloader side-car CPU limit @@ -1868,6 +1868,11 @@ prometheus: ## enableAdminAPI: false + # EnableFeatures API enables access to Prometheus disabled features. + # ref: https://prometheus.io/docs/prometheus/latest/disabled_features/ + enableFeatures: [] + # - exemplar-storage + ## Image of Prometheus. ## image: diff --git a/charts/kubezero-metrics/adjust_alarms.patch b/charts/kubezero-metrics/metrics-zdt.path similarity index 77% rename from charts/kubezero-metrics/adjust_alarms.patch rename to charts/kubezero-metrics/metrics-zdt.path index aee2b07..4b64f1a 100644 --- a/charts/kubezero-metrics/adjust_alarms.patch +++ b/charts/kubezero-metrics/metrics-zdt.path @@ -1,6 +1,26 @@ +diff -turN charts/kube-prometheus-stack/charts/grafana/templates/_pod.tpl charts/kube-prometheus-stack.zdt/charts/grafana/templates/_pod.tpl +--- charts/kube-prometheus-stack/charts/grafana/templates/_pod.tpl 2021-04-22 00:36:35.000000000 +0200 ++++ charts/kube-prometheus-stack.zdt/charts/grafana/templates/_pod.tpl 2021-04-25 11:16:06.807876896 +0200 +@@ -197,11 +197,16 @@ + - name: FOLDER_ANNOTATION + value: "{{ .Values.sidecar.dashboards.folderAnnotation }}" + {{- end }} ++ - name: SCRIPT ++ value: /opt/script.sh + resources: + {{ toYaml .Values.sidecar.resources | indent 6 }} + volumeMounts: + - name: sc-dashboard-volume + mountPath: {{ .Values.sidecar.dashboards.folder | quote }} ++ - name: script-volume ++ mountPath: /opt/script.sh ++ subPath: script.sh + {{- end}} + - name: {{ .Chart.Name }} + {{- if .Values.image.sha }} diff -turN charts/kube-prometheus-stack/templates/prometheus/rules-1.14/etcd.yaml charts/kube-prometheus-stack.zdt/templates/prometheus/rules-1.14/etcd.yaml ---- charts/kube-prometheus-stack/templates/prometheus/rules-1.14/etcd.yaml 2021-04-14 22:13:29.000000000 +0200 -+++ charts/kube-prometheus-stack.zdt/templates/prometheus/rules-1.14/etcd.yaml 2021-04-15 14:43:03.074281889 +0200 +--- charts/kube-prometheus-stack/templates/prometheus/rules-1.14/etcd.yaml 2021-04-22 00:36:35.000000000 +0200 ++++ charts/kube-prometheus-stack.zdt/templates/prometheus/rules-1.14/etcd.yaml 2021-04-25 11:10:33.021207900 +0200 @@ -54,34 +54,6 @@ {{- if .Values.defaultRules.additionalRuleLabels }} {{ toYaml .Values.defaultRules.additionalRuleLabels | indent 8 }} @@ -37,8 +57,8 @@ diff -turN charts/kube-prometheus-stack/templates/prometheus/rules-1.14/etcd.yam annotations: message: 'etcd cluster "{{`{{`}} $labels.job {{`}}`}}": gRPC requests to {{`{{`}} $labels.grpc_method {{`}}`}} are taking {{`{{`}} $value {{`}}`}}s on etcd instance {{`{{`}} $labels.instance {{`}}`}}.' diff -turN charts/kube-prometheus-stack/templates/prometheus/rules-1.14/node-exporter.yaml charts/kube-prometheus-stack.zdt/templates/prometheus/rules-1.14/node-exporter.yaml ---- charts/kube-prometheus-stack/templates/prometheus/rules-1.14/node-exporter.yaml 2021-04-14 22:13:29.000000000 +0200 -+++ charts/kube-prometheus-stack.zdt/templates/prometheus/rules-1.14/node-exporter.yaml 2021-04-15 14:49:41.614282790 +0200 +--- charts/kube-prometheus-stack/templates/prometheus/rules-1.14/node-exporter.yaml 2021-04-22 00:36:35.000000000 +0200 ++++ charts/kube-prometheus-stack.zdt/templates/prometheus/rules-1.14/node-exporter.yaml 2021-04-25 11:10:33.021207900 +0200 @@ -30,7 +30,7 @@ summary: Filesystem is predicted to run out of space within the next 24 hours. expr: |- diff --git a/charts/kubezero-metrics/sync_grafana_dashboards.py b/charts/kubezero-metrics/sync_grafana_dashboards.py new file mode 100755 index 0000000..d376877 --- /dev/null +++ b/charts/kubezero-metrics/sync_grafana_dashboards.py @@ -0,0 +1,97 @@ +#!/usr/bin/env python3 + +import sys +import json +import yaml +import requests +import textwrap +import io +import gzip +import base64 + +config_file = sys.argv[1] +configmap_file = sys.argv[2] + + +# read config file +with open(config_file, 'r') as yaml_contents: + config = yaml.safe_load(yaml_contents.read()) + + +if 'condition' in config: + configmap = '''{{- if %(condition)s }} +''' % config +else: + configmap = '' + +# Base configmap for KubeZero +configmap += '''apiVersion: v1 +kind: ConfigMap +metadata: + name: {{ printf "%%s-%%s" (include "kubezero-lib.fullname" $) "%(configmap)s" | trunc 63 | trimSuffix "-" }} + namespace: {{ .Release.Namespace }} + labels: + grafana_dashboard: "1" +{{ include "kubezero-lib.labels" . | indent 4 }} +''' % config + +# Put all dashboards into a folder ? +if 'folder' in config: + configmap += ''' annotations: + k8s-sidecar-target-directory: %(folder)s +''' % config + +# compress ? +if 'gzip' in config and config['gzip']: + configmap += '''binaryData: +''' +else: + configmap += '''data: +''' + +for b in config['dashboards']: + response = requests.get(b['url']) + if response.status_code != 200: + print('Skipping the file, response code %s not equals 200' % response.status_code) + continue + raw_text = response.text + + obj = json.loads(raw_text) + + # Customize each dashboard + + # Set default tim in all charts to 1h + obj['time'] = { "from": "now-1h", "to": "now" } + obj['refresh'] = "30s" + + if 'tags' in b: + obj['tags'] = b['tags'] + + text = json.dumps(obj, indent=2) + text = text.replace("{{", "{{`{{").replace("}}", "}}`}}").replace("{{`{{", "{{`{{`}}").replace("}}`}}", "{{`}}`}}") + + if 'gzip' in config and config['gzip']: + # compress and base64 encode + buf = io.BytesIO() + f = gzip.GzipFile(mode='w', fileobj=buf, mtime=0) + f.write(text.encode()) + f.close() + + textb64 = base64.b64encode(buf.getvalue()).decode('utf-8') + textb64 = textwrap.indent(textb64, ' '*4) + configmap += ''' %(name)s.json.gz: +''' % b + configmap += textb64+'\n' + else: + text = textwrap.indent(text, ' '*4) + configmap += ''' %(name)s.json: +''' % b + configmap += text+'\n' + + +if 'condition' in config: + configmap += '{{- end }}'+'\n' + +# Write Configmap +with open(configmap_file, 'w') as f: + f.write(configmap) diff --git a/charts/kubezero-metrics/templates/dashboard-gunzip-cm.yaml b/charts/kubezero-metrics/templates/dashboard-gunzip-cm.yaml new file mode 100644 index 0000000..5adb1c8 --- /dev/null +++ b/charts/kubezero-metrics/templates/dashboard-gunzip-cm.yaml @@ -0,0 +1,11 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: script-configmap + namespace: {{ $.Release.Namespace }} + labels: +{{ include "kubezero-lib.labels" $ | indent 4 }} +data: + script.sh: |- + #!/bin/sh + /bin/gunzip -k /tmp/dashboards/*/*.gz diff --git a/charts/kubezero-metrics/update.sh b/charts/kubezero-metrics/update.sh index 4d36445..10d76d4 100755 --- a/charts/kubezero-metrics/update.sh +++ b/charts/kubezero-metrics/update.sh @@ -1,10 +1,10 @@ #!/bin/bash -VERSION=14.9.0 +VERSION=15.2.0 rm -rf charts/kube-prometheus-stack curl -L -s -o - https://github.com/prometheus-community/helm-charts/releases/download/kube-prometheus-stack-${VERSION}/kube-prometheus-stack-${VERSION}.tgz | tar xfz - -C charts # The grpc alerts could be re-enabled with etcd 3.5 # https://github.com/etcd-io/etcd/pull/12196 -patch -p0 -i adjust_alarms.patch --no-backup-if-mismatch +patch -p0 -i metrics-zdt.path --no-backup-if-mismatch diff --git a/charts/kubezero-metrics/values.yaml b/charts/kubezero-metrics/values.yaml index 2e4f52a..2c1c359 100644 --- a/charts/kubezero-metrics/values.yaml +++ b/charts/kubezero-metrics/values.yaml @@ -1,4 +1,8 @@ kube-prometheus-stack: + global: + rbac: + pspEnabled: false + defaultRules: create: true @@ -61,14 +65,6 @@ kube-prometheus-stack: limits: memory: 64Mi - namespaces: - releaseNamespace: true - additional: - - kube-system - - istio-system - - istio-ingress - - logging - admissionWebhooks: patch: tolerations: @@ -89,6 +85,8 @@ kube-prometheus-stack: action: replace prometheus-node-exporter: + rbac: + pspEnabled: false resources: requests: cpu: 20m @@ -103,6 +101,10 @@ kube-prometheus-stack: logFormat: json # externalUrl: + # gather all monitors + podMonitorSelectorNilUsesHelmValues: false + serviceMonitorSelectorNilUsesHelmValues: false + resources: requests: memory: 512Mi @@ -111,25 +113,66 @@ kube-prometheus-stack: memory: 3Gi # cpu: "1000m" + walCompression: true storageSpec: volumeClaimTemplate: spec: - storageClassName: ebs-sc-gp2-xfs + storageClassName: ebs-sc-gp3-xfs accessModes: ["ReadWriteOnce"] resources: requests: storage: 16Gi # Custom Grafana tweaks - # - persistence, plugins, auth grafana: enabled: true - persistence: - enabled: true - size: 4Gi - storageClassName: ebs-sc-gp2-xfs - deploymentStrategy: - type: Recreate + rbac: + pspEnabled: false + + grafana.ini: + server: + enable_gzip: true + analytics: + check_for_updates: false + security: + disable_gravatar: true + cookie_secure: true + strict_transport_security: true + #auth: + # disable_login_form: true + # disable_signout_menu: true + auth.anonymous: + enabled: true + dashboards: + min_refresh_interval: "30s" + # default_home_dashboard_path: 'dashboards/kubezero.json' + alerting: + enabled: false + date_formats: + default_timezone: UTC + + sidecar: + # We require at least 1.12.0 for the SCRIPT and relative folder names + image: + tag: 1.12.0 + dashboards: + searchNamespace: ALL + provider: + foldersFromFilesStructure: true + # For the gunzip script + extraContainerVolumes: + - name: script-volume + configMap: + name: script-configmap + defaultMode: 0777 + + #persistence: + # enabled: true + # size: 4Gi + # storageClassName: ebs-sc-gp2-xfs + #deploymentStrategy: + # type: Recreate + plugins: - grafana-piechart-panel service: @@ -141,6 +184,8 @@ kube-prometheus-stack: # Assign state metrics to control plane kube-state-metrics: + podSecurityPolicy: + enabled: false tolerations: - key: node-role.kubernetes.io/master effect: NoSchedule -- 2.40.1 From bfce129e9fbea5bef65160111c2c350c298e1060 Mon Sep 17 00:00:00 2001 From: Stefan Reimer Date: Sun, 25 Apr 2021 21:24:39 +0200 Subject: [PATCH 09/21] fix: adjust datasource and encoding of grafana dashboard tooling --- .../sync_grafana_dashboards.py | 23 +++++++++++++++++-- .../templates/dashboard-gunzip-cm.yaml | 2 +- 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/charts/kubezero-metrics/sync_grafana_dashboards.py b/charts/kubezero-metrics/sync_grafana_dashboards.py index d376877..78bda4a 100755 --- a/charts/kubezero-metrics/sync_grafana_dashboards.py +++ b/charts/kubezero-metrics/sync_grafana_dashboards.py @@ -13,6 +13,22 @@ config_file = sys.argv[1] configmap_file = sys.argv[2] +def traverse_json(obj): + if isinstance(obj, dict): + for k, v in obj.items(): + # CloudBender::StackRef + if k == "datasource" and v: + obj[k] = "$datasource" + + if isinstance(v, dict) or isinstance(v, list): + traverse_json(v) + + elif isinstance(obj, list): + for k in obj: + if isinstance(k, dict) or isinstance(k, list): + traverse_json(k) + + # read config file with open(config_file, 'r') as yaml_contents: config = yaml.safe_load(yaml_contents.read()) @@ -58,17 +74,18 @@ for b in config['dashboards']: obj = json.loads(raw_text) - # Customize each dashboard + # replace datasources + traverse_json(obj) # Set default tim in all charts to 1h obj['time'] = { "from": "now-1h", "to": "now" } obj['refresh'] = "30s" + # set tags if 'tags' in b: obj['tags'] = b['tags'] text = json.dumps(obj, indent=2) - text = text.replace("{{", "{{`{{").replace("}}", "}}`}}").replace("{{`{{", "{{`{{`}}").replace("}}`}}", "{{`}}`}}") if 'gzip' in config and config['gzip']: # compress and base64 encode @@ -83,6 +100,8 @@ for b in config['dashboards']: ''' % b configmap += textb64+'\n' else: + # encode otherwise helm will mess with raw json + text = text.replace("{{", "{{`{{").replace("}}", "}}`}}").replace("{{`{{", "{{`{{`}}").replace("}}`}}", "{{`}}`}}") text = textwrap.indent(text, ' '*4) configmap += ''' %(name)s.json: ''' % b diff --git a/charts/kubezero-metrics/templates/dashboard-gunzip-cm.yaml b/charts/kubezero-metrics/templates/dashboard-gunzip-cm.yaml index 5adb1c8..130d1e2 100644 --- a/charts/kubezero-metrics/templates/dashboard-gunzip-cm.yaml +++ b/charts/kubezero-metrics/templates/dashboard-gunzip-cm.yaml @@ -8,4 +8,4 @@ metadata: data: script.sh: |- #!/bin/sh - /bin/gunzip -k /tmp/dashboards/*/*.gz + /bin/gunzip -f -k /tmp/dashboards/*/*.gz -- 2.40.1 From 799f97116cdc4ad09a3a76b7c4bcbb32a21c3018 Mon Sep 17 00:00:00 2001 From: Stefan Reimer Date: Sun, 25 Apr 2021 21:25:06 +0200 Subject: [PATCH 10/21] fix: Fix datasource in Istio Grafana dashboards --- charts/kubezero-istio/templates/grafana-dashboards.yaml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/charts/kubezero-istio/templates/grafana-dashboards.yaml b/charts/kubezero-istio/templates/grafana-dashboards.yaml index f90eacf..edb9810 100644 --- a/charts/kubezero-istio/templates/grafana-dashboards.yaml +++ b/charts/kubezero-istio/templates/grafana-dashboards.yaml @@ -11,11 +11,11 @@ metadata: k8s-sidecar-target-directory: Istio binaryData: istio-control-plane.json.gz: - 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 istio-mesh.json.gz: - H4sIAAAAAAAC/+1deXPbNhb/v58Cyx7jdKyDkuVYbtOdOE6TdJLUE7vZ2Y0zWoiEKNS8CoCyXY/3s+8DeIEiJcuKnTg2Moki4YE43vnDQeDiG4Ss0YiGcSK4tYs+wG+ELtQnUEIcEEi19g9HB+9+f/P86OXzPw6tzZzs4zHxJf2ARQERU5LwkugS7jAaCxqFMktJEOexKtTFAvMoYQ4pabGfeDR85Up63FBoSn+bNUurVmW4hM+Pm2mXGPkroYw0dCqv32N4gkNcFk7dxuScCS/mCTPCeNa77fZWu581YrO5uhiHwKx6ZfG0sSo9WatoeR1NLKULmRnW2dhU5aDdbXfX6JvAY5/UazuqJtf7VggRh2EksFQgKcW0UsunXBQyLZsClHFCffFKlmRvlqkaS6CKVgtlYkStlqVlI6Fq1i4SLCFa+pS6DanUicJnkR8xWSbzxniju4l6tg0fg8Emsh/pRecdf1p2B/2AnvqECa7nK4XIp+MIM9fKaJfq/4/fZPyft6xXHL6hN4RP0X7+KMrYiuz2EBRTPUZcKrJOTrDPVX8sLyRCmdvj7f4wTZG6dxRFvqAxpHdVopJomPi++uXT8EQZVionJf0GQwMmCRJKaVk/u3T2y3GIkPyCuDj3yZNjK444lb3YRXjMIz8R5Cc0joSIAqj32FIPwCMYTRmZQP6pEDHf7XSo7HGbRscWEph5RABtNPZxeAIpeeETqL3F6d9kF/W78dlPSJAz0XKJEzGcVhpGIVToSDnuIhpOCaMCav2ZBh7izGmosONjQbjoQI40rTX2E+JHXtQKozF2TjwWJaHbSsIJA6m7bT7ztCZNCfWmYhcNoD1QEVKS+7mDU850rs+jnxBLS4RvWn/tgSo/ZV+qHpQjHDaw0qNimozbThSkHUo/mxj7SxSTEMXAgUnEAtlqJKZYIPAsMzASKB8lIZU0dIrPkYiAs2FIHLF5lRg7buTwDuR2SCx4R4CBTqjTCsBKPRKABnUiUOcZJaftqQj8xsalmWWrNqGjLrpmnWAFpxE7acGjLZyIaUd+LK6NEydhqjYUUIdFXDbPIbydVTtmGfPfEuKiKfHjf6LfIhoCx8iyRoEYAmCiOO80VpuKssgk62/rqpP+X/pWj1H3ICqdZ+rR4Gdfczun8Lu3pSWc5Vaf/T6Xv3NXVJSd6rKKD6DNc77f7pcYoeIrVFIQKZ9qSfaWDyqFrza1UGmZ296JhVVrhqBCPaXjC4ZDHmOWuh7dcxcuVrqC5ojmYGdKjmhAokRoLi/zZ+Ap9gor1/1oSX+PwSM0k7gWt1AWN3pbEC8GW+m/bntYiRxpjv5jiCi94Sba6sosOw15BkCxH/cgy0CV8vhRzqmS69VA+N1FBdNdluyTFoyVYKNYAwQeTrw58QT4LO+t3dU1JqBhTtCT+TQ6neeMFApYA5B897WEk3xZjjeYnRDFRynWmjKsrO/bV6h7v1a0Uutet/wNoY3NsD+vIw3qHsVVCFMqxJvMEGaKWVobVAzOqaDJWCf+mYAbmJwX5EREOjliFDQf5+hgCr//BjvCfkVriJs45PeGlikb8J2qrmZon4u3kXgL3bU0ysdN/dkJJb7LKwaZwjzZxUK2BeVSlzIYZaVTNSEEOI5p6B2lVmw3pVfbXelWjsNUU2R8Ul6g3kpZdFMDGwsDX+NdUVivLKxmlGBC+2CXBxAb1PhLsyNL6pUi5EzJ4ilxrUqeI1nznBoCahATelZ1jFnir6ANh5lTHXS/1+gQlWrPqLSFj6juv8HxErZPYHQhn5PtqzJIpA233naezhGi4oElvJM+/gTsbT5oUN+vYvM+4HLb3oGPnaF0j/ZOxYNOZD01iC8L1otJS+lJRzvsV57P3FqjR1KAG4pJgvlBsAruS9hGzuK0ahlqNngSbFDArWRDYQU1ugUgykcChhT+BSNxxMAhAVhIXfyxdfnBDj4+eiT72+1WBiSa9/oVO0L10K6QQebpEHxOLlwQOSTYWiKUwlXzuf7mcfqFD0DZR+/SDqD3kjekPjnAwZ59yICFNlSUBqWr4o6uioq6XBUj2XrryYpamNvvlYqoMuZzEnjmGWRxFbKICWQOhUSxn4wwdm4LYuiR6gYwxvaKGMM2GMNgDIMxDMb4fBhDootrgYtNBN4yBrMmIwcU5x//O7YG7R8L0IE66NpFZo9WhVRGDAGBc8QJ+B3+ZaDMEOLfcCj/tQeLYc1h4jiEc/QOuo42wihsDc7OCmbxRwbomCmU+zmFYvdWxDc9g28MvjH4xuCbz4tv6KcAnCcAcLY0gHNnUUoDMtk6O+MGdhjYcU9hx86KsKNvYIeBHQZ2GNjxlcGOwVcKOwYGdtw07Pi2Nxw6W9vXxRnfultbuI9vAlfIHXMPdEvIdjOusG0DLAywMMDifgKLea9zV5AFqMhGTP1IjE52+MiZeCMyAwPnFzLOAp54T5lIsH+YbkuVuELRgYJdF+DEI9RCG+sX4hKfCKLKiRiS5SQx+hF1bxWhrAVGAvJrqmoVS5Dph1M6EXVChl6yvqOs8/cJyTgJU1tjDZp5QGhme1U0s2XQjEEzBs0YNHOH0Mw+hFkaKnt/l/jrwpklpdx/PKN1HsneG0BjAM392m6yENEMDKIxiMYgGoNo7hCieYEFOcXnayKZhqfvP4LJOm2AiwEu92vDykLgsm2AiwEuBrgY4HKHgMu/IuBChN3noWDrwpeFZdx/EJN3Hcm+UzMLY8DMA9kk89hgGYNlDJYxWOYOYZlsb8enQJlFRdx/JJP13AAZA2Qe0P6YoTkAzuAYg2MMjrlLOOaAEPY0EVNIo44y+zXRzPKC7j+mqfcfHUQ+dQy+MfjmgWyXGZrT5wzAMQDHAJy7BHCys2JvBONcWdb9hzmNLDBIxyCdB7W/ZmjOoTNIxyAdg3TuEtKRMVnauLJ4FZHXXZm6oqT7j3IqDHh46EZp6VzwWh03lD0HJ/b9ChdK9ezr3ig1rN8oRV0FyH6fEcbSa/eq2ErF7cdLr5aKsUeyplfUgpGYYNGcuk8ZeOIsxM60C6kcFtWOl1IO4iXBLmE1SsREDRhAwkC/jZBwZ5F7URdgLVEq7FPM9V1kVS3SUYjey0WwVMOhS04yXBWtlvkWn2hYRxigkWBnuYv5N/xpvXnT2t9HL1/uBsEun3M1LnFogBWu7FUIUhPqbj8jHCnvvCfvUFucp7jvsNyjV97DWMv+B1PXnnaKLB13nF0IeJo93ipo/5xh1pIYA4KcQ558dzEaOcT3R/1dhk8vf5DU/KGS2FPEas0xFuBqlZq65fuco9NGdYBgL2+lK9lb7zjHIRWpsdSJFY/8oSq23HeCxbokrNar7vTYVXbChHUl9iqU2ihzg5ilO7S+qFiyyQJuxNMgHjUyRt8+vb6IwiQYQwRpFJE8vHV1AR0Muug1dC10zo2MFsto72ZldC0JDY2EVpDQsy8poaGR0NUS2v9yEtLvVVksIktCJ+thC+n5MiFVW90eDuY7gux2t7u42auIVb/bbXUBmzHNgjFN9Wzj+nDlu3TAcLOjlUXjkR+WDmWuNVoZQVE37E+uCW2zLcxG4z6rxmVXpc8pXJZaapS9ukbxJjmuokxcMBp6Zvh6ayGp0e4L93G7A9v6FPOqk/S+XLsc/RnRcONTL8YDSq/bLe/FG5+jjSambKLlrKrSM4V/tImOF7pW2ZRjq53+15RpMaWs9thavBwg10KqxGnDnG22QsAFDkWTa7li8cAnHgndUisvLv4Lfy8vG9mlKPC3vTRX2TuUP2BdvWCxubLKbExBVyKP4WD0VwK9pj7Z6LalITYr08hNWNrCgPo+5cSJQpePxolzQsSSixKVLvmkWXOu0id1RaPd7XbV8s/aLf5cjTWKfquKvneDij786hR9aBT9rio6umlNf3aTmj786jR9aDT9oWj6/nqafuM3Qa+LeD/lDun1K71Palkfld5phX2+dOy2cBtQttvn5dHRQefFu4NnKJ9I1Lf6MBxyyec6l4uhZZp8J/bSVHawrrSXpt9dczON3R2uv5vG7Jsx+2ZueyLabJu5Qqf3zgXh6FBuBDRavd4OjWqrP23xa+9aezdS4b0jDqEzYtzS59u+cT0xGcHcya1pJpzfpSXjzxCp11syNqt893iVz6zxmzX+G9swchtLxsKJRywDeKOxxHu3N31lVomvM3F1o6u+DVLnMCYzEv8KJL73STOPR88ObmHOUQWwZ3kouignu8aY1V6rt6SffU1CT6jpw24lnTRlX3HukqppPPvqKcvhdWcst3YWnRRd1pYKuVoZ8MULn/Ijxbn6e7545jWk5m9K1ikBPmtKpWFDKqPeVBw26rL+1rD+Erw0+4bcje/PX+oTsYTPT5LKxFPqphJeNmdbe9O88q52vjsXe/UZ4Vg+xbBLE67PvqbpdS0ClrqEqelca+JH2uuz6VvC+czzXPuUA2lSVvAFTm2iEVJJHBP3dfpqeJW2cniW3jl1zOOE+m7qb50oiKMQeLGJgB03/t7zQhdV1Fv4pV1UEKEl1wlQy9+j/vBxpfeo3xEvOzli7oHlL1i/kgxFz/LecMnU94RxuSBQ5i4g5YVuLZgRt24v2UJAd95URrnDpKFLZ9RNsF8/TyLPo47bKBtwhs/onMNKl7Z5DfxbQWYxojq1kZ8PMZe72eYL2/7wsdbEc3y2bJ2i1LkUmFbVSWKNpvGKH3l7mJOa/qWurZY99W215PqxB4vhzx1o59zBIzUzOK9LXUWOppAh01+TWdHqb/RC5acqVtqfNC3Z7X43dQUWd6YkwLnS5yt36YKUGsFgdpLmBLsuJZ+ajlUULUgQ+4BZQq9oMnh2LjRVuWiKZhWpcOKn54k0oKn85AGXTHDiLzjapKA2HuiSgTjdNmno+IlLnjafuNGoB1YAFdCG7PkRLBo00Y/BKc620Ud51l8JYefqlRPwbERMSaK76JScH15kVU/MyWVpV1I9cjaflZ/QGEa6h+eh03SaUeZ0tGZX1Ef6gMtUxjQozzYpz1GJTlt27q3yo1JAwyuPxRT8FSsfzlo/ygOQ7lKsgYZB7a72o6//sIPy+0D7bus/+l2dovnUnvbddtMef8z7IMOlJq8ra9EL3tYL1mvpbek/tDNzHrt6e/O2VNj3d6SggzVm0SnPpgLmo9gb4Cfar8x1WIkCpNaLndPX7LdX/8kMeVYY++Cby/8DLiN9yz61AAA= + H4sIAAAAAAAC/+1de1PbuBb/v59C1/sYugNJnBBK2NeU0m27U7pMYXvn3tLJKLaSaPFrJTnAMtzPfo9kO5ZjJYRAW5qqMw2JjqzHef70sHT1CCGn36dRkgru7KH38BuhK/UJlAiHBFKdg+P+0ds/Dp+fvHz+57GzWZADPCCBpB+xOCRiTFJeEn3CPUYTQeNIZikJ4jJRhfpYYB6nzCMlLQnSEY1e+ZKeGArN6G/yZmnVqgzX8PlhM+sSI3+nlBFDp4r6RwwPcYTLwqlvTC6Y8GKWMCGM573baWw3OnkjNs3VJTgCZtUrS8bGqvRkraLFdZhYSucyM6qz0VRlt9FqtFbom8CDgNRrO6km1/s2FSKOolhgqUBSilmlTkC5mMq0bApQBikNxCtZkrtZpmosgSq+NXAIMpFINWoPCZYSLX1MfUMq9eLoWRzETJbIRgO80dpEbdeFj253E7mP9aKLbj8tO4O+R08DwgTX85Ui5ONBjJnv5LRr9ffDo5z7s3b1isM3dEj4GB0Uj6Kcqcht9EAt1WPEpyLv5BAHXPXHGUVEKGN7stPpZSlS807iOBA0gfSWSlTyjNIgUL8CGp0ps8qkpGRvMDNgkiCRlJXzk08nv5xGCMkviIvLgPx86iQxp7IXewgPeBykgvyIBrEQcQj1njrqAXgEozEjQ8g/FiLhe80mlT1u0PjUQQKzERFA6w8CHJ1BSlH4EGrf4vQfsoc6reTiRyTIhdjyiRcznFUaxRFU6Ek57iEajQmjAmr9iYYjxJlnqLAZYEG4aEKOLG1rEKQkiEfxVhQPsHc2YnEa+VtpNGQgdb/BJyOtSWNCR2Oxh7rQHqgIKcn91MQZZ5q359GPiGUlwjetv25XlZ+xL1MPyhGODKwcUTFOBw0vDrMOZZ8mxv4SJyRCCXBgGLNQthqJMRYI/MoEjATKR2lEJQ2d40skYuBsFBFPbN4kxqYfe7wJuT2SCN4U4GWH1NsKwdWOSAga1IxBnSeUnDfGIgyMjcsyy1ZtQkd9dMs6wQrOY3a2BY9u4VSMm/Jjfm2ceClTtaGQeizmsnke4Y282gHLmf+GEB+NSZD8in6PaQQcI4saBWIIgYnismmsNhPlNJOsv6GrTva39KwjRv2juHSdmUeDnx3N7ZzD7/a2lnBRWH3++1L+LlzRtOxMl1V0AG2e8fxup0QIFV+hksJY+VRHsrd8UCl8talTlZa53d1EOLVmCCrUUzq6YDjiCWaZ69E999TFSldgjmce9sbkhIYkToXm8nJ/Bp5if2rluh8t6e8weAQziWtRC+Vxo70N8aK7nf1vNXqVyJHl6DyBiNLubaLtlsyya8jTBYr7pA1ZuqqUJ48LTpVcvzkMOtJ4sZJpnGhIYITT0YxkQnxRdNRt6coS0qgg6Ml8HJ/PMkXKAwwBSIH/WuJIvijHIWZnRLFQSrSmB0ur+s4Nmt6pFa00ut0qf0NUYxMczKqHQdPjpIpdSl04zG1gopiltUGF34IKSox14l8peIDh5ZScilgnx4yC0uMCGIzh9z9gQjioKAzxU4/8YWiZUv/Aq6ppDvO5eBOLN9BdR6N82NSfHVIS+Lxiixm+k12cynZKudalDPZY6VRNCCFOEhqNTjIDdk3p1XZXulVAMNUUGZqUA6i3UhZtaqCxMHAzoxsKa5eF1ewRTOgAbPAIwoIaeGl25Ei9UoSCKXkoJb5TyXMia55RQwAMYkgvqj4xT/wNtOE496fd1ncaHQJS7RmVNvcR1f1DnCxg+xCGFfI52b4qg0TWcOdN8+kMIZ4+sIB30r2fgb3NxgsaBFVY3gFI7rq78LHbk57R3a04z6Gsp4buZcF6MVkpbelje53K87lbM3okhbWhmDScHf2quL6AbeQiyaqWUWaDp+EGBchKNhRMUMNawKC8L2A0EVwxksQMHBLghMydnzrX793ww+PHsr+tVmUsonmv37AnVA/dChlkno29Z+TCBZGjge0FQpm6aj7T3yJEvwgAIwfobdYB9E7yhtRnBTjYcwAZsNDGiNKgdFXc1VVRURerYixb7/y8pBYW9nujIqqMxWQEnowsqFgAKhIChEhI7HpncLH7sdCFHqTuAV7sLAkvXAsvLLyw8MLCi08HLySwuBWu2ETgLRMwa9L3QHH+9b9Tp9v4YYo3UBPdusj80aqQyoghIGb2OQG/wz8PiulB6Ov15P9Gdz6iOU49j3CO3kLX0UYUR1vdi4sps/hji3HsxMnaTZy47SWhTdtCGwttLLSx0ObTQht6F2zzM2CbbQ3bPFiAYgAl2xcX3CIOizjWD3HsLok4OhZxWMRhEYdFHF8Y4uh+oYijaxHHfSOOb9q9nre9c1uI8Y2/vY07+I6QQm6M+0q3f+yYIYXrWkxhMYXFFOuJKWa9zkMBFaAiGwkNYtE/2+V9bzjqkwkYOL+SIRagxDvKRIqD42z3qYQUig4U7PuAJB6jLbSxeiE+CYggqpyYIVlOmqAfUOujgpOVcEhIfstUrWIJMv14TIeiTsiBS953lHd+nUCMlzK1A9YCma8DyOwsC2S2LZCxQMYCGQtkHhCQOYAISyNl72/TYFUks6CU9YcyWueR7L3FMhbLrM3WkrlgpmvBjAUzFsxYMPOAwMwLLMg5vlwRxBieXn/wknfaYhaLWdZmc8pczLJjMYvFLBazWMzygDDLv2PgQoz955FgqyKXuWWsP34puo5k36mde7E4Zv03xDyxMMbCGAtjLIx5QDAm38dxFxQzr4j1BzF5zy2GsRjm69gL07NnulkIYyGMhTAPCcIcEcKepmIMadRTZr8ikFlc0PrDmXr/0VEcUM9CGwtt1n9rTM8eKGexjcU2Fts8JGyTn/x6L/DmxrLWH+EYWWBBjgU5X8temp49Ws6CHAtyLMh5SCBHhmNp48riVTBedSnqhpLWH+BUGPD1ARulpTPBaynIUHYa/Nd3S9wH1XZveyFUr34hFPUVDPtjQhjLbs2rIioVsp8svBkqwSOSN72iEYwkBAtz6gFl4ITz6DrR7pPyWFw7MUr5hpcE+4TVKDETNUwACV39KkHCvXmeRd1ftUCfcEAx1zeLVRVIByB6L+eBUQ19LjiXcFmMWuabfz5hHVyA9oGJFd7lP/Bv6/Bw6+AAvXy5F4Z7fMbL+MSjIVaQsl0hSE2oe/yccKIc8768Am1+nul1heVWvPIaxVr2P5m6s7Q5zdL0B/l9fuf541tT2q8TzLYkvID45pGfv73q9z0SBP3OHsPn199LavFQSWwrYrXmBAvwskpN/fJlzf65UR0gzstL5Ur21jvOcURFZix1YsUZv6+KrXCbYLE+iar1qss59pSdMOHcCLumSm2V2SBm6Q6dzyqWfIqAW/EYxKMGxeibp7cXUZSGA4ggRhHJ81iXF9BRt4VeQ9ci79LKaL6M9u9XRreSUM9KaAkJPfucEupZCd0soYPPJyH9gpT5InIkdHK+biE9XySkaqsbve5sR5DbaLXmN3sZseqXtC0vYDummTOmqR5XXB+ufJsNGO53tDJvPPL9wqHMrUYrfSjqnv3JLaFtvl3Zatwn1bj8pvMZhctTS41yl9cobpLjMsrEBaPRyA5fP1pIMtr91H183IFtfXZ52fn5QC5b9v+KabRx1xvugNJutcoL7gaXaMPElE20mFVVeq7wjzfR6VzXKpty6jSyP6ZM8ylltafO/JUAuQxSJY4Nc7b54gAXOBIm13LDukFARiTyS628ujIy6vq6MYdS9gVdz3gT45rE5tKqsTEGnYhHDIf9v1PoHQ3IRqshDc6sNH0/ZVnbQhoElBMvjnzeH6TeGRELbjZUOhMQs4bcpDfqTkW31WqpFZ6VW/ypGmsV+l4Uev8eFbr3xSl0zyr0w1NodDeNfnafGt374jS6ZzV63TT6YDWNvvcrl1dFpHe5rHn1StdJ/eqjxgehmM8XjqHm7sTJN9y8PDk5ar54e/QMFRN6+m4bhiMu+Vnn5nSIlyV/7u0slf2jS21n6bRW3M/itnqrb2ixW1fs1pWPPRdsd67coNP7l4JwdCy34VmtXm2TRLXVd1t/2r/V9olMeG+JR+iEWLf06XZQ3E5MVjAPcneYDecPadX2E0Tq1VZt7ULbGi+02WV2u8x+b3s2PsaqrfCSPssBXn8g8d7Hm6GyC7U3zU3d6yKsQdIcxmFWyg9Uyvt3mlw8eXb0EaYVVaB6VoScq3JSa4BZ7eV1R/rT1yQaCTVN2KqkE1P2m6cnqZqpc2+elezddlJye3fe2ctlbZlMq5UBS0bRU36imFZ/kVZeb19PLV5FrFNCfGFKpZEhldHRWBwbVVd/LVd/y1xauSG38QX1a32ulfDZeVCZeE79TLiLpmVrr3JXXoYu9sDiUX3SN5FPMezTlOsTrFl6XYGApT5hasbWGQax9n5q9hpuMbk80z7lL0x6Cqbv1eYSIZUkCfFfZ+9eV2lLR2DpjDM/PEhp4Gfu1YvDJI6AF5sI2HHvLxYbPNK0RnBDoNVXst7l4s7iF5Lff1jqheS3ZJQfwTDzwOI3lV9JxqFnRdu5ZN47wric2y9zT9HhlW4VmBG/bhf5nH5r1iT6hU+kkU8n1E9xUD+Yocijzq0oG3CBL+iMY8oWnHkNxzthbhmiOktRHLQwk9ts21Mbfv+h1sRLfLFoyaHUrQxjVtVGQgjT0COIR/uYk5qeZS6slj3zYbXk+vkB81HNA2jnzAkeNTO4rEtdRQhTaJDpr8lk2upHeqHyUxUr7U+alux2p5WZvMO9MQlxofTFIly2tqQGI5idZTnBokvJZ6bjTIsWJEwCACTRaNpk8OBcaKpyZYpaFalwEmQHcxhAUvEKv0+GOA3mnBEypRpPRsmxmW6bNPKC1CdPzUdXGPXACaECashenGVigBuV42v0AZvzd0rYpXqBAzwbEWOS6q44IxenADnVo2cKWbqV1BG5mM3Kz2gCg9bjy8gzHQuUOx2t2RX1kT7gOpMxDctDQsoDSeLzLbfwVsWZI6DhlccSCv6KlQ/nre8XgUZ3KU5Xg5luS/vR0X+4Yfm9q3139R+dlk7RfGpb++76WY8/FH2QYVGT14216AXv6AXrtbS39R/a4TNPfL29RVsq7PsnVhDBGbD4nOej+tkodgj8RAeVaQsnVcDTebF7/pr9/uq/uSFPpsbefXT9f8ToGnNJtAAA istio-service.json.gz: - H4sIAAAAAAAC/+1dbVPbSrL+zq8Ya8+9BSkglsFgpXJSBYaczS4nYTGbU7WHrK+QBluLLDl6IRCK/e13ZvQujYxlW7Jsd1VCgmakeevueZ7uluZ5CyGh39eMsevYwjv0J/kdoWf2k5QY8giTq8JZr3959eX38+u/nv+zJ+wGxbp8i3VafmmZI+wMsWtHhSq2FUsbO5pp0CpRgfM0Zg9VZUe2TddScFQ21t2BZnxSafmY81Cv/LPfrVizrMIL+flt1xuShb+7moU5gwraH1jynWzI0cM1lXs5mITf0gUP2LL90R3tH+4f+J3Y5Tc3lg0yWdnGxkNuU/HLsYYmt8GbUi13Mo3sNPKabO8395szjM2Rb3Wcbe06eTk7tnARZcMwHZkKEF1Fr1FB12wnXNOoK6Tk1tV05xN9krgbXY1NCWlibw/5y4j29oRYNWywbr1DjuXi2PWhpnKuaoppdE3dtOgzrcGtvN3cRS1RJD/a7V0k7sQfHQz8JBoO+l90omPLseP1okW0h7embKmCX/bC/v225c9/WrM+2eR/qIetB03B6Cy4G/kzi8R9icgmuxOrmuOP807WbTYkYWBgh2nc8dHBkXeFit+1aeqONibXm+yi5mBL9tsU21K7LYktSTyWjlmprhn3TNe8pWMCwdE9xdR1eWxjNTWnpElNvTSjdfYmP7WWP8jvrcPYhcegd/7vT/T3YNaS4ig2jyIrkuxdUo5YLw0HG1TMhPeq9oAUXbbtX2+ildkbYlnFFnLwo7OnkKrYuhE+3BjvbfLoD73zq6+fuufv0C+2tyjv37LrpPwtedyH2KKTxu40rKtd07jTBonR+0b0TnZ1x86U0F66tmOOaMlLouhlN/kMkwgCmV3PFH7byqnIXYFwFQ5Sz0yvBG81whURc9tkK9OREteSkhReHplMEYWhM9KTE2iOkyZiKcuY7mHukL0d7Gtk9Y73RWJeE3UczWE6KqQuW7JBemB5Y0qapJj9oKOJ2o+1npRxWRnia22ETZc+zXB1fTepA8S8ncrK/cAyXUONW4xkna+y7uL84qSasevMYLYOiaFsH3p/m/vSTno6vVoHx8SctqRddNik1To59dqkVDxukWpt9rTjnfgKJCUpuSP88pwANy/1VM470xrJTJLNsZ3s4kB2BzjbuZH8GKyM2Exr5YhIoF+YLrKH5g/ealIBGxI8NTR19YLiPvu1Wr/L1j1m609FdTa7c8ixO0dTmp3DyWZHbCWvUe1/kHWeLuSYpAmGhwj+7745eGATneof22GDGkSj5XSF/xD50e6ewiquY6armJZGLEGwJQtD8vtPYvFkPaMhWHUV/CWnt8wW6EpWT32IbzufTeczmRIhVfptN/0cpi12xnB5OI9OQygzE3WCGrDEwHMXciSPx5oxuPYsn5hXlh1bZgoCkMa6iRyT7Qk5o0htaZkB5D6c2O/BFA9vJR+ea8iIip8RW3ZpEtm1s3ouUDlmhcFkkg3RwIpD0Fem3jXtEUf0x6bt3GmP2c3IL/hIJK6n/WSPbzf/J1XHwvx72fWJt7Kp+p1AxdeX7s5ihpYNIzupjjcw4fPbE06hGd445ZzT/fee2AOOxb3TdD1JCg4IIRDFDvlBMA7ZlsROZve6o21nN3PP6OD447yntehGJx1knuOb7YmWlkF/8kh3ZHDAhWwNsDPFdOPHsdclCgu2bXe0rRFegLc1SkMY7ca2Y/cdwnX0ZwuPTYsYVoK6fvlOfrkRdsle52gGM1t9H1j9+l9S7P//Rnj5sz36trNDJ6zZFHeyqxZthg7BL/QhGraz1QKL/lFWHDaLYqYKkUPP18CRDdvB49QuMkkwwm3P5sxtgOe6OjXZ6MqbJPSVrgUWuCjOJrZLJ5XkpKHwjERcdTpp1WE1plMdk45Q+LWg1gR2qpDisJsCx43iWgzF1h6lcnDlPDA1C3oXglJVrGgjmSGyzAzVD8GOsUW5lmtozkKRbKcKKJtGLyVg2aMZsOwhYFnAsoBlAcsClp0Fy5aAYnfJ1jEmNgr3FSKxDVLW3n8Tglv0FpWHnCtCzDMBY4kAIEmif/fbk0Fyz1UUbNvoikwR2jZMY6/9+IiCWbV3NhA2yw+D1yGzrGuy3Q1A7XNSbW5liwt2mE/8AhsDh8VcmpkynHfbCvpSNWamxMzF3yxZ1TznenPxsC7pb3wV1w01VcVGz9NU3tR7sZPjJLjDA8xYUKqfRCYGxol9nY79xas8DHJKArLGL6UB0vPR2HmaUP4vbJk5xWTfzyvRjJwSSxsMiR5zArPp7SMNxqhlzXloLqZ7ScNnbPOiL7Tgh6Y6w4xo5SDuDKLJ7PkBU5IHfOY6TShpTFugcu3SLrSzZXzhIguuYguzzfFON1PG1Ns/viTULY0sFJxnTohxVu65rVKXyxirFx4kyZYX3te3h2RvNQlBGfW/u7LhaDrebu5TUp+z+/ZV1wty90fEIGg2JjBTtfu3rnKPnRn3ZJFt+LdPaFvHbOcn2La5g0wLzd67Ejo2N2rgc6UpMIVntT6GrV22m8L0wGN3HlGQai0K0qqJgp8tw7GvM0qCNEkSThcqCVKtJUHaeEmQJkhCdyYyktq06Hg+evw74zqgZVd44DudODf2htqdw7+T7/s/81ctRWPCpKvnNKiRrUzWVFBGlpkTA2eIph8QI81QtQdNdeUJuSmxzMhY+qGHYOVHjQOAPVHjOZ5jCTF0ftIc33cjce7Kh28hRJsA7p/kx2lcZJEUc2Q3SGvNdo4WmoNT2cZcofXALPc2D81yi/jujtftWWwMQyoBNRkHxyeaq45PfKlidCWPp9CyC/wQjmyL11AN40l/aUmScng0a/zoL+rhoXwgr2ta0ymkNfF8Bp3isaAOxIIgFgSxIIgFQSxoIbEgRxkTqqVg7QGr/dsnB0+I0KBpCVZteJWw8AhPTlTnuntJuI83jeiUTiMEcCAzHzLzNzEzvzMZwUrHgGABwQKCBQQLCLaKzPwYaN3w/Hz6EjW2ID8f8vMhPx/y8wvk57+GaDuAaAHRAqIFRAuIttz8/IJYdoFZ+rOh6BXP1fcBM+TqQ67+2ufqd+bM1ZckyNWHXH3I1a88V7/wzlxtxv6c3YO8/ZqKhbSaYrHhOfylS4UEUrEW+fypWAHk80M+P+TzQz4/5PNDPn+xfP5XYkdpTzsEjyB4BMEjCB5B8GiOhH6bGCRI5p8rmb9H32aGRP7YPd+iI26CifoNG9iKbXTh7FhEC7hHqlRwQoaYd0LGYVUnZHQvPp1/vkZ/fLn6+8WXk7Pehh+Q0ZqMAA/b9Twgo8gqrtz5GBCanS4021xQaPaIo0CZMGyeArXnDM222tOFZhcQd+UAqFniqqscOEWyjX7SMDMEUBcZQJ0q7d9nVn6QwbU056k/NnVNeSJ2f+Q6rqz3Hd2eMncqg5k9I9b/YRLuYcqqd4Ol/NCzZX1KNtncBbUMO8q8ogGL1A27KPcJuyiRx1XJuwlp8P38/H/kz8tLupeIXSV/9vNqROMI66J3KKydGFpUY/vGVTsHKvmpis3R9UVvR5jl/YnWTPG3OWWtkRa217kWXeIsRZskb2iVBG7RVLBiaZwY4Z1S9OoY5PtkKCbZhAdBmM8mjBf12IShE0Mll73ZQF26vxUM/XH39Y2L/WVdXY6cIuULDA+mX9IuObAmcHIfID5YXXwQWFy1CbZTszhuhu3cNO5omTSuhOxZSI8FdjfzERVoeq6HZn1RZnkIfLYjNBY7J8sb/JryjKVy2oVKUwNUbEG0H3RsoTq29kz9tXcRIwYPqbrLTdXN+9DEIsisQOCjKAArB1Ze7EMttmJp4yBTcWMpe2fKuKsozsvYa3V+VTWkPv5KLJB+IP1LPb+qhoRYnCkeV+XZWms1abWjOan+ZkhO7nhCN8Jlu7lcV0L5h41tlt5KoLcbobdSQb09rUZv26C3M+ptG/R2I/S2XUxvu9XorQR6O6PeSqC3G6G3UjG9PatEbyvitw0guJsxa+vJcCeo6fk60dkG8FlQ09UltBPU9OM6sdcG0FdQ09XlrxPU9Ld1IqsNYKugpqtLVyeo6V/X6T2z8HOSkK22kR+WhAw1yFDb9PfGeElonVKS0Do1T0KDLDPIMisxy6ywJ9n7cB7EfSA/akYKXNgpChK32hK3/NSewg4+EDlISilB4iSQuDU2ckvOp6gSyYFPdPMSAarEbSBfmxfBrhKkgXxtXui1SkgG8gUxw2pjhvRABYgX1iVeqGLlNnM6BoQNIWwIYcPKw4biURlxwyOIG0LcEOKG03ib/A/bgYcTAodVOaBA5CByWLVTCmQOQocV+6lA5CB2WHXscH6ZA+coBA9LxW4gYBA9LBWogYBB+LBUWAYCBvHDUuOH4dl1EDeEuCHEDSFuCMfUZQKH3I/eH88ZN+w0Sz2mDg6ag6jeHFE9/tHOjjImqFbB2gNWfVS7SoeszYJp1/NQ5zqfH74gIWtslpQtWZDW9UCxUyp/6MoXR3RHWkJhyuV19xJ1QwEEyrRcynQKh3ovmC1lxwFkCcjSK2SJe6b3/GypBWwJ2NLqsSWbzGsCxBZgRTy8Cxh288hQARlqgBABESqRCPWIKCLHBAoEFAgoUGUUaCvVXKSVXZ0iefSHb46i1Q/F3yLD2IotQNA7QTF1XR7bGT3k0gAhBTcZ/G8dxi6k4iQM9QdmLVx7D8uLzRDMC2PZwHpSxhM0j2x1jgfbhfdE55Giy7ZN9jJK1m5N2VL3hlgmEBI5+NHZoygWWzfChxvjPbHKxofe+dXXT91z9MeXq79ffDk5671/y66T8rfkcR/qSd0mErEDDhGLr8TEqNVBbpveu2zSNIwiMIVDZ5QiEiY7NJvT8SqXMd3D3CFPw2tCTUtdtmSD9MBnlBmSFigfHY0ArowFuTKadYj7Hs3pyJDKDfuW8C7oKvs5kGyjn/TgdvB3lO/v8D+XUtzT8TofjbHYWOXUrQmyqtoOI6u8CinCSqp6hLUdElbeXUnezMt+DBM+FSKCy2WyvK5y6OzkEYU3oHcovCUxSFRn38nU8jhTqDhXJNGrMolWWChLy2aoWmLX1VGT/iCQTZN6z6JZC8kiOjFUFKb/dumuWdB9w0ULG+e/SYuKh4oSVxfo4jHBxQM5wcAN6xnmnpscisskh7T4X5QsQYwcYuQL54yvoPN8OL3QPOIEFmyQsvb+m7phdnrWYT1mq17TsvacZakcugSJa4CClj1doKFVauja+wx6rqJg20ZXRLDRtmEae+3Hx9CBYu/k+RIg8WO5iR8+OnUNbfG0WiBAVhTAPwD+gSL+AWJRFUtj+QDZ8PmGf4iY+z5xa17fwWHNv0NcgnsBPlMM7ocp3Q/bhU/FUv3D1/sjYhA0gtVNQ+V9xWeFCLg4ZyyRft6HcB+x2WzuINNCs88pTGddv5a0aKfG0r8WvV34vDLQ/Nk0XwLNB81H8e8+Lveb3duFT5IDzZ9R89ug+aD59fl0+nbhM/5A82fUfAk0HzQ//qXU5X7AvgY8vwFEf6Gq3wDdXxWmX+FBAjWg9Q3g9aDom0nsKzzQoQYsvgE0HhR9M3l8hQdr1IC0N4C1g6JvJm1f1wNO0u9DojNfvtlhJ57UQR5jTfIY4d1GyF2EdxuXnJ7YKSU9sV3z9ETIP4T8wxLzDwt70PMODYSIGeTHLetEXpDMTZLM5SdwFXZSgmhCglElCUaFvWogmRtjNJecAVM90gQvLyRo1AFXghxC/kAdQCTIIYS36wAZQQ4h+lq36GtP+4kh8lq/yKuKFWZvIAALAVgIwC43ACselRKBPYIILERgIQI7hV/M/wQl+GwhBFu3ECyIJsRg6xqDBdmEIGxNg7AgmhCFrWsUdlGyCe5eCMPWAluCIEIcthZAEgQRArG1gI0giBCJXXIkNjzpEyKwEIGFCCxEYCECO+F4T+4RHZ15I7CtUo/3hAM6IT46R3zUMl1D3U5jYEcZExysYO0Bqz4OXuUjKOdDwTu7qLnfbIrrCoTrcRJlBYLYAEmsjbCt66GKp1RG0ZUvsuiOtITCdNjr7iXqhuIJ1Gu51Ot0DKxrsawrOw4gXUC6XiFdmYuLYV0HwLqAda0e67LJvCaAbgFelY+JAecuHOdOG1yoKakqIGcNELQVELT1JlQ9Iq7IMYFKAZUCKlUZldpKNRdpZTqMHC1/KP8WGcdW8Bj2CGqRqB2hpQdN7xbBVoZ4JEdgsXXkXXaevJZU2br3ahK8GQml8IluZUL4aAePxjoxkkZEogjAtZ2YFEfzEwP3z0n8qBN7wrUQpIFHP2DLGFlSsZlSxUt5dDRwA8dMDDEoiu6q+ETnwP8cySN7MbFunOq+NYiTz1ipOXY4Zlj47mKLEi5hTEw4dobYjWuyV/w1GF28JFpLMXF1gB/TVe17bfxPS+89GQqn24G8xLq9lZq72MrJuh50JzUtsTWNT/rUVJyunWZojs9ZhAUsXKAmQoHVs7O3vLZ0rLm+Z9i3OQhsp5R1y26YVEPZ4tj/CLomJEszY6DX+JV9qfAGGStwbXztPShOiGcWleLqH05vrgmIanDNwFIl8sqH7jyRTA46lMjvBO7PLI4BVShVBlurLYNVC0dqnUPZ6OrUzRfu6ehzQDIKCIttKYZdRFrYf2jSJXmux1Tjn8PhhPt+ofKYxzXjVPPF44XebPLIHz0oJWqRy4qnbfe/hRouogxv999E1PdG2P7z3zfCtzc7+2/egprUQk2KKccPfXnKkXLE5MqnV5Eqcp4sl6Y68/WqoF6F3qf51OoA1GoRapWmlDNtP8wvWKqGTeHw5OwFr7ghi6lTUZ/rdH2ATWmdtKeYzsyxK6EFKc0UUYKcGEC+dJesV4vq5UZvW+xf6op+8fx4GhNK34N358UVBMP8sScGznTBMf1rQuK2sabcs8iwf7M/k/0gRBP3aAvtUeSxFOO/HDTjJZEDX2jF/i+qHrX/FvSIhohiavNqK/EHH8UfHG+ldRj/JVJp4ViN9zfoS2IyfppG5LKLfZmRKkL4EtCZbA9vTdnyHie4LHNCuPhb3/3bycPId7s+hK5Zcevl/wEc2bzgNbgBAA== + H4sIAAAAAAAC/+1dbVPbSBL+zq8Y6/auIEWIZTBYW9lUgSHZ7LIJh7ls1S05l5AGW4csOXohEIr77TczepdGRvKLLNv9IQQ0I81bd8/zdLc0T1sICf2+ZoxdxxZ+Rn+RvxF6Yj9JiSGPMLkqnPb6F5ef/zi7+vXsXz1hNyjW5Rus0/ILyxxhZ4hdOypUsa1Y2tjRTINWiQqcxzF7qCo7sm26loKjsrHuDjTjo0rLx5yHeuWf/G7FmmUVnsnPr7vekCz8zdUszBlU0P7Akm9lQ44erqncy8EkfEgX3GPL9kd3uHewt+93Ypff3Fg2yGRlGxsPuU3FL8camtwGb0q13Mk0stPIa7K919xrTjE2R77Rcba1q+Tl7NjCRZQNw3RkKkB0Fb1GBV2znXBNo66QkhtX052P9EnibnQ1NiWkiZ84M0QqYYN16mfkWC6OXR9qKueqpphG19RNiz7RGtzI281d1BJF8qPd3kXiTvzRwbCPo8Ggf6BjHVuOHa8XLaE9vDFlSxX8smf2/9ctf/bTevXRJr+hHrbuNQWj0+Bu5M8rEvckIpnsTqxqjj/OW1m32ZCEgYEdpm9Hh/uH3hUqfFemqTvamFxvsouagy3Zb1NsS+22JLYk8Ug6YqW6ZtwxTfMWjokDR/MUU9flsY3V1JySJjX1woxW2Zv81Ep+J3+3DmIXHoLe+X8/0r+DWUsKo9g8jGxIsndJKWK9NBxsUCET3qraPVJ02bZ/uY5W5vUQyyq2kIMfnNcKqYqta+HdtfHWJo9+1zu7/PKxe/Yz+sn2FuXtG3adlL8hj3sXW3TS2K2GdbVrGrfaIDF634Teyq7u2JkS2kvXdswRLXlOFD3vJp9hEkEgs+sZwq9bORW5KxCuwn7qmemV4K1GuCJibptsZTpS4lpSksLLI5MpojB0RnpyAs1x0kAsZRnTPcwdsrd/fYls3tGeSIxroo6jOUxHhdRlSzZIDyxvTEmTFLMfdDRR+7HWkzIuK0N8pY2w6dKnGa6u7yZ1gJi3E1m5G1ima6hxi5Gs80XWXZxfnFQzdp0ZzNYBMZTtA+9fc0/aSU+nV2v/iJjTlrSLDpq0WienXpuUikctUq3Nnna0E1+BpCQV2Q9qpJe3pjWSmRCbYzvZxYHsDnC2cyP5IVgUsZlWyBERPr8wXWQPze+8haSyNSRAamjq6jkFfPZLtf6QrTvMlp5K6XQm54Bjcg4LWpyDyRZHbCWvUcW/l3WeGuRYowk2h8j8H74luGcTneof21yDGkSZ5XSF/xL50W4fwyquY6armJZGjECwGwtD8vcPYuxkPaMcWHUV/Dmnt8wM6EpWRX1sbzufTOcTmRIhVfp1N/0cpi12xmZ5AI9OQygzE3WC2q7EwHMXciSPx5oxuPKMnphXlh1bZgoCfMa6iRyTbQc5o0jtZpkB5D6cmO5BgYe3kg/PtWFExU+J3bowiezaWT0XqByzwmAyyV5oYMUhwCtT74r2iCP6Y9N2brWH7D7kF7wnEtfTfrDHt5t/T9WxMP9edn3irWyq/iAo8eWlu7WYoWXDyE6q4w1M+PTmmFNohjcWnHO69d4Re8CxuLearif5wD7hAqLYIT8IvCE7ktjJbFy3tO3sPu4ZHRx/nPe0Ft3jpP3Mc3yzPdHSMtRPHumODA6ukK0BdgpMN34Ye12iiGDbdkfbGqEEeFujDITxbWw7dt8hNEd/svDYtIhhJYDrp2/kj2thl+x1jmYws9X3MdUv/yPF/u/XwvNf7dHXnR06Yc2muJNdtWgzdAh0oQ/RsJ2tFlj097LisFkUM1WIHHpOBo5s2A4ep3aRSYIRbns2Z24DKNfVqclGl94koS90LVKIIwBwNrFdOqkkJw2FZyTiqtNJqw6rUUx1TDpC4ZeSWhPYqVKKw24KPDaKazEAW3uAyoGUsyDULN6dFaCqWNFGMgNjmcmpH3gdY4syLNfQnLmC2E4VKDYNXBYAYw+ngLEHAGMBxgKMBRgLMHYaGLsAALtLto4xsVG4rxCJbZCy9t6rENeiN2hxoLkisDwVJpYI9pEk+m+vPRkf91xFwbaNLskUoW3DNF63Hx5QMKv2zgYiZvl+8DJalnVNtrsBnn1Kqs2NbHHBDvOEn2Nj4LBISzNThvNuWy0PqsYslJi5+MGSVc3zpjfnj+iSXsYXId1QU1Vs9Dwl5c26Fyw5SuI6PMCM+6T6ScRhYBzbV+lgX7zK/SCnJKBo/FIaET0bjZ3HCeX/xpaZU0y2/LwSzcgpsbTBkKgwJxKb3jnSOIwa1ZyH5sK55zRyxjYv3EILvmuqM8yIVg7YzoCZzHYfkCR5wOerRWJHY9oClWuXdqGdLeMLF1lwFVuY7Yu3upmyo97W8TmhbmlQoeA8S0LssnLHbZU6WsZYPffQSLa89Ja+PSTbqkm4yaj/zZUNR9PxdnOPUvmcjbevul5Uuz8iBkGzMUGYqt2/cZU77Ey5HYtsr795RNs6Zps+gbXNHWRaaPreLaBjMwMGPk0qACc8q/U+bO2i3RSKY47dWURBqrUoSKsmCn56DMe+TikJ0iRJOJmrJEi1lgRp4yVBmiAJ3al4SGrTouN571HvjNeAll3ige9v4tzYG2q3Dv9Ovsf/1F+1FIMJs6ye0qBGtjJpUkEZWWZO5Jshmn7AiTRD1e411ZUnJKPEEiFj2YYegpUfNA4A9kSN53OOZcDQ+UnTe9+DxLkrH76FEG0CuH+UH4p4xyIp5shukMWa7RwtNAcnso25QuuBWe5tHprlFvE9HS/bs9gYhlQCajIOjjs0Vx0f+VLF6EoeT6Fl5/g+HNkWr6EaRpH+1pIk5eBw2qjR39SDA3lfXsM8phPIY+K5CzrlI0AdiABBBAgiQBABggjQXCJAjjImLEvB2j1W+zePDp4Ql0FFuVVtKJUw97hOTiznqntBaI83jeiETiOEbSALH7LwNywLvzMZvEpHAF4BvAJ4BfAK4LWKLPwYXt3wXHz6rjS2IBcfcvEhFx9y8Yvl4r8EZjsAZgHMApgFMAtgdrG5+CVh7Bwz8qcD0Cuel+9jZcjLh7z8dc7L78yYly9JkJcPefmQl195Xn7pTbna7PwZuwc5+jUVC2k1xWLD8/UXLhUSSMVa5O6nIgSQuw+5+5C7D7n7kLsPufuFc/dfiBil/esQMoKQEYSMIGQEIaMZkvdtYpAgcX+mxP0efWkZkvZj93yNDq4JJuoDNrAV2+jC2bGIFnAPSqng5Asx7+SLg6pOvuiefzz7dIX+/Hz5+/nn49Pehh980ZqMAA/a9Tz4oswqrty5FxCQfTEg25xTQPaQozuZ4Gue7rRnDMi22sUCsnOItnKw0zTR1FUOlyLZRj9ocBnCpvMMmxZK8fdJlR9acC3NeeyPTV1THonJH7mOK+t9R7cLJktl4LJnsPrfTUI7TFn1brCU73q2rE95Jpu7oJZhR6lWNEyRumEX5T5hFyUStyp5DyGNu5+e0v1Dz8972atRr0k5IjbmKdl5enX72lU7+yr5qYrN0dV5b0eY5j2I1lQRtRnlqJEWpJcpFF2+LPOaJEtolYRp3gxvjpI2MR5bUKzqGJL7aCgm2TwHQVDOJiQV9dj0oGNDJZe9eUBdui+VDNRx9+ONi9RlvVOOnOLRcwzmpV+kXnAYTOBkKkA0r7poHhCvyjJhCxMvbirszMzrcJnMawFprpDHCoRs6iMjUHF6hqZ9mWV5wHq6Iy3mOyfLG/yK04elUtK5Sk0DVGlOrB10aSpdWnvS/dL7fxEZhxzZ5ebI5n3cYR68VCBwUBSAYAPBLvxdFFuxtHGQIrix7LtTMOopirOS71qdD1UNP4+/hgr8Hfj7Us+HqiG3FaeKmFV5dtVaTVqNmEyqp4zH5Pb++RldtJvL9Qos/tCuzdJPCfRzrfRTKqmfJ9XoZxv0c0r9bIN+rpV+tsvpZ7ca/ZRAP6fUTwn0c630Uyqnn6eV6GdF/LMBBHQzZm21GegEdTxbJ7rZAL4J6lh/wjlBHd+vE7tsAL0Edaw/v5ygjh/WiUw2gE2COtafTk5Qx1/X6W2r8BOIkOi1kR9DhOQuSO7a4LenePlbnYXkb3Vqnr8FCVqQoLXABK3STl7vY28QeoHUomkkSwLJWnnJWn5WTGnfG4gW5HPMIFkSSNYaGK0lpyJUibTALbm+MfQqcRXI0foGf6sEUSBH6xu1rBIygRxBuG0x4Tb6EX0ItdUl1KZi5SZzIgJE3CDiBhG3KiNu4uEiQm6HEHKDkBuE3Io4gvwvpoGTEWJu8/YNgWhB0G1R/iKQLYi6LciFBKIFYbdFhd1mly3wT0LcDQQJAm/1AVIgSBB5A0GC0Ft9Qm/huWEQcoOQG4TcIOQGR4TFY27cr5QfzRhy6zQXekQYHPIFAbEZAmL803IdZUyAq4K1e6z6wHWVDriaBrauwzm59Tx6eU7C1NgsaapIYNb1MKcTKmfo0hc7dEtaQmHi4VX3AnVDQQP2s1z2cwJnI8+Z+GTHAbwHeE/Jo5FnJz4tID5AfFaP+NhkXhM4tQTB4UFagKnry2tKyEoDhAU4zRw4TY+IHHJMYDPAZoDNVMZmtlLNRVrZ1SkyR3/6hiha/VD8LTKMrdgCBL0TFFPX5bGd0UMurBdS8JHB+dZB7EIqhMFQfGDWwrX3sLnYDMG5MJYNrCdlPMHYyJbmeDBceEt0Him6bNtkz6K868aULfX1EMsEEiIHPzivKSrF1rXw7tp4S+yx8a53dvnlY/cM/fn58vfzz8envbdv2HVS/oY87l09qdhEYrXPIVbxlZgYUNrPbdN7Q0sqwhACUzh0RiliYLIDiDkdr3IZ0z3MHXIRnhJqWuqyJRukBz5DzJCuQPnoaATwSszulWjWIRp7OKNPQlpsMHYBLzeusssCyTb6Qc+/BtfF4l0X/ic+yjstXqacMaIaq5y6NcFHVdthfJRXIcVJSVWPk7ZDTsq7K0mNeWmHYaalQkRwWWSV10mfsU7uP6mEiB16Sg4D1dP1UVjWpgra5oobelHe0AoL3ALyB+YvjevqW0l/lMam2bGn0RyF/A4dGyoK82i7dLcr6XHh7vIb53JJi4qHZhJX5+iVMcErA8m1QOdqF2Semc+Jy+RztPjflN9AhBoi1HOneS+A7nyUPNeE3AQAbJCy9t6rukFxehpdPWarXtOyNlRkqRR4AZLVAEVc9HSBJi5CE9ee/vdcRcG2jS6JAKNtwzRetx8eQi+IvZPnFoC0i+WmXfho0zW0+TNkgQBTUQCqD1S/INUnZlSxNBaIz8atN/y7ttx3bFuzugEOav5Z2wV4CuCrt+BJ+GuWw+0nnX9U9HD7FeLS4ozRvkKn3heaU5jO+n0kaDb/xNI/Prxd+mQq0PDpNFwCDd9IDV/2J6C3S58ZBho+pYa3QcM3UsOX/CXu7dKnuYGGT6nhEmj4Rmr4kr+HXgMe3gAiPlcVb4CO142JV/hd+hrQ7gbwblDo9SbeFZ4PUAOW3QCaDQq93jy7wnMaakCqG8CqQaHXm1ZvzFH1p74cs7MzPOmCFMCapADCG36Q9gdv+C0vs6+zkMy+NhxYD6l7cGB9Yed23jFzELSC1LJFn70KEriOErj83KfS/kMQQcjNWdZxryCBa2oEl5w8Uj0SBEfrJuc2VI/7QN42OfRePcgDedvkyHD1kA7kDQKXywpc9rQfGIKW9QtaqlhhdgVilxC7hNjl0mKX4uFCgpeHELyE4CUELwu4rPxvG4LbFKKXy/JigQhC+HLZ4UuQQYhfLjl+CSIIAcxlBzDnJYPgcYUIZqXYDwQOQpiVAj0QOIhhVgrrQOAgiFlREDM8ZRGClxC8hOAlBC8heMk/WpF7pkJn1uBla6FHK8LhiBBanCG0yD+X3FHGBOoqWLvHqg91V/n4v9mA7nqdSL7sUwArELgGSFzlQrWuB9qdUFlEl75oolvSEgqTQq+6F6gbiiGwqOWyqBM4m37OBCo7DuBPwJ9KHk0/O4HaBwIFBGr1CJRN5jWBZUtQpHzYC1B2Rihb81PS5yJPDRCoGgnUenOjHhFL5JjAioAVASuqjBVtpZqLtDId3I2WP5R/i4xjK3gMewS1SNSO0NL9pneLYCtDPJIj8Nc69C47j15LqmzdeTUJfoyEUvhItywhfLSDR2OdmEcjIkUEsNpOTIqj+YmB9ackHtSJPeFaCNLAgx9GZQwrqdhMqeKlPGYZeGhjJoYYFEV3VXysc+B8juSRPZdYN0513xoIXOIomOyE87QZFr652KIEShgTE46dIXbjmuwVfwlGFy+J1lJMXB3gh3RV+04b/8vSe4+Gwul2IC+xbm+l5i62crKuB91JTUtsTeOTXoRV02XTDI1zBPzUaxZoiFBi4ezsLS+tGmuu79n0bQ7I2lnIkmX3SqqcbF3sfwZdE5KlmTHQa/zKvkB4g4wVuDa+8h4U57ZTS0l5zQ+nN1f7oxpcC7AsYbz0gTlPGpPjDYXxGwHzU0tiQAQWKn6t1Ra/CuUitcShWHR16qcLN3H0KeATJeTEthTDLiMo7Bea40ie61HQ+IdbOCG5n6go5pHIOId89gifN3M8VkdPw4ha5NLdou3+r1TDZfTgzd6riNNeC9t//eda+PpqZ+/VG9CQZWtIOb34ri9PL1LOlVzR9CpSHc4T44VpzWy9KqlSoUdpNo3aB42aUaPSzHGqTYe5+RaqXAX8l5wd4AWvYjlNKutCLdYH2IrWRHHKqcsMexGak74U8PfnePPzBXvBKjWvXm70ZsX+p87mZ89TpzGh9H10t17kQDDM76/FwF0uOKZ/TUjcNtaUOxbL9W/2Z7IfBFviPmuhPYp8kmL8j/1mvCRy0Qut2O+i6jH4r0GPaLAnpjYvthJ/8GH8wfFWWgfxPyKVFo7UeH+DviQm44dpRE652McEqSKEL9+cyvbwxpQt73GCy3IdhPPf+u5vx/cj37F6Hzpfxa3n/wMhOAi8d7EBAA== istio-workload.json.gz: - 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 {{- end }} -- 2.40.1 From de7ed134f7b8146527a2d5be35eec6917a239175 Mon Sep 17 00:00:00 2001 From: Stefan Reimer Date: Sun, 25 Apr 2021 22:19:06 +0200 Subject: [PATCH 11/21] feat: Add Grafana dashboards for logging --- charts/kubezero-logging/dashboards.yaml | 14 ++++++++++++++ .../templates/grafana-dashboards.yaml | 17 +++++++++++++++++ charts/kubezero-logging/update.sh | 3 +++ charts/kubezero-logging/values.yaml | 4 ++-- 4 files changed, 36 insertions(+), 2 deletions(-) create mode 100644 charts/kubezero-logging/dashboards.yaml create mode 100644 charts/kubezero-logging/templates/grafana-dashboards.yaml diff --git a/charts/kubezero-logging/dashboards.yaml b/charts/kubezero-logging/dashboards.yaml new file mode 100644 index 0000000..ef11963 --- /dev/null +++ b/charts/kubezero-logging/dashboards.yaml @@ -0,0 +1,14 @@ +configmap: grafana-dashboards +gzip: true +folder: Logging +condition: '.Values.es.prometheus' +dashboards: +- name: fluent-logging + url: https://grafana.com/api/dashboards/7752/revisions/4/download + #url: https://grafana.com/api/dashboards/13042/revisions/2/download + tags: + - Fluent +- name: elasticsearch-logging + url: https://grafana.com/api/dashboards/266/revisions/4/download + tags: + - ECK diff --git a/charts/kubezero-logging/templates/grafana-dashboards.yaml b/charts/kubezero-logging/templates/grafana-dashboards.yaml new file mode 100644 index 0000000..219f441 --- /dev/null +++ b/charts/kubezero-logging/templates/grafana-dashboards.yaml @@ -0,0 +1,17 @@ +{{- if .Values.es.prometheus }} +apiVersion: v1 +kind: ConfigMap +metadata: + name: {{ printf "%s-%s" (include "kubezero-lib.fullname" $) "grafana-dashboards" | trunc 63 | trimSuffix "-" }} + namespace: {{ .Release.Namespace }} + labels: + grafana_dashboard: "1" +{{ include "kubezero-lib.labels" . | indent 4 }} + annotations: + k8s-sidecar-target-directory: Logging +binaryData: + fluent-logging.json.gz: + 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 + elasticsearch-logging.json.gz: + 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 +{{- end }} diff --git a/charts/kubezero-logging/update.sh b/charts/kubezero-logging/update.sh index 22867c1..77dd255 100755 --- a/charts/kubezero-logging/update.sh +++ b/charts/kubezero-logging/update.sh @@ -15,3 +15,6 @@ rm -rf charts/fluentd curl -L -s -o - https://github.com/fluent/helm-charts/releases/download/fluentd-${FLUENTD_VERSION}/fluentd-${FLUENTD_VERSION}.tgz | tar xfz - -C charts patch -i fluentd.patch -p0 --no-backup-if-mismatch + +# Fetch dashboards from Grafana.com and update ZDT CM +../kubezero-metrics/sync_grafana_dashboards.py dashboards.yaml templates/grafana-dashboards.yaml diff --git a/charts/kubezero-logging/values.yaml b/charts/kubezero-logging/values.yaml index 9662001..efc5491 100644 --- a/charts/kubezero-logging/values.yaml +++ b/charts/kubezero-logging/values.yaml @@ -205,7 +205,7 @@ fluent-bit: enabled: false serviceMonitor: - enabled: true + enabled: false selector: release: metrics @@ -216,7 +216,7 @@ fluent-bit: resources: requests: cpu: 20m - memory: 16Mi + memory: 32Mi limits: memory: 64Mi -- 2.40.1 From b0b74aab665665d7f46d5d6c0c0a4d232ea82ebe Mon Sep 17 00:00:00 2001 From: Stefan Reimer Date: Sun, 25 Apr 2021 22:29:55 +0200 Subject: [PATCH 12/21] chore: update ES dashboard DS --- charts/kubezero-logging/templates/grafana-dashboards.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/charts/kubezero-logging/templates/grafana-dashboards.yaml b/charts/kubezero-logging/templates/grafana-dashboards.yaml index 219f441..b241f38 100644 --- a/charts/kubezero-logging/templates/grafana-dashboards.yaml +++ b/charts/kubezero-logging/templates/grafana-dashboards.yaml @@ -11,7 +11,7 @@ metadata: k8s-sidecar-target-directory: Logging binaryData: fluent-logging.json.gz: - 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 elasticsearch-logging.json.gz: - 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 {{- end }} -- 2.40.1 From ab48c277300d409237ebfefc1769ba5775c22886 Mon Sep 17 00:00:00 2001 From: Stefan Reimer Date: Mon, 26 Apr 2021 16:27:19 +0200 Subject: [PATCH 13/21] feat: use kube-mixin dashboards directly --- charts/kubezero-metrics/.gitignore | 1 + charts/kubezero-metrics/.helmignore | 1 + charts/kubezero-metrics/dashboards/build.sh | 6 + .../dashboards/jsonnetfile.json | 15 + .../dashboards/jsonnetfile.lock.json | 36 + .../dashboards/kube-mixin.yaml | 40 + .../dashboards/kube-mixin/apiserver.json | 1538 ++++++++++ .../dashboards/kube-mixin/cluster-total.json | 1685 +++++++++++ .../kube-mixin/controller-manager.json | 1020 +++++++ .../kube-mixin/k8s-resources-cluster.json | 2647 +++++++++++++++++ .../kube-mixin/k8s-resources-namespace.json | 2407 +++++++++++++++ .../kube-mixin/k8s-resources-node.json | 833 ++++++ .../kube-mixin/k8s-resources-pod.json | 2132 +++++++++++++ .../kube-mixin/k8s-resources-workload.json | 1723 +++++++++++ .../k8s-resources-workloads-namespace.json | 1876 ++++++++++++ .../dashboards/kube-mixin/kubelet.json | 2248 ++++++++++++++ .../kube-mixin/namespace-by-pod.json | 1307 ++++++++ .../kube-mixin/namespace-by-workload.json | 1547 ++++++++++ .../kube-mixin/persistentvolumesusage.json | 494 +++ .../dashboards/kube-mixin/pod-total.json | 1101 +++++++ .../dashboards/kube-mixin/proxy.json | 1088 +++++++ .../dashboards/kube-mixin/scheduler.json | 955 ++++++ .../dashboards/kube-mixin/workload-total.json | 1287 ++++++++ .../dashboards/mixin.libsonnet | 9 + .../{metrics-zdt.path => metrics-zdt.patch} | 0 .../sync_grafana_dashboards.py | 16 +- .../templates/grafana-dashboards.yaml | 43 + charts/kubezero-metrics/update.sh | 5 +- charts/kubezero-metrics/values.yaml | 2 + 29 files changed, 26055 insertions(+), 7 deletions(-) create mode 100644 charts/kubezero-metrics/.gitignore create mode 100755 charts/kubezero-metrics/dashboards/build.sh create mode 100644 charts/kubezero-metrics/dashboards/jsonnetfile.json create mode 100644 charts/kubezero-metrics/dashboards/jsonnetfile.lock.json create mode 100644 charts/kubezero-metrics/dashboards/kube-mixin.yaml create mode 100644 charts/kubezero-metrics/dashboards/kube-mixin/apiserver.json create mode 100644 charts/kubezero-metrics/dashboards/kube-mixin/cluster-total.json create mode 100644 charts/kubezero-metrics/dashboards/kube-mixin/controller-manager.json create mode 100644 charts/kubezero-metrics/dashboards/kube-mixin/k8s-resources-cluster.json create mode 100644 charts/kubezero-metrics/dashboards/kube-mixin/k8s-resources-namespace.json create mode 100644 charts/kubezero-metrics/dashboards/kube-mixin/k8s-resources-node.json create mode 100644 charts/kubezero-metrics/dashboards/kube-mixin/k8s-resources-pod.json create mode 100644 charts/kubezero-metrics/dashboards/kube-mixin/k8s-resources-workload.json create mode 100644 charts/kubezero-metrics/dashboards/kube-mixin/k8s-resources-workloads-namespace.json create mode 100644 charts/kubezero-metrics/dashboards/kube-mixin/kubelet.json create mode 100644 charts/kubezero-metrics/dashboards/kube-mixin/namespace-by-pod.json create mode 100644 charts/kubezero-metrics/dashboards/kube-mixin/namespace-by-workload.json create mode 100644 charts/kubezero-metrics/dashboards/kube-mixin/persistentvolumesusage.json create mode 100644 charts/kubezero-metrics/dashboards/kube-mixin/pod-total.json create mode 100644 charts/kubezero-metrics/dashboards/kube-mixin/proxy.json create mode 100644 charts/kubezero-metrics/dashboards/kube-mixin/scheduler.json create mode 100644 charts/kubezero-metrics/dashboards/kube-mixin/workload-total.json create mode 100644 charts/kubezero-metrics/dashboards/mixin.libsonnet rename charts/kubezero-metrics/{metrics-zdt.path => metrics-zdt.patch} (100%) create mode 100644 charts/kubezero-metrics/templates/grafana-dashboards.yaml diff --git a/charts/kubezero-metrics/.gitignore b/charts/kubezero-metrics/.gitignore new file mode 100644 index 0000000..3e33c11 --- /dev/null +++ b/charts/kubezero-metrics/.gitignore @@ -0,0 +1 @@ +dashboards/vendor diff --git a/charts/kubezero-metrics/.helmignore b/charts/kubezero-metrics/.helmignore index 5299ab4..150ee45 100644 --- a/charts/kubezero-metrics/.helmignore +++ b/charts/kubezero-metrics/.helmignore @@ -26,3 +26,4 @@ README.md.gotmpl *.patch *.sh *.py +dashboards diff --git a/charts/kubezero-metrics/dashboards/build.sh b/charts/kubezero-metrics/dashboards/build.sh new file mode 100755 index 0000000..fa2c81e --- /dev/null +++ b/charts/kubezero-metrics/dashboards/build.sh @@ -0,0 +1,6 @@ +#!/bin/bash + +jb update + +mkdir -p kube-mixin +jsonnet -J vendor -m kube-mixin -e '(import "mixin.libsonnet").grafanaDashboards' diff --git a/charts/kubezero-metrics/dashboards/jsonnetfile.json b/charts/kubezero-metrics/dashboards/jsonnetfile.json new file mode 100644 index 0000000..4c799a4 --- /dev/null +++ b/charts/kubezero-metrics/dashboards/jsonnetfile.json @@ -0,0 +1,15 @@ +{ + "version": 1, + "dependencies": [ + { + "source": { + "git": { + "remote": "https://github.com/kubernetes-monitoring/kubernetes-mixin.git", + "subdir": "" + } + }, + "version": "master" + } + ], + "legacyImports": true +} diff --git a/charts/kubezero-metrics/dashboards/jsonnetfile.lock.json b/charts/kubezero-metrics/dashboards/jsonnetfile.lock.json new file mode 100644 index 0000000..3f85154 --- /dev/null +++ b/charts/kubezero-metrics/dashboards/jsonnetfile.lock.json @@ -0,0 +1,36 @@ +{ + "version": 1, + "dependencies": [ + { + "source": { + "git": { + "remote": "https://github.com/grafana/grafonnet-lib.git", + "subdir": "grafonnet" + } + }, + "version": "55cf4ee53ced2b6d3ce96ecce9fb813b4465be98", + "sum": "4/sUV0Kk+o8I+wlYxL9R6EPhL/NiLfYHk+NXlU64RUk=" + }, + { + "source": { + "git": { + "remote": "https://github.com/grafana/jsonnet-libs.git", + "subdir": "grafana-builder" + } + }, + "version": "970b0dd2fc5b896406eba258cad78b7e0b0f18bf", + "sum": "GRf2GvwEU4jhXV+JOonXSZ4wdDv8mnHBPCQ6TUVd+g8=" + }, + { + "source": { + "git": { + "remote": "https://github.com/kubernetes-monitoring/kubernetes-mixin.git", + "subdir": "" + } + }, + "version": "39a9cda705b5201c35105bd1f24c83923fa839ef", + "sum": "8GmlcgCeC46NSHfRBebyqUOJCG1YvqvuGMj98u+Pge4=" + } + ], + "legacyImports": false +} diff --git a/charts/kubezero-metrics/dashboards/kube-mixin.yaml b/charts/kubezero-metrics/dashboards/kube-mixin.yaml new file mode 100644 index 0000000..d4a0da3 --- /dev/null +++ b/charts/kubezero-metrics/dashboards/kube-mixin.yaml @@ -0,0 +1,40 @@ +configmap: grafana-dashboards-kube-mixin +gzip: true +# folder: Istio + +# cd kube-mixin; for f in *.json; do echo "- name: ${f%%.json}" >> ../kube-mixin.yaml; echo " url: file://kube-mixin/$f" >> ../kube-mixin.yaml; done; cd - +dashboards: +- name: apiserver + url: file://kube-mixin/apiserver.json +- name: cluster-total + url: file://kube-mixin/cluster-total.json +- name: controller-manager + url: file://kube-mixin/controller-manager.json +- name: k8s-resources-cluster + url: file://kube-mixin/k8s-resources-cluster.json +- name: k8s-resources-namespace + url: file://kube-mixin/k8s-resources-namespace.json +- name: k8s-resources-node + url: file://kube-mixin/k8s-resources-node.json +- name: k8s-resources-pod + url: file://kube-mixin/k8s-resources-pod.json +- name: k8s-resources-workload + url: file://kube-mixin/k8s-resources-workload.json +- name: k8s-resources-workloads-namespace + url: file://kube-mixin/k8s-resources-workloads-namespace.json +- name: kubelet + url: file://kube-mixin/kubelet.json +- name: namespace-by-pod + url: file://kube-mixin/namespace-by-pod.json +- name: namespace-by-workload + url: file://kube-mixin/namespace-by-workload.json +- name: persistentvolumesusage + url: file://kube-mixin/persistentvolumesusage.json +- name: pod-total + url: file://kube-mixin/pod-total.json +- name: proxy + url: file://kube-mixin/proxy.json +- name: scheduler + url: file://kube-mixin/scheduler.json +- name: workload-total + url: file://kube-mixin/workload-total.json diff --git a/charts/kubezero-metrics/dashboards/kube-mixin/apiserver.json b/charts/kubezero-metrics/dashboards/kube-mixin/apiserver.json new file mode 100644 index 0000000..09e0d1c --- /dev/null +++ b/charts/kubezero-metrics/dashboards/kube-mixin/apiserver.json @@ -0,0 +1,1538 @@ +{ + "__inputs": [ ], + "__requires": [ ], + "annotations": { + "list": [ ] + }, + "editable": false, + "gnetId": null, + "graphTooltip": 0, + "hideControls": false, + "id": null, + "links": [ ], + "panels": [ + { + "content": "The SLO (service level objective) and other metrics displayed on this dashboard are for informational purposes only.", + "datasource": null, + "description": "The SLO (service level objective) and other metrics displayed on this dashboard are for informational purposes only.", + "gridPos": { + "h": 2, + "w": 24, + "x": 0, + "y": 0 + }, + "id": 2, + "mode": "markdown", + "span": 12, + "title": "Notice", + "type": "text" + } + ], + "refresh": "10s", + "rows": [ + { + "collapse": false, + "collapsed": false, + "panels": [ + { + "cacheTimeout": null, + "colorBackground": false, + "colorValue": false, + "colors": [ + "#299c46", + "rgba(237, 129, 40, 0.89)", + "#d44a3a" + ], + "datasource": "$datasource", + "decimals": 3, + "description": "How many percent of requests (both read and write) in 30 days have been answered successfully and fast enough?", + "format": "percentunit", + "gauge": { + "maxValue": 100, + "minValue": 0, + "show": false, + "thresholdLabels": false, + "thresholdMarkers": true + }, + "gridPos": { }, + "id": 3, + "interval": null, + "links": [ ], + "mappingType": 1, + "mappingTypes": [ + { + "name": "value to text", + "value": 1 + }, + { + "name": "range to text", + "value": 2 + } + ], + "maxDataPoints": 100, + "nullPointMode": "connected", + "nullText": null, + "postfix": "", + "postfixFontSize": "50%", + "prefix": "", + "prefixFontSize": "50%", + "rangeMaps": [ + { + "from": "null", + "text": "N/A", + "to": "null" + } + ], + "span": 4, + "sparkline": { + "fillColor": "rgba(31, 118, 189, 0.18)", + "full": false, + "lineColor": "rgb(31, 120, 193)", + "show": false + }, + "tableColumn": "", + "targets": [ + { + "expr": "apiserver_request:availability30d{verb=\"all\", cluster=\"$cluster\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "", + "refId": "A" + } + ], + "thresholds": "", + "title": "Availability (30d) > 99.000%", + "tooltip": { + "shared": false + }, + "type": "singlestat", + "valueFontSize": "80%", + "valueMaps": [ + { + "op": "=", + "text": "N/A", + "value": "null" + } + ], + "valueName": "avg" + }, + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "decimals": 3, + "description": "How much error budget is left looking at our 0.990% availability guarantees?", + "fill": 10, + "fillGradient": 0, + "gridPos": { }, + "id": 4, + "legend": { + "alignAsTable": false, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": false, + "show": true, + "sideWidth": null, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [ ], + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 8, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "100 * (apiserver_request:availability30d{verb=\"all\", cluster=\"$cluster\"} - 0.990000)", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "errorbudget", + "refId": "A" + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "ErrorBudget (30d) > 99.000%", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "decimals": 3, + "format": "percentunit", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "decimals": 3, + "format": "percentunit", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ] + } + ], + "repeat": null, + "repeatIteration": null, + "repeatRowId": null, + "showTitle": false, + "title": "Dashboard Row", + "titleSize": "h6", + "type": "row" + }, + { + "collapse": false, + "collapsed": false, + "panels": [ + { + "cacheTimeout": null, + "colorBackground": false, + "colorValue": false, + "colors": [ + "#299c46", + "rgba(237, 129, 40, 0.89)", + "#d44a3a" + ], + "datasource": "$datasource", + "decimals": 3, + "description": "How many percent of read requests (LIST,GET) in 30 days have been answered successfully and fast enough?", + "format": "percentunit", + "gauge": { + "maxValue": 100, + "minValue": 0, + "show": false, + "thresholdLabels": false, + "thresholdMarkers": true + }, + "gridPos": { }, + "id": 5, + "interval": null, + "links": [ ], + "mappingType": 1, + "mappingTypes": [ + { + "name": "value to text", + "value": 1 + }, + { + "name": "range to text", + "value": 2 + } + ], + "maxDataPoints": 100, + "nullPointMode": "connected", + "nullText": null, + "postfix": "", + "postfixFontSize": "50%", + "prefix": "", + "prefixFontSize": "50%", + "rangeMaps": [ + { + "from": "null", + "text": "N/A", + "to": "null" + } + ], + "span": 3, + "sparkline": { + "fillColor": "rgba(31, 118, 189, 0.18)", + "full": false, + "lineColor": "rgb(31, 120, 193)", + "show": false + }, + "tableColumn": "", + "targets": [ + { + "expr": "apiserver_request:availability30d{verb=\"read\", cluster=\"$cluster\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "", + "refId": "A" + } + ], + "thresholds": "", + "title": "Read Availability (30d)", + "tooltip": { + "shared": false + }, + "type": "singlestat", + "valueFontSize": "80%", + "valueMaps": [ + { + "op": "=", + "text": "N/A", + "value": "null" + } + ], + "valueName": "avg" + }, + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "description": "How many read requests (LIST,GET) per second do the apiservers get by code?", + "fill": 10, + "fillGradient": 0, + "gridPos": { }, + "id": 6, + "legend": { + "alignAsTable": false, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": false, + "show": true, + "sideWidth": null, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [ ], + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "seriesOverrides": [ + { + "alias": "/2../i", + "color": "#56A64B" + }, + { + "alias": "/3../i", + "color": "#F2CC0C" + }, + { + "alias": "/4../i", + "color": "#3274D9" + }, + { + "alias": "/5../i", + "color": "#E02F44" + } + ], + "spaceLength": 10, + "span": 3, + "stack": true, + "steppedLine": false, + "targets": [ + { + "expr": "sum by (code) (code_resource:apiserver_request_total:rate5m{verb=\"read\", cluster=\"$cluster\"})", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{ code }}", + "refId": "A" + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Read SLI - Requests", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "reqps", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "reqps", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ] + }, + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "description": "How many percent of read requests (LIST,GET) per second are returned with errors (5xx)?", + "fill": 1, + "fillGradient": 0, + "gridPos": { }, + "id": 7, + "legend": { + "alignAsTable": false, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": false, + "show": true, + "sideWidth": null, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [ ], + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 3, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "sum by (resource) (code_resource:apiserver_request_total:rate5m{verb=\"read\",code=~\"5..\", cluster=\"$cluster\"}) / sum by (resource) (code_resource:apiserver_request_total:rate5m{verb=\"read\", cluster=\"$cluster\"})", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{ resource }}", + "refId": "A" + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Read SLI - Errors", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "percentunit", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "percentunit", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + } + ] + }, + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "description": "How many seconds is the 99th percentile for reading (LIST|GET) a given resource?", + "fill": 1, + "fillGradient": 0, + "gridPos": { }, + "id": 8, + "legend": { + "alignAsTable": false, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": false, + "show": true, + "sideWidth": null, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [ ], + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 3, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "cluster_quantile:apiserver_request_duration_seconds:histogram_quantile{verb=\"read\", cluster=\"$cluster\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{ resource }}", + "refId": "A" + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Read SLI - Duration", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "s", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "s", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ] + } + ], + "repeat": null, + "repeatIteration": null, + "repeatRowId": null, + "showTitle": false, + "title": "Dashboard Row", + "titleSize": "h6", + "type": "row" + }, + { + "collapse": false, + "collapsed": false, + "panels": [ + { + "cacheTimeout": null, + "colorBackground": false, + "colorValue": false, + "colors": [ + "#299c46", + "rgba(237, 129, 40, 0.89)", + "#d44a3a" + ], + "datasource": "$datasource", + "decimals": 3, + "description": "How many percent of write requests (POST|PUT|PATCH|DELETE) in 30 days have been answered successfully and fast enough?", + "format": "percentunit", + "gauge": { + "maxValue": 100, + "minValue": 0, + "show": false, + "thresholdLabels": false, + "thresholdMarkers": true + }, + "gridPos": { }, + "id": 9, + "interval": null, + "links": [ ], + "mappingType": 1, + "mappingTypes": [ + { + "name": "value to text", + "value": 1 + }, + { + "name": "range to text", + "value": 2 + } + ], + "maxDataPoints": 100, + "nullPointMode": "connected", + "nullText": null, + "postfix": "", + "postfixFontSize": "50%", + "prefix": "", + "prefixFontSize": "50%", + "rangeMaps": [ + { + "from": "null", + "text": "N/A", + "to": "null" + } + ], + "span": 3, + "sparkline": { + "fillColor": "rgba(31, 118, 189, 0.18)", + "full": false, + "lineColor": "rgb(31, 120, 193)", + "show": false + }, + "tableColumn": "", + "targets": [ + { + "expr": "apiserver_request:availability30d{verb=\"write\", cluster=\"$cluster\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "", + "refId": "A" + } + ], + "thresholds": "", + "title": "Write Availability (30d)", + "tooltip": { + "shared": false + }, + "type": "singlestat", + "valueFontSize": "80%", + "valueMaps": [ + { + "op": "=", + "text": "N/A", + "value": "null" + } + ], + "valueName": "avg" + }, + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "description": "How many write requests (POST|PUT|PATCH|DELETE) per second do the apiservers get by code?", + "fill": 10, + "fillGradient": 0, + "gridPos": { }, + "id": 10, + "legend": { + "alignAsTable": false, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": false, + "show": true, + "sideWidth": null, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [ ], + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "seriesOverrides": [ + { + "alias": "/2../i", + "color": "#56A64B" + }, + { + "alias": "/3../i", + "color": "#F2CC0C" + }, + { + "alias": "/4../i", + "color": "#3274D9" + }, + { + "alias": "/5../i", + "color": "#E02F44" + } + ], + "spaceLength": 10, + "span": 3, + "stack": true, + "steppedLine": false, + "targets": [ + { + "expr": "sum by (code) (code_resource:apiserver_request_total:rate5m{verb=\"write\", cluster=\"$cluster\"})", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{ code }}", + "refId": "A" + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Write SLI - Requests", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "reqps", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "reqps", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ] + }, + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "description": "How many percent of write requests (POST|PUT|PATCH|DELETE) per second are returned with errors (5xx)?", + "fill": 1, + "fillGradient": 0, + "gridPos": { }, + "id": 11, + "legend": { + "alignAsTable": false, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": false, + "show": true, + "sideWidth": null, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [ ], + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 3, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "sum by (resource) (code_resource:apiserver_request_total:rate5m{verb=\"write\",code=~\"5..\", cluster=\"$cluster\"}) / sum by (resource) (code_resource:apiserver_request_total:rate5m{verb=\"write\", cluster=\"$cluster\"})", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{ resource }}", + "refId": "A" + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Write SLI - Errors", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "percentunit", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "percentunit", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + } + ] + }, + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "description": "How many seconds is the 99th percentile for writing (POST|PUT|PATCH|DELETE) a given resource?", + "fill": 1, + "fillGradient": 0, + "gridPos": { }, + "id": 12, + "legend": { + "alignAsTable": false, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": false, + "show": true, + "sideWidth": null, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [ ], + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 3, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "cluster_quantile:apiserver_request_duration_seconds:histogram_quantile{verb=\"write\", cluster=\"$cluster\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{ resource }}", + "refId": "A" + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Write SLI - Duration", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "s", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "s", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ] + } + ], + "repeat": null, + "repeatIteration": null, + "repeatRowId": null, + "showTitle": false, + "title": "Dashboard Row", + "titleSize": "h6", + "type": "row" + }, + { + "collapse": false, + "collapsed": false, + "panels": [ + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 1, + "fillGradient": 0, + "gridPos": { }, + "id": 13, + "legend": { + "alignAsTable": false, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": false, + "show": false, + "sideWidth": null, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [ ], + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 6, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "sum(rate(workqueue_adds_total{job=\"kube-apiserver\", instance=~\"$instance\", cluster=\"$cluster\"}[5m])) by (instance, name)", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{instance}} {{name}}", + "refId": "A" + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Work Queue Add Rate", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "ops", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "ops", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + } + ] + }, + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 1, + "fillGradient": 0, + "gridPos": { }, + "id": 14, + "legend": { + "alignAsTable": false, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": false, + "show": false, + "sideWidth": null, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [ ], + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 6, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "sum(rate(workqueue_depth{job=\"kube-apiserver\", instance=~\"$instance\", cluster=\"$cluster\"}[5m])) by (instance, name)", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{instance}} {{name}}", + "refId": "A" + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Work Queue Depth", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + } + ] + }, + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 1, + "fillGradient": 0, + "gridPos": { }, + "id": 15, + "legend": { + "alignAsTable": true, + "avg": false, + "current": true, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "sideWidth": null, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [ ], + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 12, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "histogram_quantile(0.99, sum(rate(workqueue_queue_duration_seconds_bucket{job=\"kube-apiserver\", instance=~\"$instance\", cluster=\"$cluster\"}[5m])) by (instance, name, le))", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{instance}} {{name}}", + "refId": "A" + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Work Queue Latency", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "s", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "s", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ] + } + ], + "repeat": null, + "repeatIteration": null, + "repeatRowId": null, + "showTitle": false, + "title": "Dashboard Row", + "titleSize": "h6", + "type": "row" + }, + { + "collapse": false, + "collapsed": false, + "panels": [ + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 1, + "fillGradient": 0, + "gridPos": { }, + "id": 16, + "legend": { + "alignAsTable": false, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": false, + "show": true, + "sideWidth": null, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [ ], + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 4, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "process_resident_memory_bytes{job=\"kube-apiserver\",instance=~\"$instance\", cluster=\"$cluster\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{instance}}", + "refId": "A" + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Memory", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "bytes", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "bytes", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ] + }, + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 1, + "fillGradient": 0, + "gridPos": { }, + "id": 17, + "legend": { + "alignAsTable": false, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": false, + "show": true, + "sideWidth": null, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [ ], + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 4, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "rate(process_cpu_seconds_total{job=\"kube-apiserver\",instance=~\"$instance\", cluster=\"$cluster\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{instance}}", + "refId": "A" + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "CPU usage", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + } + ] + }, + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 1, + "fillGradient": 0, + "gridPos": { }, + "id": 18, + "legend": { + "alignAsTable": false, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": false, + "show": true, + "sideWidth": null, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [ ], + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 4, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "go_goroutines{job=\"kube-apiserver\",instance=~\"$instance\", cluster=\"$cluster\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{instance}}", + "refId": "A" + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Goroutines", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ] + } + ], + "repeat": null, + "repeatIteration": null, + "repeatRowId": null, + "showTitle": false, + "title": "Dashboard Row", + "titleSize": "h6", + "type": "row" + } + ], + "schemaVersion": 14, + "style": "dark", + "tags": [ + "kubernetes" + ], + "templating": { + "list": [ + { + "current": { + "text": "default", + "value": "default" + }, + "hide": 0, + "label": null, + "name": "datasource", + "options": [ ], + "query": "prometheus", + "refresh": 1, + "regex": "", + "type": "datasource" + }, + { + "allValue": null, + "current": { }, + "datasource": "$datasource", + "hide": 2, + "includeAll": false, + "label": "cluster", + "multi": false, + "name": "cluster", + "options": [ ], + "query": "label_values(apiserver_request_total, cluster)", + "refresh": 2, + "regex": "", + "sort": 1, + "tagValuesQuery": "", + "tags": [ ], + "tagsQuery": "", + "type": "query", + "useTags": false + }, + { + "allValue": null, + "current": { }, + "datasource": "$datasource", + "hide": 0, + "includeAll": true, + "label": null, + "multi": false, + "name": "instance", + "options": [ ], + "query": "label_values(apiserver_request_total{job=\"kube-apiserver\", cluster=\"$cluster\"}, instance)", + "refresh": 2, + "regex": "", + "sort": 1, + "tagValuesQuery": "", + "tags": [ ], + "tagsQuery": "", + "type": "query", + "useTags": false + } + ] + }, + "time": { + "from": "now-1h", + "to": "now" + }, + "timepicker": { + "refresh_intervals": [ + "5s", + "10s", + "30s", + "1m", + "5m", + "15m", + "30m", + "1h", + "2h", + "1d" + ], + "time_options": [ + "5m", + "15m", + "1h", + "6h", + "12h", + "24h", + "2d", + "7d", + "30d" + ] + }, + "timezone": "UTC", + "title": "Kubernetes / API server", + "uid": "09ec8aa1e996d6ffcd6817bbaff4db1b", + "version": 0 +} diff --git a/charts/kubezero-metrics/dashboards/kube-mixin/cluster-total.json b/charts/kubezero-metrics/dashboards/kube-mixin/cluster-total.json new file mode 100644 index 0000000..bacc8f6 --- /dev/null +++ b/charts/kubezero-metrics/dashboards/kube-mixin/cluster-total.json @@ -0,0 +1,1685 @@ +{ + "__inputs": [ ], + "__requires": [ ], + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": "-- Grafana --", + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "type": "dashboard" + } + ] + }, + "editable": true, + "gnetId": null, + "graphTooltip": 0, + "hideControls": false, + "id": null, + "links": [ ], + "panels": [ + { + "collapse": false, + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 0 + }, + "id": 2, + "panels": [ ], + "repeat": null, + "repeatIteration": null, + "repeatRowId": null, + "showTitle": true, + "title": "Current Bandwidth", + "titleSize": "h6", + "type": "row" + }, + { + "aliasColors": { }, + "bars": true, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 2, + "fillGradient": 0, + "gridPos": { + "h": 9, + "w": 12, + "x": 0, + "y": 1 + }, + "id": 3, + "legend": { + "alignAsTable": true, + "avg": false, + "current": true, + "hideEmpty": true, + "hideZero": true, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "sideWidth": null, + "sort": "current", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": false, + "linewidth": 1, + "links": [ ], + "minSpan": 24, + "nullPointMode": "null", + "paceLength": 10, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 24, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "sort_desc(sum(irate(container_network_receive_bytes_total{cluster=\"$cluster\",namespace=~\".+\"}[$interval:$resolution])) by (namespace))", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{namespace}}", + "refId": "A", + "step": 10 + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Current Rate of Bytes Received", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "series", + "name": null, + "show": false, + "values": [ + "current" + ] + }, + "yaxes": [ + { + "format": "Bps", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "Bps", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + } + ] + }, + { + "aliasColors": { }, + "bars": true, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 2, + "fillGradient": 0, + "gridPos": { + "h": 9, + "w": 12, + "x": 12, + "y": 1 + }, + "id": 4, + "legend": { + "alignAsTable": true, + "avg": false, + "current": true, + "hideEmpty": true, + "hideZero": true, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "sideWidth": null, + "sort": "current", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": false, + "linewidth": 1, + "links": [ ], + "minSpan": 24, + "nullPointMode": "null", + "paceLength": 10, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 24, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "sort_desc(sum(irate(container_network_transmit_bytes_total{cluster=\"$cluster\",namespace=~\".+\"}[$interval:$resolution])) by (namespace))", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{namespace}}", + "refId": "A", + "step": 10 + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Current Rate of Bytes Transmitted", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "series", + "name": null, + "show": false, + "values": [ + "current" + ] + }, + "yaxes": [ + { + "format": "Bps", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "Bps", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + } + ] + }, + { + "columns": [ + { + "text": "Time", + "value": "Time" + }, + { + "text": "Value #A", + "value": "Value #A" + }, + { + "text": "Value #B", + "value": "Value #B" + }, + { + "text": "Value #C", + "value": "Value #C" + }, + { + "text": "Value #D", + "value": "Value #D" + }, + { + "text": "Value #E", + "value": "Value #E" + }, + { + "text": "Value #F", + "value": "Value #F" + }, + { + "text": "Value #G", + "value": "Value #G" + }, + { + "text": "Value #H", + "value": "Value #H" + }, + { + "text": "namespace", + "value": "namespace" + } + ], + "datasource": "$datasource", + "fill": 1, + "fontSize": "90%", + "gridPos": { + "h": 9, + "w": 24, + "x": 0, + "y": 10 + }, + "id": 5, + "lines": true, + "linewidth": 1, + "links": [ ], + "minSpan": 24, + "nullPointMode": "null as zero", + "renderer": "flot", + "scroll": true, + "showHeader": true, + "sort": { + "col": 0, + "desc": false + }, + "spaceLength": 10, + "span": 24, + "styles": [ + { + "alias": "Time", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "Time", + "thresholds": [ ], + "type": "hidden", + "unit": "short" + }, + { + "alias": "Current Bandwidth Received", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "Value #A", + "thresholds": [ ], + "type": "number", + "unit": "Bps" + }, + { + "alias": "Current Bandwidth Transmitted", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "Value #B", + "thresholds": [ ], + "type": "number", + "unit": "Bps" + }, + { + "alias": "Average Bandwidth Received", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "Value #C", + "thresholds": [ ], + "type": "number", + "unit": "Bps" + }, + { + "alias": "Average Bandwidth Transmitted", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "Value #D", + "thresholds": [ ], + "type": "number", + "unit": "Bps" + }, + { + "alias": "Rate of Received Packets", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "Value #E", + "thresholds": [ ], + "type": "number", + "unit": "pps" + }, + { + "alias": "Rate of Transmitted Packets", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "Value #F", + "thresholds": [ ], + "type": "number", + "unit": "pps" + }, + { + "alias": "Rate of Received Packets Dropped", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "Value #G", + "thresholds": [ ], + "type": "number", + "unit": "pps" + }, + { + "alias": "Rate of Transmitted Packets Dropped", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "Value #H", + "thresholds": [ ], + "type": "number", + "unit": "pps" + }, + { + "alias": "Namespace", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": true, + "linkTooltip": "Drill down", + "linkUrl": "d/8b7a8b326d7a6f1f04244066368c67af/kubernetes-networking-namespace-pods?orgId=1&refresh=30s&var-namespace=$__cell", + "pattern": "namespace", + "thresholds": [ ], + "type": "number", + "unit": "short" + } + ], + "targets": [ + { + "expr": "sort_desc(sum(irate(container_network_receive_bytes_total{cluster=\"$cluster\",namespace=~\".+\"}[$interval:$resolution])) by (namespace))", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "A", + "step": 10 + }, + { + "expr": "sort_desc(sum(irate(container_network_transmit_bytes_total{cluster=\"$cluster\",namespace=~\".+\"}[$interval:$resolution])) by (namespace))", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "B", + "step": 10 + }, + { + "expr": "sort_desc(avg(irate(container_network_receive_bytes_total{cluster=\"$cluster\",namespace=~\".+\"}[$interval:$resolution])) by (namespace))", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "C", + "step": 10 + }, + { + "expr": "sort_desc(avg(irate(container_network_transmit_bytes_total{cluster=\"$cluster\",namespace=~\".+\"}[$interval:$resolution])) by (namespace))", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "D", + "step": 10 + }, + { + "expr": "sort_desc(sum(irate(container_network_receive_packets_total{cluster=\"$cluster\",namespace=~\".+\"}[$interval:$resolution])) by (namespace))", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "E", + "step": 10 + }, + { + "expr": "sort_desc(sum(irate(container_network_transmit_packets_total{cluster=\"$cluster\",namespace=~\".+\"}[$interval:$resolution])) by (namespace))", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "F", + "step": 10 + }, + { + "expr": "sort_desc(sum(irate(container_network_receive_packets_dropped_total{cluster=\"$cluster\",namespace=~\".+\"}[$interval:$resolution])) by (namespace))", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "G", + "step": 10 + }, + { + "expr": "sort_desc(sum(irate(container_network_transmit_packets_dropped_total{cluster=\"$cluster\",namespace=~\".+\"}[$interval:$resolution])) by (namespace))", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "H", + "step": 10 + } + ], + "timeFrom": null, + "timeShift": null, + "title": "Current Status", + "type": "table" + }, + { + "collapse": true, + "collapsed": true, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 10 + }, + "id": 6, + "panels": [ + { + "aliasColors": { }, + "bars": true, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 2, + "fillGradient": 0, + "gridPos": { + "h": 9, + "w": 12, + "x": 0, + "y": 11 + }, + "id": 7, + "legend": { + "alignAsTable": true, + "avg": false, + "current": true, + "hideEmpty": true, + "hideZero": true, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "sideWidth": null, + "sort": "current", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": false, + "linewidth": 1, + "links": [ ], + "minSpan": 24, + "nullPointMode": "null", + "paceLength": 10, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 24, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "sort_desc(avg(irate(container_network_receive_bytes_total{cluster=\"$cluster\",namespace=~\".+\"}[$interval:$resolution])) by (namespace))", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{namespace}}", + "refId": "A", + "step": 10 + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Average Rate of Bytes Received", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "series", + "name": null, + "show": false, + "values": [ + "current" + ] + }, + "yaxes": [ + { + "format": "Bps", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "Bps", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + } + ] + }, + { + "aliasColors": { }, + "bars": true, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 2, + "fillGradient": 0, + "gridPos": { + "h": 9, + "w": 12, + "x": 12, + "y": 11 + }, + "id": 8, + "legend": { + "alignAsTable": true, + "avg": false, + "current": true, + "hideEmpty": true, + "hideZero": true, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "sideWidth": null, + "sort": "current", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": false, + "linewidth": 1, + "links": [ ], + "minSpan": 24, + "nullPointMode": "null", + "paceLength": 10, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 24, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "sort_desc(avg(irate(container_network_transmit_bytes_total{cluster=\"$cluster\",namespace=~\".+\"}[$interval:$resolution])) by (namespace))", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{namespace}}", + "refId": "A", + "step": 10 + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Average Rate of Bytes Transmitted", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "series", + "name": null, + "show": false, + "values": [ + "current" + ] + }, + "yaxes": [ + { + "format": "Bps", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "Bps", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + } + ] + } + ], + "repeat": null, + "repeatIteration": null, + "repeatRowId": null, + "showTitle": true, + "title": "Average Bandwidth", + "titleSize": "h6", + "type": "row" + }, + { + "collapse": false, + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 11 + }, + "id": 9, + "panels": [ ], + "repeat": null, + "repeatIteration": null, + "repeatRowId": null, + "showTitle": true, + "title": "Bandwidth History", + "titleSize": "h6", + "type": "row" + }, + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 2, + "fillGradient": 0, + "gridPos": { + "h": 9, + "w": 24, + "x": 0, + "y": 12 + }, + "id": 10, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "hideEmpty": true, + "hideZero": true, + "max": true, + "min": true, + "rightSide": true, + "show": true, + "sideWidth": null, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 2, + "links": [ ], + "minSpan": 24, + "nullPointMode": "connected", + "paceLength": 10, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 24, + "stack": true, + "steppedLine": false, + "targets": [ + { + "expr": "sort_desc(sum(irate(container_network_receive_bytes_total{cluster=\"$cluster\",namespace=~\".+\"}[$interval:$resolution])) by (namespace))", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{namespace}}", + "refId": "A", + "step": 10 + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Receive Bandwidth", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "Bps", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "Bps", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + } + ] + }, + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 2, + "fillGradient": 0, + "gridPos": { + "h": 9, + "w": 24, + "x": 0, + "y": 21 + }, + "id": 11, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "hideEmpty": true, + "hideZero": true, + "max": true, + "min": true, + "rightSide": true, + "show": true, + "sideWidth": null, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 2, + "links": [ ], + "minSpan": 24, + "nullPointMode": "connected", + "paceLength": 10, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 24, + "stack": true, + "steppedLine": false, + "targets": [ + { + "expr": "sort_desc(sum(irate(container_network_transmit_bytes_total{cluster=\"$cluster\",namespace=~\".+\"}[$interval:$resolution])) by (namespace))", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{namespace}}", + "refId": "A", + "step": 10 + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Transmit Bandwidth", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "Bps", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "Bps", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + } + ] + }, + { + "collapse": true, + "collapsed": true, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 30 + }, + "id": 12, + "panels": [ + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 2, + "fillGradient": 0, + "gridPos": { + "h": 9, + "w": 24, + "x": 0, + "y": 31 + }, + "id": 13, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "hideEmpty": true, + "hideZero": true, + "max": true, + "min": true, + "rightSide": true, + "show": true, + "sideWidth": null, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 2, + "links": [ ], + "minSpan": 24, + "nullPointMode": "connected", + "paceLength": 10, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 24, + "stack": true, + "steppedLine": false, + "targets": [ + { + "expr": "sort_desc(sum(irate(container_network_receive_packets_total{cluster=\"$cluster\",namespace=~\".+\"}[$interval:$resolution])) by (namespace))", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{namespace}}", + "refId": "A", + "step": 10 + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Rate of Received Packets", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "pps", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "pps", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + } + ] + }, + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 2, + "fillGradient": 0, + "gridPos": { + "h": 9, + "w": 24, + "x": 0, + "y": 40 + }, + "id": 14, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "hideEmpty": true, + "hideZero": true, + "max": true, + "min": true, + "rightSide": true, + "show": true, + "sideWidth": null, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 2, + "links": [ ], + "minSpan": 24, + "nullPointMode": "connected", + "paceLength": 10, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 24, + "stack": true, + "steppedLine": false, + "targets": [ + { + "expr": "sort_desc(sum(irate(container_network_transmit_packets_total{cluster=\"$cluster\",namespace=~\".+\"}[$interval:$resolution])) by (namespace))", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{namespace}}", + "refId": "A", + "step": 10 + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Rate of Transmitted Packets", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "pps", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "pps", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + } + ] + } + ], + "repeat": null, + "repeatIteration": null, + "repeatRowId": null, + "showTitle": true, + "title": "Packets", + "titleSize": "h6", + "type": "row" + }, + { + "collapse": true, + "collapsed": true, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 31 + }, + "id": 15, + "panels": [ + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 2, + "fillGradient": 0, + "gridPos": { + "h": 9, + "w": 24, + "x": 0, + "y": 50 + }, + "id": 16, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "hideEmpty": true, + "hideZero": true, + "max": true, + "min": true, + "rightSide": true, + "show": true, + "sideWidth": null, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 2, + "links": [ ], + "minSpan": 24, + "nullPointMode": "connected", + "paceLength": 10, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 24, + "stack": true, + "steppedLine": false, + "targets": [ + { + "expr": "sort_desc(sum(irate(container_network_receive_packets_dropped_total{cluster=\"$cluster\",namespace=~\".+\"}[$interval:$resolution])) by (namespace))", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{namespace}}", + "refId": "A", + "step": 10 + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Rate of Received Packets Dropped", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "pps", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "pps", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + } + ] + }, + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 2, + "fillGradient": 0, + "gridPos": { + "h": 9, + "w": 24, + "x": 0, + "y": 59 + }, + "id": 17, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "hideEmpty": true, + "hideZero": true, + "max": true, + "min": true, + "rightSide": true, + "show": true, + "sideWidth": null, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 2, + "links": [ ], + "minSpan": 24, + "nullPointMode": "connected", + "paceLength": 10, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 24, + "stack": true, + "steppedLine": false, + "targets": [ + { + "expr": "sort_desc(sum(irate(container_network_transmit_packets_dropped_total{cluster=\"$cluster\",namespace=~\".+\"}[$interval:$resolution])) by (namespace))", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{namespace}}", + "refId": "A", + "step": 10 + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Rate of Transmitted Packets Dropped", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "pps", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "pps", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + } + ] + }, + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 2, + "fillGradient": 0, + "gridPos": { + "h": 9, + "w": 24, + "x": 0, + "y": 59 + }, + "id": 18, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "hideEmpty": true, + "hideZero": true, + "max": true, + "min": true, + "rightSide": true, + "show": true, + "sideWidth": null, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 2, + "links": [ + { + "targetBlank": true, + "title": "What is TCP Retransmit?", + "url": "https://accedian.com/enterprises/blog/network-packet-loss-retransmissions-and-duplicate-acknowledgements/" + } + ], + "minSpan": 24, + "nullPointMode": "connected", + "paceLength": 10, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 24, + "stack": true, + "steppedLine": false, + "targets": [ + { + "expr": "sort_desc(sum(rate(node_netstat_Tcp_RetransSegs{cluster=\"$cluster\"}[$interval:$resolution]) / rate(node_netstat_Tcp_OutSegs{cluster=\"$cluster\"}[$interval:$resolution])) by (instance))", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{instance}}", + "refId": "A", + "step": 10 + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Rate of TCP Retransmits out of all sent segments", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "percentunit", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "percentunit", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + } + ] + }, + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 2, + "fillGradient": 0, + "gridPos": { + "h": 9, + "w": 24, + "x": 0, + "y": 59 + }, + "id": 19, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "hideEmpty": true, + "hideZero": true, + "max": true, + "min": true, + "rightSide": true, + "show": true, + "sideWidth": null, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 2, + "links": [ + { + "targetBlank": true, + "title": "Why monitor SYN retransmits?", + "url": "https://github.com/prometheus/node_exporter/issues/1023#issuecomment-408128365" + } + ], + "minSpan": 24, + "nullPointMode": "connected", + "paceLength": 10, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 24, + "stack": true, + "steppedLine": false, + "targets": [ + { + "expr": "sort_desc(sum(rate(node_netstat_TcpExt_TCPSynRetrans{cluster=\"$cluster\"}[$interval:$resolution]) / rate(node_netstat_Tcp_RetransSegs{cluster=\"$cluster\"}[$interval:$resolution])) by (instance))", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{instance}}", + "refId": "A", + "step": 10 + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Rate of TCP SYN Retransmits out of all retransmits", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "percentunit", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "percentunit", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + } + ] + } + ], + "repeat": null, + "repeatIteration": null, + "repeatRowId": null, + "showTitle": true, + "title": "Errors", + "titleSize": "h6", + "type": "row" + } + ], + "refresh": "10s", + "rows": [ ], + "schemaVersion": 18, + "style": "dark", + "tags": [ + "kubernetes" + ], + "templating": { + "list": [ + { + "allValue": null, + "auto": false, + "auto_count": 30, + "auto_min": "10s", + "current": { + "text": "5m", + "value": "5m" + }, + "datasource": "$datasource", + "hide": 0, + "includeAll": false, + "label": null, + "multi": false, + "name": "resolution", + "options": [ + { + "selected": false, + "text": "30s", + "value": "30s" + }, + { + "selected": true, + "text": "5m", + "value": "5m" + }, + { + "selected": false, + "text": "1h", + "value": "1h" + } + ], + "query": "30s,5m,1h", + "refresh": 2, + "regex": "", + "skipUrlSync": false, + "sort": 1, + "tagValuesQuery": "", + "tags": [ ], + "tagsQuery": "", + "type": "interval", + "useTags": false + }, + { + "allValue": null, + "auto": false, + "auto_count": 30, + "auto_min": "10s", + "current": { + "text": "5m", + "value": "5m" + }, + "datasource": "$datasource", + "hide": 2, + "includeAll": false, + "label": null, + "multi": false, + "name": "interval", + "options": [ + { + "selected": true, + "text": "4h", + "value": "4h" + } + ], + "query": "4h", + "refresh": 2, + "regex": "", + "skipUrlSync": false, + "sort": 1, + "tagValuesQuery": "", + "tags": [ ], + "tagsQuery": "", + "type": "interval", + "useTags": false + }, + { + "current": { + "text": "default", + "value": "default" + }, + "hide": 0, + "label": null, + "name": "datasource", + "options": [ ], + "query": "prometheus", + "refresh": 1, + "regex": "", + "type": "datasource" + }, + { + "allValue": null, + "current": { }, + "datasource": "$datasource", + "hide": 2, + "includeAll": false, + "label": null, + "multi": false, + "name": "cluster", + "options": [ ], + "query": "label_values(kube_pod_info, cluster)", + "refresh": 2, + "regex": "", + "sort": 0, + "tagValuesQuery": "", + "tags": [ ], + "tagsQuery": "", + "type": "query", + "useTags": false + } + ] + }, + "time": { + "from": "now-1h", + "to": "now" + }, + "timepicker": { + "refresh_intervals": [ + "5s", + "10s", + "30s", + "1m", + "5m", + "15m", + "30m", + "1h", + "2h", + "1d" + ], + "time_options": [ + "5m", + "15m", + "1h", + "6h", + "12h", + "24h", + "2d", + "7d", + "30d" + ] + }, + "timezone": "UTC", + "title": "Kubernetes / Networking / Cluster", + "uid": "ff635a025bcfea7bc3dd4f508990a3e9", + "version": 0 +} diff --git a/charts/kubezero-metrics/dashboards/kube-mixin/controller-manager.json b/charts/kubezero-metrics/dashboards/kube-mixin/controller-manager.json new file mode 100644 index 0000000..18bab8f --- /dev/null +++ b/charts/kubezero-metrics/dashboards/kube-mixin/controller-manager.json @@ -0,0 +1,1020 @@ +{ + "__inputs": [ ], + "__requires": [ ], + "annotations": { + "list": [ ] + }, + "editable": false, + "gnetId": null, + "graphTooltip": 0, + "hideControls": false, + "id": null, + "links": [ ], + "refresh": "10s", + "rows": [ + { + "collapse": false, + "collapsed": false, + "panels": [ + { + "cacheTimeout": null, + "colorBackground": false, + "colorValue": false, + "colors": [ + "#299c46", + "rgba(237, 129, 40, 0.89)", + "#d44a3a" + ], + "datasource": "$datasource", + "format": "none", + "gauge": { + "maxValue": 100, + "minValue": 0, + "show": false, + "thresholdLabels": false, + "thresholdMarkers": true + }, + "gridPos": { }, + "id": 2, + "interval": null, + "links": [ ], + "mappingType": 1, + "mappingTypes": [ + { + "name": "value to text", + "value": 1 + }, + { + "name": "range to text", + "value": 2 + } + ], + "maxDataPoints": 100, + "nullPointMode": "connected", + "nullText": null, + "postfix": "", + "postfixFontSize": "50%", + "prefix": "", + "prefixFontSize": "50%", + "rangeMaps": [ + { + "from": "null", + "text": "N/A", + "to": "null" + } + ], + "span": 2, + "sparkline": { + "fillColor": "rgba(31, 118, 189, 0.18)", + "full": false, + "lineColor": "rgb(31, 120, 193)", + "show": false + }, + "tableColumn": "", + "targets": [ + { + "expr": "sum(up{cluster=\"$cluster\", job=\"kube-controller-manager\"})", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "", + "refId": "A" + } + ], + "thresholds": "", + "title": "Up", + "tooltip": { + "shared": false + }, + "type": "singlestat", + "valueFontSize": "80%", + "valueMaps": [ + { + "op": "=", + "text": "N/A", + "value": "null" + } + ], + "valueName": "min" + }, + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 1, + "fillGradient": 0, + "gridPos": { }, + "id": 3, + "legend": { + "alignAsTable": true, + "avg": false, + "current": true, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "sideWidth": null, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [ ], + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "sum(rate(workqueue_adds_total{cluster=\"$cluster\", job=\"kube-controller-manager\", instance=~\"$instance\"}[5m])) by (instance, name)", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{instance}} {{name}}", + "refId": "A" + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Work Queue Add Rate", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "ops", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "ops", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ] + } + ], + "repeat": null, + "repeatIteration": null, + "repeatRowId": null, + "showTitle": false, + "title": "Dashboard Row", + "titleSize": "h6", + "type": "row" + }, + { + "collapse": false, + "collapsed": false, + "panels": [ + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 1, + "fillGradient": 0, + "gridPos": { }, + "id": 4, + "legend": { + "alignAsTable": true, + "avg": false, + "current": true, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "sideWidth": null, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [ ], + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 12, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "sum(rate(workqueue_depth{cluster=\"$cluster\", job=\"kube-controller-manager\", instance=~\"$instance\"}[5m])) by (instance, name)", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{instance}} {{name}}", + "refId": "A" + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Work Queue Depth", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + } + ] + } + ], + "repeat": null, + "repeatIteration": null, + "repeatRowId": null, + "showTitle": false, + "title": "Dashboard Row", + "titleSize": "h6", + "type": "row" + }, + { + "collapse": false, + "collapsed": false, + "panels": [ + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 1, + "fillGradient": 0, + "gridPos": { }, + "id": 5, + "legend": { + "alignAsTable": true, + "avg": false, + "current": true, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "sideWidth": null, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [ ], + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 12, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "histogram_quantile(0.99, sum(rate(workqueue_queue_duration_seconds_bucket{cluster=\"$cluster\", job=\"kube-controller-manager\", instance=~\"$instance\"}[5m])) by (instance, name, le))", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{instance}} {{name}}", + "refId": "A" + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Work Queue Latency", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "s", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "s", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ] + } + ], + "repeat": null, + "repeatIteration": null, + "repeatRowId": null, + "showTitle": false, + "title": "Dashboard Row", + "titleSize": "h6", + "type": "row" + }, + { + "collapse": false, + "collapsed": false, + "panels": [ + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 1, + "fillGradient": 0, + "gridPos": { }, + "id": 6, + "legend": { + "alignAsTable": false, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": false, + "show": true, + "sideWidth": null, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [ ], + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 4, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "sum(rate(rest_client_requests_total{job=\"kube-controller-manager\", instance=~\"$instance\",code=~\"2..\"}[5m]))", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "2xx", + "refId": "A" + }, + { + "expr": "sum(rate(rest_client_requests_total{job=\"kube-controller-manager\", instance=~\"$instance\",code=~\"3..\"}[5m]))", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "3xx", + "refId": "B" + }, + { + "expr": "sum(rate(rest_client_requests_total{job=\"kube-controller-manager\", instance=~\"$instance\",code=~\"4..\"}[5m]))", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "4xx", + "refId": "C" + }, + { + "expr": "sum(rate(rest_client_requests_total{job=\"kube-controller-manager\", instance=~\"$instance\",code=~\"5..\"}[5m]))", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "5xx", + "refId": "D" + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Kube API Request Rate", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "ops", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "ops", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ] + }, + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 1, + "fillGradient": 0, + "gridPos": { }, + "id": 7, + "legend": { + "alignAsTable": false, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": false, + "show": true, + "sideWidth": null, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [ ], + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 8, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "histogram_quantile(0.99, sum(rate(rest_client_request_duration_seconds_bucket{cluster=\"$cluster\", job=\"kube-controller-manager\", instance=~\"$instance\", verb=\"POST\"}[5m])) by (verb, url, le))", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{verb}} {{url}}", + "refId": "A" + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Post Request Latency 99th Quantile", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "s", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "s", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + } + ] + } + ], + "repeat": null, + "repeatIteration": null, + "repeatRowId": null, + "showTitle": false, + "title": "Dashboard Row", + "titleSize": "h6", + "type": "row" + }, + { + "collapse": false, + "collapsed": false, + "panels": [ + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 1, + "fillGradient": 0, + "gridPos": { }, + "id": 8, + "legend": { + "alignAsTable": true, + "avg": false, + "current": true, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "sideWidth": null, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [ ], + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 12, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "histogram_quantile(0.99, sum(rate(rest_client_request_duration_seconds_bucket{cluster=\"$cluster\", job=\"kube-controller-manager\", instance=~\"$instance\", verb=\"GET\"}[5m])) by (verb, url, le))", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{verb}} {{url}}", + "refId": "A" + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Get Request Latency 99th Quantile", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "s", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "s", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + } + ] + } + ], + "repeat": null, + "repeatIteration": null, + "repeatRowId": null, + "showTitle": false, + "title": "Dashboard Row", + "titleSize": "h6", + "type": "row" + }, + { + "collapse": false, + "collapsed": false, + "panels": [ + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 1, + "fillGradient": 0, + "gridPos": { }, + "id": 9, + "legend": { + "alignAsTable": false, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": false, + "show": true, + "sideWidth": null, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [ ], + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 4, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "process_resident_memory_bytes{cluster=\"$cluster\", job=\"kube-controller-manager\",instance=~\"$instance\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{instance}}", + "refId": "A" + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Memory", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "bytes", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "bytes", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ] + }, + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 1, + "fillGradient": 0, + "gridPos": { }, + "id": 10, + "legend": { + "alignAsTable": false, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": false, + "show": true, + "sideWidth": null, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [ ], + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 4, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "rate(process_cpu_seconds_total{cluster=\"$cluster\", job=\"kube-controller-manager\",instance=~\"$instance\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{instance}}", + "refId": "A" + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "CPU usage", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + } + ] + }, + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 1, + "fillGradient": 0, + "gridPos": { }, + "id": 11, + "legend": { + "alignAsTable": false, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": false, + "show": true, + "sideWidth": null, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [ ], + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 4, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "go_goroutines{cluster=\"$cluster\", job=\"kube-controller-manager\",instance=~\"$instance\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{instance}}", + "refId": "A" + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Goroutines", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ] + } + ], + "repeat": null, + "repeatIteration": null, + "repeatRowId": null, + "showTitle": false, + "title": "Dashboard Row", + "titleSize": "h6", + "type": "row" + } + ], + "schemaVersion": 14, + "style": "dark", + "tags": [ + "kubernetes" + ], + "templating": { + "list": [ + { + "current": { + "text": "default", + "value": "default" + }, + "hide": 0, + "label": null, + "name": "datasource", + "options": [ ], + "query": "prometheus", + "refresh": 1, + "regex": "", + "type": "datasource" + }, + { + "allValue": null, + "current": { }, + "datasource": "$datasource", + "hide": 2, + "includeAll": false, + "label": "cluster", + "multi": false, + "name": "cluster", + "options": [ ], + "query": "label_values(kube_pod_info, cluster)", + "refresh": 2, + "regex": "", + "sort": 1, + "tagValuesQuery": "", + "tags": [ ], + "tagsQuery": "", + "type": "query", + "useTags": false + }, + { + "allValue": null, + "current": { }, + "datasource": "$datasource", + "hide": 0, + "includeAll": true, + "label": null, + "multi": false, + "name": "instance", + "options": [ ], + "query": "label_values(process_cpu_seconds_total{cluster=\"$cluster\", job=\"kube-controller-manager\"}, instance)", + "refresh": 2, + "regex": "", + "sort": 1, + "tagValuesQuery": "", + "tags": [ ], + "tagsQuery": "", + "type": "query", + "useTags": false + } + ] + }, + "time": { + "from": "now-1h", + "to": "now" + }, + "timepicker": { + "refresh_intervals": [ + "5s", + "10s", + "30s", + "1m", + "5m", + "15m", + "30m", + "1h", + "2h", + "1d" + ], + "time_options": [ + "5m", + "15m", + "1h", + "6h", + "12h", + "24h", + "2d", + "7d", + "30d" + ] + }, + "timezone": "UTC", + "title": "Kubernetes / Controller Manager", + "uid": "72e0e05bef5099e5f049b05fdc429ed4", + "version": 0 +} diff --git a/charts/kubezero-metrics/dashboards/kube-mixin/k8s-resources-cluster.json b/charts/kubezero-metrics/dashboards/kube-mixin/k8s-resources-cluster.json new file mode 100644 index 0000000..52f6864 --- /dev/null +++ b/charts/kubezero-metrics/dashboards/kube-mixin/k8s-resources-cluster.json @@ -0,0 +1,2647 @@ +{ + "annotations": { + "list": [ ] + }, + "editable": true, + "gnetId": null, + "graphTooltip": 0, + "hideControls": false, + "links": [ ], + "refresh": "10s", + "rows": [ + { + "collapse": false, + "height": "100px", + "panels": [ + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 1, + "format": "percentunit", + "id": 1, + "interval": "1m", + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [ ], + "nullPointMode": "null as zero", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 2, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "1 - avg(rate(node_cpu_seconds_total{mode=\"idle\", cluster=\"$cluster\"}[$__rate_interval]))", + "format": "time_series", + "instant": true, + "intervalFactor": 2, + "refId": "A" + } + ], + "thresholds": "70,80", + "timeFrom": null, + "timeShift": null, + "title": "CPU Utilisation", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "singlestat", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 1, + "format": "percentunit", + "id": 2, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [ ], + "nullPointMode": "null as zero", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 2, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "sum(namespace_cpu:kube_pod_container_resource_requests:sum{cluster=\"$cluster\"}) / sum(kube_node_status_allocatable{resource=\"cpu\",cluster=\"$cluster\"})", + "format": "time_series", + "instant": true, + "intervalFactor": 2, + "refId": "A" + } + ], + "thresholds": "70,80", + "timeFrom": null, + "timeShift": null, + "title": "CPU Requests Commitment", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "singlestat", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 1, + "format": "percentunit", + "id": 3, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [ ], + "nullPointMode": "null as zero", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 2, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "sum(kube_pod_container_resource_limits{cluster=\"$cluster\", resource=\"cpu\"}) / sum(kube_node_status_allocatable{resource=\"cpu\",cluster=\"$cluster\"})", + "format": "time_series", + "instant": true, + "intervalFactor": 2, + "refId": "A" + } + ], + "thresholds": "70,80", + "timeFrom": null, + "timeShift": null, + "title": "CPU Limits Commitment", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "singlestat", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 1, + "format": "percentunit", + "id": 4, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [ ], + "nullPointMode": "null as zero", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 2, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "1 - sum(:node_memory_MemAvailable_bytes:sum{cluster=\"$cluster\"}) / sum(node_memory_MemTotal_bytes{cluster=\"$cluster\"})", + "format": "time_series", + "instant": true, + "intervalFactor": 2, + "refId": "A" + } + ], + "thresholds": "70,80", + "timeFrom": null, + "timeShift": null, + "title": "Memory Utilisation", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "singlestat", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 1, + "format": "percentunit", + "id": 5, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [ ], + "nullPointMode": "null as zero", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 2, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "sum(namespace_memory:kube_pod_container_resource_requests:sum{cluster=\"$cluster\"}) / sum(kube_node_status_allocatable{resource=\"memory\",cluster=\"$cluster\"})", + "format": "time_series", + "instant": true, + "intervalFactor": 2, + "refId": "A" + } + ], + "thresholds": "70,80", + "timeFrom": null, + "timeShift": null, + "title": "Memory Requests Commitment", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "singlestat", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 1, + "format": "percentunit", + "id": 6, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [ ], + "nullPointMode": "null as zero", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 2, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "sum(kube_pod_container_resource_limits{cluster=\"$cluster\", resource=\"memory\"}) / sum(kube_node_status_allocatable{resource=\"memory\",cluster=\"$cluster\"})", + "format": "time_series", + "instant": true, + "intervalFactor": 2, + "refId": "A" + } + ], + "thresholds": "70,80", + "timeFrom": null, + "timeShift": null, + "title": "Memory Limits Commitment", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "singlestat", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + } + ], + "repeat": null, + "repeatIteration": null, + "repeatRowId": null, + "showTitle": false, + "title": "Headlines", + "titleSize": "h6" + }, + { + "collapse": false, + "height": "250px", + "panels": [ + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 10, + "id": 7, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 0, + "links": [ ], + "nullPointMode": "null as zero", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 12, + "stack": true, + "steppedLine": false, + "targets": [ + { + "expr": "sum(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_rate{cluster=\"$cluster\"}) by (namespace)", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{namespace}}", + "legendLink": null, + "step": 10 + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "CPU Usage", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + } + ], + "repeat": null, + "repeatIteration": null, + "repeatRowId": null, + "showTitle": true, + "title": "CPU", + "titleSize": "h6" + }, + { + "collapse": false, + "height": "250px", + "panels": [ + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 1, + "id": 8, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [ ], + "nullPointMode": "null as zero", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 12, + "stack": false, + "steppedLine": false, + "styles": [ + { + "alias": "Time", + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "pattern": "Time", + "type": "hidden" + }, + { + "alias": "Pods", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 0, + "link": true, + "linkTargetBlank": false, + "linkTooltip": "Drill down to pods", + "linkUrl": "./d/85a562078cdf77779eaa1add43ccec1e/k8s-resources-namespace?var-datasource=$datasource&var-cluster=$cluster&var-namespace=$__cell_1", + "pattern": "Value #A", + "thresholds": [ ], + "type": "number", + "unit": "short" + }, + { + "alias": "Workloads", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 0, + "link": true, + "linkTargetBlank": false, + "linkTooltip": "Drill down to workloads", + "linkUrl": "./d/a87fb0d919ec0ea5f6543124e16c42a5/k8s-resources-workloads-namespace?var-datasource=$datasource&var-cluster=$cluster&var-namespace=$__cell_1", + "pattern": "Value #B", + "thresholds": [ ], + "type": "number", + "unit": "short" + }, + { + "alias": "CPU Usage", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": false, + "linkTargetBlank": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "Value #C", + "thresholds": [ ], + "type": "number", + "unit": "short" + }, + { + "alias": "CPU Requests", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": false, + "linkTargetBlank": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "Value #D", + "thresholds": [ ], + "type": "number", + "unit": "short" + }, + { + "alias": "CPU Requests %", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": false, + "linkTargetBlank": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "Value #E", + "thresholds": [ ], + "type": "number", + "unit": "percentunit" + }, + { + "alias": "CPU Limits", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": false, + "linkTargetBlank": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "Value #F", + "thresholds": [ ], + "type": "number", + "unit": "short" + }, + { + "alias": "CPU Limits %", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": false, + "linkTargetBlank": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "Value #G", + "thresholds": [ ], + "type": "number", + "unit": "percentunit" + }, + { + "alias": "Namespace", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": true, + "linkTargetBlank": false, + "linkTooltip": "Drill down to pods", + "linkUrl": "./d/85a562078cdf77779eaa1add43ccec1e/k8s-resources-namespace?var-datasource=$datasource&var-cluster=$cluster&var-namespace=$__cell", + "pattern": "namespace", + "thresholds": [ ], + "type": "number", + "unit": "short" + }, + { + "alias": "", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "pattern": "/.*/", + "thresholds": [ ], + "type": "string", + "unit": "short" + } + ], + "targets": [ + { + "expr": "sum(kube_pod_owner{cluster=\"$cluster\"}) by (namespace)", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "A", + "step": 10 + }, + { + "expr": "count(avg(namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\"}) by (workload, namespace)) by (namespace)", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "B", + "step": 10 + }, + { + "expr": "sum(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_rate{cluster=\"$cluster\"}) by (namespace)", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "C", + "step": 10 + }, + { + "expr": "sum(namespace_cpu:kube_pod_container_resource_requests:sum{cluster=\"$cluster\"}) by (namespace)", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "D", + "step": 10 + }, + { + "expr": "sum(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_rate{cluster=\"$cluster\"}) by (namespace) / sum(kube_pod_container_resource_requests{cluster=\"$cluster\", resource=\"cpu\"}) by (namespace)", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "E", + "step": 10 + }, + { + "expr": "sum(kube_pod_container_resource_limits{cluster=\"$cluster\", resource=\"cpu\"}) by (namespace)", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "F", + "step": 10 + }, + { + "expr": "sum(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_rate{cluster=\"$cluster\"}) by (namespace) / sum(kube_pod_container_resource_limits{cluster=\"$cluster\", resource=\"cpu\"}) by (namespace)", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "G", + "step": 10 + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "CPU Quota", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "transform": "table", + "type": "table", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + } + ], + "repeat": null, + "repeatIteration": null, + "repeatRowId": null, + "showTitle": true, + "title": "CPU Quota", + "titleSize": "h6" + }, + { + "collapse": false, + "height": "250px", + "panels": [ + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 10, + "id": 9, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 0, + "links": [ ], + "nullPointMode": "null as zero", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 12, + "stack": true, + "steppedLine": false, + "targets": [ + { + "expr": "sum(container_memory_rss{cluster=\"$cluster\", container!=\"\"}) by (namespace)", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{namespace}}", + "legendLink": null, + "step": 10 + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Memory Usage (w/o cache)", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "bytes", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + } + ], + "repeat": null, + "repeatIteration": null, + "repeatRowId": null, + "showTitle": true, + "title": "Memory", + "titleSize": "h6" + }, + { + "collapse": false, + "height": "250px", + "panels": [ + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 1, + "id": 10, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [ ], + "nullPointMode": "null as zero", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 12, + "stack": false, + "steppedLine": false, + "styles": [ + { + "alias": "Time", + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "pattern": "Time", + "type": "hidden" + }, + { + "alias": "Pods", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 0, + "link": true, + "linkTargetBlank": false, + "linkTooltip": "Drill down to pods", + "linkUrl": "./d/85a562078cdf77779eaa1add43ccec1e/k8s-resources-namespace?var-datasource=$datasource&var-cluster=$cluster&var-namespace=$__cell_1", + "pattern": "Value #A", + "thresholds": [ ], + "type": "number", + "unit": "short" + }, + { + "alias": "Workloads", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 0, + "link": true, + "linkTargetBlank": false, + "linkTooltip": "Drill down to workloads", + "linkUrl": "./d/a87fb0d919ec0ea5f6543124e16c42a5/k8s-resources-workloads-namespace?var-datasource=$datasource&var-cluster=$cluster&var-namespace=$__cell_1", + "pattern": "Value #B", + "thresholds": [ ], + "type": "number", + "unit": "short" + }, + { + "alias": "Memory Usage", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": false, + "linkTargetBlank": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "Value #C", + "thresholds": [ ], + "type": "number", + "unit": "bytes" + }, + { + "alias": "Memory Requests", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": false, + "linkTargetBlank": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "Value #D", + "thresholds": [ ], + "type": "number", + "unit": "bytes" + }, + { + "alias": "Memory Requests %", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": false, + "linkTargetBlank": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "Value #E", + "thresholds": [ ], + "type": "number", + "unit": "percentunit" + }, + { + "alias": "Memory Limits", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": false, + "linkTargetBlank": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "Value #F", + "thresholds": [ ], + "type": "number", + "unit": "bytes" + }, + { + "alias": "Memory Limits %", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": false, + "linkTargetBlank": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "Value #G", + "thresholds": [ ], + "type": "number", + "unit": "percentunit" + }, + { + "alias": "Namespace", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": true, + "linkTargetBlank": false, + "linkTooltip": "Drill down to pods", + "linkUrl": "./d/85a562078cdf77779eaa1add43ccec1e/k8s-resources-namespace?var-datasource=$datasource&var-cluster=$cluster&var-namespace=$__cell", + "pattern": "namespace", + "thresholds": [ ], + "type": "number", + "unit": "short" + }, + { + "alias": "", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "pattern": "/.*/", + "thresholds": [ ], + "type": "string", + "unit": "short" + } + ], + "targets": [ + { + "expr": "sum(kube_pod_owner{cluster=\"$cluster\"}) by (namespace)", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "A", + "step": 10 + }, + { + "expr": "count(avg(namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\"}) by (workload, namespace)) by (namespace)", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "B", + "step": 10 + }, + { + "expr": "sum(container_memory_rss{cluster=\"$cluster\", container!=\"\"}) by (namespace)", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "C", + "step": 10 + }, + { + "expr": "sum(kube_pod_container_resource_requests{cluster=\"$cluster\", resource=\"memory\"}) by (namespace)", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "D", + "step": 10 + }, + { + "expr": "sum(container_memory_rss{cluster=\"$cluster\", container!=\"\"}) by (namespace) / sum(kube_pod_container_resource_requests{cluster=\"$cluster\", resource=\"memory\"}) by (namespace)", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "E", + "step": 10 + }, + { + "expr": "sum(kube_pod_container_resource_limits{cluster=\"$cluster\", resource=\"memory\"}) by (namespace)", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "F", + "step": 10 + }, + { + "expr": "sum(container_memory_rss{cluster=\"$cluster\", container!=\"\"}) by (namespace) / sum(kube_pod_container_resource_limits{cluster=\"$cluster\", resource=\"memory\"}) by (namespace)", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "G", + "step": 10 + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Requests by Namespace", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "transform": "table", + "type": "table", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + } + ], + "repeat": null, + "repeatIteration": null, + "repeatRowId": null, + "showTitle": true, + "title": "Memory Requests", + "titleSize": "h6" + }, + { + "collapse": false, + "height": "250px", + "panels": [ + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 1, + "id": 11, + "interval": "1m", + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [ ], + "nullPointMode": "null as zero", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 12, + "stack": false, + "steppedLine": false, + "styles": [ + { + "alias": "Time", + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "pattern": "Time", + "type": "hidden" + }, + { + "alias": "Current Receive Bandwidth", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": false, + "linkTargetBlank": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "Value #A", + "thresholds": [ ], + "type": "number", + "unit": "Bps" + }, + { + "alias": "Current Transmit Bandwidth", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": false, + "linkTargetBlank": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "Value #B", + "thresholds": [ ], + "type": "number", + "unit": "Bps" + }, + { + "alias": "Rate of Received Packets", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": false, + "linkTargetBlank": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "Value #C", + "thresholds": [ ], + "type": "number", + "unit": "pps" + }, + { + "alias": "Rate of Transmitted Packets", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": false, + "linkTargetBlank": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "Value #D", + "thresholds": [ ], + "type": "number", + "unit": "pps" + }, + { + "alias": "Rate of Received Packets Dropped", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": false, + "linkTargetBlank": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "Value #E", + "thresholds": [ ], + "type": "number", + "unit": "pps" + }, + { + "alias": "Rate of Transmitted Packets Dropped", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": false, + "linkTargetBlank": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "Value #F", + "thresholds": [ ], + "type": "number", + "unit": "pps" + }, + { + "alias": "Namespace", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": true, + "linkTargetBlank": false, + "linkTooltip": "Drill down to pods", + "linkUrl": "./d/85a562078cdf77779eaa1add43ccec1e/k8s-resources-namespace?var-datasource=$datasource&var-cluster=$cluster&var-namespace=$__cell", + "pattern": "namespace", + "thresholds": [ ], + "type": "number", + "unit": "short" + }, + { + "alias": "", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "pattern": "/.*/", + "thresholds": [ ], + "type": "string", + "unit": "short" + } + ], + "targets": [ + { + "expr": "sum(irate(container_network_receive_bytes_total{cluster=\"$cluster\", namespace=~\".+\"}[$__rate_interval])) by (namespace)", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "A", + "step": 10 + }, + { + "expr": "sum(irate(container_network_transmit_bytes_total{cluster=\"$cluster\", namespace=~\".+\"}[$__rate_interval])) by (namespace)", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "B", + "step": 10 + }, + { + "expr": "sum(irate(container_network_receive_packets_total{cluster=\"$cluster\", namespace=~\".+\"}[$__rate_interval])) by (namespace)", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "C", + "step": 10 + }, + { + "expr": "sum(irate(container_network_transmit_packets_total{cluster=\"$cluster\", namespace=~\".+\"}[$__rate_interval])) by (namespace)", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "D", + "step": 10 + }, + { + "expr": "sum(irate(container_network_receive_packets_dropped_total{cluster=\"$cluster\", namespace=~\".+\"}[$__rate_interval])) by (namespace)", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "E", + "step": 10 + }, + { + "expr": "sum(irate(container_network_transmit_packets_dropped_total{cluster=\"$cluster\", namespace=~\".+\"}[$__rate_interval])) by (namespace)", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "F", + "step": 10 + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Current Network Usage", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "transform": "table", + "type": "table", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + } + ], + "repeat": null, + "repeatIteration": null, + "repeatRowId": null, + "showTitle": true, + "title": "Current Network Usage", + "titleSize": "h6" + }, + { + "collapse": false, + "height": "250px", + "panels": [ + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 10, + "id": 12, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 0, + "links": [ ], + "nullPointMode": "null as zero", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 6, + "stack": true, + "steppedLine": false, + "targets": [ + { + "expr": "sum(irate(container_network_receive_bytes_total{cluster=\"$cluster\", namespace=~\".+\"}[$__rate_interval])) by (namespace)", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{namespace}}", + "legendLink": null, + "step": 10 + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Receive Bandwidth", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "Bps", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 10, + "id": 13, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 0, + "links": [ ], + "nullPointMode": "null as zero", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 6, + "stack": true, + "steppedLine": false, + "targets": [ + { + "expr": "sum(irate(container_network_transmit_bytes_total{cluster=\"$cluster\", namespace=~\".+\"}[$__rate_interval])) by (namespace)", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{namespace}}", + "legendLink": null, + "step": 10 + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Transmit Bandwidth", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "Bps", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + } + ], + "repeat": null, + "repeatIteration": null, + "repeatRowId": null, + "showTitle": true, + "title": "Bandwidth", + "titleSize": "h6" + }, + { + "collapse": false, + "height": "250px", + "panels": [ + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 10, + "id": 14, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 0, + "links": [ ], + "nullPointMode": "null as zero", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 6, + "stack": true, + "steppedLine": false, + "targets": [ + { + "expr": "avg(irate(container_network_receive_bytes_total{cluster=\"$cluster\", namespace=~\".+\"}[$__rate_interval])) by (namespace)", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{namespace}}", + "legendLink": null, + "step": 10 + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Average Container Bandwidth by Namespace: Received", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "Bps", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 10, + "id": 15, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 0, + "links": [ ], + "nullPointMode": "null as zero", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 6, + "stack": true, + "steppedLine": false, + "targets": [ + { + "expr": "avg(irate(container_network_transmit_bytes_total{cluster=\"$cluster\", namespace=~\".+\"}[$__rate_interval])) by (namespace)", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{namespace}}", + "legendLink": null, + "step": 10 + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Average Container Bandwidth by Namespace: Transmitted", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "Bps", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + } + ], + "repeat": null, + "repeatIteration": null, + "repeatRowId": null, + "showTitle": true, + "title": "Average Container Bandwidth by Namespace", + "titleSize": "h6" + }, + { + "collapse": false, + "height": "250px", + "panels": [ + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 10, + "id": 16, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 0, + "links": [ ], + "nullPointMode": "null as zero", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 6, + "stack": true, + "steppedLine": false, + "targets": [ + { + "expr": "sum(irate(container_network_receive_packets_total{cluster=\"$cluster\", namespace=~\".+\"}[$__rate_interval])) by (namespace)", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{namespace}}", + "legendLink": null, + "step": 10 + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Rate of Received Packets", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "Bps", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 10, + "id": 17, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 0, + "links": [ ], + "nullPointMode": "null as zero", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 6, + "stack": true, + "steppedLine": false, + "targets": [ + { + "expr": "sum(irate(container_network_transmit_packets_total{cluster=\"$cluster\", namespace=~\".+\"}[$__rate_interval])) by (namespace)", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{namespace}}", + "legendLink": null, + "step": 10 + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Rate of Transmitted Packets", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "Bps", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + } + ], + "repeat": null, + "repeatIteration": null, + "repeatRowId": null, + "showTitle": true, + "title": "Rate of Packets", + "titleSize": "h6" + }, + { + "collapse": false, + "height": "250px", + "panels": [ + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 10, + "id": 18, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 0, + "links": [ ], + "nullPointMode": "null as zero", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 6, + "stack": true, + "steppedLine": false, + "targets": [ + { + "expr": "sum(irate(container_network_receive_packets_dropped_total{cluster=\"$cluster\", namespace=~\".+\"}[$__rate_interval])) by (namespace)", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{namespace}}", + "legendLink": null, + "step": 10 + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Rate of Received Packets Dropped", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "Bps", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 10, + "id": 19, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 0, + "links": [ ], + "nullPointMode": "null as zero", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 6, + "stack": true, + "steppedLine": false, + "targets": [ + { + "expr": "sum(irate(container_network_transmit_packets_dropped_total{cluster=\"$cluster\", namespace=~\".+\"}[$__rate_interval])) by (namespace)", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{namespace}}", + "legendLink": null, + "step": 10 + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Rate of Transmitted Packets Dropped", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "Bps", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + } + ], + "repeat": null, + "repeatIteration": null, + "repeatRowId": null, + "showTitle": true, + "title": "Rate of Packets Dropped", + "titleSize": "h6" + }, + { + "collapse": false, + "height": "250px", + "panels": [ + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "decimals": -1, + "fill": 10, + "id": 20, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 0, + "links": [ ], + "nullPointMode": "null as zero", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 6, + "stack": true, + "steppedLine": false, + "targets": [ + { + "expr": "ceil(sum by(namespace) (rate(container_fs_reads_total{container!=\"\", cluster=\"$cluster\"}[5m]) + rate(container_fs_writes_total{container!=\"\", cluster=\"$cluster\"}[5m])))", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{namespace}}", + "legendLink": null, + "step": 10 + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "IOPS(Reads+Writes)", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 10, + "id": 21, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 0, + "links": [ ], + "nullPointMode": "null as zero", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 6, + "stack": true, + "steppedLine": false, + "targets": [ + { + "expr": "sum by(namespace) (rate(container_fs_reads_bytes_total{container!=\"\", cluster=\"$cluster\"}[5m]) + rate(container_fs_writes_bytes_total{container!=\"\", cluster=\"$cluster\"}[5m]))", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{namespace}}", + "legendLink": null, + "step": 10 + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "ThroughPut(Read+Write)", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "Bps", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + } + ], + "repeat": null, + "repeatIteration": null, + "repeatRowId": null, + "showTitle": true, + "title": "Storage IO", + "titleSize": "h6" + }, + { + "collapse": false, + "height": "250px", + "panels": [ + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 1, + "id": 22, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [ ], + "nullPointMode": "null as zero", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ ], + "sort": { + "col": 4, + "desc": true + }, + "spaceLength": 10, + "span": 12, + "stack": false, + "steppedLine": false, + "styles": [ + { + "alias": "Time", + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "pattern": "Time", + "type": "hidden" + }, + { + "alias": "IOPS(Reads)", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": -1, + "link": false, + "linkTargetBlank": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "Value #A", + "thresholds": [ ], + "type": "number", + "unit": "short" + }, + { + "alias": "IOPS(Writes)", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": -1, + "link": false, + "linkTargetBlank": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "Value #B", + "thresholds": [ ], + "type": "number", + "unit": "short" + }, + { + "alias": "IOPS(Reads + Writes)", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": -1, + "link": false, + "linkTargetBlank": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "Value #C", + "thresholds": [ ], + "type": "number", + "unit": "short" + }, + { + "alias": "Throughput(Read)", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": false, + "linkTargetBlank": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "Value #D", + "thresholds": [ ], + "type": "number", + "unit": "Bps" + }, + { + "alias": "Throughput(Write)", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": false, + "linkTargetBlank": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "Value #E", + "thresholds": [ ], + "type": "number", + "unit": "Bps" + }, + { + "alias": "Throughput(Read + Write)", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": false, + "linkTargetBlank": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "Value #F", + "thresholds": [ ], + "type": "number", + "unit": "Bps" + }, + { + "alias": "Namespace", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": true, + "linkTargetBlank": false, + "linkTooltip": "Drill down to pods", + "linkUrl": "./d/85a562078cdf77779eaa1add43ccec1e/k8s-resources-namespace?var-datasource=$datasource&var-cluster=$cluster&var-namespace=$__cell", + "pattern": "namespace", + "thresholds": [ ], + "type": "number", + "unit": "short" + }, + { + "alias": "", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "pattern": "/.*/", + "thresholds": [ ], + "type": "string", + "unit": "short" + } + ], + "targets": [ + { + "expr": "sum by(namespace) (rate(container_fs_reads_total{container!=\"\", cluster=\"$cluster\"}[5m]))", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "A", + "step": 10 + }, + { + "expr": "sum by(namespace) (rate(container_fs_writes_total{container!=\"\", cluster=\"$cluster\"}[5m]))", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "B", + "step": 10 + }, + { + "expr": "sum by(namespace) (rate(container_fs_reads_total{container!=\"\", cluster=\"$cluster\"}[5m]) + rate(container_fs_writes_total{container!=\"\", cluster=\"$cluster\"}[5m]))", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "C", + "step": 10 + }, + { + "expr": "sum by(namespace) (rate(container_fs_reads_bytes_total{container!=\"\", cluster=\"$cluster\"}[5m]))", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "D", + "step": 10 + }, + { + "expr": "sum by(namespace) (rate(container_fs_writes_bytes_total{container!=\"\", cluster=\"$cluster\"}[5m]))", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "E", + "step": 10 + }, + { + "expr": "sum by(namespace) (rate(container_fs_reads_bytes_total{container!=\"\", cluster=\"$cluster\"}[5m]) + rate(container_fs_writes_bytes_total{container!=\"\", cluster=\"$cluster\"}[5m]))", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "F", + "step": 10 + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Current Storage IO", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "transform": "table", + "type": "table", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + } + ], + "repeat": null, + "repeatIteration": null, + "repeatRowId": null, + "showTitle": true, + "title": "Storage IO - Distribution", + "titleSize": "h6" + } + ], + "schemaVersion": 14, + "style": "dark", + "tags": [ + "kubernetes" + ], + "templating": { + "list": [ + { + "current": { + "text": "default", + "value": "default" + }, + "hide": 0, + "label": null, + "name": "datasource", + "options": [ ], + "query": "prometheus", + "refresh": 1, + "regex": "", + "type": "datasource" + }, + { + "allValue": null, + "current": { + "text": "", + "value": "" + }, + "datasource": "$datasource", + "hide": 2, + "includeAll": false, + "label": null, + "multi": false, + "name": "cluster", + "options": [ ], + "query": "label_values(node_cpu_seconds_total, cluster)", + "refresh": 2, + "regex": "", + "sort": 1, + "tagValuesQuery": "", + "tags": [ ], + "tagsQuery": "", + "type": "query", + "useTags": false + } + ] + }, + "time": { + "from": "now-1h", + "to": "now" + }, + "timepicker": { + "refresh_intervals": [ + "5s", + "10s", + "30s", + "1m", + "5m", + "15m", + "30m", + "1h", + "2h", + "1d" + ], + "time_options": [ + "5m", + "15m", + "1h", + "6h", + "12h", + "24h", + "2d", + "7d", + "30d" + ] + }, + "timezone": "UTC", + "title": "Kubernetes / Compute Resources / Cluster", + "uid": "efa86fd1d0c121a26444b636a3f509a8", + "version": 0 +} diff --git a/charts/kubezero-metrics/dashboards/kube-mixin/k8s-resources-namespace.json b/charts/kubezero-metrics/dashboards/kube-mixin/k8s-resources-namespace.json new file mode 100644 index 0000000..859c087 --- /dev/null +++ b/charts/kubezero-metrics/dashboards/kube-mixin/k8s-resources-namespace.json @@ -0,0 +1,2407 @@ +{ + "annotations": { + "list": [ ] + }, + "editable": true, + "gnetId": null, + "graphTooltip": 0, + "hideControls": false, + "links": [ ], + "refresh": "10s", + "rows": [ + { + "collapse": false, + "height": "100px", + "panels": [ + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 1, + "format": "percentunit", + "id": 1, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [ ], + "nullPointMode": "null as zero", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 3, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "sum(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_rate{cluster=\"$cluster\", namespace=\"$namespace\"}) / sum(kube_pod_container_resource_requests{cluster=\"$cluster\", namespace=\"$namespace\", resource=\"cpu\"})", + "format": "time_series", + "instant": true, + "intervalFactor": 2, + "refId": "A" + } + ], + "thresholds": "70,80", + "timeFrom": null, + "timeShift": null, + "title": "CPU Utilisation (from requests)", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "singlestat", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 1, + "format": "percentunit", + "id": 2, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [ ], + "nullPointMode": "null as zero", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 3, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "sum(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_rate{cluster=\"$cluster\", namespace=\"$namespace\"}) / sum(kube_pod_container_resource_limits{cluster=\"$cluster\", namespace=\"$namespace\", resource=\"cpu\"})", + "format": "time_series", + "instant": true, + "intervalFactor": 2, + "refId": "A" + } + ], + "thresholds": "70,80", + "timeFrom": null, + "timeShift": null, + "title": "CPU Utilisation (from limits)", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "singlestat", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 1, + "format": "percentunit", + "id": 3, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [ ], + "nullPointMode": "null as zero", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 3, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "sum(container_memory_working_set_bytes{cluster=\"$cluster\", namespace=\"$namespace\",container!=\"\", image!=\"\"}) / sum(kube_pod_container_resource_requests{cluster=\"$cluster\", namespace=\"$namespace\", resource=\"memory\"})", + "format": "time_series", + "instant": true, + "intervalFactor": 2, + "refId": "A" + } + ], + "thresholds": "70,80", + "timeFrom": null, + "timeShift": null, + "title": "Memory Utilization (from requests)", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "singlestat", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 1, + "format": "percentunit", + "id": 4, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [ ], + "nullPointMode": "null as zero", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 3, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "sum(container_memory_working_set_bytes{cluster=\"$cluster\", namespace=\"$namespace\",container!=\"\", image!=\"\"}) / sum(kube_pod_container_resource_limits{cluster=\"$cluster\", namespace=\"$namespace\", resource=\"memory\"})", + "format": "time_series", + "instant": true, + "intervalFactor": 2, + "refId": "A" + } + ], + "thresholds": "70,80", + "timeFrom": null, + "timeShift": null, + "title": "Memory Utilisation (from limits)", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "singlestat", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + } + ], + "repeat": null, + "repeatIteration": null, + "repeatRowId": null, + "showTitle": false, + "title": "Headlines", + "titleSize": "h6" + }, + { + "collapse": false, + "height": "250px", + "panels": [ + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 10, + "id": 5, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 0, + "links": [ ], + "nullPointMode": "null as zero", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ + { + "alias": "quota - requests", + "color": "#F2495C", + "dashes": true, + "fill": 0, + "hiddenSeries": true, + "hideTooltip": true, + "legend": true, + "linewidth": 2, + "stack": false + }, + { + "alias": "quota - limits", + "color": "#FF9830", + "dashes": true, + "fill": 0, + "hiddenSeries": true, + "hideTooltip": true, + "legend": true, + "linewidth": 2, + "stack": false + } + ], + "spaceLength": 10, + "span": 12, + "stack": true, + "steppedLine": false, + "targets": [ + { + "expr": "sum(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_rate{cluster=\"$cluster\", namespace=\"$namespace\"}) by (pod)", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{pod}}", + "legendLink": null, + "step": 10 + }, + { + "expr": "scalar(kube_resourcequota{cluster=\"$cluster\", namespace=\"$namespace\", type=\"hard\",resource=\"requests.cpu\"})", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "quota - requests", + "legendLink": null, + "step": 10 + }, + { + "expr": "scalar(kube_resourcequota{cluster=\"$cluster\", namespace=\"$namespace\", type=\"hard\",resource=\"limits.cpu\"})", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "quota - limits", + "legendLink": null, + "step": 10 + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "CPU Usage", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + } + ], + "repeat": null, + "repeatIteration": null, + "repeatRowId": null, + "showTitle": true, + "title": "CPU Usage", + "titleSize": "h6" + }, + { + "collapse": false, + "height": "250px", + "panels": [ + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 1, + "id": 6, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [ ], + "nullPointMode": "null as zero", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 12, + "stack": false, + "steppedLine": false, + "styles": [ + { + "alias": "Time", + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "pattern": "Time", + "type": "hidden" + }, + { + "alias": "CPU Usage", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": false, + "linkTargetBlank": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "Value #A", + "thresholds": [ ], + "type": "number", + "unit": "short" + }, + { + "alias": "CPU Requests", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": false, + "linkTargetBlank": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "Value #B", + "thresholds": [ ], + "type": "number", + "unit": "short" + }, + { + "alias": "CPU Requests %", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": false, + "linkTargetBlank": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "Value #C", + "thresholds": [ ], + "type": "number", + "unit": "percentunit" + }, + { + "alias": "CPU Limits", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": false, + "linkTargetBlank": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "Value #D", + "thresholds": [ ], + "type": "number", + "unit": "short" + }, + { + "alias": "CPU Limits %", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": false, + "linkTargetBlank": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "Value #E", + "thresholds": [ ], + "type": "number", + "unit": "percentunit" + }, + { + "alias": "Pod", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": true, + "linkTargetBlank": false, + "linkTooltip": "Drill down", + "linkUrl": "./d/6581e46e4e5c7ba40a07646395ef7b23/k8s-resources-pod?var-datasource=$datasource&var-cluster=$cluster&var-namespace=$namespace&var-pod=$__cell", + "pattern": "pod", + "thresholds": [ ], + "type": "number", + "unit": "short" + }, + { + "alias": "", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "pattern": "/.*/", + "thresholds": [ ], + "type": "string", + "unit": "short" + } + ], + "targets": [ + { + "expr": "sum(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_rate{cluster=\"$cluster\", namespace=\"$namespace\"}) by (pod)", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "A", + "step": 10 + }, + { + "expr": "sum(kube_pod_container_resource_requests{cluster=\"$cluster\", namespace=\"$namespace\", resource=\"cpu\"}) by (pod)", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "B", + "step": 10 + }, + { + "expr": "sum(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_rate{cluster=\"$cluster\", namespace=\"$namespace\"}) by (pod) / sum(kube_pod_container_resource_requests{cluster=\"$cluster\", namespace=\"$namespace\", resource=\"cpu\"}) by (pod)", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "C", + "step": 10 + }, + { + "expr": "sum(kube_pod_container_resource_limits{cluster=\"$cluster\", namespace=\"$namespace\", resource=\"cpu\"}) by (pod)", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "D", + "step": 10 + }, + { + "expr": "sum(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_rate{cluster=\"$cluster\", namespace=\"$namespace\"}) by (pod) / sum(kube_pod_container_resource_limits{cluster=\"$cluster\", namespace=\"$namespace\", resource=\"cpu\"}) by (pod)", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "E", + "step": 10 + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "CPU Quota", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "transform": "table", + "type": "table", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + } + ], + "repeat": null, + "repeatIteration": null, + "repeatRowId": null, + "showTitle": true, + "title": "CPU Quota", + "titleSize": "h6" + }, + { + "collapse": false, + "height": "250px", + "panels": [ + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 10, + "id": 7, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 0, + "links": [ ], + "nullPointMode": "null as zero", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ + { + "alias": "quota - requests", + "color": "#F2495C", + "dashes": true, + "fill": 0, + "hiddenSeries": true, + "hideTooltip": true, + "legend": true, + "linewidth": 2, + "stack": false + }, + { + "alias": "quota - limits", + "color": "#FF9830", + "dashes": true, + "fill": 0, + "hiddenSeries": true, + "hideTooltip": true, + "legend": true, + "linewidth": 2, + "stack": false + } + ], + "spaceLength": 10, + "span": 12, + "stack": true, + "steppedLine": false, + "targets": [ + { + "expr": "sum(container_memory_working_set_bytes{cluster=\"$cluster\", namespace=\"$namespace\", container!=\"\", image!=\"\"}) by (pod)", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{pod}}", + "legendLink": null, + "step": 10 + }, + { + "expr": "scalar(kube_resourcequota{cluster=\"$cluster\", namespace=\"$namespace\", type=\"hard\",resource=\"requests.memory\"})", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "quota - requests", + "legendLink": null, + "step": 10 + }, + { + "expr": "scalar(kube_resourcequota{cluster=\"$cluster\", namespace=\"$namespace\", type=\"hard\",resource=\"limits.memory\"})", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "quota - limits", + "legendLink": null, + "step": 10 + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Memory Usage (w/o cache)", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "bytes", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + } + ], + "repeat": null, + "repeatIteration": null, + "repeatRowId": null, + "showTitle": true, + "title": "Memory Usage", + "titleSize": "h6" + }, + { + "collapse": false, + "height": "250px", + "panels": [ + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 1, + "id": 8, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [ ], + "nullPointMode": "null as zero", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 12, + "stack": false, + "steppedLine": false, + "styles": [ + { + "alias": "Time", + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "pattern": "Time", + "type": "hidden" + }, + { + "alias": "Memory Usage", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": false, + "linkTargetBlank": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "Value #A", + "thresholds": [ ], + "type": "number", + "unit": "bytes" + }, + { + "alias": "Memory Requests", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": false, + "linkTargetBlank": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "Value #B", + "thresholds": [ ], + "type": "number", + "unit": "bytes" + }, + { + "alias": "Memory Requests %", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": false, + "linkTargetBlank": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "Value #C", + "thresholds": [ ], + "type": "number", + "unit": "percentunit" + }, + { + "alias": "Memory Limits", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": false, + "linkTargetBlank": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "Value #D", + "thresholds": [ ], + "type": "number", + "unit": "bytes" + }, + { + "alias": "Memory Limits %", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": false, + "linkTargetBlank": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "Value #E", + "thresholds": [ ], + "type": "number", + "unit": "percentunit" + }, + { + "alias": "Memory Usage (RSS)", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": false, + "linkTargetBlank": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "Value #F", + "thresholds": [ ], + "type": "number", + "unit": "bytes" + }, + { + "alias": "Memory Usage (Cache)", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": false, + "linkTargetBlank": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "Value #G", + "thresholds": [ ], + "type": "number", + "unit": "bytes" + }, + { + "alias": "Memory Usage (Swap)", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": false, + "linkTargetBlank": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "Value #H", + "thresholds": [ ], + "type": "number", + "unit": "bytes" + }, + { + "alias": "Pod", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": true, + "linkTargetBlank": false, + "linkTooltip": "Drill down", + "linkUrl": "./d/6581e46e4e5c7ba40a07646395ef7b23/k8s-resources-pod?var-datasource=$datasource&var-cluster=$cluster&var-namespace=$namespace&var-pod=$__cell", + "pattern": "pod", + "thresholds": [ ], + "type": "number", + "unit": "short" + }, + { + "alias": "", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "pattern": "/.*/", + "thresholds": [ ], + "type": "string", + "unit": "short" + } + ], + "targets": [ + { + "expr": "sum(container_memory_working_set_bytes{cluster=\"$cluster\", namespace=\"$namespace\",container!=\"\", image!=\"\"}) by (pod)", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "A", + "step": 10 + }, + { + "expr": "sum(kube_pod_container_resource_requests{cluster=\"$cluster\", namespace=\"$namespace\", resource=\"memory\"}) by (pod)", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "B", + "step": 10 + }, + { + "expr": "sum(container_memory_working_set_bytes{cluster=\"$cluster\", namespace=\"$namespace\",container!=\"\", image!=\"\"}) by (pod) / sum(kube_pod_container_resource_requests{cluster=\"$cluster\", namespace=\"$namespace\", resource=\"memory\"}) by (pod)", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "C", + "step": 10 + }, + { + "expr": "sum(kube_pod_container_resource_limits{cluster=\"$cluster\", namespace=\"$namespace\", resource=\"memory\"}) by (pod)", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "D", + "step": 10 + }, + { + "expr": "sum(container_memory_working_set_bytes{cluster=\"$cluster\", namespace=\"$namespace\",container!=\"\", image!=\"\"}) by (pod) / sum(kube_pod_container_resource_limits{cluster=\"$cluster\", namespace=\"$namespace\", resource=\"memory\"}) by (pod)", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "E", + "step": 10 + }, + { + "expr": "sum(container_memory_rss{cluster=\"$cluster\", namespace=\"$namespace\",container!=\"\"}) by (pod)", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "F", + "step": 10 + }, + { + "expr": "sum(container_memory_cache{cluster=\"$cluster\", namespace=\"$namespace\",container!=\"\"}) by (pod)", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "G", + "step": 10 + }, + { + "expr": "sum(container_memory_swap{cluster=\"$cluster\", namespace=\"$namespace\",container!=\"\"}) by (pod)", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "H", + "step": 10 + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Memory Quota", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "transform": "table", + "type": "table", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + } + ], + "repeat": null, + "repeatIteration": null, + "repeatRowId": null, + "showTitle": true, + "title": "Memory Quota", + "titleSize": "h6" + }, + { + "collapse": false, + "height": "250px", + "panels": [ + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 1, + "id": 9, + "interval": "1m", + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [ ], + "nullPointMode": "null as zero", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 12, + "stack": false, + "steppedLine": false, + "styles": [ + { + "alias": "Time", + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "pattern": "Time", + "type": "hidden" + }, + { + "alias": "Current Receive Bandwidth", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": false, + "linkTargetBlank": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "Value #A", + "thresholds": [ ], + "type": "number", + "unit": "Bps" + }, + { + "alias": "Current Transmit Bandwidth", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": false, + "linkTargetBlank": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "Value #B", + "thresholds": [ ], + "type": "number", + "unit": "Bps" + }, + { + "alias": "Rate of Received Packets", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": false, + "linkTargetBlank": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "Value #C", + "thresholds": [ ], + "type": "number", + "unit": "pps" + }, + { + "alias": "Rate of Transmitted Packets", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": false, + "linkTargetBlank": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "Value #D", + "thresholds": [ ], + "type": "number", + "unit": "pps" + }, + { + "alias": "Rate of Received Packets Dropped", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": false, + "linkTargetBlank": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "Value #E", + "thresholds": [ ], + "type": "number", + "unit": "pps" + }, + { + "alias": "Rate of Transmitted Packets Dropped", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": false, + "linkTargetBlank": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "Value #F", + "thresholds": [ ], + "type": "number", + "unit": "pps" + }, + { + "alias": "Pod", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": true, + "linkTargetBlank": false, + "linkTooltip": "Drill down to pods", + "linkUrl": "./d/6581e46e4e5c7ba40a07646395ef7b23/k8s-resources-pod?var-datasource=$datasource&var-cluster=$cluster&var-namespace=$namespace&var-pod=$__cell", + "pattern": "pod", + "thresholds": [ ], + "type": "number", + "unit": "short" + }, + { + "alias": "", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "pattern": "/.*/", + "thresholds": [ ], + "type": "string", + "unit": "short" + } + ], + "targets": [ + { + "expr": "sum(irate(container_network_receive_bytes_total{cluster=\"$cluster\", namespace=~\"$namespace\"}[$__rate_interval])) by (pod)", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "A", + "step": 10 + }, + { + "expr": "sum(irate(container_network_transmit_bytes_total{cluster=\"$cluster\", namespace=~\"$namespace\"}[$__rate_interval])) by (pod)", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "B", + "step": 10 + }, + { + "expr": "sum(irate(container_network_receive_packets_total{cluster=\"$cluster\", namespace=~\"$namespace\"}[$__rate_interval])) by (pod)", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "C", + "step": 10 + }, + { + "expr": "sum(irate(container_network_transmit_packets_total{cluster=\"$cluster\", namespace=~\"$namespace\"}[$__rate_interval])) by (pod)", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "D", + "step": 10 + }, + { + "expr": "sum(irate(container_network_receive_packets_dropped_total{cluster=\"$cluster\", namespace=~\"$namespace\"}[$__rate_interval])) by (pod)", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "E", + "step": 10 + }, + { + "expr": "sum(irate(container_network_transmit_packets_dropped_total{cluster=\"$cluster\", namespace=~\"$namespace\"}[$__rate_interval])) by (pod)", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "F", + "step": 10 + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Current Network Usage", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "transform": "table", + "type": "table", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + } + ], + "repeat": null, + "repeatIteration": null, + "repeatRowId": null, + "showTitle": true, + "title": "Current Network Usage", + "titleSize": "h6" + }, + { + "collapse": false, + "height": "250px", + "panels": [ + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 10, + "id": 10, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 0, + "links": [ ], + "nullPointMode": "null as zero", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 6, + "stack": true, + "steppedLine": false, + "targets": [ + { + "expr": "sum(irate(container_network_receive_bytes_total{cluster=\"$cluster\", namespace=~\"$namespace\"}[$__rate_interval])) by (pod)", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{pod}}", + "legendLink": null, + "step": 10 + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Receive Bandwidth", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "Bps", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 10, + "id": 11, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 0, + "links": [ ], + "nullPointMode": "null as zero", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 6, + "stack": true, + "steppedLine": false, + "targets": [ + { + "expr": "sum(irate(container_network_transmit_bytes_total{cluster=\"$cluster\", namespace=~\"$namespace\"}[$__rate_interval])) by (pod)", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{pod}}", + "legendLink": null, + "step": 10 + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Transmit Bandwidth", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "Bps", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + } + ], + "repeat": null, + "repeatIteration": null, + "repeatRowId": null, + "showTitle": true, + "title": "Bandwidth", + "titleSize": "h6" + }, + { + "collapse": false, + "height": "250px", + "panels": [ + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 10, + "id": 12, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 0, + "links": [ ], + "nullPointMode": "null as zero", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 6, + "stack": true, + "steppedLine": false, + "targets": [ + { + "expr": "sum(irate(container_network_receive_packets_total{cluster=\"$cluster\", namespace=~\"$namespace\"}[$__rate_interval])) by (pod)", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{pod}}", + "legendLink": null, + "step": 10 + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Rate of Received Packets", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "Bps", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 10, + "id": 13, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 0, + "links": [ ], + "nullPointMode": "null as zero", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 6, + "stack": true, + "steppedLine": false, + "targets": [ + { + "expr": "sum(irate(container_network_transmit_packets_total{cluster=\"$cluster\", namespace=~\"$namespace\"}[$__rate_interval])) by (pod)", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{pod}}", + "legendLink": null, + "step": 10 + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Rate of Transmitted Packets", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "Bps", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + } + ], + "repeat": null, + "repeatIteration": null, + "repeatRowId": null, + "showTitle": true, + "title": "Rate of Packets", + "titleSize": "h6" + }, + { + "collapse": false, + "height": "250px", + "panels": [ + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 10, + "id": 14, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 0, + "links": [ ], + "nullPointMode": "null as zero", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 6, + "stack": true, + "steppedLine": false, + "targets": [ + { + "expr": "sum(irate(container_network_receive_packets_dropped_total{cluster=\"$cluster\", namespace=~\"$namespace\"}[$__rate_interval])) by (pod)", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{pod}}", + "legendLink": null, + "step": 10 + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Rate of Received Packets Dropped", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "Bps", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 10, + "id": 15, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 0, + "links": [ ], + "nullPointMode": "null as zero", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 6, + "stack": true, + "steppedLine": false, + "targets": [ + { + "expr": "sum(irate(container_network_transmit_packets_dropped_total{cluster=\"$cluster\", namespace=~\"$namespace\"}[$__rate_interval])) by (pod)", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{pod}}", + "legendLink": null, + "step": 10 + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Rate of Transmitted Packets Dropped", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "Bps", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + } + ], + "repeat": null, + "repeatIteration": null, + "repeatRowId": null, + "showTitle": true, + "title": "Rate of Packets Dropped", + "titleSize": "h6" + }, + { + "collapse": false, + "height": "250px", + "panels": [ + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "decimals": -1, + "fill": 10, + "id": 16, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 0, + "links": [ ], + "nullPointMode": "null as zero", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 6, + "stack": true, + "steppedLine": false, + "targets": [ + { + "expr": "ceil(sum by(pod) (rate(container_fs_reads_total{container!=\"\", cluster=\"$cluster\",namespace=~\"$namespace\"}[5m]) + rate(container_fs_writes_total{container!=\"\", cluster=\"$cluster\",namespace=~\"$namespace\"}[5m])))", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{pod}}", + "legendLink": null, + "step": 10 + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "IOPS(Reads+Writes)", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 10, + "id": 17, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 0, + "links": [ ], + "nullPointMode": "null as zero", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 6, + "stack": true, + "steppedLine": false, + "targets": [ + { + "expr": "sum by(pod) (rate(container_fs_reads_bytes_total{container!=\"\", cluster=\"$cluster\",namespace=~\"$namespace\"}[5m]) + rate(container_fs_writes_bytes_total{container!=\"\", cluster=\"$cluster\",namespace=~\"$namespace\"}[5m]))", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{pod}}", + "legendLink": null, + "step": 10 + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "ThroughPut(Read+Write)", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "Bps", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + } + ], + "repeat": null, + "repeatIteration": null, + "repeatRowId": null, + "showTitle": true, + "title": "Storage IO", + "titleSize": "h6" + }, + { + "collapse": false, + "height": "250px", + "panels": [ + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 1, + "id": 18, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [ ], + "nullPointMode": "null as zero", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ ], + "sort": { + "col": 4, + "desc": true + }, + "spaceLength": 10, + "span": 12, + "stack": false, + "steppedLine": false, + "styles": [ + { + "alias": "Time", + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "pattern": "Time", + "type": "hidden" + }, + { + "alias": "IOPS(Reads)", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": -1, + "link": false, + "linkTargetBlank": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "Value #A", + "thresholds": [ ], + "type": "number", + "unit": "short" + }, + { + "alias": "IOPS(Writes)", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": -1, + "link": false, + "linkTargetBlank": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "Value #B", + "thresholds": [ ], + "type": "number", + "unit": "short" + }, + { + "alias": "IOPS(Reads + Writes)", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": -1, + "link": false, + "linkTargetBlank": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "Value #C", + "thresholds": [ ], + "type": "number", + "unit": "short" + }, + { + "alias": "Throughput(Read)", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": false, + "linkTargetBlank": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "Value #D", + "thresholds": [ ], + "type": "number", + "unit": "Bps" + }, + { + "alias": "Throughput(Write)", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": false, + "linkTargetBlank": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "Value #E", + "thresholds": [ ], + "type": "number", + "unit": "Bps" + }, + { + "alias": "Throughput(Read + Write)", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": false, + "linkTargetBlank": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "Value #F", + "thresholds": [ ], + "type": "number", + "unit": "Bps" + }, + { + "alias": "Pod", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": true, + "linkTargetBlank": false, + "linkTooltip": "Drill down to containers", + "linkUrl": "./d/6581e46e4e5c7ba40a07646395ef7b23/k8s-resources-pod?var-datasource=$datasource&var-cluster=$cluster&var-namespace=$namespace&var-pod=$__cell", + "pattern": "pod", + "thresholds": [ ], + "type": "number", + "unit": "short" + }, + { + "alias": "", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "pattern": "/.*/", + "thresholds": [ ], + "type": "string", + "unit": "short" + } + ], + "targets": [ + { + "expr": "sum by(pod) (rate(container_fs_reads_total{container!=\"\", cluster=\"$cluster\",namespace=~\"$namespace\"}[5m]))", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "A", + "step": 10 + }, + { + "expr": "sum by(pod) (rate(container_fs_writes_total{container!=\"\", cluster=\"$cluster\",namespace=~\"$namespace\"}[5m]))", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "B", + "step": 10 + }, + { + "expr": "sum by(pod) (rate(container_fs_reads_total{container!=\"\", cluster=\"$cluster\",namespace=~\"$namespace\"}[5m]) + rate(container_fs_writes_total{container!=\"\", cluster=\"$cluster\",namespace=~\"$namespace\"}[5m]))", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "C", + "step": 10 + }, + { + "expr": "sum by(pod) (rate(container_fs_reads_bytes_total{container!=\"\", cluster=\"$cluster\",namespace=~\"$namespace\"}[5m]))", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "D", + "step": 10 + }, + { + "expr": "sum by(pod) (rate(container_fs_writes_bytes_total{container!=\"\", cluster=\"$cluster\",namespace=~\"$namespace\"}[5m]))", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "E", + "step": 10 + }, + { + "expr": "sum by(pod) (rate(container_fs_reads_bytes_total{container!=\"\", cluster=\"$cluster\",namespace=~\"$namespace\"}[5m]) + rate(container_fs_writes_bytes_total{container!=\"\", cluster=\"$cluster\",namespace=~\"$namespace\"}[5m]))", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "F", + "step": 10 + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Current Storage IO", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "transform": "table", + "type": "table", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + } + ], + "repeat": null, + "repeatIteration": null, + "repeatRowId": null, + "showTitle": true, + "title": "Storage IO - Distribution", + "titleSize": "h6" + } + ], + "schemaVersion": 14, + "style": "dark", + "tags": [ + "kubernetes" + ], + "templating": { + "list": [ + { + "current": { + "text": "default", + "value": "default" + }, + "hide": 0, + "label": null, + "name": "datasource", + "options": [ ], + "query": "prometheus", + "refresh": 1, + "regex": "", + "type": "datasource" + }, + { + "allValue": null, + "current": { + "text": "", + "value": "" + }, + "datasource": "$datasource", + "hide": 2, + "includeAll": false, + "label": null, + "multi": false, + "name": "cluster", + "options": [ ], + "query": "label_values(kube_pod_info, cluster)", + "refresh": 2, + "regex": "", + "sort": 1, + "tagValuesQuery": "", + "tags": [ ], + "tagsQuery": "", + "type": "query", + "useTags": false + }, + { + "allValue": null, + "current": { + "text": "", + "value": "" + }, + "datasource": "$datasource", + "hide": 0, + "includeAll": false, + "label": null, + "multi": false, + "name": "namespace", + "options": [ ], + "query": "label_values(kube_pod_info{cluster=\"$cluster\"}, namespace)", + "refresh": 2, + "regex": "", + "sort": 1, + "tagValuesQuery": "", + "tags": [ ], + "tagsQuery": "", + "type": "query", + "useTags": false + } + ] + }, + "time": { + "from": "now-1h", + "to": "now" + }, + "timepicker": { + "refresh_intervals": [ + "5s", + "10s", + "30s", + "1m", + "5m", + "15m", + "30m", + "1h", + "2h", + "1d" + ], + "time_options": [ + "5m", + "15m", + "1h", + "6h", + "12h", + "24h", + "2d", + "7d", + "30d" + ] + }, + "timezone": "UTC", + "title": "Kubernetes / Compute Resources / Namespace (Pods)", + "uid": "85a562078cdf77779eaa1add43ccec1e", + "version": 0 +} diff --git a/charts/kubezero-metrics/dashboards/kube-mixin/k8s-resources-node.json b/charts/kubezero-metrics/dashboards/kube-mixin/k8s-resources-node.json new file mode 100644 index 0000000..d6cfb9b --- /dev/null +++ b/charts/kubezero-metrics/dashboards/kube-mixin/k8s-resources-node.json @@ -0,0 +1,833 @@ +{ + "annotations": { + "list": [ ] + }, + "editable": true, + "gnetId": null, + "graphTooltip": 0, + "hideControls": false, + "links": [ ], + "refresh": "10s", + "rows": [ + { + "collapse": false, + "height": "250px", + "panels": [ + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 10, + "id": 1, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 0, + "links": [ ], + "nullPointMode": "null as zero", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 12, + "stack": true, + "steppedLine": false, + "targets": [ + { + "expr": "sum(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_rate{cluster=\"$cluster\", node=~\"$node\"}) by (pod)", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{pod}}", + "legendLink": null, + "step": 10 + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "CPU Usage", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + } + ], + "repeat": null, + "repeatIteration": null, + "repeatRowId": null, + "showTitle": true, + "title": "CPU Usage", + "titleSize": "h6" + }, + { + "collapse": false, + "height": "250px", + "panels": [ + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 1, + "id": 2, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [ ], + "nullPointMode": "null as zero", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 12, + "stack": false, + "steppedLine": false, + "styles": [ + { + "alias": "Time", + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "pattern": "Time", + "type": "hidden" + }, + { + "alias": "CPU Usage", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": false, + "linkTargetBlank": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "Value #A", + "thresholds": [ ], + "type": "number", + "unit": "short" + }, + { + "alias": "CPU Requests", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": false, + "linkTargetBlank": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "Value #B", + "thresholds": [ ], + "type": "number", + "unit": "short" + }, + { + "alias": "CPU Requests %", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": false, + "linkTargetBlank": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "Value #C", + "thresholds": [ ], + "type": "number", + "unit": "percentunit" + }, + { + "alias": "CPU Limits", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": false, + "linkTargetBlank": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "Value #D", + "thresholds": [ ], + "type": "number", + "unit": "short" + }, + { + "alias": "CPU Limits %", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": false, + "linkTargetBlank": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "Value #E", + "thresholds": [ ], + "type": "number", + "unit": "percentunit" + }, + { + "alias": "Pod", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": false, + "linkTargetBlank": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "pod", + "thresholds": [ ], + "type": "number", + "unit": "short" + }, + { + "alias": "", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "pattern": "/.*/", + "thresholds": [ ], + "type": "string", + "unit": "short" + } + ], + "targets": [ + { + "expr": "sum(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_rate{cluster=\"$cluster\", node=~\"$node\"}) by (pod)", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "A", + "step": 10 + }, + { + "expr": "sum(kube_pod_container_resource_requests{cluster=\"$cluster\", node=~\"$node\", resource=\"cpu\"}) by (pod)", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "B", + "step": 10 + }, + { + "expr": "sum(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_rate{cluster=\"$cluster\", node=~\"$node\"}) by (pod) / sum(kube_pod_container_resource_requests{cluster=\"$cluster\", node=~\"$node\", resource=\"cpu\"}) by (pod)", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "C", + "step": 10 + }, + { + "expr": "sum(kube_pod_container_resource_limits{cluster=\"$cluster\", node=~\"$node\", resource=\"cpu\"}) by (pod)", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "D", + "step": 10 + }, + { + "expr": "sum(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_rate{cluster=\"$cluster\", node=~\"$node\"}) by (pod) / sum(kube_pod_container_resource_limits{cluster=\"$cluster\", node=~\"$node\", resource=\"cpu\"}) by (pod)", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "E", + "step": 10 + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "CPU Quota", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "transform": "table", + "type": "table", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + } + ], + "repeat": null, + "repeatIteration": null, + "repeatRowId": null, + "showTitle": true, + "title": "CPU Quota", + "titleSize": "h6" + }, + { + "collapse": false, + "height": "250px", + "panels": [ + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 10, + "id": 3, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 0, + "links": [ ], + "nullPointMode": "null as zero", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 12, + "stack": true, + "steppedLine": false, + "targets": [ + { + "expr": "sum(node_namespace_pod_container:container_memory_working_set_bytes{cluster=\"$cluster\", node=~\"$node\", container!=\"\"}) by (pod)", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{pod}}", + "legendLink": null, + "step": 10 + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Memory Usage (w/o cache)", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "bytes", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + } + ], + "repeat": null, + "repeatIteration": null, + "repeatRowId": null, + "showTitle": true, + "title": "Memory Usage", + "titleSize": "h6" + }, + { + "collapse": false, + "height": "250px", + "panels": [ + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 1, + "id": 4, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [ ], + "nullPointMode": "null as zero", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 12, + "stack": false, + "steppedLine": false, + "styles": [ + { + "alias": "Time", + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "pattern": "Time", + "type": "hidden" + }, + { + "alias": "Memory Usage", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": false, + "linkTargetBlank": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "Value #A", + "thresholds": [ ], + "type": "number", + "unit": "bytes" + }, + { + "alias": "Memory Requests", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": false, + "linkTargetBlank": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "Value #B", + "thresholds": [ ], + "type": "number", + "unit": "bytes" + }, + { + "alias": "Memory Requests %", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": false, + "linkTargetBlank": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "Value #C", + "thresholds": [ ], + "type": "number", + "unit": "percentunit" + }, + { + "alias": "Memory Limits", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": false, + "linkTargetBlank": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "Value #D", + "thresholds": [ ], + "type": "number", + "unit": "bytes" + }, + { + "alias": "Memory Limits %", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": false, + "linkTargetBlank": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "Value #E", + "thresholds": [ ], + "type": "number", + "unit": "percentunit" + }, + { + "alias": "Memory Usage (RSS)", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": false, + "linkTargetBlank": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "Value #F", + "thresholds": [ ], + "type": "number", + "unit": "bytes" + }, + { + "alias": "Memory Usage (Cache)", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": false, + "linkTargetBlank": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "Value #G", + "thresholds": [ ], + "type": "number", + "unit": "bytes" + }, + { + "alias": "Memory Usage (Swap)", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": false, + "linkTargetBlank": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "Value #H", + "thresholds": [ ], + "type": "number", + "unit": "bytes" + }, + { + "alias": "Pod", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": false, + "linkTargetBlank": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "pod", + "thresholds": [ ], + "type": "number", + "unit": "short" + }, + { + "alias": "", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "pattern": "/.*/", + "thresholds": [ ], + "type": "string", + "unit": "short" + } + ], + "targets": [ + { + "expr": "sum(node_namespace_pod_container:container_memory_working_set_bytes{cluster=\"$cluster\", node=~\"$node\",container!=\"\"}) by (pod)", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "A", + "step": 10 + }, + { + "expr": "sum(kube_pod_container_resource_requests{cluster=\"$cluster\", node=~\"$node\", resource=\"memory\"}) by (pod)", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "B", + "step": 10 + }, + { + "expr": "sum(node_namespace_pod_container:container_memory_working_set_bytes{cluster=\"$cluster\", node=~\"$node\",container!=\"\"}) by (pod) / sum(kube_pod_container_resource_requests{cluster=\"$cluster\", node=~\"$node\", resource=\"memory\"}) by (pod)", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "C", + "step": 10 + }, + { + "expr": "sum(kube_pod_container_resource_limits{cluster=\"$cluster\", node=~\"$node\", resource=\"memory\"}) by (pod)", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "D", + "step": 10 + }, + { + "expr": "sum(node_namespace_pod_container:container_memory_working_set_bytes{cluster=\"$cluster\", node=~\"$node\",container!=\"\"}) by (pod) / sum(kube_pod_container_resource_limits{cluster=\"$cluster\", node=~\"$node\", resource=\"memory\"}) by (pod)", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "E", + "step": 10 + }, + { + "expr": "sum(node_namespace_pod_container:container_memory_rss{cluster=\"$cluster\", node=~\"$node\",container!=\"\"}) by (pod)", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "F", + "step": 10 + }, + { + "expr": "sum(node_namespace_pod_container:container_memory_cache{cluster=\"$cluster\", node=~\"$node\",container!=\"\"}) by (pod)", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "G", + "step": 10 + }, + { + "expr": "sum(node_namespace_pod_container:container_memory_swap{cluster=\"$cluster\", node=~\"$node\",container!=\"\"}) by (pod)", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "H", + "step": 10 + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Memory Quota", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "transform": "table", + "type": "table", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + } + ], + "repeat": null, + "repeatIteration": null, + "repeatRowId": null, + "showTitle": true, + "title": "Memory Quota", + "titleSize": "h6" + } + ], + "schemaVersion": 14, + "style": "dark", + "tags": [ + "kubernetes" + ], + "templating": { + "list": [ + { + "current": { + "text": "default", + "value": "default" + }, + "hide": 0, + "label": null, + "name": "datasource", + "options": [ ], + "query": "prometheus", + "refresh": 1, + "regex": "", + "type": "datasource" + }, + { + "allValue": null, + "current": { + "text": "", + "value": "" + }, + "datasource": "$datasource", + "hide": 2, + "includeAll": false, + "label": null, + "multi": false, + "name": "cluster", + "options": [ ], + "query": "label_values(kube_pod_info, cluster)", + "refresh": 2, + "regex": "", + "sort": 1, + "tagValuesQuery": "", + "tags": [ ], + "tagsQuery": "", + "type": "query", + "useTags": false + }, + { + "allValue": null, + "current": { + "text": "", + "value": "" + }, + "datasource": "$datasource", + "hide": 0, + "includeAll": false, + "label": null, + "multi": true, + "name": "node", + "options": [ ], + "query": "label_values(kube_pod_info{cluster=\"$cluster\"}, node)", + "refresh": 2, + "regex": "", + "sort": 1, + "tagValuesQuery": "", + "tags": [ ], + "tagsQuery": "", + "type": "query", + "useTags": false + } + ] + }, + "time": { + "from": "now-1h", + "to": "now" + }, + "timepicker": { + "refresh_intervals": [ + "5s", + "10s", + "30s", + "1m", + "5m", + "15m", + "30m", + "1h", + "2h", + "1d" + ], + "time_options": [ + "5m", + "15m", + "1h", + "6h", + "12h", + "24h", + "2d", + "7d", + "30d" + ] + }, + "timezone": "UTC", + "title": "Kubernetes / Compute Resources / Node (Pods)", + "uid": "200ac8fdbfbb74b39aff88118e4d1c2c", + "version": 0 +} diff --git a/charts/kubezero-metrics/dashboards/kube-mixin/k8s-resources-pod.json b/charts/kubezero-metrics/dashboards/kube-mixin/k8s-resources-pod.json new file mode 100644 index 0000000..693764f --- /dev/null +++ b/charts/kubezero-metrics/dashboards/kube-mixin/k8s-resources-pod.json @@ -0,0 +1,2132 @@ +{ + "annotations": { + "list": [ ] + }, + "editable": true, + "gnetId": null, + "graphTooltip": 0, + "hideControls": false, + "links": [ ], + "refresh": "10s", + "rows": [ + { + "collapse": false, + "height": "250px", + "panels": [ + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 10, + "id": 1, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 0, + "links": [ ], + "nullPointMode": "null as zero", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ + { + "alias": "requests", + "color": "#F2495C", + "fill": 0, + "hideTooltip": true, + "legend": true, + "linewidth": 2, + "stack": false + }, + { + "alias": "limits", + "color": "#FF9830", + "fill": 0, + "hideTooltip": true, + "legend": true, + "linewidth": 2, + "stack": false + } + ], + "spaceLength": 10, + "span": 12, + "stack": true, + "steppedLine": false, + "targets": [ + { + "expr": "sum(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_rate{namespace=\"$namespace\", pod=\"$pod\", cluster=\"$cluster\"}) by (container)", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{container}}", + "legendLink": null, + "step": 10 + }, + { + "expr": "sum(\n kube_pod_container_resource_requests{cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\", resource=\"cpu\"}\n)\n", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "requests", + "legendLink": null, + "step": 10 + }, + { + "expr": "sum(\n kube_pod_container_resource_limits{cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\", resource=\"cpu\"}\n)\n", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "limits", + "legendLink": null, + "step": 10 + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "CPU Usage", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + } + ], + "repeat": null, + "repeatIteration": null, + "repeatRowId": null, + "showTitle": true, + "title": "CPU Usage", + "titleSize": "h6" + }, + { + "collapse": false, + "height": "250px", + "panels": [ + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 10, + "id": 2, + "legend": { + "avg": false, + "current": true, + "max": true, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 0, + "links": [ ], + "nullPointMode": "null as zero", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 12, + "stack": true, + "steppedLine": false, + "targets": [ + { + "expr": "sum(increase(container_cpu_cfs_throttled_periods_total{namespace=\"$namespace\", pod=\"$pod\", container!=\"\", cluster=\"$cluster\"}[5m])) by (container) /sum(increase(container_cpu_cfs_periods_total{namespace=\"$namespace\", pod=\"$pod\", container!=\"\", cluster=\"$cluster\"}[5m])) by (container)", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{container}}", + "legendLink": null, + "step": 10 + } + ], + "thresholds": [ + { + "colorMode": "critical", + "fill": true, + "line": true, + "op": "gt", + "value": 0.25, + "yaxis": "left" + } + ], + "timeFrom": null, + "timeShift": null, + "title": "CPU Throttling", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "percentunit", + "label": null, + "logBase": 1, + "max": 1, + "min": 0, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + } + ], + "repeat": null, + "repeatIteration": null, + "repeatRowId": null, + "showTitle": true, + "title": "CPU Throttling", + "titleSize": "h6" + }, + { + "collapse": false, + "height": "250px", + "panels": [ + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 1, + "id": 3, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [ ], + "nullPointMode": "null as zero", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 12, + "stack": false, + "steppedLine": false, + "styles": [ + { + "alias": "Time", + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "pattern": "Time", + "type": "hidden" + }, + { + "alias": "CPU Usage", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": false, + "linkTargetBlank": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "Value #A", + "thresholds": [ ], + "type": "number", + "unit": "short" + }, + { + "alias": "CPU Requests", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": false, + "linkTargetBlank": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "Value #B", + "thresholds": [ ], + "type": "number", + "unit": "short" + }, + { + "alias": "CPU Requests %", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": false, + "linkTargetBlank": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "Value #C", + "thresholds": [ ], + "type": "number", + "unit": "percentunit" + }, + { + "alias": "CPU Limits", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": false, + "linkTargetBlank": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "Value #D", + "thresholds": [ ], + "type": "number", + "unit": "short" + }, + { + "alias": "CPU Limits %", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": false, + "linkTargetBlank": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "Value #E", + "thresholds": [ ], + "type": "number", + "unit": "percentunit" + }, + { + "alias": "Container", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": false, + "linkTargetBlank": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "container", + "thresholds": [ ], + "type": "number", + "unit": "short" + }, + { + "alias": "", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "pattern": "/.*/", + "thresholds": [ ], + "type": "string", + "unit": "short" + } + ], + "targets": [ + { + "expr": "sum(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_rate{cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\"}) by (container)", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "A", + "step": 10 + }, + { + "expr": "sum(kube_pod_container_resource_requests{cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\", resource=\"cpu\"}) by (container)", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "B", + "step": 10 + }, + { + "expr": "sum(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_rate{cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\"}) by (container) / sum(kube_pod_container_resource_requests{cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\", resource=\"cpu\"}) by (container)", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "C", + "step": 10 + }, + { + "expr": "sum(kube_pod_container_resource_limits{cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\", resource=\"cpu\"}) by (container)", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "D", + "step": 10 + }, + { + "expr": "sum(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_rate{cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\"}) by (container) / sum(kube_pod_container_resource_limits{cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\", resource=\"cpu\"}) by (container)", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "E", + "step": 10 + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "CPU Quota", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "transform": "table", + "type": "table", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + } + ], + "repeat": null, + "repeatIteration": null, + "repeatRowId": null, + "showTitle": true, + "title": "CPU Quota", + "titleSize": "h6" + }, + { + "collapse": false, + "height": "250px", + "panels": [ + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 10, + "id": 4, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 0, + "links": [ ], + "nullPointMode": "null as zero", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ + { + "alias": "requests", + "color": "#F2495C", + "dashes": true, + "fill": 0, + "hideTooltip": true, + "legend": true, + "linewidth": 2, + "stack": false + }, + { + "alias": "limits", + "color": "#FF9830", + "dashes": true, + "fill": 0, + "hideTooltip": true, + "legend": true, + "linewidth": 2, + "stack": false + } + ], + "spaceLength": 10, + "span": 12, + "stack": true, + "steppedLine": false, + "targets": [ + { + "expr": "sum(container_memory_working_set_bytes{cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\", container!=\"\", image!=\"\"}) by (container)", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{container}}", + "legendLink": null, + "step": 10 + }, + { + "expr": "sum(\n kube_pod_container_resource_requests{cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\", resource=\"memory\"}\n)\n", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "requests", + "legendLink": null, + "step": 10 + }, + { + "expr": "sum(\n kube_pod_container_resource_limits{cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\", resource=\"memory\"}\n)\n", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "limits", + "legendLink": null, + "step": 10 + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Memory Usage (WSS)", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "bytes", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + } + ], + "repeat": null, + "repeatIteration": null, + "repeatRowId": null, + "showTitle": true, + "title": "Memory Usage", + "titleSize": "h6" + }, + { + "collapse": false, + "height": "250px", + "panels": [ + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 1, + "id": 5, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [ ], + "nullPointMode": "null as zero", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 12, + "stack": false, + "steppedLine": false, + "styles": [ + { + "alias": "Time", + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "pattern": "Time", + "type": "hidden" + }, + { + "alias": "Memory Usage (WSS)", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": false, + "linkTargetBlank": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "Value #A", + "thresholds": [ ], + "type": "number", + "unit": "bytes" + }, + { + "alias": "Memory Requests", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": false, + "linkTargetBlank": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "Value #B", + "thresholds": [ ], + "type": "number", + "unit": "bytes" + }, + { + "alias": "Memory Requests %", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": false, + "linkTargetBlank": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "Value #C", + "thresholds": [ ], + "type": "number", + "unit": "percentunit" + }, + { + "alias": "Memory Limits", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": false, + "linkTargetBlank": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "Value #D", + "thresholds": [ ], + "type": "number", + "unit": "bytes" + }, + { + "alias": "Memory Limits %", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": false, + "linkTargetBlank": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "Value #E", + "thresholds": [ ], + "type": "number", + "unit": "percentunit" + }, + { + "alias": "Memory Usage (RSS)", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": false, + "linkTargetBlank": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "Value #F", + "thresholds": [ ], + "type": "number", + "unit": "bytes" + }, + { + "alias": "Memory Usage (Cache)", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": false, + "linkTargetBlank": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "Value #G", + "thresholds": [ ], + "type": "number", + "unit": "bytes" + }, + { + "alias": "Memory Usage (Swap)", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": false, + "linkTargetBlank": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "Value #H", + "thresholds": [ ], + "type": "number", + "unit": "bytes" + }, + { + "alias": "Container", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": false, + "linkTargetBlank": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "container", + "thresholds": [ ], + "type": "number", + "unit": "short" + }, + { + "alias": "", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "pattern": "/.*/", + "thresholds": [ ], + "type": "string", + "unit": "short" + } + ], + "targets": [ + { + "expr": "sum(container_memory_working_set_bytes{cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\", container!=\"\", image!=\"\"}) by (container)", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "A", + "step": 10 + }, + { + "expr": "sum(kube_pod_container_resource_requests{cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\", resource=\"memory\"}) by (container)", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "B", + "step": 10 + }, + { + "expr": "sum(container_memory_working_set_bytes{cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\", image!=\"\"}) by (container) / sum(kube_pod_container_resource_requests{cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\", resource=\"memory\"}) by (container)", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "C", + "step": 10 + }, + { + "expr": "sum(kube_pod_container_resource_limits{cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\", resource=\"memory\"}) by (container)", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "D", + "step": 10 + }, + { + "expr": "sum(container_memory_working_set_bytes{cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\", container!=\"\", image!=\"\"}) by (container) / sum(kube_pod_container_resource_limits{cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\", resource=\"memory\"}) by (container)", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "E", + "step": 10 + }, + { + "expr": "sum(container_memory_rss{cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\", container != \"\", container != \"POD\"}) by (container)", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "F", + "step": 10 + }, + { + "expr": "sum(container_memory_cache{cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\", container != \"\", container != \"POD\"}) by (container)", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "G", + "step": 10 + }, + { + "expr": "sum(container_memory_swap{cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\", container != \"\", container != \"POD\"}) by (container)", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "H", + "step": 10 + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Memory Quota", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "transform": "table", + "type": "table", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + } + ], + "repeat": null, + "repeatIteration": null, + "repeatRowId": null, + "showTitle": true, + "title": "Memory Quota", + "titleSize": "h6" + }, + { + "collapse": false, + "height": "250px", + "panels": [ + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 10, + "id": 6, + "interval": "1m", + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 0, + "links": [ ], + "nullPointMode": "null as zero", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 6, + "stack": true, + "steppedLine": false, + "targets": [ + { + "expr": "sum(irate(container_network_receive_bytes_total{cluster=\"$cluster\", namespace=~\"$namespace\", pod=~\"$pod\"}[$__rate_interval])) by (pod)", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{pod}}", + "legendLink": null, + "step": 10 + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Receive Bandwidth", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "Bps", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 10, + "id": 7, + "interval": "1m", + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 0, + "links": [ ], + "nullPointMode": "null as zero", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 6, + "stack": true, + "steppedLine": false, + "targets": [ + { + "expr": "sum(irate(container_network_transmit_bytes_total{cluster=\"$cluster\", namespace=~\"$namespace\", pod=~\"$pod\"}[$__rate_interval])) by (pod)", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{pod}}", + "legendLink": null, + "step": 10 + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Transmit Bandwidth", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "Bps", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + } + ], + "repeat": null, + "repeatIteration": null, + "repeatRowId": null, + "showTitle": true, + "title": "Bandwidth", + "titleSize": "h6" + }, + { + "collapse": false, + "height": "250px", + "panels": [ + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 10, + "id": 8, + "interval": "1m", + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 0, + "links": [ ], + "nullPointMode": "null as zero", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 6, + "stack": true, + "steppedLine": false, + "targets": [ + { + "expr": "sum(irate(container_network_receive_packets_total{cluster=\"$cluster\", namespace=~\"$namespace\", pod=~\"$pod\"}[$__rate_interval])) by (pod)", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{pod}}", + "legendLink": null, + "step": 10 + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Rate of Received Packets", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "Bps", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 10, + "id": 9, + "interval": "1m", + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 0, + "links": [ ], + "nullPointMode": "null as zero", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 6, + "stack": true, + "steppedLine": false, + "targets": [ + { + "expr": "sum(irate(container_network_transmit_packets_total{cluster=\"$cluster\", namespace=~\"$namespace\", pod=~\"$pod\"}[$__rate_interval])) by (pod)", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{pod}}", + "legendLink": null, + "step": 10 + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Rate of Transmitted Packets", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "Bps", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + } + ], + "repeat": null, + "repeatIteration": null, + "repeatRowId": null, + "showTitle": true, + "title": "Rate of Packets", + "titleSize": "h6" + }, + { + "collapse": false, + "height": "250px", + "panels": [ + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 10, + "id": 10, + "interval": "1m", + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 0, + "links": [ ], + "nullPointMode": "null as zero", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 6, + "stack": true, + "steppedLine": false, + "targets": [ + { + "expr": "sum(irate(container_network_receive_packets_dropped_total{cluster=\"$cluster\", namespace=~\"$namespace\", pod=~\"$pod\"}[$__rate_interval])) by (pod)", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{pod}}", + "legendLink": null, + "step": 10 + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Rate of Received Packets Dropped", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "Bps", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 10, + "id": 11, + "interval": "1m", + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 0, + "links": [ ], + "nullPointMode": "null as zero", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 6, + "stack": true, + "steppedLine": false, + "targets": [ + { + "expr": "sum(irate(container_network_transmit_packets_dropped_total{cluster=\"$cluster\", namespace=~\"$namespace\", pod=~\"$pod\"}[$__rate_interval])) by (pod)", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{pod}}", + "legendLink": null, + "step": 10 + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Rate of Transmitted Packets Dropped", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "Bps", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + } + ], + "repeat": null, + "repeatIteration": null, + "repeatRowId": null, + "showTitle": true, + "title": "Rate of Packets Dropped", + "titleSize": "h6" + }, + { + "collapse": false, + "height": "250px", + "panels": [ + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "decimals": -1, + "fill": 10, + "id": 12, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 0, + "links": [ ], + "nullPointMode": "null as zero", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 6, + "stack": true, + "steppedLine": false, + "targets": [ + { + "expr": "ceil(sum by(pod) (rate(container_fs_reads_total{container!=\"\", cluster=\"$cluster\",namespace=~\"$namespace\", pod=~\"$pod\"}[5m])))", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Reads", + "legendLink": null, + "step": 10 + }, + { + "expr": "ceil(sum by(pod) (rate(container_fs_writes_total{container!=\"\", cluster=\"$cluster\",namespace=~\"$namespace\", pod=~\"$pod\"}[5m])))", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Writes", + "legendLink": null, + "step": 10 + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "IOPS", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 10, + "id": 13, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 0, + "links": [ ], + "nullPointMode": "null as zero", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 6, + "stack": true, + "steppedLine": false, + "targets": [ + { + "expr": "sum by(pod) (rate(container_fs_reads_bytes_total{container!=\"\", cluster=\"$cluster\",namespace=~\"$namespace\", pod=~\"$pod\"}[5m]))", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Reads", + "legendLink": null, + "step": 10 + }, + { + "expr": "sum by(pod) (rate(container_fs_writes_bytes_total{container!=\"\", cluster=\"$cluster\",namespace=~\"$namespace\", pod=~\"$pod\"}[5m]))", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Writes", + "legendLink": null, + "step": 10 + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "ThroughPut", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "Bps", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + } + ], + "repeat": null, + "repeatIteration": null, + "repeatRowId": null, + "showTitle": true, + "title": "Storage IO - Distribution(Pod - Read & Writes)", + "titleSize": "h6" + }, + { + "collapse": false, + "height": "250px", + "panels": [ + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "decimals": -1, + "fill": 10, + "id": 14, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 0, + "links": [ ], + "nullPointMode": "null as zero", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 6, + "stack": true, + "steppedLine": false, + "targets": [ + { + "expr": "ceil(sum by(container) (rate(container_fs_reads_total{container!=\"\", cluster=\"$cluster\",namespace=~\"$namespace\", pod=\"$pod\"}[5m]) + rate(container_fs_writes_total{container!=\"\", cluster=\"$cluster\",namespace=~\"$namespace\", pod=\"$pod\"}[5m])))", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{pod}}", + "legendLink": null, + "step": 10 + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "IOPS(Reads+Writes)", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 10, + "id": 15, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 0, + "links": [ ], + "nullPointMode": "null as zero", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 6, + "stack": true, + "steppedLine": false, + "targets": [ + { + "expr": "sum by(container) (rate(container_fs_reads_bytes_total{container!=\"\", cluster=\"$cluster\",namespace=~\"$namespace\", pod=\"$pod\"}[5m]) + rate(container_fs_writes_bytes_total{container!=\"\", cluster=\"$cluster\",namespace=~\"$namespace\", pod=\"$pod\"}[5m]))", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{pod}}", + "legendLink": null, + "step": 10 + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "ThroughPut(Read+Write)", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "Bps", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + } + ], + "repeat": null, + "repeatIteration": null, + "repeatRowId": null, + "showTitle": true, + "title": "Storage IO - Distribution(Containers)", + "titleSize": "h6" + }, + { + "collapse": false, + "height": "250px", + "panels": [ + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 1, + "id": 16, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [ ], + "nullPointMode": "null as zero", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ ], + "sort": { + "col": 4, + "desc": true + }, + "spaceLength": 10, + "span": 12, + "stack": false, + "steppedLine": false, + "styles": [ + { + "alias": "Time", + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "pattern": "Time", + "type": "hidden" + }, + { + "alias": "IOPS(Reads)", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": -1, + "link": false, + "linkTargetBlank": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "Value #A", + "thresholds": [ ], + "type": "number", + "unit": "short" + }, + { + "alias": "IOPS(Writes)", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": -1, + "link": false, + "linkTargetBlank": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "Value #B", + "thresholds": [ ], + "type": "number", + "unit": "short" + }, + { + "alias": "IOPS(Reads + Writes)", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": -1, + "link": false, + "linkTargetBlank": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "Value #C", + "thresholds": [ ], + "type": "number", + "unit": "short" + }, + { + "alias": "Throughput(Read)", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": false, + "linkTargetBlank": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "Value #D", + "thresholds": [ ], + "type": "number", + "unit": "Bps" + }, + { + "alias": "Throughput(Write)", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": false, + "linkTargetBlank": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "Value #E", + "thresholds": [ ], + "type": "number", + "unit": "Bps" + }, + { + "alias": "Throughput(Read + Write)", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": false, + "linkTargetBlank": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "Value #F", + "thresholds": [ ], + "type": "number", + "unit": "Bps" + }, + { + "alias": "Pod", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": true, + "linkTargetBlank": false, + "linkTooltip": "Drill down to pods", + "linkUrl": "./d/6581e46e4e5c7ba40a07646395ef7b23/k8s-resources-pod?var-datasource=$datasource&var-cluster=$cluster&var-namespace=$namespace&var-pod=$__cell", + "pattern": "pod", + "thresholds": [ ], + "type": "number", + "unit": "short" + }, + { + "alias": "", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "pattern": "/.*/", + "thresholds": [ ], + "type": "string", + "unit": "short" + } + ], + "targets": [ + { + "expr": "sum by(container) (rate(container_fs_reads_total{container!=\"\", cluster=\"$cluster\",namespace=~\"$namespace\", pod=\"$pod\"}[5m]))", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "A", + "step": 10 + }, + { + "expr": "sum by(container) (rate(container_fs_writes_total{container!=\"\", cluster=\"$cluster\",namespace=~\"$namespace\", pod=\"$pod\"}[5m]))", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "B", + "step": 10 + }, + { + "expr": "sum by(container) (rate(container_fs_reads_total{container!=\"\", cluster=\"$cluster\",namespace=~\"$namespace\", pod=\"$pod\"}[5m]) + rate(container_fs_writes_total{container!=\"\", cluster=\"$cluster\",namespace=~\"$namespace\", pod=\"$pod\"}[5m]))", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "C", + "step": 10 + }, + { + "expr": "sum by(container) (rate(container_fs_reads_bytes_total{container!=\"\", cluster=\"$cluster\",namespace=~\"$namespace\", pod=\"$pod\"}[5m]))", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "D", + "step": 10 + }, + { + "expr": "sum by(container) (rate(container_fs_writes_bytes_total{container!=\"\", cluster=\"$cluster\",namespace=~\"$namespace\", pod=\"$pod\"}[5m]))", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "E", + "step": 10 + }, + { + "expr": "sum by(container) (rate(container_fs_reads_bytes_total{container!=\"\", cluster=\"$cluster\",namespace=~\"$namespace\", pod=\"$pod\"}[5m]) + rate(container_fs_writes_bytes_total{container!=\"\", cluster=\"$cluster\",namespace=~\"$namespace\", pod=\"$pod\"}[5m]))", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "F", + "step": 10 + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Current Storage IO", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "transform": "table", + "type": "table", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + } + ], + "repeat": null, + "repeatIteration": null, + "repeatRowId": null, + "showTitle": true, + "title": "Storage IO - Distribution", + "titleSize": "h6" + } + ], + "schemaVersion": 14, + "style": "dark", + "tags": [ + "kubernetes" + ], + "templating": { + "list": [ + { + "current": { + "text": "default", + "value": "default" + }, + "hide": 0, + "label": null, + "name": "datasource", + "options": [ ], + "query": "prometheus", + "refresh": 1, + "regex": "", + "type": "datasource" + }, + { + "allValue": null, + "current": { + "text": "", + "value": "" + }, + "datasource": "$datasource", + "hide": 2, + "includeAll": false, + "label": null, + "multi": false, + "name": "cluster", + "options": [ ], + "query": "label_values(kube_pod_info, cluster)", + "refresh": 2, + "regex": "", + "sort": 1, + "tagValuesQuery": "", + "tags": [ ], + "tagsQuery": "", + "type": "query", + "useTags": false + }, + { + "allValue": null, + "current": { + "text": "", + "value": "" + }, + "datasource": "$datasource", + "hide": 0, + "includeAll": false, + "label": null, + "multi": false, + "name": "namespace", + "options": [ ], + "query": "label_values(kube_pod_info{cluster=\"$cluster\"}, namespace)", + "refresh": 2, + "regex": "", + "sort": 1, + "tagValuesQuery": "", + "tags": [ ], + "tagsQuery": "", + "type": "query", + "useTags": false + }, + { + "allValue": null, + "current": { + "text": "", + "value": "" + }, + "datasource": "$datasource", + "hide": 0, + "includeAll": false, + "label": null, + "multi": false, + "name": "pod", + "options": [ ], + "query": "label_values(kube_pod_info{cluster=\"$cluster\", namespace=\"$namespace\"}, pod)", + "refresh": 2, + "regex": "", + "sort": 1, + "tagValuesQuery": "", + "tags": [ ], + "tagsQuery": "", + "type": "query", + "useTags": false + } + ] + }, + "time": { + "from": "now-1h", + "to": "now" + }, + "timepicker": { + "refresh_intervals": [ + "5s", + "10s", + "30s", + "1m", + "5m", + "15m", + "30m", + "1h", + "2h", + "1d" + ], + "time_options": [ + "5m", + "15m", + "1h", + "6h", + "12h", + "24h", + "2d", + "7d", + "30d" + ] + }, + "timezone": "UTC", + "title": "Kubernetes / Compute Resources / Pod", + "uid": "6581e46e4e5c7ba40a07646395ef7b23", + "version": 0 +} diff --git a/charts/kubezero-metrics/dashboards/kube-mixin/k8s-resources-workload.json b/charts/kubezero-metrics/dashboards/kube-mixin/k8s-resources-workload.json new file mode 100644 index 0000000..cbbc44f --- /dev/null +++ b/charts/kubezero-metrics/dashboards/kube-mixin/k8s-resources-workload.json @@ -0,0 +1,1723 @@ +{ + "annotations": { + "list": [ ] + }, + "editable": true, + "gnetId": null, + "graphTooltip": 0, + "hideControls": false, + "links": [ ], + "refresh": "10s", + "rows": [ + { + "collapse": false, + "height": "250px", + "panels": [ + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 10, + "id": 1, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 0, + "links": [ ], + "nullPointMode": "null as zero", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 12, + "stack": true, + "steppedLine": false, + "targets": [ + { + "expr": "sum(\n node_namespace_pod_container:container_cpu_usage_seconds_total:sum_rate{cluster=\"$cluster\", namespace=\"$namespace\"}\n * on(namespace,pod)\n group_left(workload, workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload=\"$workload\", workload_type=\"$type\"}\n) by (pod)\n", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{pod}}", + "legendLink": null, + "step": 10 + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "CPU Usage", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + } + ], + "repeat": null, + "repeatIteration": null, + "repeatRowId": null, + "showTitle": true, + "title": "CPU Usage", + "titleSize": "h6" + }, + { + "collapse": false, + "height": "250px", + "panels": [ + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 1, + "id": 2, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [ ], + "nullPointMode": "null as zero", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 12, + "stack": false, + "steppedLine": false, + "styles": [ + { + "alias": "Time", + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "pattern": "Time", + "type": "hidden" + }, + { + "alias": "CPU Usage", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": false, + "linkTargetBlank": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "Value #A", + "thresholds": [ ], + "type": "number", + "unit": "short" + }, + { + "alias": "CPU Requests", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": false, + "linkTargetBlank": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "Value #B", + "thresholds": [ ], + "type": "number", + "unit": "short" + }, + { + "alias": "CPU Requests %", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": false, + "linkTargetBlank": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "Value #C", + "thresholds": [ ], + "type": "number", + "unit": "percentunit" + }, + { + "alias": "CPU Limits", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": false, + "linkTargetBlank": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "Value #D", + "thresholds": [ ], + "type": "number", + "unit": "short" + }, + { + "alias": "CPU Limits %", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": false, + "linkTargetBlank": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "Value #E", + "thresholds": [ ], + "type": "number", + "unit": "percentunit" + }, + { + "alias": "Pod", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": true, + "linkTargetBlank": false, + "linkTooltip": "Drill down", + "linkUrl": "./d/6581e46e4e5c7ba40a07646395ef7b23/k8s-resources-pod?var-datasource=$datasource&var-cluster=$cluster&var-namespace=$namespace&var-pod=$__cell", + "pattern": "pod", + "thresholds": [ ], + "type": "number", + "unit": "short" + }, + { + "alias": "", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "pattern": "/.*/", + "thresholds": [ ], + "type": "string", + "unit": "short" + } + ], + "targets": [ + { + "expr": "sum(\n node_namespace_pod_container:container_cpu_usage_seconds_total:sum_rate{cluster=\"$cluster\", namespace=\"$namespace\"}\n * on(namespace,pod)\n group_left(workload, workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload=\"$workload\", workload_type=\"$type\"}\n) by (pod)\n", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "A", + "step": 10 + }, + { + "expr": "sum(\n kube_pod_container_resource_requests{cluster=\"$cluster\", namespace=\"$namespace\", resource=\"cpu\"}\n * on(namespace,pod)\n group_left(workload, workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload=\"$workload\", workload_type=\"$type\"}\n) by (pod)\n", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "B", + "step": 10 + }, + { + "expr": "sum(\n node_namespace_pod_container:container_cpu_usage_seconds_total:sum_rate{cluster=\"$cluster\", namespace=\"$namespace\"}\n * on(namespace,pod)\n group_left(workload, workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload=\"$workload\", workload_type=\"$type\"}\n) by (pod)\n/sum(\n kube_pod_container_resource_requests{cluster=\"$cluster\", namespace=\"$namespace\", resource=\"cpu\"}\n * on(namespace,pod)\n group_left(workload, workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload=\"$workload\", workload_type=\"$type\"}\n) by (pod)\n", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "C", + "step": 10 + }, + { + "expr": "sum(\n kube_pod_container_resource_limits{cluster=\"$cluster\", namespace=\"$namespace\", resource=\"cpu\"}\n * on(namespace,pod)\n group_left(workload, workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload=\"$workload\", workload_type=\"$type\"}\n) by (pod)\n", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "D", + "step": 10 + }, + { + "expr": "sum(\n node_namespace_pod_container:container_cpu_usage_seconds_total:sum_rate{cluster=\"$cluster\", namespace=\"$namespace\"}\n * on(namespace,pod)\n group_left(workload, workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload=\"$workload\", workload_type=\"$type\"}\n) by (pod)\n/sum(\n kube_pod_container_resource_limits{cluster=\"$cluster\", namespace=\"$namespace\", resource=\"cpu\"}\n * on(namespace,pod)\n group_left(workload, workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload=\"$workload\", workload_type=\"$type\"}\n) by (pod)\n", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "E", + "step": 10 + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "CPU Quota", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "transform": "table", + "type": "table", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + } + ], + "repeat": null, + "repeatIteration": null, + "repeatRowId": null, + "showTitle": true, + "title": "CPU Quota", + "titleSize": "h6" + }, + { + "collapse": false, + "height": "250px", + "panels": [ + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 10, + "id": 3, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 0, + "links": [ ], + "nullPointMode": "null as zero", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 12, + "stack": true, + "steppedLine": false, + "targets": [ + { + "expr": "sum(\n container_memory_working_set_bytes{cluster=\"$cluster\", namespace=\"$namespace\", container!=\"\", image!=\"\"}\n * on(namespace,pod)\n group_left(workload, workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload=\"$workload\", workload_type=\"$type\"}\n) by (pod)\n", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{pod}}", + "legendLink": null, + "step": 10 + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Memory Usage", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "bytes", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + } + ], + "repeat": null, + "repeatIteration": null, + "repeatRowId": null, + "showTitle": true, + "title": "Memory Usage", + "titleSize": "h6" + }, + { + "collapse": false, + "height": "250px", + "panels": [ + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 1, + "id": 4, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [ ], + "nullPointMode": "null as zero", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 12, + "stack": false, + "steppedLine": false, + "styles": [ + { + "alias": "Time", + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "pattern": "Time", + "type": "hidden" + }, + { + "alias": "Memory Usage", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": false, + "linkTargetBlank": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "Value #A", + "thresholds": [ ], + "type": "number", + "unit": "bytes" + }, + { + "alias": "Memory Requests", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": false, + "linkTargetBlank": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "Value #B", + "thresholds": [ ], + "type": "number", + "unit": "bytes" + }, + { + "alias": "Memory Requests %", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": false, + "linkTargetBlank": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "Value #C", + "thresholds": [ ], + "type": "number", + "unit": "percentunit" + }, + { + "alias": "Memory Limits", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": false, + "linkTargetBlank": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "Value #D", + "thresholds": [ ], + "type": "number", + "unit": "bytes" + }, + { + "alias": "Memory Limits %", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": false, + "linkTargetBlank": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "Value #E", + "thresholds": [ ], + "type": "number", + "unit": "percentunit" + }, + { + "alias": "Pod", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": true, + "linkTargetBlank": false, + "linkTooltip": "Drill down", + "linkUrl": "./d/6581e46e4e5c7ba40a07646395ef7b23/k8s-resources-pod?var-datasource=$datasource&var-cluster=$cluster&var-namespace=$namespace&var-pod=$__cell", + "pattern": "pod", + "thresholds": [ ], + "type": "number", + "unit": "short" + }, + { + "alias": "", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "pattern": "/.*/", + "thresholds": [ ], + "type": "string", + "unit": "short" + } + ], + "targets": [ + { + "expr": "sum(\n container_memory_working_set_bytes{cluster=\"$cluster\", namespace=\"$namespace\", container!=\"\", image!=\"\"}\n * on(namespace,pod)\n group_left(workload, workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload=\"$workload\", workload_type=\"$type\"}\n) by (pod)\n", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "A", + "step": 10 + }, + { + "expr": "sum(\n kube_pod_container_resource_requests{cluster=\"$cluster\", namespace=\"$namespace\", resource=\"memory\"}\n * on(namespace,pod)\n group_left(workload, workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload=\"$workload\", workload_type=\"$type\"}\n) by (pod)\n", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "B", + "step": 10 + }, + { + "expr": "sum(\n container_memory_working_set_bytes{cluster=\"$cluster\", namespace=\"$namespace\", container!=\"\", image!=\"\"}\n * on(namespace,pod)\n group_left(workload, workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload=\"$workload\", workload_type=\"$type\"}\n) by (pod)\n/sum(\n kube_pod_container_resource_requests{cluster=\"$cluster\", namespace=\"$namespace\", resource=\"memory\"}\n * on(namespace,pod)\n group_left(workload, workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload=\"$workload\", workload_type=\"$type\"}\n) by (pod)\n", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "C", + "step": 10 + }, + { + "expr": "sum(\n kube_pod_container_resource_limits{cluster=\"$cluster\", namespace=\"$namespace\", resource=\"memory\"}\n * on(namespace,pod)\n group_left(workload, workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload=\"$workload\", workload_type=\"$type\"}\n) by (pod)\n", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "D", + "step": 10 + }, + { + "expr": "sum(\n container_memory_working_set_bytes{cluster=\"$cluster\", namespace=\"$namespace\", container!=\"\", image!=\"\"}\n * on(namespace,pod)\n group_left(workload, workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload=\"$workload\", workload_type=\"$type\"}\n) by (pod)\n/sum(\n kube_pod_container_resource_limits{cluster=\"$cluster\", namespace=\"$namespace\", resource=\"memory\"}\n * on(namespace,pod)\n group_left(workload, workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload=\"$workload\", workload_type=\"$type\"}\n) by (pod)\n", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "E", + "step": 10 + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Memory Quota", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "transform": "table", + "type": "table", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + } + ], + "repeat": null, + "repeatIteration": null, + "repeatRowId": null, + "showTitle": true, + "title": "Memory Quota", + "titleSize": "h6" + }, + { + "collapse": false, + "height": "250px", + "panels": [ + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 1, + "id": 5, + "interval": "1m", + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [ ], + "nullPointMode": "null as zero", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 12, + "stack": false, + "steppedLine": false, + "styles": [ + { + "alias": "Time", + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "pattern": "Time", + "type": "hidden" + }, + { + "alias": "Current Receive Bandwidth", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": false, + "linkTargetBlank": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "Value #A", + "thresholds": [ ], + "type": "number", + "unit": "Bps" + }, + { + "alias": "Current Transmit Bandwidth", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": false, + "linkTargetBlank": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "Value #B", + "thresholds": [ ], + "type": "number", + "unit": "Bps" + }, + { + "alias": "Rate of Received Packets", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": false, + "linkTargetBlank": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "Value #C", + "thresholds": [ ], + "type": "number", + "unit": "pps" + }, + { + "alias": "Rate of Transmitted Packets", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": false, + "linkTargetBlank": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "Value #D", + "thresholds": [ ], + "type": "number", + "unit": "pps" + }, + { + "alias": "Rate of Received Packets Dropped", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": false, + "linkTargetBlank": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "Value #E", + "thresholds": [ ], + "type": "number", + "unit": "pps" + }, + { + "alias": "Rate of Transmitted Packets Dropped", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": false, + "linkTargetBlank": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "Value #F", + "thresholds": [ ], + "type": "number", + "unit": "pps" + }, + { + "alias": "Pod", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": true, + "linkTargetBlank": false, + "linkTooltip": "Drill down", + "linkUrl": "./d/6581e46e4e5c7ba40a07646395ef7b23/k8s-resources-pod?var-datasource=$datasource&var-cluster=$cluster&var-namespace=$namespace&var-pod=$__cell", + "pattern": "pod", + "thresholds": [ ], + "type": "number", + "unit": "short" + }, + { + "alias": "", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "pattern": "/.*/", + "thresholds": [ ], + "type": "string", + "unit": "short" + } + ], + "targets": [ + { + "expr": "(sum(irate(container_network_receive_bytes_total{cluster=\"$cluster\", namespace=~\"$namespace\"}[$__rate_interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=~\"$namespace\", workload=~\"$workload\", workload_type=\"$type\"}) by (pod))\n", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "A", + "step": 10 + }, + { + "expr": "(sum(irate(container_network_transmit_bytes_total{cluster=\"$cluster\", namespace=~\"$namespace\"}[$__rate_interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=~\"$namespace\", workload=~\"$workload\", workload_type=\"$type\"}) by (pod))\n", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "B", + "step": 10 + }, + { + "expr": "(sum(irate(container_network_receive_packets_total{cluster=\"$cluster\", namespace=~\"$namespace\"}[$__rate_interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=~\"$namespace\", workload=~\"$workload\", workload_type=\"$type\"}) by (pod))\n", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "C", + "step": 10 + }, + { + "expr": "(sum(irate(container_network_transmit_packets_total{cluster=\"$cluster\", namespace=~\"$namespace\"}[$__rate_interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=~\"$namespace\", workload=~\"$workload\", workload_type=\"$type\"}) by (pod))\n", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "D", + "step": 10 + }, + { + "expr": "(sum(irate(container_network_receive_packets_dropped_total{cluster=\"$cluster\", namespace=~\"$namespace\"}[$__rate_interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=~\"$namespace\", workload=~\"$workload\", workload_type=\"$type\"}) by (pod))\n", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "E", + "step": 10 + }, + { + "expr": "(sum(irate(container_network_transmit_packets_dropped_total{cluster=\"$cluster\", namespace=~\"$namespace\"}[$__rate_interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=~\"$namespace\", workload=~\"$workload\", workload_type=\"$type\"}) by (pod))\n", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "F", + "step": 10 + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Current Network Usage", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "transform": "table", + "type": "table", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + } + ], + "repeat": null, + "repeatIteration": null, + "repeatRowId": null, + "showTitle": true, + "title": "Current Network Usage", + "titleSize": "h6" + }, + { + "collapse": false, + "height": "250px", + "panels": [ + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 10, + "id": 6, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 0, + "links": [ ], + "nullPointMode": "null as zero", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 6, + "stack": true, + "steppedLine": false, + "targets": [ + { + "expr": "(sum(irate(container_network_receive_bytes_total{cluster=\"$cluster\", namespace=~\"$namespace\"}[$__rate_interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=~\"$namespace\", workload=~\"$workload\", workload_type=\"$type\"}) by (pod))\n", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{pod}}", + "legendLink": null, + "step": 10 + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Receive Bandwidth", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "Bps", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 10, + "id": 7, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 0, + "links": [ ], + "nullPointMode": "null as zero", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 6, + "stack": true, + "steppedLine": false, + "targets": [ + { + "expr": "(sum(irate(container_network_transmit_bytes_total{cluster=\"$cluster\", namespace=~\"$namespace\"}[$__rate_interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=~\"$namespace\", workload=~\"$workload\", workload_type=\"$type\"}) by (pod))\n", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{pod}}", + "legendLink": null, + "step": 10 + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Transmit Bandwidth", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "Bps", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + } + ], + "repeat": null, + "repeatIteration": null, + "repeatRowId": null, + "showTitle": true, + "title": "Bandwidth", + "titleSize": "h6" + }, + { + "collapse": false, + "height": "250px", + "panels": [ + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 10, + "id": 8, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 0, + "links": [ ], + "nullPointMode": "null as zero", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 6, + "stack": true, + "steppedLine": false, + "targets": [ + { + "expr": "(avg(irate(container_network_receive_bytes_total{cluster=\"$cluster\", namespace=~\"$namespace\"}[$__rate_interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=~\"$namespace\", workload=~\"$workload\", workload_type=\"$type\"}) by (pod))\n", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{pod}}", + "legendLink": null, + "step": 10 + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Average Container Bandwidth by Pod: Received", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "Bps", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 10, + "id": 9, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 0, + "links": [ ], + "nullPointMode": "null as zero", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 6, + "stack": true, + "steppedLine": false, + "targets": [ + { + "expr": "(avg(irate(container_network_transmit_bytes_total{cluster=\"$cluster\", namespace=~\"$namespace\"}[$__rate_interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=~\"$namespace\", workload=~\"$workload\", workload_type=\"$type\"}) by (pod))\n", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{pod}}", + "legendLink": null, + "step": 10 + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Average Container Bandwidth by Pod: Transmitted", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "Bps", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + } + ], + "repeat": null, + "repeatIteration": null, + "repeatRowId": null, + "showTitle": true, + "title": "Average Container Bandwidth by Pod", + "titleSize": "h6" + }, + { + "collapse": false, + "height": "250px", + "panels": [ + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 10, + "id": 10, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 0, + "links": [ ], + "nullPointMode": "null as zero", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 6, + "stack": true, + "steppedLine": false, + "targets": [ + { + "expr": "(sum(irate(container_network_receive_packets_total{cluster=\"$cluster\", namespace=~\"$namespace\"}[$__rate_interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=~\"$namespace\", workload=~\"$workload\", workload_type=\"$type\"}) by (pod))\n", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{pod}}", + "legendLink": null, + "step": 10 + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Rate of Received Packets", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "Bps", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 10, + "id": 11, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 0, + "links": [ ], + "nullPointMode": "null as zero", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 6, + "stack": true, + "steppedLine": false, + "targets": [ + { + "expr": "(sum(irate(container_network_transmit_packets_total{cluster=\"$cluster\", namespace=~\"$namespace\"}[$__rate_interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=~\"$namespace\", workload=~\"$workload\", workload_type=\"$type\"}) by (pod))\n", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{pod}}", + "legendLink": null, + "step": 10 + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Rate of Transmitted Packets", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "Bps", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + } + ], + "repeat": null, + "repeatIteration": null, + "repeatRowId": null, + "showTitle": true, + "title": "Rate of Packets", + "titleSize": "h6" + }, + { + "collapse": false, + "height": "250px", + "panels": [ + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 10, + "id": 12, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 0, + "links": [ ], + "nullPointMode": "null as zero", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 6, + "stack": true, + "steppedLine": false, + "targets": [ + { + "expr": "(sum(irate(container_network_receive_packets_dropped_total{cluster=\"$cluster\", namespace=~\"$namespace\"}[$__rate_interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=~\"$namespace\", workload=~\"$workload\", workload_type=\"$type\"}) by (pod))\n", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{pod}}", + "legendLink": null, + "step": 10 + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Rate of Received Packets Dropped", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "Bps", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 10, + "id": 13, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 0, + "links": [ ], + "nullPointMode": "null as zero", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 6, + "stack": true, + "steppedLine": false, + "targets": [ + { + "expr": "(sum(irate(container_network_transmit_packets_dropped_total{cluster=\"$cluster\", namespace=~\"$namespace\"}[$__rate_interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=~\"$namespace\", workload=~\"$workload\", workload_type=\"$type\"}) by (pod))\n", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{pod}}", + "legendLink": null, + "step": 10 + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Rate of Transmitted Packets Dropped", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "Bps", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + } + ], + "repeat": null, + "repeatIteration": null, + "repeatRowId": null, + "showTitle": true, + "title": "Rate of Packets Dropped", + "titleSize": "h6" + } + ], + "schemaVersion": 14, + "style": "dark", + "tags": [ + "kubernetes" + ], + "templating": { + "list": [ + { + "current": { + "text": "default", + "value": "default" + }, + "hide": 0, + "label": null, + "name": "datasource", + "options": [ ], + "query": "prometheus", + "refresh": 1, + "regex": "", + "type": "datasource" + }, + { + "allValue": null, + "current": { + "text": "", + "value": "" + }, + "datasource": "$datasource", + "hide": 2, + "includeAll": false, + "label": null, + "multi": false, + "name": "cluster", + "options": [ ], + "query": "label_values(kube_pod_info, cluster)", + "refresh": 2, + "regex": "", + "sort": 1, + "tagValuesQuery": "", + "tags": [ ], + "tagsQuery": "", + "type": "query", + "useTags": false + }, + { + "allValue": null, + "current": { + "text": "", + "value": "" + }, + "datasource": "$datasource", + "hide": 0, + "includeAll": false, + "label": null, + "multi": false, + "name": "namespace", + "options": [ ], + "query": "label_values(kube_pod_info{cluster=\"$cluster\"}, namespace)", + "refresh": 2, + "regex": "", + "sort": 1, + "tagValuesQuery": "", + "tags": [ ], + "tagsQuery": "", + "type": "query", + "useTags": false + }, + { + "allValue": null, + "current": { + "text": "", + "value": "" + }, + "datasource": "$datasource", + "hide": 0, + "includeAll": false, + "label": null, + "multi": false, + "name": "workload", + "options": [ ], + "query": "label_values(namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\"}, workload)", + "refresh": 2, + "regex": "", + "sort": 1, + "tagValuesQuery": "", + "tags": [ ], + "tagsQuery": "", + "type": "query", + "useTags": false + }, + { + "allValue": null, + "current": { + "text": "", + "value": "" + }, + "datasource": "$datasource", + "hide": 0, + "includeAll": false, + "label": null, + "multi": false, + "name": "type", + "options": [ ], + "query": "label_values(namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload=\"$workload\"}, workload_type)", + "refresh": 2, + "regex": "", + "sort": 1, + "tagValuesQuery": "", + "tags": [ ], + "tagsQuery": "", + "type": "query", + "useTags": false + } + ] + }, + "time": { + "from": "now-1h", + "to": "now" + }, + "timepicker": { + "refresh_intervals": [ + "5s", + "10s", + "30s", + "1m", + "5m", + "15m", + "30m", + "1h", + "2h", + "1d" + ], + "time_options": [ + "5m", + "15m", + "1h", + "6h", + "12h", + "24h", + "2d", + "7d", + "30d" + ] + }, + "timezone": "UTC", + "title": "Kubernetes / Compute Resources / Workload", + "uid": "a164a7f0339f99e89cea5cb47e9be617", + "version": 0 +} diff --git a/charts/kubezero-metrics/dashboards/kube-mixin/k8s-resources-workloads-namespace.json b/charts/kubezero-metrics/dashboards/kube-mixin/k8s-resources-workloads-namespace.json new file mode 100644 index 0000000..f96fdb7 --- /dev/null +++ b/charts/kubezero-metrics/dashboards/kube-mixin/k8s-resources-workloads-namespace.json @@ -0,0 +1,1876 @@ +{ + "annotations": { + "list": [ ] + }, + "editable": true, + "gnetId": null, + "graphTooltip": 0, + "hideControls": false, + "links": [ ], + "refresh": "10s", + "rows": [ + { + "collapse": false, + "height": "250px", + "panels": [ + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 10, + "id": 1, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 0, + "links": [ ], + "nullPointMode": "null as zero", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ + { + "alias": "quota - requests", + "color": "#F2495C", + "dashes": true, + "fill": 0, + "hiddenSeries": true, + "hideTooltip": true, + "legend": true, + "linewidth": 2, + "stack": false + }, + { + "alias": "quota - limits", + "color": "#FF9830", + "dashes": true, + "fill": 0, + "hiddenSeries": true, + "hideTooltip": true, + "legend": true, + "linewidth": 2, + "stack": false + } + ], + "spaceLength": 10, + "span": 12, + "stack": true, + "steppedLine": false, + "targets": [ + { + "expr": "sum(\n node_namespace_pod_container:container_cpu_usage_seconds_total:sum_rate{cluster=\"$cluster\", namespace=\"$namespace\"}\n* on(namespace,pod)\n group_left(workload, workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload_type=\"$type\"}\n) by (workload, workload_type)\n", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{workload}} - {{workload_type}}", + "legendLink": null, + "step": 10 + }, + { + "expr": "scalar(kube_resourcequota{cluster=\"$cluster\", namespace=\"$namespace\", type=\"hard\",resource=\"requests.cpu\"})", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "quota - requests", + "legendLink": null, + "step": 10 + }, + { + "expr": "scalar(kube_resourcequota{cluster=\"$cluster\", namespace=\"$namespace\", type=\"hard\",resource=\"limits.cpu\"})", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "quota - limits", + "legendLink": null, + "step": 10 + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "CPU Usage", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + } + ], + "repeat": null, + "repeatIteration": null, + "repeatRowId": null, + "showTitle": true, + "title": "CPU Usage", + "titleSize": "h6" + }, + { + "collapse": false, + "height": "250px", + "panels": [ + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 1, + "id": 2, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [ ], + "nullPointMode": "null as zero", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 12, + "stack": false, + "steppedLine": false, + "styles": [ + { + "alias": "Time", + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "pattern": "Time", + "type": "hidden" + }, + { + "alias": "Running Pods", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 0, + "link": false, + "linkTargetBlank": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "Value #A", + "thresholds": [ ], + "type": "number", + "unit": "short" + }, + { + "alias": "CPU Usage", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": false, + "linkTargetBlank": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "Value #B", + "thresholds": [ ], + "type": "number", + "unit": "short" + }, + { + "alias": "CPU Requests", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": false, + "linkTargetBlank": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "Value #C", + "thresholds": [ ], + "type": "number", + "unit": "short" + }, + { + "alias": "CPU Requests %", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": false, + "linkTargetBlank": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "Value #D", + "thresholds": [ ], + "type": "number", + "unit": "percentunit" + }, + { + "alias": "CPU Limits", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": false, + "linkTargetBlank": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "Value #E", + "thresholds": [ ], + "type": "number", + "unit": "short" + }, + { + "alias": "CPU Limits %", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": false, + "linkTargetBlank": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "Value #F", + "thresholds": [ ], + "type": "number", + "unit": "percentunit" + }, + { + "alias": "Workload", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": true, + "linkTargetBlank": false, + "linkTooltip": "Drill down", + "linkUrl": "./d/a164a7f0339f99e89cea5cb47e9be617/k8s-resources-workload?var-datasource=$datasource&var-cluster=$cluster&var-namespace=$namespace&var-workload=$__cell&var-type=$__cell_2", + "pattern": "workload", + "thresholds": [ ], + "type": "number", + "unit": "short" + }, + { + "alias": "Workload Type", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": false, + "linkTargetBlank": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "workload_type", + "thresholds": [ ], + "type": "number", + "unit": "short" + }, + { + "alias": "", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "pattern": "/.*/", + "thresholds": [ ], + "type": "string", + "unit": "short" + } + ], + "targets": [ + { + "expr": "count(namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload_type=\"$type\"}) by (workload, workload_type)", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "A", + "step": 10 + }, + { + "expr": "sum(\n node_namespace_pod_container:container_cpu_usage_seconds_total:sum_rate{cluster=\"$cluster\", namespace=\"$namespace\"}\n* on(namespace,pod)\n group_left(workload, workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload_type=\"$type\"}\n) by (workload, workload_type)\n", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "B", + "step": 10 + }, + { + "expr": "sum(\n kube_pod_container_resource_requests{cluster=\"$cluster\", namespace=\"$namespace\", resource=\"cpu\"}\n* on(namespace,pod)\n group_left(workload, workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload_type=\"$type\"}\n) by (workload, workload_type)\n", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "C", + "step": 10 + }, + { + "expr": "sum(\n node_namespace_pod_container:container_cpu_usage_seconds_total:sum_rate{cluster=\"$cluster\", namespace=\"$namespace\"}\n* on(namespace,pod)\n group_left(workload, workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload_type=\"$type\"}\n) by (workload, workload_type)\n/sum(\n kube_pod_container_resource_requests{cluster=\"$cluster\", namespace=\"$namespace\", resource=\"cpu\"}\n* on(namespace,pod)\n group_left(workload, workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload_type=\"$type\"}\n) by (workload, workload_type)\n", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "D", + "step": 10 + }, + { + "expr": "sum(\n kube_pod_container_resource_limits{cluster=\"$cluster\", namespace=\"$namespace\", resource=\"cpu\"}\n* on(namespace,pod)\n group_left(workload, workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload_type=\"$type\"}\n) by (workload, workload_type)\n", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "E", + "step": 10 + }, + { + "expr": "sum(\n node_namespace_pod_container:container_cpu_usage_seconds_total:sum_rate{cluster=\"$cluster\", namespace=\"$namespace\"}\n* on(namespace,pod)\n group_left(workload, workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload_type=\"$type\"}\n) by (workload, workload_type)\n/sum(\n kube_pod_container_resource_limits{cluster=\"$cluster\", namespace=\"$namespace\", resource=\"cpu\"}\n* on(namespace,pod)\n group_left(workload, workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload_type=\"$type\"}\n) by (workload, workload_type)\n", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "F", + "step": 10 + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "CPU Quota", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "transform": "table", + "type": "table", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + } + ], + "repeat": null, + "repeatIteration": null, + "repeatRowId": null, + "showTitle": true, + "title": "CPU Quota", + "titleSize": "h6" + }, + { + "collapse": false, + "height": "250px", + "panels": [ + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 10, + "id": 3, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 0, + "links": [ ], + "nullPointMode": "null as zero", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ + { + "alias": "quota - requests", + "color": "#F2495C", + "dashes": true, + "fill": 0, + "hiddenSeries": true, + "hideTooltip": true, + "legend": true, + "linewidth": 2, + "stack": false + }, + { + "alias": "quota - limits", + "color": "#FF9830", + "dashes": true, + "fill": 0, + "hiddenSeries": true, + "hideTooltip": true, + "legend": true, + "linewidth": 2, + "stack": false + } + ], + "spaceLength": 10, + "span": 12, + "stack": true, + "steppedLine": false, + "targets": [ + { + "expr": "sum(\n container_memory_working_set_bytes{cluster=\"$cluster\", namespace=\"$namespace\", container!=\"\", image!=\"\"}\n * on(namespace,pod)\n group_left(workload, workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload_type=\"$type\"}\n) by (workload, workload_type)\n", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{workload}} - {{workload_type}}", + "legendLink": null, + "step": 10 + }, + { + "expr": "scalar(kube_resourcequota{cluster=\"$cluster\", namespace=\"$namespace\", type=\"hard\",resource=\"requests.memory\"})", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "quota - requests", + "legendLink": null, + "step": 10 + }, + { + "expr": "scalar(kube_resourcequota{cluster=\"$cluster\", namespace=\"$namespace\", type=\"hard\",resource=\"limits.memory\"})", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "quota - limits", + "legendLink": null, + "step": 10 + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Memory Usage", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "bytes", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + } + ], + "repeat": null, + "repeatIteration": null, + "repeatRowId": null, + "showTitle": true, + "title": "Memory Usage", + "titleSize": "h6" + }, + { + "collapse": false, + "height": "250px", + "panels": [ + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 1, + "id": 4, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [ ], + "nullPointMode": "null as zero", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 12, + "stack": false, + "steppedLine": false, + "styles": [ + { + "alias": "Time", + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "pattern": "Time", + "type": "hidden" + }, + { + "alias": "Running Pods", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 0, + "link": false, + "linkTargetBlank": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "Value #A", + "thresholds": [ ], + "type": "number", + "unit": "short" + }, + { + "alias": "Memory Usage", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": false, + "linkTargetBlank": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "Value #B", + "thresholds": [ ], + "type": "number", + "unit": "bytes" + }, + { + "alias": "Memory Requests", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": false, + "linkTargetBlank": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "Value #C", + "thresholds": [ ], + "type": "number", + "unit": "bytes" + }, + { + "alias": "Memory Requests %", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": false, + "linkTargetBlank": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "Value #D", + "thresholds": [ ], + "type": "number", + "unit": "percentunit" + }, + { + "alias": "Memory Limits", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": false, + "linkTargetBlank": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "Value #E", + "thresholds": [ ], + "type": "number", + "unit": "bytes" + }, + { + "alias": "Memory Limits %", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": false, + "linkTargetBlank": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "Value #F", + "thresholds": [ ], + "type": "number", + "unit": "percentunit" + }, + { + "alias": "Workload", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": true, + "linkTargetBlank": false, + "linkTooltip": "Drill down", + "linkUrl": "./d/a164a7f0339f99e89cea5cb47e9be617/k8s-resources-workload?var-datasource=$datasource&var-cluster=$cluster&var-namespace=$namespace&var-workload=$__cell&var-type=$__cell_2", + "pattern": "workload", + "thresholds": [ ], + "type": "number", + "unit": "short" + }, + { + "alias": "Workload Type", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": false, + "linkTargetBlank": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "workload_type", + "thresholds": [ ], + "type": "number", + "unit": "short" + }, + { + "alias": "", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "pattern": "/.*/", + "thresholds": [ ], + "type": "string", + "unit": "short" + } + ], + "targets": [ + { + "expr": "count(namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload_type=\"$type\"}) by (workload, workload_type)", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "A", + "step": 10 + }, + { + "expr": "sum(\n container_memory_working_set_bytes{cluster=\"$cluster\", namespace=\"$namespace\", container!=\"\", image!=\"\"}\n * on(namespace,pod)\n group_left(workload, workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload_type=\"$type\"}\n) by (workload, workload_type)\n", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "B", + "step": 10 + }, + { + "expr": "sum(\n kube_pod_container_resource_requests{cluster=\"$cluster\", namespace=\"$namespace\", resource=\"memory\"}\n* on(namespace,pod)\n group_left(workload, workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload_type=\"$type\"}\n) by (workload, workload_type)\n", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "C", + "step": 10 + }, + { + "expr": "sum(\n container_memory_working_set_bytes{cluster=\"$cluster\", namespace=\"$namespace\", container!=\"\", image!=\"\"}\n * on(namespace,pod)\n group_left(workload, workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload_type=\"$type\"}\n) by (workload, workload_type)\n/sum(\n kube_pod_container_resource_requests{cluster=\"$cluster\", namespace=\"$namespace\", resource=\"memory\"}\n* on(namespace,pod)\n group_left(workload, workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload_type=\"$type\"}\n) by (workload, workload_type)\n", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "D", + "step": 10 + }, + { + "expr": "sum(\n kube_pod_container_resource_limits{cluster=\"$cluster\", namespace=\"$namespace\", resource=\"memory\"}\n* on(namespace,pod)\n group_left(workload, workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload_type=\"$type\"}\n) by (workload, workload_type)\n", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "E", + "step": 10 + }, + { + "expr": "sum(\n container_memory_working_set_bytes{cluster=\"$cluster\", namespace=\"$namespace\", container!=\"\", image!=\"\"}\n * on(namespace,pod)\n group_left(workload, workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload_type=\"$type\"}\n) by (workload, workload_type)\n/sum(\n kube_pod_container_resource_limits{cluster=\"$cluster\", namespace=\"$namespace\", resource=\"memory\"}\n* on(namespace,pod)\n group_left(workload, workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload_type=\"$type\"}\n) by (workload, workload_type)\n", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "F", + "step": 10 + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Memory Quota", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "transform": "table", + "type": "table", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + } + ], + "repeat": null, + "repeatIteration": null, + "repeatRowId": null, + "showTitle": true, + "title": "Memory Quota", + "titleSize": "h6" + }, + { + "collapse": false, + "height": "250px", + "panels": [ + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 1, + "id": 5, + "interval": "1m", + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [ ], + "nullPointMode": "null as zero", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 12, + "stack": false, + "steppedLine": false, + "styles": [ + { + "alias": "Time", + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "pattern": "Time", + "type": "hidden" + }, + { + "alias": "Current Receive Bandwidth", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": false, + "linkTargetBlank": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "Value #A", + "thresholds": [ ], + "type": "number", + "unit": "Bps" + }, + { + "alias": "Current Transmit Bandwidth", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": false, + "linkTargetBlank": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "Value #B", + "thresholds": [ ], + "type": "number", + "unit": "Bps" + }, + { + "alias": "Rate of Received Packets", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": false, + "linkTargetBlank": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "Value #C", + "thresholds": [ ], + "type": "number", + "unit": "pps" + }, + { + "alias": "Rate of Transmitted Packets", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": false, + "linkTargetBlank": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "Value #D", + "thresholds": [ ], + "type": "number", + "unit": "pps" + }, + { + "alias": "Rate of Received Packets Dropped", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": false, + "linkTargetBlank": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "Value #E", + "thresholds": [ ], + "type": "number", + "unit": "pps" + }, + { + "alias": "Rate of Transmitted Packets Dropped", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": false, + "linkTargetBlank": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "Value #F", + "thresholds": [ ], + "type": "number", + "unit": "pps" + }, + { + "alias": "Workload", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": true, + "linkTargetBlank": false, + "linkTooltip": "Drill down to pods", + "linkUrl": "./d/a164a7f0339f99e89cea5cb47e9be617/k8s-resources-workload?var-datasource=$datasource&var-cluster=$cluster&var-namespace=$namespace&var-workload=$__cell&var-type=$type", + "pattern": "workload", + "thresholds": [ ], + "type": "number", + "unit": "short" + }, + { + "alias": "Workload Type", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": false, + "linkTargetBlank": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "workload_type", + "thresholds": [ ], + "type": "number", + "unit": "short" + }, + { + "alias": "", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "pattern": "/.*/", + "thresholds": [ ], + "type": "string", + "unit": "short" + } + ], + "targets": [ + { + "expr": "(sum(irate(container_network_receive_bytes_total{cluster=\"$cluster\", namespace=~\"$namespace\"}[$__rate_interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=~\"$namespace\", workload_type=\"$type\"}) by (workload))\n", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "A", + "step": 10 + }, + { + "expr": "(sum(irate(container_network_transmit_bytes_total{cluster=\"$cluster\", namespace=~\"$namespace\"}[$__rate_interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=~\"$namespace\", workload_type=\"$type\"}) by (workload))\n", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "B", + "step": 10 + }, + { + "expr": "(sum(irate(container_network_receive_packets_total{cluster=\"$cluster\", namespace=~\"$namespace\"}[$__rate_interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=~\"$namespace\", workload_type=\"$type\"}) by (workload))\n", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "C", + "step": 10 + }, + { + "expr": "(sum(irate(container_network_transmit_packets_total{cluster=\"$cluster\", namespace=~\"$namespace\"}[$__rate_interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=~\"$namespace\", workload_type=\"$type\"}) by (workload))\n", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "D", + "step": 10 + }, + { + "expr": "(sum(irate(container_network_receive_packets_dropped_total{cluster=\"$cluster\", namespace=~\"$namespace\"}[$__rate_interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=~\"$namespace\", workload_type=\"$type\"}) by (workload))\n", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "E", + "step": 10 + }, + { + "expr": "(sum(irate(container_network_transmit_packets_dropped_total{cluster=\"$cluster\", namespace=~\"$namespace\"}[$__rate_interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=~\"$namespace\", workload_type=\"$type\"}) by (workload))\n", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "F", + "step": 10 + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Current Network Usage", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "transform": "table", + "type": "table", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + } + ], + "repeat": null, + "repeatIteration": null, + "repeatRowId": null, + "showTitle": true, + "title": "Current Network Usage", + "titleSize": "h6" + }, + { + "collapse": false, + "height": "250px", + "panels": [ + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 10, + "id": 6, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 0, + "links": [ ], + "nullPointMode": "null as zero", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 6, + "stack": true, + "steppedLine": false, + "targets": [ + { + "expr": "(sum(irate(container_network_receive_bytes_total{cluster=\"$cluster\", namespace=~\"$namespace\"}[$__rate_interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=~\"$namespace\", workload=~\".+\", workload_type=\"$type\"}) by (workload))\n", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{workload}}", + "legendLink": null, + "step": 10 + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Receive Bandwidth", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "Bps", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 10, + "id": 7, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 0, + "links": [ ], + "nullPointMode": "null as zero", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 6, + "stack": true, + "steppedLine": false, + "targets": [ + { + "expr": "(sum(irate(container_network_transmit_bytes_total{cluster=\"$cluster\", namespace=~\"$namespace\"}[$__rate_interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=~\"$namespace\", workload=~\".+\", workload_type=\"$type\"}) by (workload))\n", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{workload}}", + "legendLink": null, + "step": 10 + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Transmit Bandwidth", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "Bps", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + } + ], + "repeat": null, + "repeatIteration": null, + "repeatRowId": null, + "showTitle": true, + "title": "Bandwidth", + "titleSize": "h6" + }, + { + "collapse": false, + "height": "250px", + "panels": [ + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 10, + "id": 8, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 0, + "links": [ ], + "nullPointMode": "null as zero", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 6, + "stack": true, + "steppedLine": false, + "targets": [ + { + "expr": "(avg(irate(container_network_receive_bytes_total{cluster=\"$cluster\", namespace=~\"$namespace\"}[$__rate_interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=~\"$namespace\", workload=~\".+\", workload_type=\"$type\"}) by (workload))\n", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{workload}}", + "legendLink": null, + "step": 10 + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Average Container Bandwidth by Workload: Received", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "Bps", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 10, + "id": 9, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 0, + "links": [ ], + "nullPointMode": "null as zero", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 6, + "stack": true, + "steppedLine": false, + "targets": [ + { + "expr": "(avg(irate(container_network_transmit_bytes_total{cluster=\"$cluster\", namespace=~\"$namespace\"}[$__rate_interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=~\"$namespace\", workload=~\".+\", workload_type=\"$type\"}) by (workload))\n", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{workload}}", + "legendLink": null, + "step": 10 + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Average Container Bandwidth by Workload: Transmitted", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "Bps", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + } + ], + "repeat": null, + "repeatIteration": null, + "repeatRowId": null, + "showTitle": true, + "title": "Average Container Bandwidth by Workload", + "titleSize": "h6" + }, + { + "collapse": false, + "height": "250px", + "panels": [ + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 10, + "id": 10, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 0, + "links": [ ], + "nullPointMode": "null as zero", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 6, + "stack": true, + "steppedLine": false, + "targets": [ + { + "expr": "(sum(irate(container_network_receive_packets_total{cluster=\"$cluster\", namespace=~\"$namespace\"}[$__rate_interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=~\"$namespace\", workload=~\".+\", workload_type=\"$type\"}) by (workload))\n", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{workload}}", + "legendLink": null, + "step": 10 + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Rate of Received Packets", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "Bps", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 10, + "id": 11, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 0, + "links": [ ], + "nullPointMode": "null as zero", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 6, + "stack": true, + "steppedLine": false, + "targets": [ + { + "expr": "(sum(irate(container_network_transmit_packets_total{cluster=\"$cluster\", namespace=~\"$namespace\"}[$__rate_interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=~\"$namespace\", workload=~\".+\", workload_type=\"$type\"}) by (workload))\n", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{workload}}", + "legendLink": null, + "step": 10 + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Rate of Transmitted Packets", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "Bps", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + } + ], + "repeat": null, + "repeatIteration": null, + "repeatRowId": null, + "showTitle": true, + "title": "Rate of Packets", + "titleSize": "h6" + }, + { + "collapse": false, + "height": "250px", + "panels": [ + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 10, + "id": 12, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 0, + "links": [ ], + "nullPointMode": "null as zero", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 6, + "stack": true, + "steppedLine": false, + "targets": [ + { + "expr": "(sum(irate(container_network_receive_packets_dropped_total{cluster=\"$cluster\", namespace=~\"$namespace\"}[$__rate_interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=~\"$namespace\", workload=~\".+\", workload_type=\"$type\"}) by (workload))\n", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{workload}}", + "legendLink": null, + "step": 10 + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Rate of Received Packets Dropped", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "Bps", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + }, + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 10, + "id": 13, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 0, + "links": [ ], + "nullPointMode": "null as zero", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 6, + "stack": true, + "steppedLine": false, + "targets": [ + { + "expr": "(sum(irate(container_network_transmit_packets_dropped_total{cluster=\"$cluster\", namespace=~\"$namespace\"}[$__rate_interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=~\"$namespace\", workload=~\".+\", workload_type=\"$type\"}) by (workload))\n", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{workload}}", + "legendLink": null, + "step": 10 + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Rate of Transmitted Packets Dropped", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "Bps", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ] + } + ], + "repeat": null, + "repeatIteration": null, + "repeatRowId": null, + "showTitle": true, + "title": "Rate of Packets Dropped", + "titleSize": "h6" + } + ], + "schemaVersion": 14, + "style": "dark", + "tags": [ + "kubernetes" + ], + "templating": { + "list": [ + { + "current": { + "text": "default", + "value": "default" + }, + "hide": 0, + "label": null, + "name": "datasource", + "options": [ ], + "query": "prometheus", + "refresh": 1, + "regex": "", + "type": "datasource" + }, + { + "allValue": null, + "current": { + "text": "", + "value": "" + }, + "datasource": "$datasource", + "hide": 2, + "includeAll": false, + "label": null, + "multi": false, + "name": "cluster", + "options": [ ], + "query": "label_values(kube_pod_info, cluster)", + "refresh": 2, + "regex": "", + "sort": 1, + "tagValuesQuery": "", + "tags": [ ], + "tagsQuery": "", + "type": "query", + "useTags": false + }, + { + "allValue": null, + "auto": false, + "auto_count": 30, + "auto_min": "10s", + "current": { + "text": "deployment", + "value": "deployment" + }, + "datasource": "$datasource", + "definition": "label_values(namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=~\"$namespace\", workload=~\".+\"}, workload_type)", + "hide": 0, + "includeAll": false, + "label": null, + "multi": false, + "name": "type", + "options": [ ], + "query": "label_values(namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=~\"$namespace\", workload=~\".+\"}, workload_type)", + "refresh": 2, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "tagValuesQuery": "", + "tags": [ ], + "tagsQuery": "", + "type": "query", + "useTags": false + }, + { + "allValue": null, + "current": { + "text": "", + "value": "" + }, + "datasource": "$datasource", + "hide": 0, + "includeAll": false, + "label": null, + "multi": false, + "name": "namespace", + "options": [ ], + "query": "label_values(kube_pod_info{cluster=\"$cluster\"}, namespace)", + "refresh": 2, + "regex": "", + "sort": 1, + "tagValuesQuery": "", + "tags": [ ], + "tagsQuery": "", + "type": "query", + "useTags": false + } + ] + }, + "time": { + "from": "now-1h", + "to": "now" + }, + "timepicker": { + "refresh_intervals": [ + "5s", + "10s", + "30s", + "1m", + "5m", + "15m", + "30m", + "1h", + "2h", + "1d" + ], + "time_options": [ + "5m", + "15m", + "1h", + "6h", + "12h", + "24h", + "2d", + "7d", + "30d" + ] + }, + "timezone": "UTC", + "title": "Kubernetes / Compute Resources / Namespace (Workloads)", + "uid": "a87fb0d919ec0ea5f6543124e16c42a5", + "version": 0 +} diff --git a/charts/kubezero-metrics/dashboards/kube-mixin/kubelet.json b/charts/kubezero-metrics/dashboards/kube-mixin/kubelet.json new file mode 100644 index 0000000..265143c --- /dev/null +++ b/charts/kubezero-metrics/dashboards/kube-mixin/kubelet.json @@ -0,0 +1,2248 @@ +{ + "__inputs": [ ], + "__requires": [ ], + "annotations": { + "list": [ ] + }, + "editable": false, + "gnetId": null, + "graphTooltip": 0, + "hideControls": false, + "id": null, + "links": [ ], + "refresh": "10s", + "rows": [ + { + "collapse": false, + "collapsed": false, + "panels": [ + { + "cacheTimeout": null, + "colorBackground": false, + "colorValue": false, + "colors": [ + "#299c46", + "rgba(237, 129, 40, 0.89)", + "#d44a3a" + ], + "datasource": "$datasource", + "format": "none", + "gauge": { + "maxValue": 100, + "minValue": 0, + "show": false, + "thresholdLabels": false, + "thresholdMarkers": true + }, + "gridPos": { }, + "id": 2, + "interval": null, + "links": [ ], + "mappingType": 1, + "mappingTypes": [ + { + "name": "value to text", + "value": 1 + }, + { + "name": "range to text", + "value": 2 + } + ], + "maxDataPoints": 100, + "nullPointMode": "connected", + "nullText": null, + "postfix": "", + "postfixFontSize": "50%", + "prefix": "", + "prefixFontSize": "50%", + "rangeMaps": [ + { + "from": "null", + "text": "N/A", + "to": "null" + } + ], + "span": 2, + "sparkline": { + "fillColor": "rgba(31, 118, 189, 0.18)", + "full": false, + "lineColor": "rgb(31, 120, 193)", + "show": false + }, + "tableColumn": "", + "targets": [ + { + "expr": "sum(kubelet_node_name{cluster=\"$cluster\", job=\"kubelet\"})", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "", + "refId": "A" + } + ], + "thresholds": "", + "title": "Running Kubelets", + "tooltip": { + "shared": false + }, + "type": "singlestat", + "valueFontSize": "80%", + "valueMaps": [ + { + "op": "=", + "text": "N/A", + "value": "null" + } + ], + "valueName": "min" + }, + { + "cacheTimeout": null, + "colorBackground": false, + "colorValue": false, + "colors": [ + "#299c46", + "rgba(237, 129, 40, 0.89)", + "#d44a3a" + ], + "datasource": "$datasource", + "format": "none", + "gauge": { + "maxValue": 100, + "minValue": 0, + "show": false, + "thresholdLabels": false, + "thresholdMarkers": true + }, + "gridPos": { }, + "id": 3, + "interval": null, + "links": [ ], + "mappingType": 1, + "mappingTypes": [ + { + "name": "value to text", + "value": 1 + }, + { + "name": "range to text", + "value": 2 + } + ], + "maxDataPoints": 100, + "nullPointMode": "connected", + "nullText": null, + "postfix": "", + "postfixFontSize": "50%", + "prefix": "", + "prefixFontSize": "50%", + "rangeMaps": [ + { + "from": "null", + "text": "N/A", + "to": "null" + } + ], + "span": 2, + "sparkline": { + "fillColor": "rgba(31, 118, 189, 0.18)", + "full": false, + "lineColor": "rgb(31, 120, 193)", + "show": false + }, + "tableColumn": "", + "targets": [ + { + "expr": "sum(kubelet_running_pods{cluster=\"$cluster\", job=\"kubelet\", instance=~\"$instance\"}) OR sum(kubelet_running_pod_count{cluster=\"$cluster\", job=\"kubelet\", instance=~\"$instance\"})", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{instance}}", + "refId": "A" + } + ], + "thresholds": "", + "title": "Running Pods", + "tooltip": { + "shared": false + }, + "type": "singlestat", + "valueFontSize": "80%", + "valueMaps": [ + { + "op": "=", + "text": "N/A", + "value": "null" + } + ], + "valueName": "min" + }, + { + "cacheTimeout": null, + "colorBackground": false, + "colorValue": false, + "colors": [ + "#299c46", + "rgba(237, 129, 40, 0.89)", + "#d44a3a" + ], + "datasource": "$datasource", + "format": "none", + "gauge": { + "maxValue": 100, + "minValue": 0, + "show": false, + "thresholdLabels": false, + "thresholdMarkers": true + }, + "gridPos": { }, + "id": 4, + "interval": null, + "links": [ ], + "mappingType": 1, + "mappingTypes": [ + { + "name": "value to text", + "value": 1 + }, + { + "name": "range to text", + "value": 2 + } + ], + "maxDataPoints": 100, + "nullPointMode": "connected", + "nullText": null, + "postfix": "", + "postfixFontSize": "50%", + "prefix": "", + "prefixFontSize": "50%", + "rangeMaps": [ + { + "from": "null", + "text": "N/A", + "to": "null" + } + ], + "span": 2, + "sparkline": { + "fillColor": "rgba(31, 118, 189, 0.18)", + "full": false, + "lineColor": "rgb(31, 120, 193)", + "show": false + }, + "tableColumn": "", + "targets": [ + { + "expr": "sum(kubelet_running_containers{cluster=\"$cluster\", job=\"kubelet\", instance=~\"$instance\"}) OR sum(kubelet_running_container_count{cluster=\"$cluster\", job=\"kubelet\", instance=~\"$instance\"})", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{instance}}", + "refId": "A" + } + ], + "thresholds": "", + "title": "Running Container", + "tooltip": { + "shared": false + }, + "type": "singlestat", + "valueFontSize": "80%", + "valueMaps": [ + { + "op": "=", + "text": "N/A", + "value": "null" + } + ], + "valueName": "min" + }, + { + "cacheTimeout": null, + "colorBackground": false, + "colorValue": false, + "colors": [ + "#299c46", + "rgba(237, 129, 40, 0.89)", + "#d44a3a" + ], + "datasource": "$datasource", + "format": "none", + "gauge": { + "maxValue": 100, + "minValue": 0, + "show": false, + "thresholdLabels": false, + "thresholdMarkers": true + }, + "gridPos": { }, + "id": 5, + "interval": null, + "links": [ ], + "mappingType": 1, + "mappingTypes": [ + { + "name": "value to text", + "value": 1 + }, + { + "name": "range to text", + "value": 2 + } + ], + "maxDataPoints": 100, + "nullPointMode": "connected", + "nullText": null, + "postfix": "", + "postfixFontSize": "50%", + "prefix": "", + "prefixFontSize": "50%", + "rangeMaps": [ + { + "from": "null", + "text": "N/A", + "to": "null" + } + ], + "span": 2, + "sparkline": { + "fillColor": "rgba(31, 118, 189, 0.18)", + "full": false, + "lineColor": "rgb(31, 120, 193)", + "show": false + }, + "tableColumn": "", + "targets": [ + { + "expr": "sum(volume_manager_total_volumes{cluster=\"$cluster\", job=\"kubelet\", instance=~\"$instance\", state=\"actual_state_of_world\"})", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{instance}}", + "refId": "A" + } + ], + "thresholds": "", + "title": "Actual Volume Count", + "tooltip": { + "shared": false + }, + "type": "singlestat", + "valueFontSize": "80%", + "valueMaps": [ + { + "op": "=", + "text": "N/A", + "value": "null" + } + ], + "valueName": "min" + }, + { + "cacheTimeout": null, + "colorBackground": false, + "colorValue": false, + "colors": [ + "#299c46", + "rgba(237, 129, 40, 0.89)", + "#d44a3a" + ], + "datasource": "$datasource", + "format": "none", + "gauge": { + "maxValue": 100, + "minValue": 0, + "show": false, + "thresholdLabels": false, + "thresholdMarkers": true + }, + "gridPos": { }, + "id": 6, + "interval": null, + "links": [ ], + "mappingType": 1, + "mappingTypes": [ + { + "name": "value to text", + "value": 1 + }, + { + "name": "range to text", + "value": 2 + } + ], + "maxDataPoints": 100, + "nullPointMode": "connected", + "nullText": null, + "postfix": "", + "postfixFontSize": "50%", + "prefix": "", + "prefixFontSize": "50%", + "rangeMaps": [ + { + "from": "null", + "text": "N/A", + "to": "null" + } + ], + "span": 2, + "sparkline": { + "fillColor": "rgba(31, 118, 189, 0.18)", + "full": false, + "lineColor": "rgb(31, 120, 193)", + "show": false + }, + "tableColumn": "", + "targets": [ + { + "expr": "sum(volume_manager_total_volumes{cluster=\"$cluster\", job=\"kubelet\", instance=~\"$instance\",state=\"desired_state_of_world\"})", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{instance}}", + "refId": "A" + } + ], + "thresholds": "", + "title": "Desired Volume Count", + "tooltip": { + "shared": false + }, + "type": "singlestat", + "valueFontSize": "80%", + "valueMaps": [ + { + "op": "=", + "text": "N/A", + "value": "null" + } + ], + "valueName": "min" + }, + { + "cacheTimeout": null, + "colorBackground": false, + "colorValue": false, + "colors": [ + "#299c46", + "rgba(237, 129, 40, 0.89)", + "#d44a3a" + ], + "datasource": "$datasource", + "format": "none", + "gauge": { + "maxValue": 100, + "minValue": 0, + "show": false, + "thresholdLabels": false, + "thresholdMarkers": true + }, + "gridPos": { }, + "id": 7, + "interval": null, + "links": [ ], + "mappingType": 1, + "mappingTypes": [ + { + "name": "value to text", + "value": 1 + }, + { + "name": "range to text", + "value": 2 + } + ], + "maxDataPoints": 100, + "nullPointMode": "connected", + "nullText": null, + "postfix": "", + "postfixFontSize": "50%", + "prefix": "", + "prefixFontSize": "50%", + "rangeMaps": [ + { + "from": "null", + "text": "N/A", + "to": "null" + } + ], + "span": 2, + "sparkline": { + "fillColor": "rgba(31, 118, 189, 0.18)", + "full": false, + "lineColor": "rgb(31, 120, 193)", + "show": false + }, + "tableColumn": "", + "targets": [ + { + "expr": "sum(rate(kubelet_node_config_error{cluster=\"$cluster\", job=\"kubelet\", instance=~\"$instance\"}[5m]))", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{instance}}", + "refId": "A" + } + ], + "thresholds": "", + "title": "Config Error Count", + "tooltip": { + "shared": false + }, + "type": "singlestat", + "valueFontSize": "80%", + "valueMaps": [ + { + "op": "=", + "text": "N/A", + "value": "null" + } + ], + "valueName": "min" + } + ], + "repeat": null, + "repeatIteration": null, + "repeatRowId": null, + "showTitle": false, + "title": "Dashboard Row", + "titleSize": "h6", + "type": "row" + }, + { + "collapse": false, + "collapsed": false, + "panels": [ + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 1, + "fillGradient": 0, + "gridPos": { }, + "id": 8, + "legend": { + "alignAsTable": true, + "avg": false, + "current": true, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "sideWidth": null, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [ ], + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 6, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "sum(rate(kubelet_runtime_operations_total{cluster=\"$cluster\",job=\"kubelet\",instance=~\"$instance\"}[5m])) by (operation_type, instance)", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{instance}} {{operation_type}}", + "refId": "A" + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Operation Rate", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "ops", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "ops", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ] + }, + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 1, + "fillGradient": 0, + "gridPos": { }, + "id": 9, + "legend": { + "alignAsTable": true, + "avg": false, + "current": true, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "sideWidth": null, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [ ], + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 6, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "sum(rate(kubelet_runtime_operations_errors_total{cluster=\"$cluster\",job=\"kubelet\",instance=~\"$instance\"}[5m])) by (instance, operation_type)", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{instance}} {{operation_type}}", + "refId": "A" + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Operation Error Rate", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "ops", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "ops", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + } + ] + } + ], + "repeat": null, + "repeatIteration": null, + "repeatRowId": null, + "showTitle": false, + "title": "Dashboard Row", + "titleSize": "h6", + "type": "row" + }, + { + "collapse": false, + "collapsed": false, + "panels": [ + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 1, + "fillGradient": 0, + "gridPos": { }, + "id": 10, + "legend": { + "alignAsTable": true, + "avg": false, + "current": true, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "sideWidth": null, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [ ], + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 12, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "histogram_quantile(0.99, sum(rate(kubelet_runtime_operations_duration_seconds_bucket{cluster=\"$cluster\",job=\"kubelet\",instance=~\"$instance\"}[5m])) by (instance, operation_type, le))", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{instance}} {{operation_type}}", + "refId": "A" + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Operation duration 99th quantile", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "s", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "s", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ] + } + ], + "repeat": null, + "repeatIteration": null, + "repeatRowId": null, + "showTitle": false, + "title": "Dashboard Row", + "titleSize": "h6", + "type": "row" + }, + { + "collapse": false, + "collapsed": false, + "panels": [ + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 1, + "fillGradient": 0, + "gridPos": { }, + "id": 11, + "legend": { + "alignAsTable": true, + "avg": false, + "current": true, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "sideWidth": null, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [ ], + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 6, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "sum(rate(kubelet_pod_start_duration_seconds_count{cluster=\"$cluster\",job=\"kubelet\",instance=~\"$instance\"}[5m])) by (instance)", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{instance}} pod", + "refId": "A" + }, + { + "expr": "sum(rate(kubelet_pod_worker_duration_seconds_count{cluster=\"$cluster\",job=\"kubelet\",instance=~\"$instance\"}[5m])) by (instance)", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{instance}} worker", + "refId": "B" + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Pod Start Rate", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "ops", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "ops", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + } + ] + }, + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 1, + "fillGradient": 0, + "gridPos": { }, + "id": 12, + "legend": { + "alignAsTable": true, + "avg": false, + "current": true, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "sideWidth": null, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [ ], + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 6, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "histogram_quantile(0.99, sum(rate(kubelet_pod_start_duration_seconds_count{cluster=\"$cluster\",job=\"kubelet\",instance=~\"$instance\"}[5m])) by (instance, le))", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{instance}} pod", + "refId": "A" + }, + { + "expr": "histogram_quantile(0.99, sum(rate(kubelet_pod_worker_duration_seconds_bucket{cluster=\"$cluster\",job=\"kubelet\",instance=~\"$instance\"}[5m])) by (instance, le))", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{instance}} worker", + "refId": "B" + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Pod Start Duration", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "s", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "s", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + } + ] + } + ], + "repeat": null, + "repeatIteration": null, + "repeatRowId": null, + "showTitle": false, + "title": "Dashboard Row", + "titleSize": "h6", + "type": "row" + }, + { + "collapse": false, + "collapsed": false, + "panels": [ + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 1, + "fillGradient": 0, + "gridPos": { }, + "id": 13, + "legend": { + "alignAsTable": true, + "avg": false, + "current": true, + "hideEmpty": true, + "hideZero": true, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "sideWidth": null, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [ ], + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 6, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "sum(rate(storage_operation_duration_seconds_count{cluster=\"$cluster\",job=\"kubelet\",instance=~\"$instance\"}[5m])) by (instance, operation_name, volume_plugin)", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{instance}} {{operation_name}} {{volume_plugin}}", + "refId": "A" + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Storage Operation Rate", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "ops", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "ops", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + } + ] + }, + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 1, + "fillGradient": 0, + "gridPos": { }, + "id": 14, + "legend": { + "alignAsTable": true, + "avg": false, + "current": true, + "hideEmpty": true, + "hideZero": true, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "sideWidth": null, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [ ], + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 6, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "sum(rate(storage_operation_errors_total{cluster=\"$cluster\",job=\"kubelet\",instance=~\"$instance\"}[5m])) by (instance, operation_name, volume_plugin)", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{instance}} {{operation_name}} {{volume_plugin}}", + "refId": "A" + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Storage Operation Error Rate", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "ops", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "ops", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + } + ] + } + ], + "repeat": null, + "repeatIteration": null, + "repeatRowId": null, + "showTitle": false, + "title": "Dashboard Row", + "titleSize": "h6", + "type": "row" + }, + { + "collapse": false, + "collapsed": false, + "panels": [ + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 1, + "fillGradient": 0, + "gridPos": { }, + "id": 15, + "legend": { + "alignAsTable": true, + "avg": false, + "current": true, + "hideEmpty": true, + "hideZero": true, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "sideWidth": null, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [ ], + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 12, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "histogram_quantile(0.99, sum(rate(storage_operation_duration_seconds_bucket{cluster=\"$cluster\", job=\"kubelet\", instance=~\"$instance\"}[5m])) by (instance, operation_name, volume_plugin, le))", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{instance}} {{operation_name}} {{volume_plugin}}", + "refId": "A" + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Storage Operation Duration 99th quantile", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "s", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "s", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + } + ] + } + ], + "repeat": null, + "repeatIteration": null, + "repeatRowId": null, + "showTitle": false, + "title": "Dashboard Row", + "titleSize": "h6", + "type": "row" + }, + { + "collapse": false, + "collapsed": false, + "panels": [ + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 1, + "fillGradient": 0, + "gridPos": { }, + "id": 16, + "legend": { + "alignAsTable": true, + "avg": false, + "current": true, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "sideWidth": null, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [ ], + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 6, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "sum(rate(kubelet_cgroup_manager_duration_seconds_count{cluster=\"$cluster\", job=\"kubelet\", instance=~\"$instance\"}[5m])) by (instance, operation_type)", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{operation_type}}", + "refId": "A" + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Cgroup manager operation rate", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "ops", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "ops", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + } + ] + }, + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 1, + "fillGradient": 0, + "gridPos": { }, + "id": 17, + "legend": { + "alignAsTable": true, + "avg": false, + "current": true, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "sideWidth": null, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [ ], + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 6, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "histogram_quantile(0.99, sum(rate(kubelet_cgroup_manager_duration_seconds_bucket{cluster=\"$cluster\", job=\"kubelet\", instance=~\"$instance\"}[5m])) by (instance, operation_type, le))", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{instance}} {{operation_type}}", + "refId": "A" + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Cgroup manager 99th quantile", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "s", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "s", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + } + ] + } + ], + "repeat": null, + "repeatIteration": null, + "repeatRowId": null, + "showTitle": false, + "title": "Dashboard Row", + "titleSize": "h6", + "type": "row" + }, + { + "collapse": false, + "collapsed": false, + "panels": [ + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "description": "Pod lifecycle event generator", + "fill": 1, + "fillGradient": 0, + "gridPos": { }, + "id": 18, + "legend": { + "alignAsTable": true, + "avg": false, + "current": true, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "sideWidth": null, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [ ], + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 6, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "sum(rate(kubelet_pleg_relist_duration_seconds_count{cluster=\"$cluster\", job=\"kubelet\", instance=~\"$instance\"}[5m])) by (instance)", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{instance}}", + "refId": "A" + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "PLEG relist rate", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "ops", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "ops", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + } + ] + }, + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 1, + "fillGradient": 0, + "gridPos": { }, + "id": 19, + "legend": { + "alignAsTable": true, + "avg": false, + "current": true, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "sideWidth": null, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [ ], + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 6, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "histogram_quantile(0.99, sum(rate(kubelet_pleg_relist_interval_seconds_bucket{cluster=\"$cluster\",job=\"kubelet\",instance=~\"$instance\"}[5m])) by (instance, le))", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{instance}}", + "refId": "A" + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "PLEG relist interval", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "s", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "s", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + } + ] + } + ], + "repeat": null, + "repeatIteration": null, + "repeatRowId": null, + "showTitle": false, + "title": "Dashboard Row", + "titleSize": "h6", + "type": "row" + }, + { + "collapse": false, + "collapsed": false, + "panels": [ + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 1, + "fillGradient": 0, + "gridPos": { }, + "id": 20, + "legend": { + "alignAsTable": true, + "avg": false, + "current": true, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "sideWidth": null, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [ ], + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 12, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "histogram_quantile(0.99, sum(rate(kubelet_pleg_relist_duration_seconds_bucket{cluster=\"$cluster\",job=\"kubelet\",instance=~\"$instance\"}[5m])) by (instance, le))", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{instance}}", + "refId": "A" + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "PLEG relist duration", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "s", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "s", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + } + ] + } + ], + "repeat": null, + "repeatIteration": null, + "repeatRowId": null, + "showTitle": false, + "title": "Dashboard Row", + "titleSize": "h6", + "type": "row" + }, + { + "collapse": false, + "collapsed": false, + "panels": [ + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 1, + "fillGradient": 0, + "gridPos": { }, + "id": 21, + "legend": { + "alignAsTable": false, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": false, + "show": true, + "sideWidth": null, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [ ], + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 12, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "sum(rate(rest_client_requests_total{cluster=\"$cluster\",job=\"kubelet\", instance=~\"$instance\",code=~\"2..\"}[5m]))", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "2xx", + "refId": "A" + }, + { + "expr": "sum(rate(rest_client_requests_total{cluster=\"$cluster\",job=\"kubelet\", instance=~\"$instance\",code=~\"3..\"}[5m]))", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "3xx", + "refId": "B" + }, + { + "expr": "sum(rate(rest_client_requests_total{cluster=\"$cluster\",job=\"kubelet\", instance=~\"$instance\",code=~\"4..\"}[5m]))", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "4xx", + "refId": "C" + }, + { + "expr": "sum(rate(rest_client_requests_total{cluster=\"$cluster\",job=\"kubelet\", instance=~\"$instance\",code=~\"5..\"}[5m]))", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "5xx", + "refId": "D" + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "RPC Rate", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "ops", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "ops", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + } + ] + } + ], + "repeat": null, + "repeatIteration": null, + "repeatRowId": null, + "showTitle": false, + "title": "Dashboard Row", + "titleSize": "h6", + "type": "row" + }, + { + "collapse": false, + "collapsed": false, + "panels": [ + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 1, + "fillGradient": 0, + "gridPos": { }, + "id": 22, + "legend": { + "alignAsTable": true, + "avg": false, + "current": true, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "sideWidth": null, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [ ], + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 12, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "histogram_quantile(0.99, sum(rate(rest_client_request_duration_seconds_bucket{cluster=\"$cluster\",job=\"kubelet\", instance=~\"$instance\"}[5m])) by (instance, verb, url, le))", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{instance}} {{verb}} {{url}}", + "refId": "A" + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Request duration 99th quantile", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "s", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "s", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + } + ] + } + ], + "repeat": null, + "repeatIteration": null, + "repeatRowId": null, + "showTitle": false, + "title": "Dashboard Row", + "titleSize": "h6", + "type": "row" + }, + { + "collapse": false, + "collapsed": false, + "panels": [ + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 1, + "fillGradient": 0, + "gridPos": { }, + "id": 23, + "legend": { + "alignAsTable": false, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": false, + "show": true, + "sideWidth": null, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [ ], + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 4, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "process_resident_memory_bytes{cluster=\"$cluster\",job=\"kubelet\",instance=~\"$instance\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{instance}}", + "refId": "A" + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Memory", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "bytes", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "bytes", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ] + }, + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 1, + "fillGradient": 0, + "gridPos": { }, + "id": 24, + "legend": { + "alignAsTable": false, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": false, + "show": true, + "sideWidth": null, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [ ], + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 4, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "rate(process_cpu_seconds_total{cluster=\"$cluster\",job=\"kubelet\",instance=~\"$instance\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{instance}}", + "refId": "A" + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "CPU usage", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + } + ] + }, + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 1, + "fillGradient": 0, + "gridPos": { }, + "id": 25, + "legend": { + "alignAsTable": false, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": false, + "show": true, + "sideWidth": null, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [ ], + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 4, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "go_goroutines{cluster=\"$cluster\",job=\"kubelet\",instance=~\"$instance\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{instance}}", + "refId": "A" + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Goroutines", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ] + } + ], + "repeat": null, + "repeatIteration": null, + "repeatRowId": null, + "showTitle": false, + "title": "Dashboard Row", + "titleSize": "h6", + "type": "row" + } + ], + "schemaVersion": 14, + "style": "dark", + "tags": [ + "kubernetes" + ], + "templating": { + "list": [ + { + "current": { + "text": "default", + "value": "default" + }, + "hide": 0, + "label": null, + "name": "datasource", + "options": [ ], + "query": "prometheus", + "refresh": 1, + "regex": "", + "type": "datasource" + }, + { + "allValue": null, + "current": { }, + "datasource": "$datasource", + "hide": 2, + "includeAll": false, + "label": "cluster", + "multi": false, + "name": "cluster", + "options": [ ], + "query": "label_values(kube_pod_info, cluster)", + "refresh": 2, + "regex": "", + "sort": 1, + "tagValuesQuery": "", + "tags": [ ], + "tagsQuery": "", + "type": "query", + "useTags": false + }, + { + "allValue": null, + "current": { }, + "datasource": "$datasource", + "hide": 0, + "includeAll": true, + "label": null, + "multi": false, + "name": "instance", + "options": [ ], + "query": "label_values(kubelet_runtime_operations_total{cluster=\"$cluster\", job=\"kubelet\"}, instance)", + "refresh": 2, + "regex": "", + "sort": 1, + "tagValuesQuery": "", + "tags": [ ], + "tagsQuery": "", + "type": "query", + "useTags": false + } + ] + }, + "time": { + "from": "now-1h", + "to": "now" + }, + "timepicker": { + "refresh_intervals": [ + "5s", + "10s", + "30s", + "1m", + "5m", + "15m", + "30m", + "1h", + "2h", + "1d" + ], + "time_options": [ + "5m", + "15m", + "1h", + "6h", + "12h", + "24h", + "2d", + "7d", + "30d" + ] + }, + "timezone": "UTC", + "title": "Kubernetes / Kubelet", + "uid": "3138fa155d5915769fbded898ac09fd9", + "version": 0 +} diff --git a/charts/kubezero-metrics/dashboards/kube-mixin/namespace-by-pod.json b/charts/kubezero-metrics/dashboards/kube-mixin/namespace-by-pod.json new file mode 100644 index 0000000..8a9636d --- /dev/null +++ b/charts/kubezero-metrics/dashboards/kube-mixin/namespace-by-pod.json @@ -0,0 +1,1307 @@ +{ + "__inputs": [ ], + "__requires": [ ], + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": "-- Grafana --", + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "type": "dashboard" + } + ] + }, + "editable": true, + "gnetId": null, + "graphTooltip": 0, + "hideControls": false, + "id": null, + "links": [ ], + "panels": [ + { + "collapse": false, + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 0 + }, + "id": 2, + "panels": [ ], + "repeat": null, + "repeatIteration": null, + "repeatRowId": null, + "showTitle": true, + "title": "Current Bandwidth", + "titleSize": "h6", + "type": "row" + }, + { + "cacheTimeout": null, + "colorBackground": false, + "colorValue": false, + "colors": [ + "#299c46", + "rgba(237, 129, 40, 0.89)", + "#d44a3a" + ], + "datasource": "$datasource", + "decimals": 0, + "format": "time_series", + "gauge": { + "maxValue": 100, + "minValue": 0, + "show": false, + "thresholdLabels": false, + "thresholdMarkers": true + }, + "gridPos": { + "h": 9, + "w": 12, + "x": 0, + "y": 1 + }, + "height": 9, + "id": 3, + "interval": null, + "links": [ ], + "mappingType": 1, + "mappingTypes": [ + { + "name": "value to text", + "value": 1 + }, + { + "name": "range to text", + "value": 2 + } + ], + "maxDataPoints": 100, + "minSpan": 12, + "nullPointMode": "connected", + "nullText": null, + "options": { + "fieldOptions": { + "calcs": [ + "last" + ], + "defaults": { + "max": 10000000000, + "min": 0, + "title": "$namespace", + "unit": "Bps" + }, + "mappings": [ ], + "override": { }, + "thresholds": [ + { + "color": "dark-green", + "index": 0, + "value": null + }, + { + "color": "dark-yellow", + "index": 1, + "value": 5000000000 + }, + { + "color": "dark-red", + "index": 2, + "value": 7000000000 + } + ], + "values": false + } + }, + "postfix": "", + "postfixFontSize": "50%", + "prefix": "", + "prefixFontSize": "50%", + "rangeMaps": [ + { + "from": "null", + "text": "N/A", + "to": "null" + } + ], + "span": 12, + "sparkline": { + "fillColor": "rgba(31, 118, 189, 0.18)", + "full": false, + "lineColor": "rgb(31, 120, 193)", + "show": false + }, + "tableColumn": "", + "targets": [ + { + "expr": "sum(irate(container_network_receive_bytes_total{cluster=\"$cluster\",namespace=~\"$namespace\"}[$interval:$resolution]))", + "format": "time_series", + "instant": null, + "intervalFactor": 1, + "legendFormat": "", + "refId": "A" + } + ], + "thresholds": "", + "timeFrom": null, + "timeShift": null, + "title": "Current Rate of Bytes Received", + "type": "gauge", + "valueFontSize": "80%", + "valueMaps": [ + { + "op": "=", + "text": "N/A", + "value": "null" + } + ], + "valueName": "current" + }, + { + "cacheTimeout": null, + "colorBackground": false, + "colorValue": false, + "colors": [ + "#299c46", + "rgba(237, 129, 40, 0.89)", + "#d44a3a" + ], + "datasource": "$datasource", + "decimals": 0, + "format": "time_series", + "gauge": { + "maxValue": 100, + "minValue": 0, + "show": false, + "thresholdLabels": false, + "thresholdMarkers": true + }, + "gridPos": { + "h": 9, + "w": 12, + "x": 12, + "y": 1 + }, + "height": 9, + "id": 4, + "interval": null, + "links": [ ], + "mappingType": 1, + "mappingTypes": [ + { + "name": "value to text", + "value": 1 + }, + { + "name": "range to text", + "value": 2 + } + ], + "maxDataPoints": 100, + "minSpan": 12, + "nullPointMode": "connected", + "nullText": null, + "options": { + "fieldOptions": { + "calcs": [ + "last" + ], + "defaults": { + "max": 10000000000, + "min": 0, + "title": "$namespace", + "unit": "Bps" + }, + "mappings": [ ], + "override": { }, + "thresholds": [ + { + "color": "dark-green", + "index": 0, + "value": null + }, + { + "color": "dark-yellow", + "index": 1, + "value": 5000000000 + }, + { + "color": "dark-red", + "index": 2, + "value": 7000000000 + } + ], + "values": false + } + }, + "postfix": "", + "postfixFontSize": "50%", + "prefix": "", + "prefixFontSize": "50%", + "rangeMaps": [ + { + "from": "null", + "text": "N/A", + "to": "null" + } + ], + "span": 12, + "sparkline": { + "fillColor": "rgba(31, 118, 189, 0.18)", + "full": false, + "lineColor": "rgb(31, 120, 193)", + "show": false + }, + "tableColumn": "", + "targets": [ + { + "expr": "sum(irate(container_network_transmit_bytes_total{cluster=\"$cluster\",namespace=~\"$namespace\"}[$interval:$resolution]))", + "format": "time_series", + "instant": null, + "intervalFactor": 1, + "legendFormat": "", + "refId": "A" + } + ], + "thresholds": "", + "timeFrom": null, + "timeShift": null, + "title": "Current Rate of Bytes Transmitted", + "type": "gauge", + "valueFontSize": "80%", + "valueMaps": [ + { + "op": "=", + "text": "N/A", + "value": "null" + } + ], + "valueName": "current" + }, + { + "columns": [ + { + "text": "Time", + "value": "Time" + }, + { + "text": "Value #A", + "value": "Value #A" + }, + { + "text": "Value #B", + "value": "Value #B" + }, + { + "text": "Value #C", + "value": "Value #C" + }, + { + "text": "Value #D", + "value": "Value #D" + }, + { + "text": "Value #E", + "value": "Value #E" + }, + { + "text": "Value #F", + "value": "Value #F" + }, + { + "text": "pod", + "value": "pod" + } + ], + "datasource": "$datasource", + "fill": 1, + "fontSize": "100%", + "gridPos": { + "h": 9, + "w": 24, + "x": 0, + "y": 10 + }, + "id": 5, + "lines": true, + "linewidth": 1, + "links": [ ], + "minSpan": 24, + "nullPointMode": "null as zero", + "renderer": "flot", + "scroll": true, + "showHeader": true, + "sort": { + "col": 0, + "desc": false + }, + "spaceLength": 10, + "span": 24, + "styles": [ + { + "alias": "Time", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "Time", + "thresholds": [ ], + "type": "hidden", + "unit": "short" + }, + { + "alias": "Bandwidth Received", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "Value #A", + "thresholds": [ ], + "type": "number", + "unit": "Bps" + }, + { + "alias": "Bandwidth Transmitted", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "Value #B", + "thresholds": [ ], + "type": "number", + "unit": "Bps" + }, + { + "alias": "Rate of Received Packets", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "Value #C", + "thresholds": [ ], + "type": "number", + "unit": "pps" + }, + { + "alias": "Rate of Transmitted Packets", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "Value #D", + "thresholds": [ ], + "type": "number", + "unit": "pps" + }, + { + "alias": "Rate of Received Packets Dropped", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "Value #E", + "thresholds": [ ], + "type": "number", + "unit": "pps" + }, + { + "alias": "Rate of Transmitted Packets Dropped", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "Value #F", + "thresholds": [ ], + "type": "number", + "unit": "pps" + }, + { + "alias": "Pod", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": true, + "linkTooltip": "Drill down", + "linkUrl": "d/7a18067ce943a40ae25454675c19ff5c/kubernetes-networking-pod?orgId=1&refresh=30s&var-namespace=$namespace&var-pod=$__cell", + "pattern": "pod", + "thresholds": [ ], + "type": "number", + "unit": "short" + } + ], + "targets": [ + { + "expr": "sum(irate(container_network_receive_bytes_total{cluster=\"$cluster\",namespace=~\"$namespace\"}[$interval:$resolution])) by (pod)", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "A", + "step": 10 + }, + { + "expr": "sum(irate(container_network_transmit_bytes_total{cluster=\"$cluster\",namespace=~\"$namespace\"}[$interval:$resolution])) by (pod)", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "B", + "step": 10 + }, + { + "expr": "sum(irate(container_network_receive_packets_total{cluster=\"$cluster\",namespace=~\"$namespace\"}[$interval:$resolution])) by (pod)", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "C", + "step": 10 + }, + { + "expr": "sum(irate(container_network_transmit_packets_total{cluster=\"$cluster\",namespace=~\"$namespace\"}[$interval:$resolution])) by (pod)", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "D", + "step": 10 + }, + { + "expr": "sum(irate(container_network_receive_packets_dropped_total{cluster=\"$cluster\",namespace=~\"$namespace\"}[$interval:$resolution])) by (pod)", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "E", + "step": 10 + }, + { + "expr": "sum(irate(container_network_transmit_packets_dropped_total{cluster=\"$cluster\",namespace=~\"$namespace\"}[$interval:$resolution])) by (pod)", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "F", + "step": 10 + } + ], + "timeFrom": null, + "timeShift": null, + "title": "Current Status", + "type": "table" + }, + { + "collapse": false, + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 19 + }, + "id": 6, + "panels": [ ], + "repeat": null, + "repeatIteration": null, + "repeatRowId": null, + "showTitle": true, + "title": "Bandwidth", + "titleSize": "h6", + "type": "row" + }, + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 2, + "fillGradient": 0, + "gridPos": { + "h": 9, + "w": 12, + "x": 0, + "y": 20 + }, + "id": 7, + "legend": { + "alignAsTable": false, + "avg": false, + "current": false, + "hideEmpty": true, + "hideZero": true, + "max": false, + "min": false, + "rightSide": false, + "show": true, + "sideWidth": null, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "links": [ ], + "minSpan": 12, + "nullPointMode": "connected", + "paceLength": 10, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 12, + "stack": true, + "steppedLine": false, + "targets": [ + { + "expr": "sum(irate(container_network_receive_bytes_total{cluster=\"$cluster\",namespace=~\"$namespace\"}[$interval:$resolution])) by (pod)", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{pod}}", + "refId": "A", + "step": 10 + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Receive Bandwidth", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "Bps", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "Bps", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + } + ] + }, + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 2, + "fillGradient": 0, + "gridPos": { + "h": 9, + "w": 12, + "x": 12, + "y": 20 + }, + "id": 8, + "legend": { + "alignAsTable": false, + "avg": false, + "current": false, + "hideEmpty": true, + "hideZero": true, + "max": false, + "min": false, + "rightSide": false, + "show": true, + "sideWidth": null, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "links": [ ], + "minSpan": 12, + "nullPointMode": "connected", + "paceLength": 10, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 12, + "stack": true, + "steppedLine": false, + "targets": [ + { + "expr": "sum(irate(container_network_transmit_bytes_total{cluster=\"$cluster\",namespace=~\"$namespace\"}[$interval:$resolution])) by (pod)", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{pod}}", + "refId": "A", + "step": 10 + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Transmit Bandwidth", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "Bps", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "Bps", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + } + ] + }, + { + "collapse": true, + "collapsed": true, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 29 + }, + "id": 9, + "panels": [ + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 2, + "fillGradient": 0, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 30 + }, + "id": 10, + "legend": { + "alignAsTable": false, + "avg": false, + "current": false, + "hideEmpty": true, + "hideZero": true, + "max": false, + "min": false, + "rightSide": false, + "show": true, + "sideWidth": null, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "links": [ ], + "minSpan": 12, + "nullPointMode": "connected", + "paceLength": 10, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 12, + "stack": true, + "steppedLine": false, + "targets": [ + { + "expr": "sum(irate(container_network_receive_packets_total{cluster=\"$cluster\",namespace=~\"$namespace\"}[$interval:$resolution])) by (pod)", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{pod}}", + "refId": "A", + "step": 10 + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Rate of Received Packets", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "pps", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "pps", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + } + ] + }, + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 2, + "fillGradient": 0, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 30 + }, + "id": 11, + "legend": { + "alignAsTable": false, + "avg": false, + "current": false, + "hideEmpty": true, + "hideZero": true, + "max": false, + "min": false, + "rightSide": false, + "show": true, + "sideWidth": null, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "links": [ ], + "minSpan": 12, + "nullPointMode": "connected", + "paceLength": 10, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 12, + "stack": true, + "steppedLine": false, + "targets": [ + { + "expr": "sum(irate(container_network_transmit_packets_total{cluster=\"$cluster\",namespace=~\"$namespace\"}[$interval:$resolution])) by (pod)", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{pod}}", + "refId": "A", + "step": 10 + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Rate of Transmitted Packets", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "pps", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "pps", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + } + ] + } + ], + "repeat": null, + "repeatIteration": null, + "repeatRowId": null, + "showTitle": true, + "title": "Packets", + "titleSize": "h6", + "type": "row" + }, + { + "collapse": true, + "collapsed": true, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 30 + }, + "id": 12, + "panels": [ + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 2, + "fillGradient": 0, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 40 + }, + "id": 13, + "legend": { + "alignAsTable": false, + "avg": false, + "current": false, + "hideEmpty": true, + "hideZero": true, + "max": false, + "min": false, + "rightSide": false, + "show": true, + "sideWidth": null, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "links": [ ], + "minSpan": 12, + "nullPointMode": "connected", + "paceLength": 10, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 12, + "stack": true, + "steppedLine": false, + "targets": [ + { + "expr": "sum(irate(container_network_receive_packets_dropped_total{cluster=\"$cluster\",namespace=~\"$namespace\"}[$interval:$resolution])) by (pod)", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{pod}}", + "refId": "A", + "step": 10 + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Rate of Received Packets Dropped", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "pps", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "pps", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + } + ] + }, + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 2, + "fillGradient": 0, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 40 + }, + "id": 14, + "legend": { + "alignAsTable": false, + "avg": false, + "current": false, + "hideEmpty": true, + "hideZero": true, + "max": false, + "min": false, + "rightSide": false, + "show": true, + "sideWidth": null, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "links": [ ], + "minSpan": 12, + "nullPointMode": "connected", + "paceLength": 10, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 12, + "stack": true, + "steppedLine": false, + "targets": [ + { + "expr": "sum(irate(container_network_transmit_packets_dropped_total{cluster=\"$cluster\",namespace=~\"$namespace\"}[$interval:$resolution])) by (pod)", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{pod}}", + "refId": "A", + "step": 10 + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Rate of Transmitted Packets Dropped", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "pps", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "pps", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + } + ] + } + ], + "repeat": null, + "repeatIteration": null, + "repeatRowId": null, + "showTitle": true, + "title": "Errors", + "titleSize": "h6", + "type": "row" + } + ], + "refresh": "10s", + "rows": [ ], + "schemaVersion": 18, + "style": "dark", + "tags": [ + "kubernetes" + ], + "templating": { + "list": [ + { + "current": { + "text": "default", + "value": "default" + }, + "hide": 0, + "label": null, + "name": "datasource", + "options": [ ], + "query": "prometheus", + "refresh": 1, + "regex": "", + "type": "datasource" + }, + { + "allValue": null, + "current": { }, + "datasource": "$datasource", + "hide": 2, + "includeAll": false, + "label": null, + "multi": false, + "name": "cluster", + "options": [ ], + "query": "label_values(kube_pod_info, cluster)", + "refresh": 2, + "regex": "", + "sort": 0, + "tagValuesQuery": "", + "tags": [ ], + "tagsQuery": "", + "type": "query", + "useTags": false + }, + { + "allValue": ".+", + "auto": false, + "auto_count": 30, + "auto_min": "10s", + "current": { + "text": "kube-system", + "value": "kube-system" + }, + "datasource": "$datasource", + "definition": "label_values(container_network_receive_packets_total{cluster=\"$cluster\"}, namespace)", + "hide": 0, + "includeAll": true, + "label": null, + "multi": false, + "name": "namespace", + "options": [ ], + "query": "label_values(container_network_receive_packets_total{cluster=\"$cluster\"}, namespace)", + "refresh": 2, + "regex": "", + "skipUrlSync": false, + "sort": 1, + "tagValuesQuery": "", + "tags": [ ], + "tagsQuery": "", + "type": "query", + "useTags": false + }, + { + "allValue": null, + "auto": false, + "auto_count": 30, + "auto_min": "10s", + "current": { + "text": "5m", + "value": "5m" + }, + "datasource": "$datasource", + "hide": 0, + "includeAll": false, + "label": null, + "multi": false, + "name": "resolution", + "options": [ + { + "selected": false, + "text": "30s", + "value": "30s" + }, + { + "selected": true, + "text": "5m", + "value": "5m" + }, + { + "selected": false, + "text": "1h", + "value": "1h" + } + ], + "query": "30s,5m,1h", + "refresh": 2, + "regex": "", + "skipUrlSync": false, + "sort": 1, + "tagValuesQuery": "", + "tags": [ ], + "tagsQuery": "", + "type": "interval", + "useTags": false + }, + { + "allValue": null, + "auto": false, + "auto_count": 30, + "auto_min": "10s", + "current": { + "text": "5m", + "value": "5m" + }, + "datasource": "$datasource", + "hide": 2, + "includeAll": false, + "label": null, + "multi": false, + "name": "interval", + "options": [ + { + "selected": true, + "text": "4h", + "value": "4h" + } + ], + "query": "4h", + "refresh": 2, + "regex": "", + "skipUrlSync": false, + "sort": 1, + "tagValuesQuery": "", + "tags": [ ], + "tagsQuery": "", + "type": "interval", + "useTags": false + } + ] + }, + "time": { + "from": "now-1h", + "to": "now" + }, + "timepicker": { + "refresh_intervals": [ + "5s", + "10s", + "30s", + "1m", + "5m", + "15m", + "30m", + "1h", + "2h", + "1d" + ], + "time_options": [ + "5m", + "15m", + "1h", + "6h", + "12h", + "24h", + "2d", + "7d", + "30d" + ] + }, + "timezone": "UTC", + "title": "Kubernetes / Networking / Namespace (Pods)", + "uid": "8b7a8b326d7a6f1f04244066368c67af", + "version": 0 +} diff --git a/charts/kubezero-metrics/dashboards/kube-mixin/namespace-by-workload.json b/charts/kubezero-metrics/dashboards/kube-mixin/namespace-by-workload.json new file mode 100644 index 0000000..b8b81e8 --- /dev/null +++ b/charts/kubezero-metrics/dashboards/kube-mixin/namespace-by-workload.json @@ -0,0 +1,1547 @@ +{ + "__inputs": [ ], + "__requires": [ ], + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": "-- Grafana --", + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "type": "dashboard" + } + ] + }, + "editable": true, + "gnetId": null, + "graphTooltip": 0, + "hideControls": false, + "id": null, + "links": [ ], + "panels": [ + { + "collapse": false, + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 0 + }, + "id": 2, + "panels": [ ], + "repeat": null, + "repeatIteration": null, + "repeatRowId": null, + "showTitle": true, + "title": "Current Bandwidth", + "titleSize": "h6", + "type": "row" + }, + { + "aliasColors": { }, + "bars": true, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 2, + "fillGradient": 0, + "gridPos": { + "h": 9, + "w": 12, + "x": 0, + "y": 1 + }, + "id": 3, + "legend": { + "alignAsTable": true, + "avg": false, + "current": true, + "hideEmpty": true, + "hideZero": true, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "sideWidth": null, + "sort": "current", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": false, + "linewidth": 1, + "links": [ ], + "minSpan": 24, + "nullPointMode": "null", + "paceLength": 10, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 24, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "sort_desc(sum(irate(container_network_receive_bytes_total{cluster=\"$cluster\",namespace=~\"$namespace\"}[$interval:$resolution])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\",namespace=~\"$namespace\", workload=~\".+\", workload_type=\"$type\"}) by (workload))\n", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{ workload }}", + "refId": "A", + "step": 10 + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Current Rate of Bytes Received", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "series", + "name": null, + "show": false, + "values": [ + "current" + ] + }, + "yaxes": [ + { + "format": "Bps", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "Bps", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + } + ] + }, + { + "aliasColors": { }, + "bars": true, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 2, + "fillGradient": 0, + "gridPos": { + "h": 9, + "w": 12, + "x": 12, + "y": 1 + }, + "id": 4, + "legend": { + "alignAsTable": true, + "avg": false, + "current": true, + "hideEmpty": true, + "hideZero": true, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "sideWidth": null, + "sort": "current", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": false, + "linewidth": 1, + "links": [ ], + "minSpan": 24, + "nullPointMode": "null", + "paceLength": 10, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 24, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "sort_desc(sum(irate(container_network_transmit_bytes_total{cluster=\"$cluster\",namespace=~\"$namespace\"}[$interval:$resolution])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\",namespace=~\"$namespace\", workload=~\".+\", workload_type=\"$type\"}) by (workload))\n", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{ workload }}", + "refId": "A", + "step": 10 + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Current Rate of Bytes Transmitted", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "series", + "name": null, + "show": false, + "values": [ + "current" + ] + }, + "yaxes": [ + { + "format": "Bps", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "Bps", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + } + ] + }, + { + "columns": [ + { + "text": "Time", + "value": "Time" + }, + { + "text": "Value #A", + "value": "Value #A" + }, + { + "text": "Value #B", + "value": "Value #B" + }, + { + "text": "Value #C", + "value": "Value #C" + }, + { + "text": "Value #D", + "value": "Value #D" + }, + { + "text": "Value #E", + "value": "Value #E" + }, + { + "text": "Value #F", + "value": "Value #F" + }, + { + "text": "Value #G", + "value": "Value #G" + }, + { + "text": "Value #H", + "value": "Value #H" + }, + { + "text": "workload", + "value": "workload" + } + ], + "datasource": "$datasource", + "fill": 1, + "fontSize": "90%", + "gridPos": { + "h": 9, + "w": 24, + "x": 0, + "y": 10 + }, + "id": 5, + "lines": true, + "linewidth": 1, + "links": [ ], + "minSpan": 24, + "nullPointMode": "null as zero", + "renderer": "flot", + "scroll": true, + "showHeader": true, + "sort": { + "col": 0, + "desc": false + }, + "spaceLength": 10, + "span": 24, + "styles": [ + { + "alias": "Time", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "Time", + "thresholds": [ ], + "type": "hidden", + "unit": "short" + }, + { + "alias": "Current Bandwidth Received", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "Value #A", + "thresholds": [ ], + "type": "number", + "unit": "Bps" + }, + { + "alias": "Current Bandwidth Transmitted", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "Value #B", + "thresholds": [ ], + "type": "number", + "unit": "Bps" + }, + { + "alias": "Average Bandwidth Received", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "Value #C", + "thresholds": [ ], + "type": "number", + "unit": "Bps" + }, + { + "alias": "Average Bandwidth Transmitted", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "Value #D", + "thresholds": [ ], + "type": "number", + "unit": "Bps" + }, + { + "alias": "Rate of Received Packets", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "Value #E", + "thresholds": [ ], + "type": "number", + "unit": "pps" + }, + { + "alias": "Rate of Transmitted Packets", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "Value #F", + "thresholds": [ ], + "type": "number", + "unit": "pps" + }, + { + "alias": "Rate of Received Packets Dropped", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "Value #G", + "thresholds": [ ], + "type": "number", + "unit": "pps" + }, + { + "alias": "Rate of Transmitted Packets Dropped", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": false, + "linkTooltip": "Drill down", + "linkUrl": "", + "pattern": "Value #H", + "thresholds": [ ], + "type": "number", + "unit": "pps" + }, + { + "alias": "Workload", + "colorMode": null, + "colors": [ ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "link": true, + "linkTooltip": "Drill down", + "linkUrl": "d/728bf77cc1166d2f3133bf25846876cc/kubernetes-networking-workload?orgId=1&refresh=30s&var-namespace=$namespace&var-type=$type&var-workload=$__cell", + "pattern": "workload", + "thresholds": [ ], + "type": "number", + "unit": "short" + } + ], + "targets": [ + { + "expr": "sort_desc(sum(irate(container_network_receive_bytes_total{cluster=\"$cluster\",namespace=~\"$namespace\"}[$interval:$resolution])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\",namespace=~\"$namespace\", workload=~\".+\", workload_type=\"$type\"}) by (workload))\n", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "A", + "step": 10 + }, + { + "expr": "sort_desc(sum(irate(container_network_transmit_bytes_total{cluster=\"$cluster\",namespace=~\"$namespace\"}[$interval:$resolution])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\",namespace=~\"$namespace\", workload=~\".+\", workload_type=\"$type\"}) by (workload))\n", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "B", + "step": 10 + }, + { + "expr": "sort_desc(avg(irate(container_network_receive_bytes_total{cluster=\"$cluster\",namespace=~\"$namespace\"}[$interval:$resolution])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\",namespace=~\"$namespace\", workload=~\".+\", workload_type=\"$type\"}) by (workload))\n", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "C", + "step": 10 + }, + { + "expr": "sort_desc(avg(irate(container_network_transmit_bytes_total{cluster=\"$cluster\",namespace=~\"$namespace\"}[$interval:$resolution])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\",namespace=~\"$namespace\", workload=~\".+\", workload_type=\"$type\"}) by (workload))\n", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "D", + "step": 10 + }, + { + "expr": "sort_desc(sum(irate(container_network_receive_packets_total{cluster=\"$cluster\",namespace=~\"$namespace\"}[$interval:$resolution])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\",namespace=~\"$namespace\", workload=~\".+\", workload_type=\"$type\"}) by (workload))\n", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "E", + "step": 10 + }, + { + "expr": "sort_desc(sum(irate(container_network_transmit_packets_total{cluster=\"$cluster\",namespace=~\"$namespace\"}[$interval:$resolution])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\",namespace=~\"$namespace\", workload=~\".+\", workload_type=\"$type\"}) by (workload))\n", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "F", + "step": 10 + }, + { + "expr": "sort_desc(sum(irate(container_network_receive_packets_dropped_total{cluster=\"$cluster\",namespace=~\"$namespace\"}[$interval:$resolution])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\",namespace=~\"$namespace\", workload=~\".+\", workload_type=\"$type\"}) by (workload))\n", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "G", + "step": 10 + }, + { + "expr": "sort_desc(sum(irate(container_network_transmit_packets_dropped_total{cluster=\"$cluster\",namespace=~\"$namespace\"}[$interval:$resolution])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\",namespace=~\"$namespace\", workload=~\".+\", workload_type=\"$type\"}) by (workload))\n", + "format": "table", + "instant": true, + "intervalFactor": 2, + "legendFormat": "", + "refId": "H", + "step": 10 + } + ], + "timeFrom": null, + "timeShift": null, + "title": "Current Status", + "type": "table" + }, + { + "collapse": true, + "collapsed": true, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 19 + }, + "id": 6, + "panels": [ + { + "aliasColors": { }, + "bars": true, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 2, + "fillGradient": 0, + "gridPos": { + "h": 9, + "w": 12, + "x": 0, + "y": 20 + }, + "id": 7, + "legend": { + "alignAsTable": true, + "avg": false, + "current": true, + "hideEmpty": true, + "hideZero": true, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "sideWidth": null, + "sort": "current", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": false, + "linewidth": 1, + "links": [ ], + "minSpan": 24, + "nullPointMode": "null", + "paceLength": 10, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 24, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "sort_desc(avg(irate(container_network_receive_bytes_total{cluster=\"$cluster\",namespace=~\"$namespace\"}[$interval:$resolution])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\",namespace=~\"$namespace\", workload=~\".+\", workload_type=\"$type\"}) by (workload))\n", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{ workload }}", + "refId": "A", + "step": 10 + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Average Rate of Bytes Received", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "series", + "name": null, + "show": false, + "values": [ + "current" + ] + }, + "yaxes": [ + { + "format": "Bps", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "Bps", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + } + ] + }, + { + "aliasColors": { }, + "bars": true, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 2, + "fillGradient": 0, + "gridPos": { + "h": 9, + "w": 12, + "x": 12, + "y": 20 + }, + "id": 8, + "legend": { + "alignAsTable": true, + "avg": false, + "current": true, + "hideEmpty": true, + "hideZero": true, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "sideWidth": null, + "sort": "current", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": false, + "linewidth": 1, + "links": [ ], + "minSpan": 24, + "nullPointMode": "null", + "paceLength": 10, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 24, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "sort_desc(avg(irate(container_network_transmit_bytes_total{cluster=\"$cluster\",namespace=~\"$namespace\"}[$interval:$resolution])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\",namespace=~\"$namespace\", workload=~\".+\", workload_type=\"$type\"}) by (workload))\n", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{ workload }}", + "refId": "A", + "step": 10 + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Average Rate of Bytes Transmitted", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "series", + "name": null, + "show": false, + "values": [ + "current" + ] + }, + "yaxes": [ + { + "format": "Bps", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "Bps", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + } + ] + } + ], + "repeat": null, + "repeatIteration": null, + "repeatRowId": null, + "showTitle": true, + "title": "Average Bandwidth", + "titleSize": "h6", + "type": "row" + }, + { + "collapse": false, + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 29 + }, + "id": 9, + "panels": [ ], + "repeat": null, + "repeatIteration": null, + "repeatRowId": null, + "showTitle": true, + "title": "Bandwidth HIstory", + "titleSize": "h6", + "type": "row" + }, + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 2, + "fillGradient": 0, + "gridPos": { + "h": 9, + "w": 12, + "x": 0, + "y": 38 + }, + "id": 10, + "legend": { + "alignAsTable": false, + "avg": false, + "current": false, + "hideEmpty": true, + "hideZero": true, + "max": false, + "min": false, + "rightSide": false, + "show": true, + "sideWidth": null, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "links": [ ], + "minSpan": 12, + "nullPointMode": "connected", + "paceLength": 10, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 12, + "stack": true, + "steppedLine": false, + "targets": [ + { + "expr": "sort_desc(sum(irate(container_network_receive_bytes_total{cluster=\"$cluster\",namespace=~\"$namespace\"}[$interval:$resolution])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\",namespace=~\"$namespace\", workload=~\".+\", workload_type=\"$type\"}) by (workload))\n", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{workload}}", + "refId": "A", + "step": 10 + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Receive Bandwidth", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "Bps", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "Bps", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + } + ] + }, + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 2, + "fillGradient": 0, + "gridPos": { + "h": 9, + "w": 12, + "x": 12, + "y": 38 + }, + "id": 11, + "legend": { + "alignAsTable": false, + "avg": false, + "current": false, + "hideEmpty": true, + "hideZero": true, + "max": false, + "min": false, + "rightSide": false, + "show": true, + "sideWidth": null, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "links": [ ], + "minSpan": 12, + "nullPointMode": "connected", + "paceLength": 10, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 12, + "stack": true, + "steppedLine": false, + "targets": [ + { + "expr": "sort_desc(sum(irate(container_network_transmit_bytes_total{cluster=\"$cluster\",namespace=~\"$namespace\"}[$interval:$resolution])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\",namespace=~\"$namespace\", workload=~\".+\", workload_type=\"$type\"}) by (workload))\n", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{workload}}", + "refId": "A", + "step": 10 + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Transmit Bandwidth", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "Bps", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "Bps", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + } + ] + }, + { + "collapse": true, + "collapsed": true, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 39 + }, + "id": 12, + "panels": [ + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 2, + "fillGradient": 0, + "gridPos": { + "h": 9, + "w": 12, + "x": 0, + "y": 40 + }, + "id": 13, + "legend": { + "alignAsTable": false, + "avg": false, + "current": false, + "hideEmpty": true, + "hideZero": true, + "max": false, + "min": false, + "rightSide": false, + "show": true, + "sideWidth": null, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "links": [ ], + "minSpan": 12, + "nullPointMode": "connected", + "paceLength": 10, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 12, + "stack": true, + "steppedLine": false, + "targets": [ + { + "expr": "sort_desc(sum(irate(container_network_receive_packets_total{cluster=\"$cluster\",namespace=~\"$namespace\"}[$interval:$resolution])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\",namespace=~\"$namespace\", workload=~\".+\", workload_type=\"$type\"}) by (workload))\n", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{workload}}", + "refId": "A", + "step": 10 + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Rate of Received Packets", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "pps", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "pps", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + } + ] + }, + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 2, + "fillGradient": 0, + "gridPos": { + "h": 9, + "w": 12, + "x": 12, + "y": 40 + }, + "id": 14, + "legend": { + "alignAsTable": false, + "avg": false, + "current": false, + "hideEmpty": true, + "hideZero": true, + "max": false, + "min": false, + "rightSide": false, + "show": true, + "sideWidth": null, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "links": [ ], + "minSpan": 12, + "nullPointMode": "connected", + "paceLength": 10, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 12, + "stack": true, + "steppedLine": false, + "targets": [ + { + "expr": "sort_desc(sum(irate(container_network_transmit_packets_total{cluster=\"$cluster\",namespace=~\"$namespace\"}[$interval:$resolution])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\",namespace=~\"$namespace\", workload=~\".+\", workload_type=\"$type\"}) by (workload))\n", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{workload}}", + "refId": "A", + "step": 10 + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Rate of Transmitted Packets", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "pps", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "pps", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + } + ] + } + ], + "repeat": null, + "repeatIteration": null, + "repeatRowId": null, + "showTitle": true, + "title": "Packets", + "titleSize": "h6", + "type": "row" + }, + { + "collapse": true, + "collapsed": true, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 40 + }, + "id": 15, + "panels": [ + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 2, + "fillGradient": 0, + "gridPos": { + "h": 9, + "w": 12, + "x": 0, + "y": 41 + }, + "id": 16, + "legend": { + "alignAsTable": false, + "avg": false, + "current": false, + "hideEmpty": true, + "hideZero": true, + "max": false, + "min": false, + "rightSide": false, + "show": true, + "sideWidth": null, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "links": [ ], + "minSpan": 12, + "nullPointMode": "connected", + "paceLength": 10, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 12, + "stack": true, + "steppedLine": false, + "targets": [ + { + "expr": "sort_desc(sum(irate(container_network_receive_packets_dropped_total{cluster=\"$cluster\",namespace=~\"$namespace\"}[$interval:$resolution])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\",namespace=~\"$namespace\", workload=~\".+\", workload_type=\"$type\"}) by (workload))\n", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{workload}}", + "refId": "A", + "step": 10 + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Rate of Received Packets Dropped", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "pps", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "pps", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + } + ] + }, + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 2, + "fillGradient": 0, + "gridPos": { + "h": 9, + "w": 12, + "x": 12, + "y": 41 + }, + "id": 17, + "legend": { + "alignAsTable": false, + "avg": false, + "current": false, + "hideEmpty": true, + "hideZero": true, + "max": false, + "min": false, + "rightSide": false, + "show": true, + "sideWidth": null, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "links": [ ], + "minSpan": 12, + "nullPointMode": "connected", + "paceLength": 10, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 12, + "stack": true, + "steppedLine": false, + "targets": [ + { + "expr": "sort_desc(sum(irate(container_network_transmit_packets_dropped_total{cluster=\"$cluster\",namespace=~\"$namespace\"}[$interval:$resolution])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\",namespace=~\"$namespace\", workload=~\".+\", workload_type=\"$type\"}) by (workload))\n", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{workload}}", + "refId": "A", + "step": 10 + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Rate of Transmitted Packets Dropped", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "pps", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "pps", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + } + ] + } + ], + "repeat": null, + "repeatIteration": null, + "repeatRowId": null, + "showTitle": true, + "title": "Errors", + "titleSize": "h6", + "type": "row" + } + ], + "refresh": "10s", + "rows": [ ], + "schemaVersion": 18, + "style": "dark", + "tags": [ + "kubernetes" + ], + "templating": { + "list": [ + { + "current": { + "text": "default", + "value": "default" + }, + "hide": 0, + "label": null, + "name": "datasource", + "options": [ ], + "query": "prometheus", + "refresh": 1, + "regex": "", + "type": "datasource" + }, + { + "allValue": null, + "current": { }, + "datasource": "$datasource", + "hide": 2, + "includeAll": false, + "label": null, + "multi": false, + "name": "cluster", + "options": [ ], + "query": "label_values(kube_pod_info, cluster)", + "refresh": 2, + "regex": "", + "sort": 0, + "tagValuesQuery": "", + "tags": [ ], + "tagsQuery": "", + "type": "query", + "useTags": false + }, + { + "allValue": null, + "auto": false, + "auto_count": 30, + "auto_min": "10s", + "current": { + "text": "kube-system", + "value": "kube-system" + }, + "datasource": "$datasource", + "definition": "label_values(container_network_receive_packets_total{cluster=\"$cluster\"}, namespace)", + "hide": 0, + "includeAll": false, + "label": null, + "multi": false, + "name": "namespace", + "options": [ ], + "query": "label_values(container_network_receive_packets_total{cluster=\"$cluster\"}, namespace)", + "refresh": 2, + "regex": "", + "skipUrlSync": false, + "sort": 1, + "tagValuesQuery": "", + "tags": [ ], + "tagsQuery": "", + "type": "query", + "useTags": false + }, + { + "allValue": null, + "auto": false, + "auto_count": 30, + "auto_min": "10s", + "current": { + "text": "deployment", + "value": "deployment" + }, + "datasource": "$datasource", + "definition": "label_values(namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\",namespace=~\"$namespace\", workload=~\".+\"}, workload_type)", + "hide": 0, + "includeAll": false, + "label": null, + "multi": false, + "name": "type", + "options": [ ], + "query": "label_values(namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\",namespace=~\"$namespace\", workload=~\".+\"}, workload_type)", + "refresh": 2, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "tagValuesQuery": "", + "tags": [ ], + "tagsQuery": "", + "type": "query", + "useTags": false + }, + { + "allValue": null, + "auto": false, + "auto_count": 30, + "auto_min": "10s", + "current": { + "text": "5m", + "value": "5m" + }, + "datasource": "$datasource", + "hide": 0, + "includeAll": false, + "label": null, + "multi": false, + "name": "resolution", + "options": [ + { + "selected": false, + "text": "30s", + "value": "30s" + }, + { + "selected": true, + "text": "5m", + "value": "5m" + }, + { + "selected": false, + "text": "1h", + "value": "1h" + } + ], + "query": "30s,5m,1h", + "refresh": 2, + "regex": "", + "skipUrlSync": false, + "sort": 1, + "tagValuesQuery": "", + "tags": [ ], + "tagsQuery": "", + "type": "interval", + "useTags": false + }, + { + "allValue": null, + "auto": false, + "auto_count": 30, + "auto_min": "10s", + "current": { + "text": "5m", + "value": "5m" + }, + "datasource": "$datasource", + "hide": 2, + "includeAll": false, + "label": null, + "multi": false, + "name": "interval", + "options": [ + { + "selected": true, + "text": "4h", + "value": "4h" + } + ], + "query": "4h", + "refresh": 2, + "regex": "", + "skipUrlSync": false, + "sort": 1, + "tagValuesQuery": "", + "tags": [ ], + "tagsQuery": "", + "type": "interval", + "useTags": false + } + ] + }, + "time": { + "from": "now-1h", + "to": "now" + }, + "timepicker": { + "refresh_intervals": [ + "5s", + "10s", + "30s", + "1m", + "5m", + "15m", + "30m", + "1h", + "2h", + "1d" + ], + "time_options": [ + "5m", + "15m", + "1h", + "6h", + "12h", + "24h", + "2d", + "7d", + "30d" + ] + }, + "timezone": "UTC", + "title": "Kubernetes / Networking / Namespace (Workload)", + "uid": "bbb2a765a623ae38130206c7d94a160f", + "version": 0 +} diff --git a/charts/kubezero-metrics/dashboards/kube-mixin/persistentvolumesusage.json b/charts/kubezero-metrics/dashboards/kube-mixin/persistentvolumesusage.json new file mode 100644 index 0000000..19fee1e --- /dev/null +++ b/charts/kubezero-metrics/dashboards/kube-mixin/persistentvolumesusage.json @@ -0,0 +1,494 @@ +{ + "__inputs": [ ], + "__requires": [ ], + "annotations": { + "list": [ ] + }, + "editable": false, + "gnetId": null, + "graphTooltip": 0, + "hideControls": false, + "id": null, + "links": [ ], + "refresh": "10s", + "rows": [ + { + "collapse": false, + "collapsed": false, + "panels": [ + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 1, + "fillGradient": 0, + "gridPos": { }, + "id": 2, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sideWidth": null, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [ ], + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 9, + "stack": true, + "steppedLine": false, + "targets": [ + { + "expr": "(\n sum without(instance, node) (kubelet_volume_stats_capacity_bytes{cluster=\"$cluster\", job=\"kubelet\", namespace=\"$namespace\", persistentvolumeclaim=\"$volume\"})\n -\n sum without(instance, node) (kubelet_volume_stats_available_bytes{cluster=\"$cluster\", job=\"kubelet\", namespace=\"$namespace\", persistentvolumeclaim=\"$volume\"})\n)\n", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "Used Space", + "refId": "A" + }, + { + "expr": "sum without(instance, node) (kubelet_volume_stats_available_bytes{cluster=\"$cluster\", job=\"kubelet\", namespace=\"$namespace\", persistentvolumeclaim=\"$volume\"})\n", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "Free Space", + "refId": "B" + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Volume Space Usage", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "bytes", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "bytes", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + } + ] + }, + { + "cacheTimeout": null, + "colorBackground": false, + "colorValue": false, + "colors": [ + "rgba(50, 172, 45, 0.97)", + "rgba(237, 129, 40, 0.89)", + "rgba(245, 54, 54, 0.9)" + ], + "datasource": "$datasource", + "format": "percent", + "gauge": { + "maxValue": 100, + "minValue": 0, + "show": true, + "thresholdLabels": false, + "thresholdMarkers": true + }, + "gridPos": { }, + "id": 3, + "interval": null, + "links": [ ], + "mappingType": 1, + "mappingTypes": [ + { + "name": "value to text", + "value": 1 + }, + { + "name": "range to text", + "value": 2 + } + ], + "maxDataPoints": 100, + "nullPointMode": "connected", + "nullText": null, + "postfix": "", + "postfixFontSize": "50%", + "prefix": "", + "prefixFontSize": "50%", + "rangeMaps": [ + { + "from": "null", + "text": "N/A", + "to": "null" + } + ], + "span": 3, + "sparkline": { + "fillColor": "rgba(31, 118, 189, 0.18)", + "full": false, + "lineColor": "rgb(31, 120, 193)", + "show": false + }, + "tableColumn": "", + "targets": [ + { + "expr": "max without(instance,node) (\n(\n kubelet_volume_stats_capacity_bytes{cluster=\"$cluster\", job=\"kubelet\", namespace=\"$namespace\", persistentvolumeclaim=\"$volume\"}\n -\n kubelet_volume_stats_available_bytes{cluster=\"$cluster\", job=\"kubelet\", namespace=\"$namespace\", persistentvolumeclaim=\"$volume\"}\n)\n/\nkubelet_volume_stats_capacity_bytes{cluster=\"$cluster\", job=\"kubelet\", namespace=\"$namespace\", persistentvolumeclaim=\"$volume\"}\n* 100)\n", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "", + "refId": "A" + } + ], + "thresholds": "80, 90", + "title": "Volume Space Usage", + "tooltip": { + "shared": false + }, + "type": "singlestat", + "valueFontSize": "80%", + "valueMaps": [ + { + "op": "=", + "text": "N/A", + "value": "null" + } + ], + "valueName": "current" + } + ], + "repeat": null, + "repeatIteration": null, + "repeatRowId": null, + "showTitle": false, + "title": "Dashboard Row", + "titleSize": "h6", + "type": "row" + }, + { + "collapse": false, + "collapsed": false, + "panels": [ + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 1, + "fillGradient": 0, + "gridPos": { }, + "id": 4, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "sideWidth": null, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [ ], + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 9, + "stack": true, + "steppedLine": false, + "targets": [ + { + "expr": "sum without(instance, node) (kubelet_volume_stats_inodes_used{cluster=\"$cluster\", job=\"kubelet\", namespace=\"$namespace\", persistentvolumeclaim=\"$volume\"})\n", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "Used inodes", + "refId": "A" + }, + { + "expr": "(\n sum without(instance, node) (kubelet_volume_stats_inodes{cluster=\"$cluster\", job=\"kubelet\", namespace=\"$namespace\", persistentvolumeclaim=\"$volume\"})\n -\n sum without(instance, node) (kubelet_volume_stats_inodes_used{cluster=\"$cluster\", job=\"kubelet\", namespace=\"$namespace\", persistentvolumeclaim=\"$volume\"})\n)\n", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": " Free inodes", + "refId": "B" + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Volume inodes Usage", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "none", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "none", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + } + ] + }, + { + "cacheTimeout": null, + "colorBackground": false, + "colorValue": false, + "colors": [ + "rgba(50, 172, 45, 0.97)", + "rgba(237, 129, 40, 0.89)", + "rgba(245, 54, 54, 0.9)" + ], + "datasource": "$datasource", + "format": "percent", + "gauge": { + "maxValue": 100, + "minValue": 0, + "show": true, + "thresholdLabels": false, + "thresholdMarkers": true + }, + "gridPos": { }, + "id": 5, + "interval": null, + "links": [ ], + "mappingType": 1, + "mappingTypes": [ + { + "name": "value to text", + "value": 1 + }, + { + "name": "range to text", + "value": 2 + } + ], + "maxDataPoints": 100, + "nullPointMode": "connected", + "nullText": null, + "postfix": "", + "postfixFontSize": "50%", + "prefix": "", + "prefixFontSize": "50%", + "rangeMaps": [ + { + "from": "null", + "text": "N/A", + "to": "null" + } + ], + "span": 3, + "sparkline": { + "fillColor": "rgba(31, 118, 189, 0.18)", + "full": false, + "lineColor": "rgb(31, 120, 193)", + "show": false + }, + "tableColumn": "", + "targets": [ + { + "expr": "max without(instance,node) (\nkubelet_volume_stats_inodes_used{cluster=\"$cluster\", job=\"kubelet\", namespace=\"$namespace\", persistentvolumeclaim=\"$volume\"}\n/\nkubelet_volume_stats_inodes{cluster=\"$cluster\", job=\"kubelet\", namespace=\"$namespace\", persistentvolumeclaim=\"$volume\"}\n* 100)\n", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "", + "refId": "A" + } + ], + "thresholds": "80, 90", + "title": "Volume inodes Usage", + "tooltip": { + "shared": false + }, + "type": "singlestat", + "valueFontSize": "80%", + "valueMaps": [ + { + "op": "=", + "text": "N/A", + "value": "null" + } + ], + "valueName": "current" + } + ], + "repeat": null, + "repeatIteration": null, + "repeatRowId": null, + "showTitle": false, + "title": "Dashboard Row", + "titleSize": "h6", + "type": "row" + } + ], + "schemaVersion": 14, + "style": "dark", + "tags": [ + "kubernetes" + ], + "templating": { + "list": [ + { + "current": { + "text": "default", + "value": "default" + }, + "hide": 0, + "label": null, + "name": "datasource", + "options": [ ], + "query": "prometheus", + "refresh": 1, + "regex": "", + "type": "datasource" + }, + { + "allValue": null, + "current": { }, + "datasource": "$datasource", + "hide": 2, + "includeAll": false, + "label": "cluster", + "multi": false, + "name": "cluster", + "options": [ ], + "query": "label_values(kubelet_volume_stats_capacity_bytes, cluster)", + "refresh": 2, + "regex": "", + "sort": 1, + "tagValuesQuery": "", + "tags": [ ], + "tagsQuery": "", + "type": "query", + "useTags": false + }, + { + "allValue": null, + "current": { }, + "datasource": "$datasource", + "hide": 0, + "includeAll": false, + "label": "Namespace", + "multi": false, + "name": "namespace", + "options": [ ], + "query": "label_values(kubelet_volume_stats_capacity_bytes{cluster=\"$cluster\", job=\"kubelet\"}, namespace)", + "refresh": 2, + "regex": "", + "sort": 1, + "tagValuesQuery": "", + "tags": [ ], + "tagsQuery": "", + "type": "query", + "useTags": false + }, + { + "allValue": null, + "current": { }, + "datasource": "$datasource", + "hide": 0, + "includeAll": false, + "label": "PersistentVolumeClaim", + "multi": false, + "name": "volume", + "options": [ ], + "query": "label_values(kubelet_volume_stats_capacity_bytes{cluster=\"$cluster\", job=\"kubelet\", namespace=\"$namespace\"}, persistentvolumeclaim)", + "refresh": 2, + "regex": "", + "sort": 1, + "tagValuesQuery": "", + "tags": [ ], + "tagsQuery": "", + "type": "query", + "useTags": false + } + ] + }, + "time": { + "from": "now-7d", + "to": "now" + }, + "timepicker": { + "refresh_intervals": [ + "5s", + "10s", + "30s", + "1m", + "5m", + "15m", + "30m", + "1h", + "2h", + "1d" + ], + "time_options": [ + "5m", + "15m", + "1h", + "6h", + "12h", + "24h", + "2d", + "7d", + "30d" + ] + }, + "timezone": "UTC", + "title": "Kubernetes / Persistent Volumes", + "uid": "919b92a8e8041bd567af9edab12c840c", + "version": 0 +} diff --git a/charts/kubezero-metrics/dashboards/kube-mixin/pod-total.json b/charts/kubezero-metrics/dashboards/kube-mixin/pod-total.json new file mode 100644 index 0000000..6c55752 --- /dev/null +++ b/charts/kubezero-metrics/dashboards/kube-mixin/pod-total.json @@ -0,0 +1,1101 @@ +{ + "__inputs": [ ], + "__requires": [ ], + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": "-- Grafana --", + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "type": "dashboard" + } + ] + }, + "editable": true, + "gnetId": null, + "graphTooltip": 0, + "hideControls": false, + "id": null, + "links": [ ], + "panels": [ + { + "collapse": false, + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 0 + }, + "id": 2, + "panels": [ ], + "repeat": null, + "repeatIteration": null, + "repeatRowId": null, + "showTitle": true, + "title": "Current Bandwidth", + "titleSize": "h6", + "type": "row" + }, + { + "cacheTimeout": null, + "colorBackground": false, + "colorValue": false, + "colors": [ + "#299c46", + "rgba(237, 129, 40, 0.89)", + "#d44a3a" + ], + "datasource": "$datasource", + "decimals": 0, + "format": "time_series", + "gauge": { + "maxValue": 100, + "minValue": 0, + "show": false, + "thresholdLabels": false, + "thresholdMarkers": true + }, + "gridPos": { + "h": 9, + "w": 12, + "x": 0, + "y": 1 + }, + "height": 9, + "id": 3, + "interval": null, + "links": [ ], + "mappingType": 1, + "mappingTypes": [ + { + "name": "value to text", + "value": 1 + }, + { + "name": "range to text", + "value": 2 + } + ], + "maxDataPoints": 100, + "minSpan": 12, + "nullPointMode": "connected", + "nullText": null, + "options": { + "fieldOptions": { + "calcs": [ + "last" + ], + "defaults": { + "max": 10000000000, + "min": 0, + "title": "$namespace: $pod", + "unit": "Bps" + }, + "mappings": [ ], + "override": { }, + "thresholds": [ + { + "color": "dark-green", + "index": 0, + "value": null + }, + { + "color": "dark-yellow", + "index": 1, + "value": 5000000000 + }, + { + "color": "dark-red", + "index": 2, + "value": 7000000000 + } + ], + "values": false + } + }, + "postfix": "", + "postfixFontSize": "50%", + "prefix": "", + "prefixFontSize": "50%", + "rangeMaps": [ + { + "from": "null", + "text": "N/A", + "to": "null" + } + ], + "span": 12, + "sparkline": { + "fillColor": "rgba(31, 118, 189, 0.18)", + "full": false, + "lineColor": "rgb(31, 120, 193)", + "show": false + }, + "tableColumn": "", + "targets": [ + { + "expr": "sum(irate(container_network_receive_bytes_total{cluster=\"$cluster\",namespace=~\"$namespace\", pod=~\"$pod\"}[$interval:$resolution]))", + "format": "time_series", + "instant": null, + "intervalFactor": 1, + "legendFormat": "", + "refId": "A" + } + ], + "thresholds": "", + "timeFrom": null, + "timeShift": null, + "title": "Current Rate of Bytes Received", + "type": "gauge", + "valueFontSize": "80%", + "valueMaps": [ + { + "op": "=", + "text": "N/A", + "value": "null" + } + ], + "valueName": "current" + }, + { + "cacheTimeout": null, + "colorBackground": false, + "colorValue": false, + "colors": [ + "#299c46", + "rgba(237, 129, 40, 0.89)", + "#d44a3a" + ], + "datasource": "$datasource", + "decimals": 0, + "format": "time_series", + "gauge": { + "maxValue": 100, + "minValue": 0, + "show": false, + "thresholdLabels": false, + "thresholdMarkers": true + }, + "gridPos": { + "h": 9, + "w": 12, + "x": 12, + "y": 1 + }, + "height": 9, + "id": 4, + "interval": null, + "links": [ ], + "mappingType": 1, + "mappingTypes": [ + { + "name": "value to text", + "value": 1 + }, + { + "name": "range to text", + "value": 2 + } + ], + "maxDataPoints": 100, + "minSpan": 12, + "nullPointMode": "connected", + "nullText": null, + "options": { + "fieldOptions": { + "calcs": [ + "last" + ], + "defaults": { + "max": 10000000000, + "min": 0, + "title": "$namespace: $pod", + "unit": "Bps" + }, + "mappings": [ ], + "override": { }, + "thresholds": [ + { + "color": "dark-green", + "index": 0, + "value": null + }, + { + "color": "dark-yellow", + "index": 1, + "value": 5000000000 + }, + { + "color": "dark-red", + "index": 2, + "value": 7000000000 + } + ], + "values": false + } + }, + "postfix": "", + "postfixFontSize": "50%", + "prefix": "", + "prefixFontSize": "50%", + "rangeMaps": [ + { + "from": "null", + "text": "N/A", + "to": "null" + } + ], + "span": 12, + "sparkline": { + "fillColor": "rgba(31, 118, 189, 0.18)", + "full": false, + "lineColor": "rgb(31, 120, 193)", + "show": false + }, + "tableColumn": "", + "targets": [ + { + "expr": "sum(irate(container_network_transmit_bytes_total{cluster=\"$cluster\",namespace=~\"$namespace\", pod=~\"$pod\"}[$interval:$resolution]))", + "format": "time_series", + "instant": null, + "intervalFactor": 1, + "legendFormat": "", + "refId": "A" + } + ], + "thresholds": "", + "timeFrom": null, + "timeShift": null, + "title": "Current Rate of Bytes Transmitted", + "type": "gauge", + "valueFontSize": "80%", + "valueMaps": [ + { + "op": "=", + "text": "N/A", + "value": "null" + } + ], + "valueName": "current" + }, + { + "collapse": false, + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 10 + }, + "id": 5, + "panels": [ ], + "repeat": null, + "repeatIteration": null, + "repeatRowId": null, + "showTitle": true, + "title": "Bandwidth", + "titleSize": "h6", + "type": "row" + }, + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 2, + "fillGradient": 0, + "gridPos": { + "h": 9, + "w": 12, + "x": 0, + "y": 11 + }, + "id": 6, + "legend": { + "alignAsTable": false, + "avg": false, + "current": false, + "hideEmpty": true, + "hideZero": true, + "max": false, + "min": false, + "rightSide": false, + "show": true, + "sideWidth": null, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "links": [ ], + "minSpan": 12, + "nullPointMode": "connected", + "paceLength": 10, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 12, + "stack": true, + "steppedLine": false, + "targets": [ + { + "expr": "sum(irate(container_network_receive_bytes_total{cluster=\"$cluster\",namespace=~\"$namespace\", pod=~\"$pod\"}[$interval:$resolution])) by (pod)", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{pod}}", + "refId": "A", + "step": 10 + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Receive Bandwidth", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "Bps", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "Bps", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + } + ] + }, + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 2, + "fillGradient": 0, + "gridPos": { + "h": 9, + "w": 12, + "x": 12, + "y": 11 + }, + "id": 7, + "legend": { + "alignAsTable": false, + "avg": false, + "current": false, + "hideEmpty": true, + "hideZero": true, + "max": false, + "min": false, + "rightSide": false, + "show": true, + "sideWidth": null, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "links": [ ], + "minSpan": 12, + "nullPointMode": "connected", + "paceLength": 10, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 12, + "stack": true, + "steppedLine": false, + "targets": [ + { + "expr": "sum(irate(container_network_transmit_bytes_total{cluster=\"$cluster\",namespace=~\"$namespace\", pod=~\"$pod\"}[$interval:$resolution])) by (pod)", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{pod}}", + "refId": "A", + "step": 10 + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Transmit Bandwidth", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "Bps", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "Bps", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + } + ] + }, + { + "collapse": true, + "collapsed": true, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 20 + }, + "id": 8, + "panels": [ + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 2, + "fillGradient": 0, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 21 + }, + "id": 9, + "legend": { + "alignAsTable": false, + "avg": false, + "current": false, + "hideEmpty": true, + "hideZero": true, + "max": false, + "min": false, + "rightSide": false, + "show": true, + "sideWidth": null, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "links": [ ], + "minSpan": 12, + "nullPointMode": "connected", + "paceLength": 10, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 12, + "stack": true, + "steppedLine": false, + "targets": [ + { + "expr": "sum(irate(container_network_receive_packets_total{cluster=\"$cluster\",namespace=~\"$namespace\", pod=~\"$pod\"}[$interval:$resolution])) by (pod)", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{pod}}", + "refId": "A", + "step": 10 + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Rate of Received Packets", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "pps", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "pps", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + } + ] + }, + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 2, + "fillGradient": 0, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 21 + }, + "id": 10, + "legend": { + "alignAsTable": false, + "avg": false, + "current": false, + "hideEmpty": true, + "hideZero": true, + "max": false, + "min": false, + "rightSide": false, + "show": true, + "sideWidth": null, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "links": [ ], + "minSpan": 12, + "nullPointMode": "connected", + "paceLength": 10, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 12, + "stack": true, + "steppedLine": false, + "targets": [ + { + "expr": "sum(irate(container_network_transmit_packets_total{cluster=\"$cluster\",namespace=~\"$namespace\", pod=~\"$pod\"}[$interval:$resolution])) by (pod)", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{pod}}", + "refId": "A", + "step": 10 + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Rate of Transmitted Packets", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "pps", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "pps", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + } + ] + } + ], + "repeat": null, + "repeatIteration": null, + "repeatRowId": null, + "showTitle": true, + "title": "Packets", + "titleSize": "h6", + "type": "row" + }, + { + "collapse": true, + "collapsed": true, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 21 + }, + "id": 11, + "panels": [ + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 2, + "fillGradient": 0, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 32 + }, + "id": 12, + "legend": { + "alignAsTable": false, + "avg": false, + "current": false, + "hideEmpty": true, + "hideZero": true, + "max": false, + "min": false, + "rightSide": false, + "show": true, + "sideWidth": null, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "links": [ ], + "minSpan": 12, + "nullPointMode": "connected", + "paceLength": 10, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 12, + "stack": true, + "steppedLine": false, + "targets": [ + { + "expr": "sum(irate(container_network_receive_packets_dropped_total{cluster=\"$cluster\",namespace=~\"$namespace\", pod=~\"$pod\"}[$interval:$resolution])) by (pod)", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{pod}}", + "refId": "A", + "step": 10 + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Rate of Received Packets Dropped", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "pps", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "pps", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + } + ] + }, + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 2, + "fillGradient": 0, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 32 + }, + "id": 13, + "legend": { + "alignAsTable": false, + "avg": false, + "current": false, + "hideEmpty": true, + "hideZero": true, + "max": false, + "min": false, + "rightSide": false, + "show": true, + "sideWidth": null, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "links": [ ], + "minSpan": 12, + "nullPointMode": "connected", + "paceLength": 10, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 12, + "stack": true, + "steppedLine": false, + "targets": [ + { + "expr": "sum(irate(container_network_transmit_packets_dropped_total{cluster=\"$cluster\",namespace=~\"$namespace\", pod=~\"$pod\"}[$interval:$resolution])) by (pod)", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{pod}}", + "refId": "A", + "step": 10 + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Rate of Transmitted Packets Dropped", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "pps", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "pps", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + } + ] + } + ], + "repeat": null, + "repeatIteration": null, + "repeatRowId": null, + "showTitle": true, + "title": "Errors", + "titleSize": "h6", + "type": "row" + } + ], + "refresh": "10s", + "rows": [ ], + "schemaVersion": 18, + "style": "dark", + "tags": [ + "kubernetes" + ], + "templating": { + "list": [ + { + "current": { + "text": "default", + "value": "default" + }, + "hide": 0, + "label": null, + "name": "datasource", + "options": [ ], + "query": "prometheus", + "refresh": 1, + "regex": "", + "type": "datasource" + }, + { + "allValue": null, + "current": { }, + "datasource": "$datasource", + "hide": 2, + "includeAll": false, + "label": null, + "multi": false, + "name": "cluster", + "options": [ ], + "query": "label_values(kube_pod_info, cluster)", + "refresh": 2, + "regex": "", + "sort": 0, + "tagValuesQuery": "", + "tags": [ ], + "tagsQuery": "", + "type": "query", + "useTags": false + }, + { + "allValue": ".+", + "auto": false, + "auto_count": 30, + "auto_min": "10s", + "current": { + "text": "kube-system", + "value": "kube-system" + }, + "datasource": "$datasource", + "definition": "label_values(container_network_receive_packets_total{cluster=\"$cluster\"}, namespace)", + "hide": 0, + "includeAll": true, + "label": null, + "multi": false, + "name": "namespace", + "options": [ ], + "query": "label_values(container_network_receive_packets_total{cluster=\"$cluster\"}, namespace)", + "refresh": 2, + "regex": "", + "skipUrlSync": false, + "sort": 1, + "tagValuesQuery": "", + "tags": [ ], + "tagsQuery": "", + "type": "query", + "useTags": false + }, + { + "allValue": ".+", + "auto": false, + "auto_count": 30, + "auto_min": "10s", + "current": { + "text": "", + "value": "" + }, + "datasource": "$datasource", + "definition": "label_values(container_network_receive_packets_total{cluster=\"$cluster\",namespace=~\"$namespace\"}, pod)", + "hide": 0, + "includeAll": false, + "label": null, + "multi": false, + "name": "pod", + "options": [ ], + "query": "label_values(container_network_receive_packets_total{cluster=\"$cluster\",namespace=~\"$namespace\"}, pod)", + "refresh": 2, + "regex": "", + "skipUrlSync": false, + "sort": 1, + "tagValuesQuery": "", + "tags": [ ], + "tagsQuery": "", + "type": "query", + "useTags": false + }, + { + "allValue": null, + "auto": false, + "auto_count": 30, + "auto_min": "10s", + "current": { + "text": "5m", + "value": "5m" + }, + "datasource": "$datasource", + "hide": 0, + "includeAll": false, + "label": null, + "multi": false, + "name": "resolution", + "options": [ + { + "selected": false, + "text": "30s", + "value": "30s" + }, + { + "selected": true, + "text": "5m", + "value": "5m" + }, + { + "selected": false, + "text": "1h", + "value": "1h" + } + ], + "query": "30s,5m,1h", + "refresh": 2, + "regex": "", + "skipUrlSync": false, + "sort": 1, + "tagValuesQuery": "", + "tags": [ ], + "tagsQuery": "", + "type": "interval", + "useTags": false + }, + { + "allValue": null, + "auto": false, + "auto_count": 30, + "auto_min": "10s", + "current": { + "text": "5m", + "value": "5m" + }, + "datasource": "$datasource", + "hide": 2, + "includeAll": false, + "label": null, + "multi": false, + "name": "interval", + "options": [ + { + "selected": true, + "text": "4h", + "value": "4h" + } + ], + "query": "4h", + "refresh": 2, + "regex": "", + "skipUrlSync": false, + "sort": 1, + "tagValuesQuery": "", + "tags": [ ], + "tagsQuery": "", + "type": "interval", + "useTags": false + } + ] + }, + "time": { + "from": "now-1h", + "to": "now" + }, + "timepicker": { + "refresh_intervals": [ + "5s", + "10s", + "30s", + "1m", + "5m", + "15m", + "30m", + "1h", + "2h", + "1d" + ], + "time_options": [ + "5m", + "15m", + "1h", + "6h", + "12h", + "24h", + "2d", + "7d", + "30d" + ] + }, + "timezone": "UTC", + "title": "Kubernetes / Networking / Pod", + "uid": "7a18067ce943a40ae25454675c19ff5c", + "version": 0 +} diff --git a/charts/kubezero-metrics/dashboards/kube-mixin/proxy.json b/charts/kubezero-metrics/dashboards/kube-mixin/proxy.json new file mode 100644 index 0000000..cc1af0b --- /dev/null +++ b/charts/kubezero-metrics/dashboards/kube-mixin/proxy.json @@ -0,0 +1,1088 @@ +{ + "__inputs": [ ], + "__requires": [ ], + "annotations": { + "list": [ ] + }, + "editable": false, + "gnetId": null, + "graphTooltip": 0, + "hideControls": false, + "id": null, + "links": [ ], + "refresh": "10s", + "rows": [ + { + "collapse": false, + "collapsed": false, + "panels": [ + { + "cacheTimeout": null, + "colorBackground": false, + "colorValue": false, + "colors": [ + "#299c46", + "rgba(237, 129, 40, 0.89)", + "#d44a3a" + ], + "datasource": "$datasource", + "format": "none", + "gauge": { + "maxValue": 100, + "minValue": 0, + "show": false, + "thresholdLabels": false, + "thresholdMarkers": true + }, + "gridPos": { }, + "id": 2, + "interval": null, + "links": [ ], + "mappingType": 1, + "mappingTypes": [ + { + "name": "value to text", + "value": 1 + }, + { + "name": "range to text", + "value": 2 + } + ], + "maxDataPoints": 100, + "nullPointMode": "connected", + "nullText": null, + "postfix": "", + "postfixFontSize": "50%", + "prefix": "", + "prefixFontSize": "50%", + "rangeMaps": [ + { + "from": "null", + "text": "N/A", + "to": "null" + } + ], + "span": 2, + "sparkline": { + "fillColor": "rgba(31, 118, 189, 0.18)", + "full": false, + "lineColor": "rgb(31, 120, 193)", + "show": false + }, + "tableColumn": "", + "targets": [ + { + "expr": "sum(up{cluster=\"$cluster\", job=\"kube-proxy\"})", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "", + "refId": "A" + } + ], + "thresholds": "", + "title": "Up", + "tooltip": { + "shared": false + }, + "type": "singlestat", + "valueFontSize": "80%", + "valueMaps": [ + { + "op": "=", + "text": "N/A", + "value": "null" + } + ], + "valueName": "min" + }, + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 1, + "fillGradient": 0, + "gridPos": { }, + "id": 3, + "legend": { + "alignAsTable": false, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": false, + "show": true, + "sideWidth": null, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [ ], + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 5, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "sum(rate(kubeproxy_sync_proxy_rules_duration_seconds_count{cluster=\"$cluster\", job=\"kube-proxy\", instance=~\"$instance\"}[5m]))", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "rate", + "refId": "A" + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Rules Sync Rate", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "ops", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "ops", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + } + ] + }, + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 1, + "fillGradient": 0, + "gridPos": { }, + "id": 4, + "legend": { + "alignAsTable": true, + "avg": false, + "current": true, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "sideWidth": null, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [ ], + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 5, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "histogram_quantile(0.99,rate(kubeproxy_sync_proxy_rules_duration_seconds_bucket{cluster=\"$cluster\", job=\"kube-proxy\", instance=~\"$instance\"}[5m]))", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{instance}}", + "refId": "A" + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Rule Sync Latency 99th Quantile", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "s", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "s", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + } + ] + } + ], + "repeat": null, + "repeatIteration": null, + "repeatRowId": null, + "showTitle": false, + "title": "Dashboard Row", + "titleSize": "h6", + "type": "row" + }, + { + "collapse": false, + "collapsed": false, + "panels": [ + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 1, + "fillGradient": 0, + "gridPos": { }, + "id": 5, + "legend": { + "alignAsTable": false, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": false, + "show": true, + "sideWidth": null, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [ ], + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 6, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "sum(rate(kubeproxy_network_programming_duration_seconds_count{cluster=\"$cluster\", job=\"kube-proxy\", instance=~\"$instance\"}[5m]))", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "rate", + "refId": "A" + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Network Programming Rate", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "ops", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "ops", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + } + ] + }, + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 1, + "fillGradient": 0, + "gridPos": { }, + "id": 6, + "legend": { + "alignAsTable": true, + "avg": false, + "current": true, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "sideWidth": null, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [ ], + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 6, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "histogram_quantile(0.99, sum(rate(kubeproxy_network_programming_duration_seconds_bucket{cluster=\"$cluster\", job=\"kube-proxy\", instance=~\"$instance\"}[5m])) by (instance, le))", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{instance}}", + "refId": "A" + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Network Programming Latency 99th Quantile", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "s", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "s", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + } + ] + } + ], + "repeat": null, + "repeatIteration": null, + "repeatRowId": null, + "showTitle": false, + "title": "Dashboard Row", + "titleSize": "h6", + "type": "row" + }, + { + "collapse": false, + "collapsed": false, + "panels": [ + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 1, + "fillGradient": 0, + "gridPos": { }, + "id": 7, + "legend": { + "alignAsTable": false, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": false, + "show": true, + "sideWidth": null, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [ ], + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 4, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "sum(rate(rest_client_requests_total{cluster=\"$cluster\", job=\"kube-proxy\", instance=~\"$instance\",code=~\"2..\"}[5m]))", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "2xx", + "refId": "A" + }, + { + "expr": "sum(rate(rest_client_requests_total{cluster=\"$cluster\", job=\"kube-proxy\", instance=~\"$instance\",code=~\"3..\"}[5m]))", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "3xx", + "refId": "B" + }, + { + "expr": "sum(rate(rest_client_requests_total{cluster=\"$cluster\", job=\"kube-proxy\", instance=~\"$instance\",code=~\"4..\"}[5m]))", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "4xx", + "refId": "C" + }, + { + "expr": "sum(rate(rest_client_requests_total{cluster=\"$cluster\", job=\"kube-proxy\", instance=~\"$instance\",code=~\"5..\"}[5m]))", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "5xx", + "refId": "D" + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Kube API Request Rate", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "ops", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "ops", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ] + }, + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 1, + "fillGradient": 0, + "gridPos": { }, + "id": 8, + "legend": { + "alignAsTable": false, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": false, + "show": true, + "sideWidth": null, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [ ], + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 8, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "histogram_quantile(0.99, sum(rate(rest_client_request_duration_seconds_bucket{cluster=\"$cluster\", job=\"kube-proxy\",instance=~\"$instance\",verb=\"POST\"}[5m])) by (verb, url, le))", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{verb}} {{url}}", + "refId": "A" + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Post Request Latency 99th Quantile", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "s", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "s", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + } + ] + } + ], + "repeat": null, + "repeatIteration": null, + "repeatRowId": null, + "showTitle": false, + "title": "Dashboard Row", + "titleSize": "h6", + "type": "row" + }, + { + "collapse": false, + "collapsed": false, + "panels": [ + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 1, + "fillGradient": 0, + "gridPos": { }, + "id": 9, + "legend": { + "alignAsTable": true, + "avg": false, + "current": true, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "sideWidth": null, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [ ], + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 12, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "histogram_quantile(0.99, sum(rate(rest_client_request_duration_seconds_bucket{cluster=\"$cluster\", job=\"kube-proxy\", instance=~\"$instance\", verb=\"GET\"}[5m])) by (verb, url, le))", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{verb}} {{url}}", + "refId": "A" + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Get Request Latency 99th Quantile", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "s", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "s", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + } + ] + } + ], + "repeat": null, + "repeatIteration": null, + "repeatRowId": null, + "showTitle": false, + "title": "Dashboard Row", + "titleSize": "h6", + "type": "row" + }, + { + "collapse": false, + "collapsed": false, + "panels": [ + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 1, + "fillGradient": 0, + "gridPos": { }, + "id": 10, + "legend": { + "alignAsTable": false, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": false, + "show": true, + "sideWidth": null, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [ ], + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 4, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "process_resident_memory_bytes{cluster=\"$cluster\", job=\"kube-proxy\",instance=~\"$instance\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{instance}}", + "refId": "A" + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Memory", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "bytes", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "bytes", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ] + }, + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 1, + "fillGradient": 0, + "gridPos": { }, + "id": 11, + "legend": { + "alignAsTable": false, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": false, + "show": true, + "sideWidth": null, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [ ], + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 4, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "rate(process_cpu_seconds_total{cluster=\"$cluster\", job=\"kube-proxy\",instance=~\"$instance\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{instance}}", + "refId": "A" + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "CPU usage", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + } + ] + }, + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 1, + "fillGradient": 0, + "gridPos": { }, + "id": 12, + "legend": { + "alignAsTable": false, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": false, + "show": true, + "sideWidth": null, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [ ], + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 4, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "go_goroutines{cluster=\"$cluster\", job=\"kube-proxy\",instance=~\"$instance\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{instance}}", + "refId": "A" + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Goroutines", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ] + } + ], + "repeat": null, + "repeatIteration": null, + "repeatRowId": null, + "showTitle": false, + "title": "Dashboard Row", + "titleSize": "h6", + "type": "row" + } + ], + "schemaVersion": 14, + "style": "dark", + "tags": [ + "kubernetes" + ], + "templating": { + "list": [ + { + "current": { + "text": "default", + "value": "default" + }, + "hide": 0, + "label": null, + "name": "datasource", + "options": [ ], + "query": "prometheus", + "refresh": 1, + "regex": "", + "type": "datasource" + }, + { + "allValue": null, + "current": { }, + "datasource": "$datasource", + "hide": 2, + "includeAll": false, + "label": "cluster", + "multi": false, + "name": "cluster", + "options": [ ], + "query": "label_values(kube_pod_info, cluster)", + "refresh": 2, + "regex": "", + "sort": 1, + "tagValuesQuery": "", + "tags": [ ], + "tagsQuery": "", + "type": "query", + "useTags": false + }, + { + "allValue": null, + "current": { }, + "datasource": "$datasource", + "hide": 0, + "includeAll": true, + "label": null, + "multi": false, + "name": "instance", + "options": [ ], + "query": "label_values(kubeproxy_network_programming_duration_seconds_bucket{cluster=\"$cluster\", job=\"kube-proxy\"}, instance)", + "refresh": 2, + "regex": "", + "sort": 1, + "tagValuesQuery": "", + "tags": [ ], + "tagsQuery": "", + "type": "query", + "useTags": false + } + ] + }, + "time": { + "from": "now-1h", + "to": "now" + }, + "timepicker": { + "refresh_intervals": [ + "5s", + "10s", + "30s", + "1m", + "5m", + "15m", + "30m", + "1h", + "2h", + "1d" + ], + "time_options": [ + "5m", + "15m", + "1h", + "6h", + "12h", + "24h", + "2d", + "7d", + "30d" + ] + }, + "timezone": "UTC", + "title": "Kubernetes / Proxy", + "uid": "632e265de029684c40b21cb76bca4f94", + "version": 0 +} diff --git a/charts/kubezero-metrics/dashboards/kube-mixin/scheduler.json b/charts/kubezero-metrics/dashboards/kube-mixin/scheduler.json new file mode 100644 index 0000000..300ec09 --- /dev/null +++ b/charts/kubezero-metrics/dashboards/kube-mixin/scheduler.json @@ -0,0 +1,955 @@ +{ + "__inputs": [ ], + "__requires": [ ], + "annotations": { + "list": [ ] + }, + "editable": false, + "gnetId": null, + "graphTooltip": 0, + "hideControls": false, + "id": null, + "links": [ ], + "refresh": "10s", + "rows": [ + { + "collapse": false, + "collapsed": false, + "panels": [ + { + "cacheTimeout": null, + "colorBackground": false, + "colorValue": false, + "colors": [ + "#299c46", + "rgba(237, 129, 40, 0.89)", + "#d44a3a" + ], + "datasource": "$datasource", + "format": "none", + "gauge": { + "maxValue": 100, + "minValue": 0, + "show": false, + "thresholdLabels": false, + "thresholdMarkers": true + }, + "gridPos": { }, + "id": 2, + "interval": null, + "links": [ ], + "mappingType": 1, + "mappingTypes": [ + { + "name": "value to text", + "value": 1 + }, + { + "name": "range to text", + "value": 2 + } + ], + "maxDataPoints": 100, + "nullPointMode": "connected", + "nullText": null, + "postfix": "", + "postfixFontSize": "50%", + "prefix": "", + "prefixFontSize": "50%", + "rangeMaps": [ + { + "from": "null", + "text": "N/A", + "to": "null" + } + ], + "span": 2, + "sparkline": { + "fillColor": "rgba(31, 118, 189, 0.18)", + "full": false, + "lineColor": "rgb(31, 120, 193)", + "show": false + }, + "tableColumn": "", + "targets": [ + { + "expr": "sum(up{cluster=\"$cluster\", job=\"kube-scheduler\"})", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "", + "refId": "A" + } + ], + "thresholds": "", + "title": "Up", + "tooltip": { + "shared": false + }, + "type": "singlestat", + "valueFontSize": "80%", + "valueMaps": [ + { + "op": "=", + "text": "N/A", + "value": "null" + } + ], + "valueName": "min" + }, + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 1, + "fillGradient": 0, + "gridPos": { }, + "id": 3, + "legend": { + "alignAsTable": true, + "avg": false, + "current": true, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "sideWidth": null, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [ ], + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 5, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "sum(rate(scheduler_e2e_scheduling_duration_seconds_count{cluster=\"$cluster\", job=\"kube-scheduler\", instance=~\"$instance\"}[5m])) by (instance)", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{instance}} e2e", + "refId": "A" + }, + { + "expr": "sum(rate(scheduler_binding_duration_seconds_count{cluster=\"$cluster\", job=\"kube-scheduler\", instance=~\"$instance\"}[5m])) by (instance)", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{instance}} binding", + "refId": "B" + }, + { + "expr": "sum(rate(scheduler_scheduling_algorithm_duration_seconds_count{cluster=\"$cluster\", job=\"kube-scheduler\", instance=~\"$instance\"}[5m])) by (instance)", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{instance}} scheduling algorithm", + "refId": "C" + }, + { + "expr": "sum(rate(scheduler_volume_scheduling_duration_seconds_count{cluster=\"$cluster\", job=\"kube-scheduler\", instance=~\"$instance\"}[5m])) by (instance)", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{instance}} volume", + "refId": "D" + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Scheduling Rate", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "ops", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "ops", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + } + ] + }, + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 1, + "fillGradient": 0, + "gridPos": { }, + "id": 4, + "legend": { + "alignAsTable": true, + "avg": false, + "current": true, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "sideWidth": null, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [ ], + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 5, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "histogram_quantile(0.99, sum(rate(scheduler_e2e_scheduling_duration_seconds_bucket{cluster=\"$cluster\", job=\"kube-scheduler\",instance=~\"$instance\"}[5m])) by (instance, le))", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{instance}} e2e", + "refId": "A" + }, + { + "expr": "histogram_quantile(0.99, sum(rate(scheduler_binding_duration_seconds_bucket{cluster=\"$cluster\", job=\"kube-scheduler\",instance=~\"$instance\"}[5m])) by (instance, le))", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{instance}} binding", + "refId": "B" + }, + { + "expr": "histogram_quantile(0.99, sum(rate(scheduler_scheduling_algorithm_duration_seconds_bucket{cluster=\"$cluster\", job=\"kube-scheduler\",instance=~\"$instance\"}[5m])) by (instance, le))", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{instance}} scheduling algorithm", + "refId": "C" + }, + { + "expr": "histogram_quantile(0.99, sum(rate(scheduler_volume_scheduling_duration_seconds_bucket{cluster=\"$cluster\", job=\"kube-scheduler\",instance=~\"$instance\"}[5m])) by (instance, le))", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{instance}} volume", + "refId": "D" + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Scheduling latency 99th Quantile", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "s", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "s", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + } + ] + } + ], + "repeat": null, + "repeatIteration": null, + "repeatRowId": null, + "showTitle": false, + "title": "Dashboard Row", + "titleSize": "h6", + "type": "row" + }, + { + "collapse": false, + "collapsed": false, + "panels": [ + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 1, + "fillGradient": 0, + "gridPos": { }, + "id": 5, + "legend": { + "alignAsTable": false, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": false, + "show": true, + "sideWidth": null, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [ ], + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 4, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "sum(rate(rest_client_requests_total{cluster=\"$cluster\", job=\"kube-scheduler\", instance=~\"$instance\",code=~\"2..\"}[5m]))", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "2xx", + "refId": "A" + }, + { + "expr": "sum(rate(rest_client_requests_total{cluster=\"$cluster\", job=\"kube-scheduler\", instance=~\"$instance\",code=~\"3..\"}[5m]))", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "3xx", + "refId": "B" + }, + { + "expr": "sum(rate(rest_client_requests_total{cluster=\"$cluster\", job=\"kube-scheduler\", instance=~\"$instance\",code=~\"4..\"}[5m]))", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "4xx", + "refId": "C" + }, + { + "expr": "sum(rate(rest_client_requests_total{cluster=\"$cluster\", job=\"kube-scheduler\", instance=~\"$instance\",code=~\"5..\"}[5m]))", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "5xx", + "refId": "D" + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Kube API Request Rate", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "ops", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "ops", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + } + ] + }, + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 1, + "fillGradient": 0, + "gridPos": { }, + "id": 6, + "legend": { + "alignAsTable": false, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": false, + "show": true, + "sideWidth": null, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [ ], + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 8, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "histogram_quantile(0.99, sum(rate(rest_client_request_duration_seconds_bucket{cluster=\"$cluster\", job=\"kube-scheduler\", instance=~\"$instance\", verb=\"POST\"}[5m])) by (verb, url, le))", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{verb}} {{url}}", + "refId": "A" + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Post Request Latency 99th Quantile", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "s", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "s", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + } + ] + } + ], + "repeat": null, + "repeatIteration": null, + "repeatRowId": null, + "showTitle": false, + "title": "Dashboard Row", + "titleSize": "h6", + "type": "row" + }, + { + "collapse": false, + "collapsed": false, + "panels": [ + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 1, + "fillGradient": 0, + "gridPos": { }, + "id": 7, + "legend": { + "alignAsTable": true, + "avg": false, + "current": true, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "sideWidth": null, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [ ], + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 12, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "histogram_quantile(0.99, sum(rate(rest_client_request_duration_seconds_bucket{cluster=\"$cluster\", job=\"kube-scheduler\", instance=~\"$instance\", verb=\"GET\"}[5m])) by (verb, url, le))", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{verb}} {{url}}", + "refId": "A" + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Get Request Latency 99th Quantile", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "s", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "s", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + } + ] + } + ], + "repeat": null, + "repeatIteration": null, + "repeatRowId": null, + "showTitle": false, + "title": "Dashboard Row", + "titleSize": "h6", + "type": "row" + }, + { + "collapse": false, + "collapsed": false, + "panels": [ + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 1, + "fillGradient": 0, + "gridPos": { }, + "id": 8, + "legend": { + "alignAsTable": false, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": false, + "show": true, + "sideWidth": null, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [ ], + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 4, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "process_resident_memory_bytes{cluster=\"$cluster\", job=\"kube-scheduler\", instance=~\"$instance\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{instance}}", + "refId": "A" + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Memory", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "bytes", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "bytes", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ] + }, + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 1, + "fillGradient": 0, + "gridPos": { }, + "id": 9, + "legend": { + "alignAsTable": false, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": false, + "show": true, + "sideWidth": null, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [ ], + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 4, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "rate(process_cpu_seconds_total{cluster=\"$cluster\", job=\"kube-scheduler\", instance=~\"$instance\"}[5m])", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{instance}}", + "refId": "A" + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "CPU usage", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "bytes", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "bytes", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + } + ] + }, + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 1, + "fillGradient": 0, + "gridPos": { }, + "id": 10, + "legend": { + "alignAsTable": false, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": false, + "show": true, + "sideWidth": null, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [ ], + "nullPointMode": "null", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 4, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "go_goroutines{cluster=\"$cluster\", job=\"kube-scheduler\",instance=~\"$instance\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{instance}}", + "refId": "A" + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Goroutines", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ] + } + ], + "repeat": null, + "repeatIteration": null, + "repeatRowId": null, + "showTitle": false, + "title": "Dashboard Row", + "titleSize": "h6", + "type": "row" + } + ], + "schemaVersion": 14, + "style": "dark", + "tags": [ + "kubernetes" + ], + "templating": { + "list": [ + { + "current": { + "text": "default", + "value": "default" + }, + "hide": 0, + "label": null, + "name": "datasource", + "options": [ ], + "query": "prometheus", + "refresh": 1, + "regex": "", + "type": "datasource" + }, + { + "allValue": null, + "current": { }, + "datasource": "$datasource", + "hide": 2, + "includeAll": false, + "label": "cluster", + "multi": false, + "name": "cluster", + "options": [ ], + "query": "label_values(kube_pod_info, cluster)", + "refresh": 2, + "regex": "", + "sort": 1, + "tagValuesQuery": "", + "tags": [ ], + "tagsQuery": "", + "type": "query", + "useTags": false + }, + { + "allValue": null, + "current": { }, + "datasource": "$datasource", + "hide": 0, + "includeAll": true, + "label": null, + "multi": false, + "name": "instance", + "options": [ ], + "query": "label_values(process_cpu_seconds_total{cluster=\"$cluster\", job=\"kube-scheduler\"}, instance)", + "refresh": 2, + "regex": "", + "sort": 1, + "tagValuesQuery": "", + "tags": [ ], + "tagsQuery": "", + "type": "query", + "useTags": false + } + ] + }, + "time": { + "from": "now-1h", + "to": "now" + }, + "timepicker": { + "refresh_intervals": [ + "5s", + "10s", + "30s", + "1m", + "5m", + "15m", + "30m", + "1h", + "2h", + "1d" + ], + "time_options": [ + "5m", + "15m", + "1h", + "6h", + "12h", + "24h", + "2d", + "7d", + "30d" + ] + }, + "timezone": "UTC", + "title": "Kubernetes / Scheduler", + "uid": "2e6b6a3b4bddf1427b3a55aa1311c656", + "version": 0 +} diff --git a/charts/kubezero-metrics/dashboards/kube-mixin/workload-total.json b/charts/kubezero-metrics/dashboards/kube-mixin/workload-total.json new file mode 100644 index 0000000..2d6ecb4 --- /dev/null +++ b/charts/kubezero-metrics/dashboards/kube-mixin/workload-total.json @@ -0,0 +1,1287 @@ +{ + "__inputs": [ ], + "__requires": [ ], + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": "-- Grafana --", + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "type": "dashboard" + } + ] + }, + "editable": true, + "gnetId": null, + "graphTooltip": 0, + "hideControls": false, + "id": null, + "links": [ ], + "panels": [ + { + "collapse": false, + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 0 + }, + "id": 2, + "panels": [ ], + "repeat": null, + "repeatIteration": null, + "repeatRowId": null, + "showTitle": true, + "title": "Current Bandwidth", + "titleSize": "h6", + "type": "row" + }, + { + "aliasColors": { }, + "bars": true, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 2, + "fillGradient": 0, + "gridPos": { + "h": 9, + "w": 12, + "x": 0, + "y": 1 + }, + "id": 3, + "legend": { + "alignAsTable": true, + "avg": false, + "current": true, + "hideEmpty": true, + "hideZero": true, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "sideWidth": null, + "sort": "current", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": false, + "linewidth": 1, + "links": [ ], + "minSpan": 24, + "nullPointMode": "null", + "paceLength": 10, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 24, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "sort_desc(sum(irate(container_network_receive_bytes_total{cluster=\"$cluster\",namespace=~\"$namespace\"}[$interval:$resolution])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\",namespace=~\"$namespace\", workload=~\"$workload\", workload_type=\"$type\"}) by (pod))\n", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{ pod }}", + "refId": "A", + "step": 10 + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Current Rate of Bytes Received", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "series", + "name": null, + "show": false, + "values": [ + "current" + ] + }, + "yaxes": [ + { + "format": "Bps", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "Bps", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + } + ] + }, + { + "aliasColors": { }, + "bars": true, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 2, + "fillGradient": 0, + "gridPos": { + "h": 9, + "w": 12, + "x": 12, + "y": 1 + }, + "id": 4, + "legend": { + "alignAsTable": true, + "avg": false, + "current": true, + "hideEmpty": true, + "hideZero": true, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "sideWidth": null, + "sort": "current", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": false, + "linewidth": 1, + "links": [ ], + "minSpan": 24, + "nullPointMode": "null", + "paceLength": 10, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 24, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "sort_desc(sum(irate(container_network_transmit_bytes_total{cluster=\"$cluster\",namespace=~\"$namespace\"}[$interval:$resolution])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\",namespace=~\"$namespace\", workload=~\"$workload\", workload_type=\"$type\"}) by (pod))\n", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{ pod }}", + "refId": "A", + "step": 10 + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Current Rate of Bytes Transmitted", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "series", + "name": null, + "show": false, + "values": [ + "current" + ] + }, + "yaxes": [ + { + "format": "Bps", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "Bps", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + } + ] + }, + { + "collapse": true, + "collapsed": true, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 10 + }, + "id": 5, + "panels": [ + { + "aliasColors": { }, + "bars": true, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 2, + "fillGradient": 0, + "gridPos": { + "h": 9, + "w": 12, + "x": 0, + "y": 11 + }, + "id": 6, + "legend": { + "alignAsTable": true, + "avg": false, + "current": true, + "hideEmpty": true, + "hideZero": true, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "sideWidth": null, + "sort": "current", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": false, + "linewidth": 1, + "links": [ ], + "minSpan": 24, + "nullPointMode": "null", + "paceLength": 10, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 24, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "sort_desc(avg(irate(container_network_receive_bytes_total{cluster=\"$cluster\",namespace=~\"$namespace\"}[$interval:$resolution])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\",namespace=~\"$namespace\", workload=~\"$workload\", workload_type=\"$type\"}) by (pod))\n", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{ pod }}", + "refId": "A", + "step": 10 + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Average Rate of Bytes Received", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "series", + "name": null, + "show": false, + "values": [ + "current" + ] + }, + "yaxes": [ + { + "format": "Bps", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "Bps", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + } + ] + }, + { + "aliasColors": { }, + "bars": true, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 2, + "fillGradient": 0, + "gridPos": { + "h": 9, + "w": 12, + "x": 12, + "y": 11 + }, + "id": 7, + "legend": { + "alignAsTable": true, + "avg": false, + "current": true, + "hideEmpty": true, + "hideZero": true, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "sideWidth": null, + "sort": "current", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": false, + "linewidth": 1, + "links": [ ], + "minSpan": 24, + "nullPointMode": "null", + "paceLength": 10, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 24, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "sort_desc(avg(irate(container_network_transmit_bytes_total{cluster=\"$cluster\",namespace=~\"$namespace\"}[$interval:$resolution])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\",namespace=~\"$namespace\", workload=~\"$workload\", workload_type=\"$type\"}) by (pod))\n", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{ pod }}", + "refId": "A", + "step": 10 + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Average Rate of Bytes Transmitted", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "series", + "name": null, + "show": false, + "values": [ + "current" + ] + }, + "yaxes": [ + { + "format": "Bps", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "Bps", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + } + ] + } + ], + "repeat": null, + "repeatIteration": null, + "repeatRowId": null, + "showTitle": true, + "title": "Average Bandwidth", + "titleSize": "h6", + "type": "row" + }, + { + "collapse": false, + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 11 + }, + "id": 8, + "panels": [ ], + "repeat": null, + "repeatIteration": null, + "repeatRowId": null, + "showTitle": true, + "title": "Bandwidth HIstory", + "titleSize": "h6", + "type": "row" + }, + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 2, + "fillGradient": 0, + "gridPos": { + "h": 9, + "w": 12, + "x": 0, + "y": 12 + }, + "id": 9, + "legend": { + "alignAsTable": false, + "avg": false, + "current": false, + "hideEmpty": true, + "hideZero": true, + "max": false, + "min": false, + "rightSide": false, + "show": true, + "sideWidth": null, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "links": [ ], + "minSpan": 12, + "nullPointMode": "connected", + "paceLength": 10, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 12, + "stack": true, + "steppedLine": false, + "targets": [ + { + "expr": "sort_desc(sum(irate(container_network_receive_bytes_total{cluster=\"$cluster\",namespace=~\"$namespace\"}[$interval:$resolution])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\",namespace=~\"$namespace\", workload=~\"$workload\", workload_type=\"$type\"}) by (pod))\n", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{pod}}", + "refId": "A", + "step": 10 + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Receive Bandwidth", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "Bps", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "Bps", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + } + ] + }, + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 2, + "fillGradient": 0, + "gridPos": { + "h": 9, + "w": 12, + "x": 12, + "y": 12 + }, + "id": 10, + "legend": { + "alignAsTable": false, + "avg": false, + "current": false, + "hideEmpty": true, + "hideZero": true, + "max": false, + "min": false, + "rightSide": false, + "show": true, + "sideWidth": null, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "links": [ ], + "minSpan": 12, + "nullPointMode": "connected", + "paceLength": 10, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 12, + "stack": true, + "steppedLine": false, + "targets": [ + { + "expr": "sort_desc(sum(irate(container_network_transmit_bytes_total{cluster=\"$cluster\",namespace=~\"$namespace\"}[$interval:$resolution])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\",namespace=~\"$namespace\", workload=~\"$workload\", workload_type=\"$type\"}) by (pod))\n", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{pod}}", + "refId": "A", + "step": 10 + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Transmit Bandwidth", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "Bps", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "Bps", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + } + ] + }, + { + "collapse": true, + "collapsed": true, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 21 + }, + "id": 11, + "panels": [ + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 2, + "fillGradient": 0, + "gridPos": { + "h": 9, + "w": 12, + "x": 0, + "y": 22 + }, + "id": 12, + "legend": { + "alignAsTable": false, + "avg": false, + "current": false, + "hideEmpty": true, + "hideZero": true, + "max": false, + "min": false, + "rightSide": false, + "show": true, + "sideWidth": null, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "links": [ ], + "minSpan": 12, + "nullPointMode": "connected", + "paceLength": 10, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 12, + "stack": true, + "steppedLine": false, + "targets": [ + { + "expr": "sort_desc(sum(irate(container_network_receive_packets_total{cluster=\"$cluster\",namespace=~\"$namespace\"}[$interval:$resolution])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\",namespace=~\"$namespace\", workload=~\"$workload\", workload_type=\"$type\"}) by (pod))\n", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{pod}}", + "refId": "A", + "step": 10 + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Rate of Received Packets", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "pps", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "pps", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + } + ] + }, + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 2, + "fillGradient": 0, + "gridPos": { + "h": 9, + "w": 12, + "x": 12, + "y": 22 + }, + "id": 13, + "legend": { + "alignAsTable": false, + "avg": false, + "current": false, + "hideEmpty": true, + "hideZero": true, + "max": false, + "min": false, + "rightSide": false, + "show": true, + "sideWidth": null, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "links": [ ], + "minSpan": 12, + "nullPointMode": "connected", + "paceLength": 10, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 12, + "stack": true, + "steppedLine": false, + "targets": [ + { + "expr": "sort_desc(sum(irate(container_network_transmit_packets_total{cluster=\"$cluster\",namespace=~\"$namespace\"}[$interval:$resolution])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\",namespace=~\"$namespace\", workload=~\"$workload\", workload_type=\"$type\"}) by (pod))\n", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{pod}}", + "refId": "A", + "step": 10 + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Rate of Transmitted Packets", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "pps", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "pps", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + } + ] + } + ], + "repeat": null, + "repeatIteration": null, + "repeatRowId": null, + "showTitle": true, + "title": "Packets", + "titleSize": "h6", + "type": "row" + }, + { + "collapse": true, + "collapsed": true, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 22 + }, + "id": 14, + "panels": [ + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 2, + "fillGradient": 0, + "gridPos": { + "h": 9, + "w": 12, + "x": 0, + "y": 23 + }, + "id": 15, + "legend": { + "alignAsTable": false, + "avg": false, + "current": false, + "hideEmpty": true, + "hideZero": true, + "max": false, + "min": false, + "rightSide": false, + "show": true, + "sideWidth": null, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "links": [ ], + "minSpan": 12, + "nullPointMode": "connected", + "paceLength": 10, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 12, + "stack": true, + "steppedLine": false, + "targets": [ + { + "expr": "sort_desc(sum(irate(container_network_receive_packets_dropped_total{cluster=\"$cluster\",namespace=~\"$namespace\"}[$interval:$resolution])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\",namespace=~\"$namespace\", workload=~\"$workload\", workload_type=\"$type\"}) by (pod))\n", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{pod}}", + "refId": "A", + "step": 10 + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Rate of Received Packets Dropped", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "pps", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "pps", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + } + ] + }, + { + "aliasColors": { }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "$datasource", + "fill": 2, + "fillGradient": 0, + "gridPos": { + "h": 9, + "w": 12, + "x": 12, + "y": 23 + }, + "id": 16, + "legend": { + "alignAsTable": false, + "avg": false, + "current": false, + "hideEmpty": true, + "hideZero": true, + "max": false, + "min": false, + "rightSide": false, + "show": true, + "sideWidth": null, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "links": [ ], + "minSpan": 12, + "nullPointMode": "connected", + "paceLength": 10, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "seriesOverrides": [ ], + "spaceLength": 10, + "span": 12, + "stack": true, + "steppedLine": false, + "targets": [ + { + "expr": "sort_desc(sum(irate(container_network_transmit_packets_dropped_total{cluster=\"$cluster\",namespace=~\"$namespace\"}[$interval:$resolution])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\",namespace=~\"$namespace\", workload=~\"$workload\", workload_type=\"$type\"}) by (pod))\n", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{pod}}", + "refId": "A", + "step": 10 + } + ], + "thresholds": [ ], + "timeFrom": null, + "timeShift": null, + "title": "Rate of Transmitted Packets Dropped", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [ ] + }, + "yaxes": [ + { + "format": "pps", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "pps", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + } + ] + } + ], + "repeat": null, + "repeatIteration": null, + "repeatRowId": null, + "showTitle": true, + "title": "Errors", + "titleSize": "h6", + "type": "row" + } + ], + "refresh": "10s", + "rows": [ ], + "schemaVersion": 18, + "style": "dark", + "tags": [ + "kubernetes" + ], + "templating": { + "list": [ + { + "current": { + "text": "default", + "value": "default" + }, + "hide": 0, + "label": null, + "name": "datasource", + "options": [ ], + "query": "prometheus", + "refresh": 1, + "regex": "", + "type": "datasource" + }, + { + "allValue": null, + "current": { }, + "datasource": "$datasource", + "hide": 2, + "includeAll": false, + "label": null, + "multi": false, + "name": "cluster", + "options": [ ], + "query": "label_values(kube_pod_info, cluster)", + "refresh": 2, + "regex": "", + "sort": 0, + "tagValuesQuery": "", + "tags": [ ], + "tagsQuery": "", + "type": "query", + "useTags": false + }, + { + "allValue": ".+", + "auto": false, + "auto_count": 30, + "auto_min": "10s", + "current": { + "text": "kube-system", + "value": "kube-system" + }, + "datasource": "$datasource", + "definition": "label_values(container_network_receive_packets_total{cluster=\"$cluster\"}, namespace)", + "hide": 0, + "includeAll": true, + "label": null, + "multi": false, + "name": "namespace", + "options": [ ], + "query": "label_values(container_network_receive_packets_total{cluster=\"$cluster\"}, namespace)", + "refresh": 2, + "regex": "", + "skipUrlSync": false, + "sort": 1, + "tagValuesQuery": "", + "tags": [ ], + "tagsQuery": "", + "type": "query", + "useTags": false + }, + { + "allValue": null, + "auto": false, + "auto_count": 30, + "auto_min": "10s", + "current": { + "text": "", + "value": "" + }, + "datasource": "$datasource", + "definition": "label_values(namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\",namespace=~\"$namespace\"}, workload)", + "hide": 0, + "includeAll": false, + "label": null, + "multi": false, + "name": "workload", + "options": [ ], + "query": "label_values(namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\",namespace=~\"$namespace\"}, workload)", + "refresh": 2, + "regex": "", + "skipUrlSync": false, + "sort": 1, + "tagValuesQuery": "", + "tags": [ ], + "tagsQuery": "", + "type": "query", + "useTags": false + }, + { + "allValue": null, + "auto": false, + "auto_count": 30, + "auto_min": "10s", + "current": { + "text": "deployment", + "value": "deployment" + }, + "datasource": "$datasource", + "definition": "label_values(namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\",namespace=~\"$namespace\", workload=~\"$workload\"}, workload_type)", + "hide": 0, + "includeAll": false, + "label": null, + "multi": false, + "name": "type", + "options": [ ], + "query": "label_values(namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\",namespace=~\"$namespace\", workload=~\"$workload\"}, workload_type)", + "refresh": 2, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "tagValuesQuery": "", + "tags": [ ], + "tagsQuery": "", + "type": "query", + "useTags": false + }, + { + "allValue": null, + "auto": false, + "auto_count": 30, + "auto_min": "10s", + "current": { + "text": "5m", + "value": "5m" + }, + "datasource": "$datasource", + "hide": 0, + "includeAll": false, + "label": null, + "multi": false, + "name": "resolution", + "options": [ + { + "selected": false, + "text": "30s", + "value": "30s" + }, + { + "selected": true, + "text": "5m", + "value": "5m" + }, + { + "selected": false, + "text": "1h", + "value": "1h" + } + ], + "query": "30s,5m,1h", + "refresh": 2, + "regex": "", + "skipUrlSync": false, + "sort": 1, + "tagValuesQuery": "", + "tags": [ ], + "tagsQuery": "", + "type": "interval", + "useTags": false + }, + { + "allValue": null, + "auto": false, + "auto_count": 30, + "auto_min": "10s", + "current": { + "text": "5m", + "value": "5m" + }, + "datasource": "$datasource", + "hide": 2, + "includeAll": false, + "label": null, + "multi": false, + "name": "interval", + "options": [ + { + "selected": true, + "text": "4h", + "value": "4h" + } + ], + "query": "4h", + "refresh": 2, + "regex": "", + "skipUrlSync": false, + "sort": 1, + "tagValuesQuery": "", + "tags": [ ], + "tagsQuery": "", + "type": "interval", + "useTags": false + } + ] + }, + "time": { + "from": "now-1h", + "to": "now" + }, + "timepicker": { + "refresh_intervals": [ + "5s", + "10s", + "30s", + "1m", + "5m", + "15m", + "30m", + "1h", + "2h", + "1d" + ], + "time_options": [ + "5m", + "15m", + "1h", + "6h", + "12h", + "24h", + "2d", + "7d", + "30d" + ] + }, + "timezone": "UTC", + "title": "Kubernetes / Networking / Workload", + "uid": "728bf77cc1166d2f3133bf25846876cc", + "version": 0 +} diff --git a/charts/kubezero-metrics/dashboards/mixin.libsonnet b/charts/kubezero-metrics/dashboards/mixin.libsonnet new file mode 100644 index 0000000..6a018a0 --- /dev/null +++ b/charts/kubezero-metrics/dashboards/mixin.libsonnet @@ -0,0 +1,9 @@ +local kubernetes = import "kubernetes-mixin/mixin.libsonnet"; + +kubernetes { + _config+:: { + grafanaK8s+:: { + dashboardTags: ['kubernetes'], + }, + }, +} diff --git a/charts/kubezero-metrics/metrics-zdt.path b/charts/kubezero-metrics/metrics-zdt.patch similarity index 100% rename from charts/kubezero-metrics/metrics-zdt.path rename to charts/kubezero-metrics/metrics-zdt.patch diff --git a/charts/kubezero-metrics/sync_grafana_dashboards.py b/charts/kubezero-metrics/sync_grafana_dashboards.py index 78bda4a..4280c00 100755 --- a/charts/kubezero-metrics/sync_grafana_dashboards.py +++ b/charts/kubezero-metrics/sync_grafana_dashboards.py @@ -18,7 +18,7 @@ def traverse_json(obj): for k, v in obj.items(): # CloudBender::StackRef if k == "datasource" and v: - obj[k] = "$datasource" + obj[k] = "Prometheus" if isinstance(v, dict) or isinstance(v, list): traverse_json(v) @@ -66,11 +66,15 @@ else: ''' for b in config['dashboards']: - response = requests.get(b['url']) - if response.status_code != 200: - print('Skipping the file, response code %s not equals 200' % response.status_code) - continue - raw_text = response.text + if not b['url'].startswith('file://'): + response = requests.get(b['url']) + if response.status_code != 200: + print('Skipping the file, response code %s not equals 200' % response.status_code) + continue + raw_text = response.text + else: + with open(b['url'].replace('file://', ''), 'r') as file_contents: + raw_text = file_contents.read() obj = json.loads(raw_text) diff --git a/charts/kubezero-metrics/templates/grafana-dashboards.yaml b/charts/kubezero-metrics/templates/grafana-dashboards.yaml new file mode 100644 index 0000000..8cbb180 --- /dev/null +++ b/charts/kubezero-metrics/templates/grafana-dashboards.yaml @@ -0,0 +1,43 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: {{ printf "%s-%s" (include "kubezero-lib.fullname" $) "grafana-dashboards-kube-mixin" | trunc 63 | trimSuffix "-" }} + namespace: {{ .Release.Namespace }} + labels: + grafana_dashboard: "1" +{{ include "kubezero-lib.labels" . | indent 4 }} +binaryData: + apiserver.json.gz: + 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 + cluster-total.json.gz: + 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 + controller-manager.json.gz: + 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 + k8s-resources-cluster.json.gz: + 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 + k8s-resources-namespace.json.gz: + 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 + k8s-resources-node.json.gz: + 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 + k8s-resources-pod.json.gz: + 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 + k8s-resources-workload.json.gz: + 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 + k8s-resources-workloads-namespace.json.gz: + H4sIAAAAAAAC/+1d6W/bOBb/nr9Cq+kuktmksZ2rCVAsGqfBDLad6aRpF4tJYTASbQuRRZWicjTw/O3DQ5IpiYqPHJaS1y+NSImk3sXfe3xPvl2xLBsFAWGIeSSI7APrljfxRt+LGL/68xu/HK+L27DrMXTuY97KaIxl2yDA7FeXtwSx76sWisLhKSE+80Le3pKNQ8/FXRIwSnwxRR/5kXre94KLSE4jLynuUxwNeYO91Yps1Uau5B1yWWpxvNUhvo/CCOujyY4h9gZDsXK7s9MKr+2sI0QB9icj6aPJfuR7KOoSn1BJhfG63nmOaFScSna4KBp+wMGAiUW3W6U+XPUYQxGJqSNewP5EyQizIY4jO3dX3/P98rCeoHc71+TjAQ7cjHmTd7ocmKYX9IspxQGr6B2h66oeL6joiYbkShMNrYdx6fIrnrpEfjyhkdaXpz+XE3lXcXTZceW5kvytYo8mWlmzENRPxAvYR+JK4osGC0XWD0xJnvwh5vwJGBpgIw9DMQpFrheLaXbKfWbWc7K7mGIq5u77hOXnjDD1cPT7JaaU60xeXIsiOxFbMdb3mJPZ2rAo/s4pyvKilOoMkdP+dNzZ3t/plu/IJLbMxYk4tkodXL1dHHyWS696WJiAiVkw3pJJsblX43Sn1Bsx5FwYxKggSLMQ0PdG3hTyHe+/2Wq9EPJpV3lNikLk4CrbxzuFoWh38q3JNCU1jhgOQ+x+4Is0Kg1DdIDZDOqAr0PJoygerZ4FlhVwLe8FaITlanshcXsO34gQn4geZH/1nDDuxRHX9F6Eeasb9aTROuDD9Chi+NbxY75G+vbMfpX8eWavW9nAoj27OLPHZ8HPFglWs6Z1PvGaWM+Akjjs+bjPVq8IvfAJctet9K8euwnx2mTUXtbBHz+4iM/VC5ArsXiKfXSO/TlXVphM9Ir/5ZLXrPMbq3JZZ0FZ4PuEjpDcbJk3ErSTIly6jdtCTLmlP0YOkyrUqRDe42y829t09vGY6+TkUi5mPLYrRuASdKHBkYKQ41BK6lz2IZMoB/mIrkoucJAiN29pMubmQEL4IaIuv0zH4i2p6X7NxZFzZO0pCT59+3gGBFamfZnkrdpcFiZupXlmQwGlie8aQJB4u2MOOg1zyb7PQ6/PzJ1MOgB299MX64swmHn4wrIt6raIDhHFbhV0JJSVd0aFDaW+ixm9wPUuPTfmULISJqb3Sickv7JrdO1F5XWdx86F2ljKRLdHCUQUJCmwzBYCZ36qGghnYFd6VeZXuEHXs8C+iaTy6SgzCJTYHKpkySeDQySdp3apT2F/42MK/JcBjPbGc2n+El/CrGLqPaaAoJVia6Zb3ICHGBUVJ2n9ldsM6WSbu0/IVc6RzhZ0mqicLk936aHq++z9kP3DXaUtCStepv9cdp874D6XvIL283SfH8xpKa9lmtcSsRt/Lh/+tLzRKGHHEyTxf/5v4+PHjaMj65dfDkajg8gAJ0LEuLkJqsdMd0rle9qLecwncRB4wcD6RNwqfzkRE6O5dVJjkefRou/sYscbIWmiWib398KsQ0nnqfQwD3007b4M4dhHlNsXy+XumG289QsVamvfyZ2vQoGtn94ZOFSN33IcDOLROVeHUn8ceNrWuhiDzShv2dztNI27h/Xl7snd0UJg8EwM7tafwdY/gcX3YfHR47E4AUrycnFGf7grbA1MnonJ7+urx4q9oMX3Y/BxnbX4f0mIuxksrjplekQOv950N1F7dxvt9VtbW/v9/X38Zt/BaMc5397D++d4t723efEm2khDvtFGemzwn0tENyZRg7evJn//S3SlIeY0wCwbJxHmSXxZdqSjvn3V6znY92WjjDonDb3OndJ4VcnpOpibVA6tUzEZ2JtF7E3uuKqebK45ZzVibr7+eXNxGkaMesFgPhpWn6rMexDtkDhgq8s50r37QPfO4y+Z6GU4+IoYkmFPo/Vf4FysPAfFfRkItw0xkXseMEJOwNPmBNRAiA4fS4gyyk8EJkUdvfQMfW4+aEfV6owaZGYJMtMFw1N/IdoERXz2ini0DOOtMnRAYhopMe/BdD8T0w1q2GA1PLYbkL74h0jJrFf6IkVBJDhp5mMW0TB0QXojpDc+0/TGvJ5CemMpvdFQHrgF+Y2l/EYoD4TyQCgPhPJA3a2zrInrMcIjQm8k0veCAXfgWO/8huH5fZBsyH/wLtHgjbiRUBdjMWuFRwLVgVAdOEt1oBJUKBB8vALB5VL4udQIfpRUhDLBWvjRcisDP/qF+tFGVQRXuuRKlz3pbfCkSw4CVApCpeB8zjNUCj7zSsFKrAcpw/UpFlQY8F4MhnrBmtcLPiCPodjoflyudclgwmuoGqx11eADaDMUDkLhIBQOQuEgFA42wt5A4SAUDkLhYD0LByFbAOoG6143mB1dQ+L7EsSmC6YHKgdBFaF4EIQG6gfBfje5fBAUcZmKWPsKwiS6DkWEUEQIyY+NSH6EOsK5kx/zuXaphRdjtUc2JEZCYiQkRt4zMbKrtMA6wQ72LrF1iAJXSRMcn9UzS/IwjO7J61OB0Lh7Asyufcbk4sw+4TywSD9VbNf6hBSKBlbXM3EyvDerU71mwO36J1A+uGJbR5QIKAMsr2ku5aMoOHC97tmVC3MdsiqvAosRKzTWbDUsu9KcTQeZlZBZCZmVLy2zclUcIHric6yrk5PDADMhID2qYJ06kVVfb516LPdX4autf3L7I4bvpRHTb2vqENEqnSKazhAf9Qjxr8VyQNcacGb44HmfdwoKS8AgSErzJOXwSSUlNSmhchlAVJokKt3lGBWQlQbKytFSzYqrIhEgMk0SmffLNS8gMw2Umfp/XT856PxNiV0dvwAISXKQJAdJcjPrLGTLlbLlDF/d34WUuFJKXAtS4lRK3O6SPnUO0U4TChQ9r//9gLjwEb9w3vwvQd+d3Qifg356sCcS2wDqLQHqrT8HoLMHQAeATqOAzss9rQOk85RIZ0puP0AdgDoQ1Xq6qFZZCyGSNQvAewMADwBe7QAelzeIZAG+Wya+e8dVh2us1U0FcAL0BJXTPO2DrDwI4B/AP4h0NRYI7QMQAiDUKCAEkS5AQrVCQlrVLIAhAEMQC1tSLGxGhYVI2VwAsdAGCBEQYlOSvl5gjRFAxCdN+5rlG1gAAwEGQkysUZCnDZAHIE8z078A8wDmeRLMM+1jkAB7APZA9Ovpol+pXhZ1EaJcM0G+DkA+gHyNjnK9wE9dAPKrQ7TL+IlggH8A/yDq1SgItAUQCCBQs6NegIEAAy0r+gUwCGAQRMHqFQUr6WRFNGwlWbUdOUM8Ql8xjdTK2tuqWfxKn3jCRfRCDsZ3ssFEKm1h1SnflrD8MQ41FsOj0OevGAwyLeMIImKaLE9EQENPOQzJ8LWUCBf3UewXdnapPnqvCZKK3+/DeTmtEKRUhXUsqfWSULCraFbt7zGmN/KXSEyYU3zVURjkvFjy1gG+LnwGMjNW2vQrhdfRCIZ8/2vy/oXXmELKChqaiTcDrE4JrO2F3DbzXdzF73wDSK2i/ohz0DPcnnIlwQXzsETO1FNWdjVDHl7QJ+tWMtyamVmdacxKtiidqVwlJEeiP9L57XxvaaGizXxzIgrqTbSOOMKnaiDdLM0nHyhmxEBn0dxzSCwlZ6tV7FGG0m63cryfqrahT25G4o4qzc1uWFj+uPZ7gZfY0jzPnxiEjos/xG7fbYceQ00Kv34yn47UiV7zKOOFF36h/uebwDFQpowmG6OqSzLljy2jmVA8jDE3CuJYk8TnYeRXUrw5VvjKk8RMkFVf+XV2QK422qmrY0tDL9rs3GOhx+EhnTyckCRz/HV/w97RDlN1629v6RfaD4bbO9rfbf1iq6X3aB/t6Gh/t10lv9/SdxAeuSYcU2fRB97VB9Zn6WzrFxpC3nP19aZryZHvB5HhHfvLaTcBwyn+/m+Gg61Nq0tGYczx+En6s2i87bdUJK3VtCAjUtJpxzIMaaM3e/3zlrvf3sdOC6Od/u7O9la7s43bu852B+2omy8ziN5aGf8NlStAr+bvAAA= + kubelet.json.gz: + H4sIAAAAAAAC/+2d62/bOBLAv+evELR3QAP4un4m8QH90KYPLNpuc2m2B9y2EGiJlnWRRZWi8tgg97ffkHqYejix4/g9X4KYpChyZjjz00iU7g4Mw7QsLwhjEZn/NP780UhKOP0Ze5xqZSQImCDCY4EsvIMiKPS9SKgm8PNeNaOOJ8jAp1A6JH5EVaEbUPGbA0VB7PtJCSfh6IIxX3ghlDdV4chz6CkLBGd+VDjeKxzre8GlNjBOhzDQERSYnWZkJmXsWrVQo0zGCqU2830SRoWxFSqcSk1IAupPutK7S44k9oheeGPKYqGNcVLPfMbfEPvS5SwOKv1P2nwjfkynVxeHoMp/aff7dvfIbBSLuTsgL9qd44bRavcbRrfZMJovT/qH5Xa/ON0u6RBTK/1ROK9DBIlYzG05LPOMszEVIxpHhY7MIeNjIqduBiygxTqXxC7NjSUvHpObbLatZrM0rLEXZJXlqmjEruskBFViJE2A+c4nMqBF46lr9ZnwS6pkKnhMtUb3xfFzzzljytyLFcoe28WiQFB+Rfw6IygarCaHMPQC9+I2VKKYVldVfVGe0DogY6WkKyk5QzBD0BtRUriRVstTFSruG7N1zkngztB5u9j5VPMCK3gLFnbGQHJR1RRMKUVV+Zk56vw2CwJqC1iklXYXckQ1gg9ZJIbejTzarKt4D87mq/eX6r7X/HupDTiW2mNV+YOHKlF9Bo/yuOqGsK7U6oGxV4UqkomZv//6uqaS5QfOKPMI3FnFcqGQX4KJ1qzUoef7p9L9KP1Lx9JpgV9pncCfk750LK2TimMZygHVL0B5Fr2/pLs2uKhWv1PpSF/vU9eoCjbQZzwOqqoShLtUzKAFehOqMUXx+MVlDC6ECisAu7Ok8d/ZfhzB6n713fxb+u93s2H8lw2gJG393bw/rGpo4hwFhAgrotyjUbVZ5jveE1so2bQrTXzq0sB5n/dX7QSsUoVY8/Ws1pC7w6hGcp5QMdw8j4MAHJHxMZlnyfuLPILflXVH+CScTtde4vvMCE7h0wj4oti/cir6UjspLzXVYralxuQ4zVdzrrLMr8210NRBv6eOE0La5Dht/ggSCBJSkR0ECQQJBImdBQmehFArZE40G0s0DC+AYBjY9NX/oGH2Q0KG8eXcmNK5ZUNkEAufYZUYc3eXnfn+fuVIcwb6QJxBnEGceVac6SLOIM4gzuw8zoDdCQID58uDmvwUiDbzoc1pJjjkG+Qb5Jtn5Zse8g3yDfLNzvHNleyMWmMSEBeIQzBBfCspXJRwGoaMlRTaAj/E0K36abGhdc247+wFmrxWMze+KYECoADPIZwgnCCcPCucHCGcIJwgnCCczAEnGZs4NPIg0O4jnLxNpo50gnSCdLI8OjlGOkE6QTrZOTrhAAzF52bB8oaea1HOGV/0ts2fvfGPw91nkFMlMuOdFBkSyLMQyEGpPagupKTs99LS38BM1P6m+upzdl3YwpSvt4tUgcWNQxO0JNFowAh3DOjBLNZnkh4daRWpmji0PtC0uMxdTMT3SHSaQVMpcg8Ir6UDoJ1o9IkGrhipWFSpo9MOmwmSPOUSW5XCD5w4Hg1EmXYeQY+TIl6oBV9dSiAIN3gdXaQ72CTqlDwsuXKneGo75jwZV81hELqnHCYttr6Ge+4IFqMzZSSpr6+rgWP+7TlKL+UArxyJINPCjVpMj1KeDEpRzblVxXV65tYsQFdBlkpQN0MKphII4tazfiiPljYRR5Wbc2FGStXDQFUO5VSFsKHPSr6w1k8kslVR5ssVRDaQcs2MgA1sOm1ZpDRRzNKBK7YvawcJoTIMqfMpIY1q/eLBmkOYkcGThanzi5LcQn3MLofshyO2Mbg1XuQdW9KxTYL82uK5cXdXHNMSQnzJJOR03ifQWrEnWfd15A1FfWUaRL5kIzbOQXtP4oKyj2Bc1FwwqvVvZTHICxzvynNiUgjG9VihdvQWR3ZDbryoOq5BbF8mVlvjnMapH5ByKdNtellVc9R0X5g7NLVHuX4Kt+RmlkvGiX2ysMYufXkdXTs8WcncNySqXLRqsaH2sCQ41FZpU57r2nRLZqEvtEdTSnvAL33kF+QX5JcZ+EXlHJ4bY7LShlGEB8SYp2FMkuVAmNk/mGluP8k0F8UYzEthXirlutL4EOwQ7NYIdq32ushu5EWCQdgdWz9jAkzn0xfNl/1+w5gF+Zw4BaGI2ixwIiuJykunv4bh00NEwKchYKY0o98XIyPTOuLgmnFwFzJbW5fXQiBEIMyAsIVAiECImb4y9skX3MD5uajS3gObwxeAvfVxHUx1DpBrLCDQayaf6tx9iSbzfECobzaDjs+YY3yVRo6pUUyN7mVqdH/v8JZyLwh+CH77CH6zJwJXToRrTvctBQvnE/c0XlxavnWtAt8+anybKgbJcZ+yqM1tT6HiDXXMnz4bRnfWi9HyI0bvxqG4nV79H8oZMjgy+OYnX4ENOUh0cq99dag9OaUM6g0jfQNG6MeuF2zGPXc5MFVUGNs23IX/mujVwH0lmG/EfOOeglIXQQlBCUFpSaC0sm0oiEcrwCPcr4KQtL+QhOk1TK9l1NhDakRqxM0uS77HPUPi7aF7rvO+XG0euNygTS+7RJhvcTsM3sjFG7lImkiaKWke4fOQCIuYYiw/h2fL96KH+acA5rkh+2xYuIZX32zfVudTpSgjVdREegbHNCKmEfFe6z6xzDGyDLIM7u2YebPBY5CzkuQXvuLlObgH81mYz8J8Fuazti2fBeHV5l6Y6kNtsvK9IbVvbZ8a9AqYwADHLTXG+JLpET9egfSI9FjdkQorweLUB6pcXRpsdz5E9fz7UD+9+2Ak+sAcF+a4MMe1Xzku/EQFUgpSyhwv1NDwJWOD3X6jxnYhTP59YsQYzFlhzgpzVvvHdG38OgUyHT6w/0So24/XpG0X1Dn4hjSEOoQ6hLo9hronfWGizgHOQnW18LYg1tU646VynapEsNs5sMv5DfhDWLYvlxPg20/Qupjr5R3TbiE2bFCkLGu/fJnT2ypRrX1zs8SPSSxdbJ01ia3zoNjebLrYumsSW/dBsZ1uuth6axJb70Gxvd2My6jzs1N8Aw7e1sc34ODl015fPuF3WjAnjpdOM+TEa3BtsZz4fBt5QLCDhhFzf+17eORI1D8wmG1ImJ8nysJPNGPqHFPnyH7Ifjn7dTB1jqnzTeK/7rrwL+TMplEEYCeNBAhvTMeM31qDW0GjxR5xwCcZpoHZZyVjBLA1A5iy8VUyTG3V4hy24fPAHTYl+ugifSB9IH3I6xqZX8oQxA7jPJ30XN/bQAaZ+nqXsz+MOJJWjBiy5jzQSEpv23NBGzwJBJASgPQQQBBAEEBknGGWyziLhVQgpjuWgxofcgkja+wbaywp5bHh89jlO1AH6QzMyB7RMflGeZSMMvkSKfjo2+RUDuGXqiNwy+7ESpUr5QGVOau8L0HHoQ/TDdx81Zlyo5dm2xNr0OCigG6C3ijjcOiQxH4pgqnlpNfWkaD68FTRuUyxqWxJ6win1TL1wrmyNzV/xpTfpmn3KupJxy39cNFCodSl0jpNvWmmF+30B6XpaAIjvv8tnX9pGpoodTnMAKaZrLRoBW4X4qZDX/s1PJUL0kxjq97XGDTi1RyTSbnmkMdErE5nJV5U7eu0QuZYXjBkDSPt7rBe+O3HhJ+GIF1JYOJKwtG/svObxdrKQGVZfeNUtclMtIo4ohdJRzqNrlrfzWn6LsawaevmMU1nYLOQquUWXh4HCrvyN+8+mFUqv0zufvKU0m5YyUEWjO4Th+spcaeudpjwnRmw63+0MhYCPkvLzMJhoQcUxCcHpyLJX36jA4nZm5iQ2WpqPzr6j9Z48n9P+7+l/+g09ZoJsZlt7f+Wk/jBH9kcEhPI7efRs+gdH+kd62dpd/UfzuT/Y0cfbzaWgvj+Yurixfzj4jSNjlls/pgHRuNX42NiiUmTWF23m51W52RIWr2e0+u3esdH/eHAoc5J/4TYzf7Q6SeNr/KI3Dy4/z8AoeXSG+4AAA== + namespace-by-pod.json.gz: + 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 + namespace-by-workload.json.gz: + H4sIAAAAAAAC/+1dW3PbuhF+96/gsGnGbuVGlGTZ8Uym42uc6Umbxk7OtIlHA5GQxDFF8oCgbcXj/vYC4A0kAVKyZV0snIcca5cCgd3F4sMuFnrY0jS917NdP8SBfqj9uG5EFAT/CG0EORpwXQ8DbHsuJT4QEiE6doDpI+yTFlMZpx/aDv7kEqbRyKgWwCDwQmRCwtC/IG8M8QiGgc49A13QdygfoxBy9JFtCai26bknnuMh2iAa9sF2s6G1DIP8s7fX0IwdvmkXjNmLj7KxaG+1IwcinOsCnvjsOQsEo74HkKXHvEf2/2vy7yMTCrRsXOitPnQh/mQRihs6TkRBwB9deZ6DbZ/Qm4xIh3PiuRh5DhXoADhB9H07913Hdm84LfjAhez5SOSJwHXTcxzgB5BvKcewSpwhsq0vXqbMSMgFhd2Rz60OR7hPBhB/ntDPiXTSttkYWunHrNfXKQ1BHwLMDZWjfsIQMfWI2V+9u5yAGSsYeXdXNi5Zjo5jon4SIgRdrB0D17qzLTzS889c2r/Yc6Mux4gtAXl3kQ3EY0wFDxwbBMwAmSQzEfQBo+S6Qu3pN+gOMRNzM0eHQUlDtbNFH9iOk5M0JXxEwLLJQHlNybX9vqBto1WjbUOs7Xb60YFD6Fr5NxExDd2j4Eo8tcHtsDh4arqRvsSe4Gzs44mY9V+IvDJnDO4F7xjbroCK7OEIXwr9DTUzAZU8+zszqbxVUpaH6BDS0RRYpzAwy+1h4p4cQcdugRPCxKxKeiC+QmBFlHoX983gqTeFGUlkcUlmam7G63Q0XzzbxZ89Jg5G0LmZbUKRRfuQWK2LwbDskXzaGjXRkL5/L08vd58IzYIIMv8+cLxMgBIPEkBkw+BftxARi4eFIQay/galgQcYmDel3gQY+j60fiMyLfEwQEOIA2495FdEulrc+2wYVO890jdzOwjH2zZxdXCbLGMYkFZRjywfdx66IUuwCe1b2OtPMAx6zCIeTCckPUAffupv4j9/6g26qrGBffgfoaeffuqPP94QkUJErObwDVnMPSekTvV656f7F81zte302YbvWYQ6RF7o9xw4wNu0C44HrEbyR4+6wh0t/UovZZDvHt6EfUj/6Hl3ZAyHCDqgD2ftb0NL2qScv/2Vp7DX03bo/8nQdrT+REt7uUM6z80s6gg9NGbGQXz7GPYiq8g/ksjmHJiY4Qcjx47c2HnazsND2hnt8THfFIIDtiLpR3k6NRdmaCnxMf4rs0k8IqoZeY5VsFXa73Pi84sGTumXI3uAy4zCQveVGJbmDbRjakHa18ieLG5xSyHJA+/gAGJooejiIj/WKnqjXrJE2q5l39pWSBxXyTMlzzAklHXgHtzbhSWpH5o30SQq+NFx7H9KmkxQXdHvRo5a6kF/8HpKnHNKuy4NYQLuYcXczuzt2C/YGZsKpQ5Shjc8Bgyz5S0vWqpKj0drVTNvYNlylJlYY/W7uMWLefMwVY5QAao6ClQpUKVA1fxAFZGRG4xtrFCVQlVzQVVXsUFhBawUsFp1YGUSXzV2K4SN4T0bxxWZDfmBMPWmrFqRJA19p1/T/nQkaSxlz9rgcXWDxzM3eFLd4MnMDZ5WN3g6c4Nn1Q2ezdzgeXWD5zM3+LG6wY8zN3hR3eDF9A0ma4ykwZRdsaJMvXPI8OCA4I8kqvy++Wd99p1DbezdkATf90oANrdregH8qoFA+0V3CVOgzMBEHpNVrlPUoV1AYLFv5DnRGskJi7iygjSsCPSzdakkk5kw6sSpWpDY7lTsJE26Z41lUnLhZrKhzaSb2BXM8NB/yH+7nz/vnp5qFxeH4/FhUFhRLGjaY8CyKa38ikKUV16XY0aWfdJPETFTzSKQUi899g1Rqep5hg8IukGueMgSnJUDJ2T/aMHC20LXZuMl30W4fh6nQi8lccpxrc1QhXhlnUYdbjjukykmVAcFMM9RhggOb5Q+jpepjyOyQQdDqCaHGNQtWxkbPzlOl6mPZN+eTAntC4h2xBupirP5qsJ/kiq4CbHZ2jhfBW0UJ4Z2ijwal91MlXxc0Qmy2Vq5WKZWfhcGEVZB9PmQ8pMkb73bbx30B/v7pmkY3a7VGrSNdrs/aO0ddLoH+13TfEfTEciFGAa7cT7Fdoe7Sezk7x4afrI+GG8RHFCtfGg3g7e3AO1mmYksLcEYLPnAUg/sY5qmeNPrmZBLiBVtQRzMea4tFHei5ZSCOt+zkpkolv4u5KACDARJblF6qlWZnnpyQqqhspUbbiPH87MRcDtUbuQVmsjJYkxEuZE1tpHTxSw1iRvxo12GMpK1MpKzBeMRZSXraCXny3ElVhSwUMayVsbycUkuRVnLOlrLxRNOaD77JOYlBpg/f5NEeSIByE7AJXWyuQMmfJlsjjG/KlnjvfikTldQJlsRiBTURchqI6rqIypqJKat1BbUSlTWS0jlKTr9JKydEMk2lW+rydHysmFy3hfYdbkblTUV8rqKytqKmvqK6hoLeZ2FvNaipt5CXnNRU3dRU3tRXX9RVYMhrcMo61JYjyE/0yY51yY92zZFfUZVjUZNnUZVrUZFvUb1aTp53UZt7Ubl2Tjx+Th5HUddLYc0iF50dCoKtljsMGVpxxTlHbOWeFRF1SVAggcTOUBRnwQSA45K0JEHHsmRnprCWmkNSFUdiKQWZKp6kLKXFNeFSGpDKutDqmtE5HUiFbUi8noRcc0IXzdSHmq5fkToT+RFGpWFGlXFGhUFG7KiDWnhRmlcazqELZHKKjPrCtCKiNMg2gOFaBWiVYj2dSJalbRTkHZpkFZ6Ul2hWoVqFaqVhbQXf6dhqchkHncaLvUyyZYkTP5+xW6TzMp6Lj4FZN2YLOI2yeJdRq/gOsn2gVjf3HimuPuoeBtF3eVHRc5Cbz8q8ma+/qj2JiNxEXRtJXhrukrwTKflfQUBsi40c7ehvLLrjLjRJ5uGfK26uiJycy8zSt622lcZxRFrIWpYx6uLcP5aguqLiwpjyBC7uproZbv4rDsfXwHyKV36KIU+hoI+Cvoo6KNKoxT2mTv2SUKbCvwo8LNC9zIu61RqWxJuM1pzPZYqysdvyLnUTk0W32g/JY0vSj5Mk8cXcZeayBfxn5zJnyoZzyNEeTZedKVCGS1Ol4zP28o0yHETM/IFKYkQ5ksn5FWF5Ppm5CXwc83y8dPdUvYq0/C4eLnoNEl4wTjLoHYO6XV//dPr/uYcGt0QuCk8NVqLNzsKbyq8qfDmquNNddmCApwLBJy1d7EqzKkw56vHnCtwpLM4+eZzkHPRceWO5HdJjD0VV55TXNmowfldhfMVzlc4f93iyuoCJAX3Fx9fFl8rrzC/wvwqzqzizK2n4M99hT8V/lT4c+3izAqAKgC6lHizwqAKg6q487LizmcIUaj7lLDzVtxzPf7pJ8ptN6O26GOZI9EDcwTH4DtEQdR/4yAi0x9dZj9DBdBN9D2CATKr1bPfntLTt2E49h0iCHeYzkKCWQLM2fqDqAJK+AvhFhyA0MGSHwhPuKJdAwOShRC42NSSKc7DfY7r+VSpRa+r/xFCNGFGLdoWcDI3ctQhvC9c2Jxqjnt9MUqfqzNzvsfjLwyDEyUvhyk2MYms+KoJ2yULtQWPHFFdl0SQY6IMW/B4IuB46Z9FuuxNvcihbqfgwnYHXkOLm9sRy71VJ/d4NeINhFg3E27w7+T9ep5b6iiliR+OtRqNhGOEAbyKGhIWxU2lahBiT1RkSMg90wuZEbSbRU7kFXWjmdN9zQykMt8NJkTQY8ks5J8QzsRpLJBMZdu1Y/eZ1/pzDv0+NjKguqNXe4eXsPj05U+2+RcZ/Syz5Mb2vyHncuKaokrRaA4Zag5Vr2K+403GxVsM+YUsfeAlZtBi92qPhc3aMuYds5ynTrkVEte8J6pa7Con6p5sjdt7xtK2IJPP4joSw9+S7dH0ADpRQFAcy0yk026WruNLBUR5sr2u/G2im1vFqpApY+pXVQ3MGEnfRVhbon2i0IsQITT2xo1cc+u21iZBMDWLl7JFEol/1jlcMas6ckvvzGLpnQ0x8a0kIvQYxTZspqU4qjGIQq66693tpnNeZ2ZOaXrua75N0DrKvhzLrJd0hlevvsdFfHjbz7lg3cjsnLd53eA/tJs8h7vVoMX9bViR7q+TMdAwedns5G/hG+7yDfNvaXX4D9yFLPsW39+kLznx/fJY/kX/dnUSB6KSCNk/0hiU9k77Z/oL6PRDAru07eRH4iNwpYcsF6r3+/0W2O/ugW6rDWD7wGg3W82uuW+97wCj2xxED9+mYbHm1uP/Aa/8lBCcpwAA + persistentvolumesusage.json.gz: + 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 + pod-total.json.gz: + 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 + proxy.json.gz: + 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 + scheduler.json.gz: + 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 + workload-total.json.gz: + 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 diff --git a/charts/kubezero-metrics/update.sh b/charts/kubezero-metrics/update.sh index 10d76d4..03efe2b 100755 --- a/charts/kubezero-metrics/update.sh +++ b/charts/kubezero-metrics/update.sh @@ -7,4 +7,7 @@ curl -L -s -o - https://github.com/prometheus-community/helm-charts/releases/dow # The grpc alerts could be re-enabled with etcd 3.5 # https://github.com/etcd-io/etcd/pull/12196 -patch -p0 -i metrics-zdt.path --no-backup-if-mismatch +patch -p0 -i metrics-zdt.patch --no-backup-if-mismatch + +# Create ZDT dashboard configmap +./sync_grafana_dashboards.py dashboards/kube-mixin.yaml templates/grafana-dashboards.yaml diff --git a/charts/kubezero-metrics/values.yaml b/charts/kubezero-metrics/values.yaml index 2c1c359..1b1b705 100644 --- a/charts/kubezero-metrics/values.yaml +++ b/charts/kubezero-metrics/values.yaml @@ -129,6 +129,8 @@ kube-prometheus-stack: rbac: pspEnabled: false + defaultDashboardsEnabled: false + grafana.ini: server: enable_gzip: true -- 2.40.1 From cba130e9f795fbeb1c9b0757d67612f42685c93f Mon Sep 17 00:00:00 2001 From: Stefan Reimer Date: Mon, 26 Apr 2021 16:46:35 +0200 Subject: [PATCH 14/21] fix: fix naming of kubernetes grafana dashboards, make decompress work for all dashboards --- .../{kube-mixin.yaml => dashboards.yaml} | 5 ++- .../dashboards/kube-mixin/apiserver.json | 2 +- .../dashboards/kube-mixin/cluster-total.json | 2 +- .../kube-mixin/controller-manager.json | 2 +- .../kube-mixin/k8s-resources-cluster.json | 2 +- .../kube-mixin/k8s-resources-namespace.json | 2 +- .../kube-mixin/k8s-resources-node.json | 2 +- .../kube-mixin/k8s-resources-pod.json | 2 +- .../kube-mixin/k8s-resources-workload.json | 2 +- .../k8s-resources-workloads-namespace.json | 2 +- .../dashboards/kube-mixin/kubelet.json | 2 +- .../kube-mixin/namespace-by-pod.json | 2 +- .../kube-mixin/namespace-by-workload.json | 2 +- .../kube-mixin/persistentvolumesusage.json | 2 +- .../dashboards/kube-mixin/pod-total.json | 2 +- .../dashboards/kube-mixin/proxy.json | 2 +- .../dashboards/kube-mixin/scheduler.json | 2 +- .../dashboards/kube-mixin/workload-total.json | 2 +- .../dashboards/mixin.libsonnet | 3 ++ .../templates/dashboard-gunzip-cm.yaml | 2 +- .../templates/grafana-dashboards.yaml | 36 ++++++++++--------- 21 files changed, 42 insertions(+), 38 deletions(-) rename charts/kubezero-metrics/dashboards/{kube-mixin.yaml => dashboards.yaml} (92%) diff --git a/charts/kubezero-metrics/dashboards/kube-mixin.yaml b/charts/kubezero-metrics/dashboards/dashboards.yaml similarity index 92% rename from charts/kubezero-metrics/dashboards/kube-mixin.yaml rename to charts/kubezero-metrics/dashboards/dashboards.yaml index d4a0da3..df88a7b 100644 --- a/charts/kubezero-metrics/dashboards/kube-mixin.yaml +++ b/charts/kubezero-metrics/dashboards/dashboards.yaml @@ -1,9 +1,8 @@ configmap: grafana-dashboards-kube-mixin gzip: true -# folder: Istio - -# cd kube-mixin; for f in *.json; do echo "- name: ${f%%.json}" >> ../kube-mixin.yaml; echo " url: file://kube-mixin/$f" >> ../kube-mixin.yaml; done; cd - +folder: Kubernetes dashboards: +# cd kube-mixin; for f in *.json; do echo "- name: ${f%%.json}" >> ../dashboards.yaml; echo " url: file://kube-mixin/$f" >> ../dashboards.yaml; done; cd - - name: apiserver url: file://kube-mixin/apiserver.json - name: cluster-total diff --git a/charts/kubezero-metrics/dashboards/kube-mixin/apiserver.json b/charts/kubezero-metrics/dashboards/kube-mixin/apiserver.json index 09e0d1c..9830c36 100644 --- a/charts/kubezero-metrics/dashboards/kube-mixin/apiserver.json +++ b/charts/kubezero-metrics/dashboards/kube-mixin/apiserver.json @@ -1532,7 +1532,7 @@ ] }, "timezone": "UTC", - "title": "Kubernetes / API server", + "title": "API server", "uid": "09ec8aa1e996d6ffcd6817bbaff4db1b", "version": 0 } diff --git a/charts/kubezero-metrics/dashboards/kube-mixin/cluster-total.json b/charts/kubezero-metrics/dashboards/kube-mixin/cluster-total.json index bacc8f6..22d92c3 100644 --- a/charts/kubezero-metrics/dashboards/kube-mixin/cluster-total.json +++ b/charts/kubezero-metrics/dashboards/kube-mixin/cluster-total.json @@ -1679,7 +1679,7 @@ ] }, "timezone": "UTC", - "title": "Kubernetes / Networking / Cluster", + "title": "Networking / Cluster", "uid": "ff635a025bcfea7bc3dd4f508990a3e9", "version": 0 } diff --git a/charts/kubezero-metrics/dashboards/kube-mixin/controller-manager.json b/charts/kubezero-metrics/dashboards/kube-mixin/controller-manager.json index 18bab8f..d504a28 100644 --- a/charts/kubezero-metrics/dashboards/kube-mixin/controller-manager.json +++ b/charts/kubezero-metrics/dashboards/kube-mixin/controller-manager.json @@ -1014,7 +1014,7 @@ ] }, "timezone": "UTC", - "title": "Kubernetes / Controller Manager", + "title": "Controller Manager", "uid": "72e0e05bef5099e5f049b05fdc429ed4", "version": 0 } diff --git a/charts/kubezero-metrics/dashboards/kube-mixin/k8s-resources-cluster.json b/charts/kubezero-metrics/dashboards/kube-mixin/k8s-resources-cluster.json index 52f6864..7e3ab69 100644 --- a/charts/kubezero-metrics/dashboards/kube-mixin/k8s-resources-cluster.json +++ b/charts/kubezero-metrics/dashboards/kube-mixin/k8s-resources-cluster.json @@ -2641,7 +2641,7 @@ ] }, "timezone": "UTC", - "title": "Kubernetes / Compute Resources / Cluster", + "title": "Compute Resources / Cluster", "uid": "efa86fd1d0c121a26444b636a3f509a8", "version": 0 } diff --git a/charts/kubezero-metrics/dashboards/kube-mixin/k8s-resources-namespace.json b/charts/kubezero-metrics/dashboards/kube-mixin/k8s-resources-namespace.json index 859c087..8b69944 100644 --- a/charts/kubezero-metrics/dashboards/kube-mixin/k8s-resources-namespace.json +++ b/charts/kubezero-metrics/dashboards/kube-mixin/k8s-resources-namespace.json @@ -2401,7 +2401,7 @@ ] }, "timezone": "UTC", - "title": "Kubernetes / Compute Resources / Namespace (Pods)", + "title": "Compute Resources / Namespace (Pods)", "uid": "85a562078cdf77779eaa1add43ccec1e", "version": 0 } diff --git a/charts/kubezero-metrics/dashboards/kube-mixin/k8s-resources-node.json b/charts/kubezero-metrics/dashboards/kube-mixin/k8s-resources-node.json index d6cfb9b..4d71170 100644 --- a/charts/kubezero-metrics/dashboards/kube-mixin/k8s-resources-node.json +++ b/charts/kubezero-metrics/dashboards/kube-mixin/k8s-resources-node.json @@ -827,7 +827,7 @@ ] }, "timezone": "UTC", - "title": "Kubernetes / Compute Resources / Node (Pods)", + "title": "Compute Resources / Node (Pods)", "uid": "200ac8fdbfbb74b39aff88118e4d1c2c", "version": 0 } diff --git a/charts/kubezero-metrics/dashboards/kube-mixin/k8s-resources-pod.json b/charts/kubezero-metrics/dashboards/kube-mixin/k8s-resources-pod.json index 693764f..af45cdf 100644 --- a/charts/kubezero-metrics/dashboards/kube-mixin/k8s-resources-pod.json +++ b/charts/kubezero-metrics/dashboards/kube-mixin/k8s-resources-pod.json @@ -2126,7 +2126,7 @@ ] }, "timezone": "UTC", - "title": "Kubernetes / Compute Resources / Pod", + "title": "Compute Resources / Pod", "uid": "6581e46e4e5c7ba40a07646395ef7b23", "version": 0 } diff --git a/charts/kubezero-metrics/dashboards/kube-mixin/k8s-resources-workload.json b/charts/kubezero-metrics/dashboards/kube-mixin/k8s-resources-workload.json index cbbc44f..4725d41 100644 --- a/charts/kubezero-metrics/dashboards/kube-mixin/k8s-resources-workload.json +++ b/charts/kubezero-metrics/dashboards/kube-mixin/k8s-resources-workload.json @@ -1717,7 +1717,7 @@ ] }, "timezone": "UTC", - "title": "Kubernetes / Compute Resources / Workload", + "title": "Compute Resources / Workload", "uid": "a164a7f0339f99e89cea5cb47e9be617", "version": 0 } diff --git a/charts/kubezero-metrics/dashboards/kube-mixin/k8s-resources-workloads-namespace.json b/charts/kubezero-metrics/dashboards/kube-mixin/k8s-resources-workloads-namespace.json index f96fdb7..d3d92f7 100644 --- a/charts/kubezero-metrics/dashboards/kube-mixin/k8s-resources-workloads-namespace.json +++ b/charts/kubezero-metrics/dashboards/kube-mixin/k8s-resources-workloads-namespace.json @@ -1870,7 +1870,7 @@ ] }, "timezone": "UTC", - "title": "Kubernetes / Compute Resources / Namespace (Workloads)", + "title": "Compute Resources / Namespace (Workloads)", "uid": "a87fb0d919ec0ea5f6543124e16c42a5", "version": 0 } diff --git a/charts/kubezero-metrics/dashboards/kube-mixin/kubelet.json b/charts/kubezero-metrics/dashboards/kube-mixin/kubelet.json index 265143c..95a690c 100644 --- a/charts/kubezero-metrics/dashboards/kube-mixin/kubelet.json +++ b/charts/kubezero-metrics/dashboards/kube-mixin/kubelet.json @@ -2242,7 +2242,7 @@ ] }, "timezone": "UTC", - "title": "Kubernetes / Kubelet", + "title": "Kubelet", "uid": "3138fa155d5915769fbded898ac09fd9", "version": 0 } diff --git a/charts/kubezero-metrics/dashboards/kube-mixin/namespace-by-pod.json b/charts/kubezero-metrics/dashboards/kube-mixin/namespace-by-pod.json index 8a9636d..51df866 100644 --- a/charts/kubezero-metrics/dashboards/kube-mixin/namespace-by-pod.json +++ b/charts/kubezero-metrics/dashboards/kube-mixin/namespace-by-pod.json @@ -1301,7 +1301,7 @@ ] }, "timezone": "UTC", - "title": "Kubernetes / Networking / Namespace (Pods)", + "title": "Networking / Namespace (Pods)", "uid": "8b7a8b326d7a6f1f04244066368c67af", "version": 0 } diff --git a/charts/kubezero-metrics/dashboards/kube-mixin/namespace-by-workload.json b/charts/kubezero-metrics/dashboards/kube-mixin/namespace-by-workload.json index b8b81e8..ab91864 100644 --- a/charts/kubezero-metrics/dashboards/kube-mixin/namespace-by-workload.json +++ b/charts/kubezero-metrics/dashboards/kube-mixin/namespace-by-workload.json @@ -1541,7 +1541,7 @@ ] }, "timezone": "UTC", - "title": "Kubernetes / Networking / Namespace (Workload)", + "title": "Networking / Namespace (Workload)", "uid": "bbb2a765a623ae38130206c7d94a160f", "version": 0 } diff --git a/charts/kubezero-metrics/dashboards/kube-mixin/persistentvolumesusage.json b/charts/kubezero-metrics/dashboards/kube-mixin/persistentvolumesusage.json index 19fee1e..72ac8b9 100644 --- a/charts/kubezero-metrics/dashboards/kube-mixin/persistentvolumesusage.json +++ b/charts/kubezero-metrics/dashboards/kube-mixin/persistentvolumesusage.json @@ -488,7 +488,7 @@ ] }, "timezone": "UTC", - "title": "Kubernetes / Persistent Volumes", + "title": "Persistent Volumes", "uid": "919b92a8e8041bd567af9edab12c840c", "version": 0 } diff --git a/charts/kubezero-metrics/dashboards/kube-mixin/pod-total.json b/charts/kubezero-metrics/dashboards/kube-mixin/pod-total.json index 6c55752..c5b4352 100644 --- a/charts/kubezero-metrics/dashboards/kube-mixin/pod-total.json +++ b/charts/kubezero-metrics/dashboards/kube-mixin/pod-total.json @@ -1095,7 +1095,7 @@ ] }, "timezone": "UTC", - "title": "Kubernetes / Networking / Pod", + "title": "Networking / Pod", "uid": "7a18067ce943a40ae25454675c19ff5c", "version": 0 } diff --git a/charts/kubezero-metrics/dashboards/kube-mixin/proxy.json b/charts/kubezero-metrics/dashboards/kube-mixin/proxy.json index cc1af0b..8cf589a 100644 --- a/charts/kubezero-metrics/dashboards/kube-mixin/proxy.json +++ b/charts/kubezero-metrics/dashboards/kube-mixin/proxy.json @@ -1082,7 +1082,7 @@ ] }, "timezone": "UTC", - "title": "Kubernetes / Proxy", + "title": "Proxy", "uid": "632e265de029684c40b21cb76bca4f94", "version": 0 } diff --git a/charts/kubezero-metrics/dashboards/kube-mixin/scheduler.json b/charts/kubezero-metrics/dashboards/kube-mixin/scheduler.json index 300ec09..f882227 100644 --- a/charts/kubezero-metrics/dashboards/kube-mixin/scheduler.json +++ b/charts/kubezero-metrics/dashboards/kube-mixin/scheduler.json @@ -949,7 +949,7 @@ ] }, "timezone": "UTC", - "title": "Kubernetes / Scheduler", + "title": "Scheduler", "uid": "2e6b6a3b4bddf1427b3a55aa1311c656", "version": 0 } diff --git a/charts/kubezero-metrics/dashboards/kube-mixin/workload-total.json b/charts/kubezero-metrics/dashboards/kube-mixin/workload-total.json index 2d6ecb4..f1ce702 100644 --- a/charts/kubezero-metrics/dashboards/kube-mixin/workload-total.json +++ b/charts/kubezero-metrics/dashboards/kube-mixin/workload-total.json @@ -1281,7 +1281,7 @@ ] }, "timezone": "UTC", - "title": "Kubernetes / Networking / Workload", + "title": "Networking / Workload", "uid": "728bf77cc1166d2f3133bf25846876cc", "version": 0 } diff --git a/charts/kubezero-metrics/dashboards/mixin.libsonnet b/charts/kubezero-metrics/dashboards/mixin.libsonnet index 6a018a0..6c6a390 100644 --- a/charts/kubezero-metrics/dashboards/mixin.libsonnet +++ b/charts/kubezero-metrics/dashboards/mixin.libsonnet @@ -1,8 +1,11 @@ +# https://github.com/kubernetes-monitoring/kubernetes-mixin + local kubernetes = import "kubernetes-mixin/mixin.libsonnet"; kubernetes { _config+:: { grafanaK8s+:: { + dashboardNamePrefix: '', dashboardTags: ['kubernetes'], }, }, diff --git a/charts/kubezero-metrics/templates/dashboard-gunzip-cm.yaml b/charts/kubezero-metrics/templates/dashboard-gunzip-cm.yaml index 130d1e2..446b39d 100644 --- a/charts/kubezero-metrics/templates/dashboard-gunzip-cm.yaml +++ b/charts/kubezero-metrics/templates/dashboard-gunzip-cm.yaml @@ -8,4 +8,4 @@ metadata: data: script.sh: |- #!/bin/sh - /bin/gunzip -f -k /tmp/dashboards/*/*.gz + find /tmp/dashboards -name "*.gz" -exec gunzip -f -k {} \; diff --git a/charts/kubezero-metrics/templates/grafana-dashboards.yaml b/charts/kubezero-metrics/templates/grafana-dashboards.yaml index 8cbb180..3b67dc5 100644 --- a/charts/kubezero-metrics/templates/grafana-dashboards.yaml +++ b/charts/kubezero-metrics/templates/grafana-dashboards.yaml @@ -6,38 +6,40 @@ metadata: labels: grafana_dashboard: "1" {{ include "kubezero-lib.labels" . | indent 4 }} + annotations: + k8s-sidecar-target-directory: Kubernetes binaryData: apiserver.json.gz: - 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 cluster-total.json.gz: - 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 controller-manager.json.gz: - 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 k8s-resources-cluster.json.gz: - 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 k8s-resources-namespace.json.gz: - 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 k8s-resources-node.json.gz: - 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 k8s-resources-pod.json.gz: - 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 k8s-resources-workload.json.gz: - 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 k8s-resources-workloads-namespace.json.gz: - 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 kubelet.json.gz: - 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 namespace-by-pod.json.gz: - H4sIAAAAAAAC/+1dWW/bOhZ+768Q1E6RYpxbS16SFAgGWW+LaXszTdrBTBsYtETbQmRJl6KyNMj89iGpjaRIyU7SLNfqQ1uT1CF51o+HpHT9wjDM0cgLogTH5jvj+2knLUHwz8RDkCsDQRBigL0woIXXpIgU+l6MaRP2y8hKWc048Xz8ISCVVqcsdQEGcZggB5IK8wiFc4hnMIlNrg0MwNin9RglkCufea6i1HPCYC/0Q0QJoukYrHU7hm1Z5K/BoGNYb3jSAZizjnfKuRivjR0fIiwMAV9FrJ0L4tk4BMg1s7ob9u8p+fuGMQW6HpZGa04DiD+4pCRIfD8tQSCanYShj72IlHdZIZ3OXhhgFPqUoRPgx+nznvCs7wVnnBQiEEDWPmV5znDTCX0fRDHkKQkVbqVmijz3KCyFmTJZEtgF+W33uYLLfALZ7yv6O+dOQZvNwS5+lqM+LcoQjCDA3FS50g8YIiYedfWX8EJgMKuKZ+HFiYcrmmPirNDcSxCCATZ2QeBeeC6emWKbY+8nazcbchWZJqDwItWBbI4l44EzgyfeHIZJZTIO1ctd4JxNUZgErko2IfoG/ASqq2LOtEjZS3try+kPeUVlCm/3Noii21sdo090v/vb5pag9C/dfh/0QK7CpQQajdF0oePNAZNcIXNzEqI5Exzh2hyOYog8yD0zBckUiko1B5f5LK0urzxzL8gr+GIqSpkjVBYz4pBmoe9+BGMoGo3c4hNAZ5Dxj6pCRT21qr8lqb5lN6i+VaE9g950hnlaqTX0yp8BUe9z4MvqIpp6xrko8oLpSaqFlqpcVJJyPpy7O6c8NnBoYHiJOdUwsipuHtxMNMQQCKYNxOySWEXpiC7sE707CgkXYlEhqDocE1ch8N2kLGKtP4XM/xPTCALoYOLRhDYndDgSR8NIjFep/nrQd/9Q1DBr9h2RoalkAAlzXNGpMG0XTkDiY5lYOtl0ivmfjlTvBaJOiQ7rFeV5HAFioFKTJPCYBe5GMT+uG2FcmZKIKpXy5RwilIbTa/GZwoKqXBDnlvuoNEyis/UpgjCQxsmU3YWX1Uly2kIlJtTddJbp9wr6PnEX2o4tbceDQix36B5xeljp29b2vaHpW6tk7MHC51UMrPQ/URjjiUd7N0258JDgjTzKDbp/4+oRrD7DyrSPMD/wiUALvf+ZkJBCn6MSFj0FTo3V/Px2R6oIiwdqnEhc8RKkBJ0RBwplW/d9ER32CDK0rE3y1+YWDZbWphAsJ7TnamChlHk6KRmbhFtrqycQ4GNXRTYMKxI6yTwQeY0BmkJcw0p4GbG+42S+5hFsBNeIG8SADAuNCN68CNEZwewO9M7haHyFYTzCBOH6146fxCTabP8wX2X//WF2Crey/b8fnJP5Yd58f5UHp3eviCMgI6Vu8vTNG1FK9RAgM4EYg0D2yEL8OwQOZhwVTNT04RQG7mHRhUiXKCXDfuZOnYIIboznMxnuYaqVQqCg5cczb4KrFRJ4/EJ4b4QTY5cy2fiSstytAsYUBhXFzHx5W9rkbYnV1ttSSFcO5vaCZpS7mUZLYg0/Z6HdSefYAt0W6IoFyyHdfot0W6TbIt0W6bZIt0W6vwTpYiKSeO7hFuo+HNQ9yXiOVwPtMtWtGWE+GIqINaNhVY1oIyfE8KHxUje1onpZgrv1BHeXJrhXT3BvaYL79QT3lyZ4UE/wYGmCh/UEDxcnGIWuhhatqVHd5jUMjQACdJ5wBkiQGWeBCy8LGrd+LM3ez4DH+jCW92RoYboFww9YtSwogHI5lCpQpgUGiI2fEIVc3Ca+FSLIosnED0sIb8YOChmzhEHRgPYeApc9IdaECIvMIv5B4oYLY0cbDlnQ+QiDaTrjrhzfucnF+MqvW+oA3wOx2vMwvJbxpBKKyoW2hOmJly8j0H/In/VPn9b3943379/N5+9iKdhxK2VbjGVEeFU8kVWUm5/mPiJ6arjhhQihWbOvyK+GwQiQmIMC9ZRFFC/OLA9OM891JcBeLCvIswg3m2/B9GLvsJr6WQ0RqMPUImIIkvmYmJZSDMLqbgkhqEDJSslh9zHlkAPE3BSMI+CcQRyvpij27lcU0a1EwRnEaktj/ylIQzYMYx+FUbSqvurgiRrIakvl8DGlchQ+Qa6LJwxvxXT37QawNrvDDQdu9Xug3wXQHvQH/eHGwLG2JpOB8/YsITwMIIbxepbW8oLpOlkF/iNE0w/utvUawQmVxXavG78+B2i9zGWViSxWQR7afjUaOVBOPnLSriw87ypoGTlXE1NPfU/bGF8Za4Qv+owfO9qpyfVVtKSS67Nvl+sTysnsIn6ZrbepR8+bPkl27v5KdubKGaVxZBX4ufcg6rlCDN1/SAV1U6CzCnw9eFBFXSHGHjYytooE7rwVdYwB5nPdOUBJGaDbwXm8GxHWljotPnxiVyLu9SoEQ/V7OUYvj1uYY4Aqh5jY3RpVRpyWQ1XzBfc/bKHgdwRcDzJ76P6C4/+2Zvtjo9zTYFYldkUYNQ124pPs5pC8BQ/Op4rSfLuyWkNvEh3MI3ylvjP1X7opUqlJD+zIpNJjOnIpoue8jtNTNHJddgpAoh6Txv/O9nfEZZzJXKSCkPLYx83i20j2YttIS5630u3bRJBoIgkL06p/iShJqnZJLGyERflBMLG5fpdK7Q7SEwh/ZOeapHk27TPx50gwiV2VjS7izUkc+5geLxEH+hdYz+lPcCx1TOP6mvRyc3PrFVz9GY7v9xE4s8yj8q5bkcm45s0YIBYRZUNOdz5t2VBHeTTwAtc799wEFAcvbqqnQ+j9x3IAl+DSk5zvOElT1RVvMc9ME4s7f/kZTam12hkVnuX7aWWIV+CybrO11B26MyIqBT2bq8pS+eF0F8SwokWpx600V5yM5OfRiFef0hBzxV5VeFA5NK3DB5stPmjxQYsPnlyGcnUAQr4P1iKEFiE8FYTApWwEr8NnbISK+0vY2JqEzZYiYVOzp6mAN1qIUwdzaqDOYnBHCXlqYY+WoSVT5es7MgZScbfgcK+rvb7DOC1NXoGLFsBGenxUj5EacFI9VtLjJT1masJNemfVgJ/qMFTd9RpZJio8pcdUGlylxVaL4qs6jNWAs+qwVg3eqsdcetzViL1q8Zcag2lxWBMW0+Ix5TWvp7rVuSA4WwCgLQzS6oCaBqzVX2arPWWhBm+1AE7K8ix0AFMF5+ognQbWLQTtqo5EDfE0MK8W6tXBPT3ka/CkVehXnUIVAirtqFTVKFKoqA5r1eGtGsylv1arwV6L3Ph8DlPgbW2xk2YtKqtkpxaHZVYLy1pY1sKypwnLHuXEVIvLFsVljbcxWmjWQrO/PDSrZLMf/pyTbHx3eeHr4yUpe5rdRMtus5T3lKXsN8HhXguHWzjcwuHnkaV8yGPZLSq+bbZSff+yhcYtNG6zli1KU2YtG2Fav4VpLUxrYdozyVq2OO2ZZC9bqNZCtTaL+VhZzAOEKCK8TRLzRTZyM3upCK3tdVNatBn3ibHYmcE5+AZRnI7f2kyL6XsJ85dBp8+RSFlqrVm+0MQsesNwHvmEEcF0kW/GlYhK+e7M7O3jmvdn5rUqcJ1/O45PqKpVrXj5O4eKudryNeu81zX/TCC6Ykqt/KJdyXNLKJ3CS+miNffluaJ7OecrXBTxv3HvFlfeBuFXDwt9fy/jFX+g2wtIIHbhjvqN0WpGzokwPEXznMFZaF+Gu6ynUepQ16i6jUisHXnBJOwYGbk3ar7bTXzPohGvIES7GXPjf+X9m2JtZaC0TN04k2o6E64iieFJSkh5q0UtavO3v/M0QMJeJV65JUSKR06YMCXodeWa1CuaVleQfYMFUp6vx1eE0XONFfItlJa4iAYSU/YCL3OfotTvcjLxpmMUuPGNWe8dBI2XbgvcUuFVnzhYTuV/yeSXMZIzL/qK/OOrwFHd9EpNyHoOJiSJ7gFNaKCznMEdDKZJge/JZZerK40Kv9AhP7KY9dPFuDqPkHOn15VBYckgWqdD0PreFIhcIwqdMBbuqm5i1kzbF6l6oUKfSn9AmNAZzDsCuedmwsVXgVorfgzgpWL/sjZcY1V9vab3l9H0/oqouPRFaZZ2KNZKxXdlwov1wubzT8eki7vyscgjIACVD2c8G+WD4cVrDrh1JK/7ggs2rVLPeZ03Lf5Hr8vXcNc4be7/VvZ1g9N8DjTvVlU7fS884SFPmO/F7vM/uHvaGy4/3nwsAvt+hiz3aX492cuWt/m6+5/FytZ4a3wuXtZJf+SQylg7Ct04BVZmwvYgzM3xBtgc9+yhuwGGE2vS7dv9fnc47A03neEGmKSNz4uFdvfFzf8BzhLLfpB9AAA= + H4sIAAAAAAAC/+1daW/bOBr+3l8hqN0ixTpTSz6SFAgWObcF2k6mSbvYbQODlmhbiCxpKCpHg+xvH5K6SIqU7CTNMVY/tDVJvSTf8+FLUrp+YRjmaOQFUYJj853x/bSTliD4Z+IhyJWBIAgxwF4Y0MJrUkQKfS/GtAn7ZWSlrGaceD7+EJBKq1OWugCDOEyQA0mFeYTCOcQzmMQm1wYGYOzTeowSyJXPPFdR6jlhsBf6IaIE0XQM1rodw7Ys8tdg0DGsNzzpAMxZxzvlXIzXxo4PERaGgK8i1s4F8WwcAuSaWd0N+/eU/H3DmAJdD0ujNacBxB9cUhIkvp+WIBDNTsLQx15EyruskE5nLwwwCn3K0Anw4/R5T3jW94IzTgoRCCBrn7I8Z7jphL4PohjylIQKt1IzRZ57FJbCTJksCeyC/Lb7XMFlPoHs9xX9nXOnoM3mYBc/y1GfFmUIRhBgbqpc6QcMEROPuvpLeCEwmFXFs/DixMMVzTFxVmjuJQjBABu7IHAvPBfPTLHNsfeTtZsNuYpME1B4kepANseS8cCZwRNvDsOkMhmH6uUucM6mKEwCVyWbEH0DfgLVVTFnWqTspb215fSHvKIyhbd7G0TR7a2O0Se63/1tc0tQ+pduvw96IFfhUgKNxmi60PHmgEmukLk5CdGcCY5wbQ5HMUQe5J6ZgmQKRaWag8t8llaXV565F+QVfDEVpcwRKosZcUiz0Hc/gjEUjUZu8QmgM8j4R1Whop5a1d+SVN+yG1TfqtCeQW86wzyt1Bp65c+AqPc58GV1EU0941wUecH0JNVCS1UuKkk5H87dnVMeGzg0MLzEnGoYWRU3D24mGmIIBNMGYnZJrKJ0RBf2id4dhYQLsagQVB2OiasQ+G5SFrHWn0Lm/4lpBAF0MPFoQpsTOhyJo2EkxqtUfz3ou78rapg1+47I0FQygIQ5ruhUmLYLJyDxsUwsnWw6xfxPR6r3AlGnRIf1ivI8jgAxUKlJEnjMAnejmB/XjTCuTElElUr5cg4RSsPptfhMYUFVLohzy31UGibR2foUQRhI42TK7sLL6iQ5baESE+puOsv0ewV9n7gLbceWtuNBIZY7dI84Paz0bWv73tD0rVUy9mDh8yoGVvqfKIzxxKO9m6ZceEjwRh7lBt1/cPUIVp9hZdpHmB/4RKCF3v9MSEihz1EJi54Cp8Zqfn67I1WExQM1TiSueAlSgs6IA4Wyrfu+iA57BBla1ib5a3OLBktrUwiWE9pzNbBQyjydlIxNwq211RMI8LGrIhuGFQmdZB6IvMYATSGuYSW8jFjfcTJf8wg2gmvEDWJAhoVGBG9ehOiMYHYHeudwNL7CMB5hgnD9a8dPYhJttn+Yr7L//jA7hVvZ/v8Pzsn8MG++v8qD07tXxBGQkVI3efrmjSilegiQmUCMQSB7ZCH+HQIHM44KJmr6cAoD97DoQqRLlJJhP3OnTkEEN8bzmQz3MNVKIVDQ8uOZN8HVCgk8fiG8N8KJsUuZbHxJWe5WAWMKg4piZr68LW3ytsRq620ppCsHc3tBM8rdTKMlsYafs9DupHNsgW4LdMWC5ZBuv0W6LdJtkW6LdFuk2yLdX4J0MRFJPPdwC3UfDuqeZDzHq4F2merWjDAfDEXEmtGwqka0kRNi+NB4qZtaUb0swd16grtLE9yrJ7i3NMH9eoL7SxM8qCd4sDTBw3qCh4sTjEJXQ4vW1Khu8xqGRgABOk84AyTIjLPAhZcFjVs/lmbvZ8BjfRjLezK0MN2C4QesWhYUQLkcShUo0wIDxMZPiEIubhPfChFk0WTihyWEN2MHhYxZwqBoQHsPgcueEGtChEVmEf8gccOFsaMNhyzofITBNJ1xV47v3ORifOXXLXWA74FY7XkYXst4UglF5UJbwvTEy5cR6L/kz/qnT+v7+8b79+/m83exFOy4lbItxjIivCqeyCrKzU9zHxE9NdzwQoTQrNlX5FfDYARIzEGBesoiihdnlgenmee6EmAvlhXkWYSbzbdgerF3WE39rIYI1GFqETEEyXxMTEspBmF1t4QQVKBkpeSw+5hyyAFibgrGEXDOII5XUxR79yuK6Fai4AxitaWx/xSkIRuGsY/CKFpVX3XwRA1ktaVy+JhSOQqfINfFE4a3Yrr7dgNYm93hhgO3+j3Q7wJoD/qD/nBj4Fhbk8nAeXuWEB4GEMN4PUtrecF0nawC/xWi6Qd323qN4ITKYrvXjV+fA7Re5rLKRBarIA9tvxqNHCgnHzlpVxaedxW0jJyriamnvqdtjK+MNcIXfcaPHe3U5PoqWlLJ9dm3y/UJ5WR2Eb/M1tvUo+dNnyQ7d38lO3PljNI4sgr83HsQ9Vwhhu4/pIK6KdBZBb4ePKiirhBjDxsZW0UCd96KOsYA87nuHKCkDNDt4DzejQhrS50WHz6xKxH3ehWCofq9HKOXxy3MMUCVQ0zsbo0qI07Loar5gvsftlDwbwRcDzJ76P6C4/+2Zvtjo9zTYFYldkUYNQ124pPs5pC8BQ/Op4rSfLuyWkNvEh3MI3ylvjP1P7opUqlJD+zIpNJjOnIpoue8jtNTNHJddgpAoh6Txv/J9nfEZZzJXKSCkPLYx83i20j2YttIS5630u3bRJBoIgkL06p/iShJqnZJLGyERflBMLG5fpdK7Q7SEwi/Z+eapHk27TPx50gwiV2VjS7izUkc+5geLxEH+jdYz+lPcCx1TOP6mvRyc3PrFVz9GY7v9xE4s8yj8q5bkcm45s0YIBYRZUNOdz5t2VBHeTTwAtc799wEFAcvbqqnQ+j9x3IAl+DSk5zvOElT1RVvMc9ME4s7f/kZTam12hkVnuX7aWWIV+CybrO11B26MyIqBT2bq8pS+eF0F8SwokWpx600V5yM5OfRiFef0hBzxV5VeFA5NK3DB5stPmjxQYsPnlyGcnUAQr4P1iKEFiE8FYTApWwEr8NnbISK+0vY2JqEzZYiYVOzp6mAN1qIUwdzaqDOYnBHCXlqYY+WoSVT5es7MgZScbfgcK+rvb7DOC1NXoGLFsBGenxUj5EacFI9VtLjJT1masJNemfVgJ/qMFTd9RpZJio8pcdUGlylxVaL4qs6jNWAs+qwVg3eqsdcetzViL1q8Zcag2lxWBMW0+Ix5TWvp7rVuSA4WwCgLQzS6oCaBqzVX2arPWWhBm+1AE7K8ix0AFMF5+ognQbWLQTtqo5EDfE0MK8W6tXBPT3ka/CkVehXnUIVAirtqFTVKFKoqA5r1eGtGsylv1arwV6L3Ph8DlPgbW2xk2YtKqtkpxaHZVYLy1pY1sKypwnLHuXEVIvLFsVljbcxWmjWQrO/PTSrZLMf/pyTbHx3eeHr4yUpe5rdRMtus5T3lKXsN8HhXguHWzjcwuHnkaV8yGPZLSq+bbZSff+yhcYtNG6zli1KU2YtG2Fav4VpLUxrYdozyVq2OO2ZZC9bqNZCtTaL+VhZzAOEKCK8TRLzRTZyM3upCK3tdVNatBn3ibHYmcE5+AZRnI7f2kyL6XsJ85dBp8+RSFlqrVm+0MQsesNwHvmEEcF0kW/GlYhK+e7M7O3jmvdn5rUqcJ1/O45PqKpVrXj5O4eKudryNeu81zX/TCC6Ykqt/KJdyXNLKJ3CS+miNffluaJ7OecrXBTxv3HvFlfeBuFXDwt9fy/jFX+g2wtIIHbhjvqN0WpGzokwPEXznMFZaF+Gu6ynUepQ16i6jUisHXnBJOwYGbk3ar7bTXzPohGvIES7GXPjP/L+TbG2MlBapm6cSTWdCVeRxPAkJaS81aIWtfnbP3kaIGGvEq/cEiLFIydMmBL0unJN6hVNqyvIvsECKc/X4yvC6LnGCvkWSktcRAOJKXuBl7lPUep3OZl40zEK3PjGrPcOgsZLtwVuqfCqTxwsp/K/ZPLLGMmZF31F/vFV4KhueqUmZD0HE5JE94AmNNBZzuAOBtOkwPfkssvVlUaFX+iQH1nM+uliXJ1HyLnT68qgsGQQrdMhaH1vCkSuEYVOGAt3VTcxa6bti1S9UKFPpT8gTOgM5h2B3HMz4eKrQK0VPwbwUrF/WRuusaq+XtP7y2h6f0VUXPqiNEs7FGul4rsy4cV6YfP5p2PSxV35WOQREIDKhzOejfLB8OI1B9w6ktd9wQWbVqnnvM6bFv+j1+VruGucNvd/K/u6wWk+B5p3q6qdvhee8JAnzPdi9/kf3D3tDZcfbz4WgX0/Q5b7NL+e7GXL23zd/bl4P6fx1vicoyhj7Sh04xRLmQnbdjA3xxtgc9yzh+4GGE6sSbdv9/vd4bA33HSGG2CSNj4v1tbdFzd/ATu1gJODfQAA namespace-by-workload.json.gz: - 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 persistentvolumesusage.json.gz: - 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 pod-total.json.gz: - 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 proxy.json.gz: - H4sIAAAAAAAC/+1dW3PbthJ+96/gsO2MM6OmusfqTB4c5ySTOUnqJmrPQ5PRQCRE8ZgCGAC0pXp0fvtZgBeBJGjLcR1JMV484i4ui93F7oelZFwfOY47mYQkTgR3f3X++txKKQx/SUKGNRoihAokQkok8RpIQIxCLlQTeFyrZtgPBZpGGKgzFHGsiAHB4o0PJJJEUUphKJ6PKY1EGAO9rYjz0MdnlAhGI17qH5b6RiG50ARjeAaCzoHg9trcTWn0SrVQUqayAtWjUYRiXpKtxPBrnBgRHG2G0odLeyJvjsfhAtNEaDJu+DSi7AXyLgJGE1Ibf9PmTxQluJldFkHRf+iORl5/6LbKZBZM0XG396zldLqjltNvt5z205PRk2q7H/x+H/WQq1E/l+b1kUCcJsyTYrnnjC6wmOOElwZyZ5QtkFy6SyjBZV6AkgAXzlKQF2iZr7bTblfEWoQkZ1ZZfE6vTBoClphLF6CR/xZNcdl5TK3eIXaBlU4FS7DWaF2Wn4X+OVXuXmYof+yWSURgdokikxOUHVbTQxyHJBivYqWKJl7d9GV9QmuCFspIl1JzjqCOwEtRMbiTseVUJca6td3gDJFgi8G75cEb3Qu84CV42DkFzfG6K7hSi4r5jvpqfo8Sgj0Bm7TWbiwlMig+plzMwqXs7ZoYryDYfAz/VsMP2j9V2kBgMfZV9Bu7KlW9g4hyu+lmsK/U7gHZ60oV6cLc97+cGpi06LilzjmEs5rnApFdgIsaduosjKIzGX6U/WVg6XUgrnRO4M/JSAaWzkktsMykQOYNKGfRx0uH60KI6ox6tYH0/d64R1WygTGTBambSiAWYLGFFfAyVjLxZHGcxNdelHDYzs8/uT9mHz+5Lee/dAqUi2SKf44ZXa4+uesndatsAqKAtDDhmIWY15vl8eIV8oTSR7fWJMIBJv6rYrz6IOCJKq26p9t6QBECuUFboVB52/0jrjCKPH1dtRBim6TZbKM0wrkcIlqEOaCI8vgqdOgb6qS6oVSL7TYUlXK6z++4l/LodaftpDq9z8IjJK5NP239JbiAohDxszyhV7LKFDFj5oJMzOdvMQnEXMXJGg83ddsqgYdqu3ZqxNcM+SEmopqJb0mLvXLqUz5c9xxQREBO+bgKFfUml0EDx0sYSwUzcSGxNHFC0sBhYTAH7/ObZMlCkUQLVQ50+k/oK9NU84/aOgI1RUPlPvzW3SODJjdMrhhX2dSdbQBHLaXWko4bY3AXIlBgxqKx7C39IpHDD+o8syeCtXzMsAqxs4hWtj/DMUbG/J0Gz98uMQOXw4YVQe7ycNPWyLJdWUqIPt6FUUgI83GM/bdpJqzzvyqZMCTwsUwZKmNM+Ip4k/QjSyAUTvyEqTMV5AnANz6feHBMEFsnoJYTElgR8fDz/0Hb/AEy01+Dxecn3zQ9yaX+4ymqYm8p86sUMdWcRfI+zsOZMDOz3PZBqt35CHZwPlQF3jbRVUMAZcJwXFHbe5LnvpD44WXoJ6iUXcx5Uh2Oy5It0TLkdbmmiXeR+qQh9iyyXS4VU8VWGag39GoOdUW8Usd98xJWaLnNgWXjhTQ2eF8kT3FG8SSTBi8Qrx2ZtNhv7JYG/3aNrq33TseiQ1iCvscsNvnV6X8NNjHshG2giaHbfZGJCX48KDC5sTpiccmB4pJ5yAWFHLOYfEkQEWGEj9tPR6PWnbFKmn0OEqxcX+fTr9eHAVpSzPIWbES8lTMaibnze2Y+C2J2DGIOHsIcFoA5quxAc6TOqG8gNqiwZWZ/oFelN1OFPONs85XfBxVb8iVgmylFzHdgBLfMz8tY86HGyLYFg9ZHmnEe8uXUI0B0A1ttstWmfUJ1wz2qNhEsrii7kCBOwj1wyMAWnL41dnufGsE53xjBVp5s5clWnh4VThnaypOtPD16jNJUeXK+Frz8wxUoZ7pyjnNqy4mwLUrdDdjY8pQtT9nylC1P2fJUCvue2fKULU/tE/Tr77w8BZBETLxIbib1KxN45BPlGfeHcS0PbClp3adPd1KS6i6XdwBurX1UXW9HquvdqLoXh6C6/o5U179RdWeHoLrBjlQ3uFF1L/fjpPVvUKVzev7G+ZCq39aPH2H92Mg6uBLy3VZhq8jl48SJPU7Y48Q+HSdO9reSbIAt968fN8EY0KJse/7bx3G5mCwZLSdh0S6qyXLy9dq5vob5D6GiDIFPFBjHlpJtKdmWkm0p2ZaSU+w3st8gsN8g2Bfc1+k+MuDXWMByMuj3+l8W+X098nuNLfCzwM8CPwv8LPCrAr+KfLbqZ6t+j/VLBIDGPMw5wDrpJIDvFnhB2WoyXQnM713FW9vvejbhs3dKzxaE7RiEKT//Dl467vk67GvHCgLpWARiEYhFINlvTo9zGOLFSVFQuuMXom78HYrFIU045Oz8Dyfh0pMtFNlxPWgutXfoNaE9XoQFIRUQ0rUgxIIQC0JknqGTgDKaCGlAW/Z4wNdShZYt3nhseOOBSh97vo7v+W3UUbYCl3tzvEB/YsZTKTv9lCxW6VQ+YhfpPUKQrzZeqqIpI1jWroqxBF7EESyXBPVbkY6q3qABjBJ8y68m8PEMJZHpdgSda0KD6u6kcnBp8KniPhcNxmlcGudXPOnR1P2SYLbKSvB1uKfdwdQpUQNcvUClsIs2/VFlOZrCUBTl1wFVlqGpUtfDFuA015WWrSDsQu708anp6pJCkW6WX/WxFmCR0NAn17Khy20qVtNN0iiq/iHGJKb+JCQz2nKy4Z6Yld+9TflZCtKNBC6uNMx/z+d3y9yaoJJmbpyZNl2Jxkg4HqcD6Yj0W9u73WTvcg5r2je3WToHNvcy9cP975P15jtM34f3HOVJKr14TqGXIgQX1yrRq587OUbKb0xKM8KmWxyCJtmmc6aSSY5vdaDiDjau5Xba2kNPf+gsNp8H2ueO/tBr65wNknO72ueOn8bHz/kaJCLX/OrWWfSBh/rA+izdvv6wuWLLfebr8uaylNT3NyXptUHjsyxr6j9cTBOm84v8PzHL1K5uok707rDXxd3hwMft7mh40vf67Wm3402fDace6s9G/bTxZZGn20fr/wNlKFktsXAAAA== + H4sIAAAAAAAC/+1dW3PbthJ+96/gsD0zzoyao3uszuTBcU4ymSapm6jtQ5PRQCRE8ZgCGAC0pXp0fvtZgBeBJGjLcR1JMV4y4i4ui93F7oclHVwfOY47mYQkTgR3f3b++txKKQx/SUKGNRoihAokQkok8RpIQIxCLlQTeFyrZtgPBZpGGKgzFHGsiAHB4o0PJJJEUUphKJ6PKY1EGAO9rYjz0MdnlAhGI17qH5b6RiG50ARjeAaCzoHg9trcTWn0SrVQUqayAtWjUYRiXpKtxPBrnBgRHG2G0odLeyJvjsfhAtNEaDJu+DSi7AXyLgJGE1Ibf9PmDxQluJldFkHRf+iORl5/6LbKZBZM0XG396zldLqjltNvt5z205PRk2q7H/x+H/WQq1E/l+b1kUCcJsyTYrnnjC6wmOOElwZyZ5QtkFy6SyjBZV6AkgAXzlKQF2iZr7bTblfEWoQkZ1ZZfE6vTBoClphLF6CR/xZNcdl5TK3eIXaBlU4FS7DWaF2Wn4X+OVXuXmYof+yWSURgdokikxOUHVbTQxyHJBivYqWKJl7d9GV9QmuCFspIl1JzjqCOwEtRMbiTseVUJca6td3gDJFgi8G75cEb3Qu84CV42DkFzfG6K7hSi4r5jvpqfo8Sgj0Bm7TWbiwlMig+plzMwqXs7ZoYryDYfAz/VsMP2v+qtIHAYuyr6Dd2Vap6BxHldtPNYF+p3QOy15Uq0oW57/99amDSouOWOucQzmqeC0R2AS5q2KmzMIrOZPhR9peBpdeBuNI5gX9ORjKwdE5qgWUmBTJvQDmLPl46XBdCVGfUqw2k7/fGPaqSDYyZLEjdVAKxAIstrICXsZKJJ4vjJL72ooTDdn7+yf0x+/nJbTn/pVOgXCRT/FPM6HL1yV0/qVtlExAFpIUJxyzEvN4sjxevkCeUPrq1JhEOMPFfFePVBwFPVGnVPd3WA4oQyA3aCoXK2+7vcYVR5OnrqoUQ2yTNZhulEc7lENEizAFFlMdXoUPfUCfVDaVabLehqJTTfX7HvZRHrzttJ9XpfRYeIXFt+mnrL8EFFIWIn+UJvZJVpogZMxdkYj5/i0kg5ipO1ni4qdtWCTxU27VTI75myA8xEdVMfEta7JVTn/LhuueAIgJyysdVqKg3uQwaOF7CWCqYiQuJpYkTkgYOC4M5eJ/fJEsWiiRaqHKg05+hr0xTzT9q6wjUFA2V+/Bbd48MmtwwuWJcZVN3tgEctZRaSzpujMFdiECBGYvGsrf0i0QOP6jzzJ4I1vIxwyrEziJa2f4MxxgZ83caPH+9xAxcDhtWBLnLw01bI8t2ZSkh+ngXRiEhzMcx9t+mmbDO/6pkwpDAxzJlqIwx4SviTdKfLIFQOPETps5UkCcA3/h84sExQWydgFpOSGBFxMPP/wdt8wfITH8NFp+ffNP0JJf6j6eoir2lzK9SxFRzFsn7OA9nwszMctsHqXbnI9jB+VAVeNtEVw0BlAnDcUVt70me+0Lih5ehn6BSdjHnSXU4Lku2RMuQ1+WaJt5F6pOG2LPIdrlUTBVbZaDe0Ks51BXxSh33zUtYoeU2B5aNF9LY4H2RPMUZxZNMGrxAvHZk0mK/sVsa/Ns1urbeOx2LDmEJ+h6z2ORnp/812MSwE7aBJoZu90UmJvjxoMDkxuqIxSUHikvmIRcUcsxi8iVBRIQRPm4/HY1ad8YqafY5SLByfZ1Pv14fBmhJMctbsBHxVs5oJObOb5n5LIjZMYg5eAhzWADmqLIDzZE6o76B2KDClpn9gV6V3kwV8oyzzVd+H1RsyZeAbaYUMd+BEdwyPy9jzYcaI9sWDFofacZ5yJdTjwDRDWy1yVab9gnVDfeo2kSwuKLsQoI4CffAIQNbcPrW2O19agTnfGMEW3mylSdbeXpUOGVoK0+28vToMUpT5cn5WvDyD1egnOnKOc6pLSfCtih1N2Bjy1O2PGXLU7Y8ZctTKex7ZstTtjy1T9Cvv/PyFEASMfEiuZnUX5nAI58oz7g/jGt5YEtJ6z59upOSVHe5vANwa+2j6no7Ul3vRtW9OATV9Xekuv6Nqjs7BNUNdqS6wY2qe7kfJ61fQJXO6fkb50Oqfls/foT1YyPr4ErId1uFrSKXjxMn9jhhjxP7dJw42d9KsgG23L9+3ARjQIuy7fmvH8flYrJktJyERbuoJsvJ12vn+hrmP4SKMgQ+UWAcW0q2pWRbSralZFtKTrHfyH5BYL8g2Bfc1+k+MuDXWMByMuj3+j8W+X098nuNLfCzwM8CPwv8LPCrAr+KfLbqZ6t+j/UjAkBjHuYcYJ10EsB3C7ygbDWZrgTm967ire23nk347J3SswVhOwZhys+/g5eOe74O+9qxgkA6FoFYBGIRSPY3p8c5DPHipCgo3fGDqBv/DsXikCYccnb+u5Nw6ckWiuy4HjSX2jv0mtAeL8KCkAoI6VoQYkGIBSEyz9BJQBlNhDSgLXs84GupQssWbzw2vPFApY89X8f3/DbqKFuBy705XqA/MOOplJ1+ShardCofsYv0HiHIVxsvVdGUESxrV8VYAi/iCJZLgvqtSEdVb9AARgm+5VcT+HiGksh0O4LONaFBdXdSObg0+FRxn4sG4zQujfMrnvRo6n5JMFtlJfg63NPuYOqUqAGuXqBS2EWb/qiyHE1hKIry64Aqy9BUqethC3Ca60rLVhB2IXf6+NR0dUmhSDfLr/pYC7BIaOiTa9nQ5TYVq+kmaRRV/yHGJKb+JCQz2nKy4Z6Yld+9TflZCtKNBC6uNMx/y+d3y9yaoJJmbpyZNl2Jxkg4HqcD6Yj0W9u73WTvcg5r2je3WToHNvcy9cP93yfrzTdM34f3HOVJKr14TqGXIgQX1yrRq586OUbKb0xKM8KmWxyCJtmmc6aSSY5vdaDiDjau5Xba2kNPf+gsNr8H2u+O/tBr65wNknO72u+On8bHz/kaJCLX/OrWWfSBh/rA+izdvv6wuWLLfebr8uaylNT3NyXptUHjsyxrFh/0S9dLaYk6xLvDXhd3hwMft7uj4Unf67en3Y43fTaceqg/G/XTxpdFam4frf8PZcHkVKRwAAA= scheduler.json.gz: - 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 workload-total.json.gz: - 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 -- 2.40.1 From 205f77ffaaaaf669ce3e473697f55a9b3b5b9dad Mon Sep 17 00:00:00 2001 From: Stefan Reimer Date: Mon, 26 Apr 2021 17:06:42 +0200 Subject: [PATCH 15/21] feat: add Kiam Grafana dashboard --- charts/kubezero-kiam/Chart.yaml | 2 +- charts/kubezero-kiam/dashboards.yaml | 7 +++++++ .../kubezero-kiam/templates/grafana-dashboards.yaml | 13 +++++++++++++ charts/kubezero-kiam/update.sh | 5 +++++ 4 files changed, 26 insertions(+), 1 deletion(-) create mode 100644 charts/kubezero-kiam/dashboards.yaml create mode 100644 charts/kubezero-kiam/templates/grafana-dashboards.yaml create mode 100755 charts/kubezero-kiam/update.sh diff --git a/charts/kubezero-kiam/Chart.yaml b/charts/kubezero-kiam/Chart.yaml index c7b5eb0..45defec 100644 --- a/charts/kubezero-kiam/Chart.yaml +++ b/charts/kubezero-kiam/Chart.yaml @@ -2,7 +2,7 @@ apiVersion: v2 name: kubezero-kiam description: KubeZero Umbrella Chart for Kiam type: application -version: 0.3.3 +version: 0.3.4 appVersion: "4.0" home: https://kubezero.com icon: https://cdn.zero-downtime.net/assets/kubezero/logo-small-64.png diff --git a/charts/kubezero-kiam/dashboards.yaml b/charts/kubezero-kiam/dashboards.yaml new file mode 100644 index 0000000..e0f1622 --- /dev/null +++ b/charts/kubezero-kiam/dashboards.yaml @@ -0,0 +1,7 @@ +configmap: grafana-dashboards-kiam +gzip: true +folder: AWS +dashboards: +- name: kiam + url: https://raw.githubusercontent.com/uswitch/kiam/master/docs/dashboard-prom.json + tags: ['AWS'] diff --git a/charts/kubezero-kiam/templates/grafana-dashboards.yaml b/charts/kubezero-kiam/templates/grafana-dashboards.yaml new file mode 100644 index 0000000..057b543 --- /dev/null +++ b/charts/kubezero-kiam/templates/grafana-dashboards.yaml @@ -0,0 +1,13 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: {{ printf "%s-%s" (include "kubezero-lib.fullname" $) "grafana-dashboards-kiam" | trunc 63 | trimSuffix "-" }} + namespace: {{ .Release.Namespace }} + labels: + grafana_dashboard: "1" +{{ include "kubezero-lib.labels" . | indent 4 }} + annotations: + k8s-sidecar-target-directory: AWS +binaryData: + kiam.json.gz: + H4sIAAAAAAAC/+1dbXPbNhL+nl/BYXs3TkdxRb345Wb6wUkvTaZJmrN9vZlrMhqIhCSO+aIQoG3V4/vttwDfQBIkZVeOJWf7IbUACiAWu/s83F2BN88Mw5xM3GAZc2b+w/jjcy9pieiX2I2obIMWw7iR/0IfXy0ptJrziMxIQMxe1uE62uaA+PL6X6odlzRibhiIvvH+YH9gyo7bnn66JQmop5lsudBOpTaXJurv9+8x0YIS7pNlfao31Y4NTMbcYO5Rxgmvz3em6WuYEv5NdpMEQQhfgEvEdib3YHou4/nmFncGPdPY9fhbMZzVK1odwgkL48iWt/ExCn3KFzRmpnINDcjUE/08iqnSvnAdTatrh8Gr0AsjMWA0n5K9fs8YWBb8Mx73DOu5OnS2/pNiLcbfjROPRrx0C5lgHcIW05BEjpn23cr/f36W7oXpUGZH7pKngvvVJb5hE3tBewao/RLGpzAB7LvHFwasNXLtZCKTOi6vrNOcB5S/FZs3PBpaSYvQwfMw9Li7hPa+bJT7G8Sel3ziNCLpDVjj4fB4MDgajwejoez13OBCMUmpKRpztEPPI0tGxcgz4rFcwnAHrvMxLLY82YrKtl7B58FIabjObjb9vBKfMxmWFdU6zD8Xd/c5b+Mu9xKdhQ0rNinfoii80hsH8VzCpGbImy9mnRLZUl6m2Ol3NJhzubR+qZ3qLu/QY3Pmep4qpWZBjiqCPOiQo6WXYyFGj85p4JQnAmnMgxN2rjctcjmvLlEoRRxFNOCaHmGK//SXfKW30v/SKKz3+ORaM5TvBprWyJ0v+JnW4NkivNJ8g4NBe/WrL4kXy/0T7TXBgXXknaXGK9fhJSWvGFLiTcAEP4ZuwN+H8kZlg0GY8adYf6HVFNQk4GROa2q0FN+OiOPGYuhxub2udbAbDo2odHUzL1ScN6ORS9lv4MNBy2jlPtmS2FSn3AAA9kVtFsbpckmddyCGWh8n0Zxyprh81ekLt3a9lLfHYt+Yroy9Zej0jAUJHPCxz409h3qc7F2Am5yAxRBhRhMW2zZlbCJ38I/vYeU0gm37/Fx13cKiwsgnQhvBJ/h0kiy5fEn23dfE5hIRBqXuxDBe5+Pc3KR3dntrvDBubuBm4a/ykBGdSZdsnpTbE0mIDjNvvk3/UrzXAmBgEXpOzav59DV4DcWR5+1nC3fG6x2pG/wQ+1MaGeHMSOU2i70ca5gxg0ENkklccZc5htyopkQi6fKrJhZGvCy8xI4mmdN1A8e9dJ0YLK5mUwqzU+nTNbl2K85vGtsXiTKpSxU+IbUnIQ0NfFeuTh1Ck+H/8bl2iytyTVt0uFA0GDri5X33yJR6tZsQHeH8JWG0jIy526tdnvi9WrOymEKtejtynzX1X9U3XQKRxn/L9nf0Mr/pEuN6suB+sB64Dx8S3TUI/tXAvdqH6L5L6G6DaHoGwGYDtOe49CDgbnWAu7g7wPMU17cb1k/LCO6HAI2OEcbcyISZYTpDUEdQR1DfZlC3Bmui+ghRHVF9G5/ZG/CcCgWaRKFHHwXQdwDHi8dzKStDyIrB8zmPowBQGaEboRuhe5uh+2hN6D5C6Ebo3jroTp8R257JZwAWCYTD3YO9PgqSF3H3XUN1KTNDCNEN5gb4IQnxBgjJIELqCPEI8Qjxu5RPHzcg/DEiPCI8Ijwi/EYRvo8IjwiPCP9Vk+oNCD+yEOER4bc//M44m7iMxQBHj4nou4jiqdgMGyAZFMqFncEHdIRvhO+dSp834fcY8Rvxe0vxWyL3xRGbOFEoxp5Ac4rbiNVlrE4lJJ6tmTGlNokZFe0zoVvTeDbDQnYEbQTthwDtyu8XC5skQJz9NPJlE89jRgqN3sqg19SOOdDqr5KAbwD/g347+G/bL9o6MLzanlu97EAUf3AUd8BFByz7dfNtb02EF8/mia3IgHuqYHdH+AXQv1PKQi9ObbGiEBsiAclPkD+kP4Mu9wlQkhKvd4EmuKFTb2/iFBGdpx7FoTMSexWXLn547jIufgut7ofsOwFVEBqntH7eMr5yR9+IjAUZCzKWxw8zlMIKukKAYz3TGBzjL+sxzLBVYYZqdkAeOTJZuFyTGMgZy8P/mn6nog5SZgbIjBk8lGn+/Jd2sgsBHAEcAXyrAbyWKGhA8FEfERyDDDuB4b6rPQkHQbwNxIXQ6IPAOFbrIYxvKYzbJHIqA4umj8QRdat1HRGdp2EcOJXBe8oZgNJBVAbMD1f8bjqazfp9VRvlV85skpilgAYSafoX1E9tBnzRMvQIp6fUKR/6eL0MgwRQ+/vjGjJWrUOzI7nJsCW1YVP8ul0Kr1C4Os4y67t/wuSlHIE68BzBeAj27guvlNY+G2C8sBVs3zgn8zlcBE68djBXI/sZ3zV8MRjVFpwdOFqieSLU7AkO8SrVoBK+S8LUHvFQWYaONFSZwF1gcS8C5ajUs6cymwi9CewVwJwdBg6bJNuXVZr/9MlUqrw+mbd1APVoI35Wj2YtYWc98H1nVPXohkE1w8JXxZrzY+BKoNGEezrEEK1vMk1u3GLgZAGwJh3/zaGvdtTt9UnND9YdaDHHdWJZCdJXiUDaeeb+WcVCc1WfxqG26xNPA7IKeqi+SAsPd3BEDbJdei7P9UXrgVfJul6mXtqMgWkqrmLVJpNVTSYbR43+PSBjZk3bIIN9KYE2AsZDAkbtcXmDiGH1dxMyRBJPpEO/GbwQC36TqtvXwovdxAQfQQEfJR4bGZJag1NRapCCwxpIcHDXo9kHxxsDgtFgG4CgUpaTiK6CApvz94/v1dvUBPn/rvJ/EvNww55eec9DyXY395oHDalMGOJY854HvU3LwO05kJIw5rrIm8SCl8S+mEepqOrVcvKa30UEtLlbU3723eD42B4dlIzRSF8sMhge9oBEH/dEQgmw5ej4efW675zRiAxJc/XaGi9AKSlmAFBW7puTWOZKbsozg3pmq7X6/cptgZpmndUufcqoHLh/JwKprOuq9yS6oBGrhkRLwdsGTcu1bVgZ/KrqVOtKVyjeuHHOpI7nsIms1wPENSBKZbxcgm89T3yc1dRXV6vySpUX0cgQvUxc0GteUaYsgq8cQqZZW8vg4Kbnaww+KA/eqLqgYT+D9n7Msm8VNasn/ABsA+BPyrGH+XXn4o40gl+GjM/ca00FatLxOgwyH2eO+3+rXANgqv2ubG/9qhTVe/CM3Vs3S1JWchl1ofJkYeaHH080nWH+xTVlLmD2wktyjRVzEXn08ouPhha4J+sI/jk6Fv7JOqr5J/GTmgY7FrOo4yXDDcDTWcfD2kC65EfV6uT7jWDI2A/qm6Ijdlp5ZwQPfNjeRTylE4dQXz61TkQdccwmgUTECbkkriemvMkrmeEB//v8wyezl3/1p/99Mvd/EFTxBQMvQCN4/n9uXLl8IY7c3nMDGDqw07PN6xvZnXddgx9qOWJ9EIUhrqk0pYRrVewZYzzJpGWcUmAmNqlAUEbkNK8RK7yHalNHVZuSV6xnU6Fgp+ZPzebUb3Zfd7In+aWs/D2r4ejMMiIfQT6ixFX7GkIyuAchsQZISJCQfNuEZNtZRx5WAt3hBG42mtjLeBIzMqd5PEnWazWzDuAQE/G5Rjr2f6imHZ4k1Xj18d+GFBgyjCaG0VST21iX21ab21KfexfMr9TpdoPlgQ4sdU/v1n3QUg086YPL3cW8zQW97UW9HYW97cW9zQW+zUW+HYW+nUxJX/DbXPRbl7mu+Le5ALiNpKxXCNxRDNxWENxSFNxeGNxUHNzuSqStirF+izUkJqv3G6wPqNry4+YS5K4y5I0BXUD5VRhdTCJqU/eSTqYrTu8Pdi/qaJdVNcsvbBD7rE7sexskx5LKmSs5mTIUvjTvRHXXEKdMn/guf0ryBFNYV6A6GqpJdt2Bd1T8TUNdeWtteaW+PNkp8H1kNnPtCm3RpNPaSskbfhW2Vkm5ht1qS8sbystbS8zbysybS82bE1wNJef1JdRLz/WPNblyvVxqlLSpuLutwLulyLul0LvlyaPbH+zIKhoNbaVXqoYS9tYy9vJEGGvDWNsGc39HHQ8PFobaMNSGub9dzf2R64bcHzyxucC6shwgA/BwYo86mANcIzD3cyI8zAAiK1mflTjUlg+umAVcMwvYQU2GSE2QmmAWcOuzgEUgzwcCEa3SHKD0hfcO392fVyy0R4XnTkRwF97Sv72k5L2ULiYMy9/T1PyfST0ya6X3EVjHoxV/N5zWax1j8TcGgB4yAHTQEQA6QpaFLAsDQFj8XQr8AMcIONZ+Y+QHIz9IRzYa9engI9YQ+QjyEYz6fIO135JzYOk3Egws/V734X18n9JvbW3SLtZ+6/qx+PuRi79//C3mP2L597p4h9Xfm6r+3j5xYvE3Fn9j8TcWf2PxNwbbHiX3d9zx+IDnLGCsDXN/WPyNOUCs/cYMINZ+f70sYAczGSIzQWaCWcBvp/ZbCd49WOk3lnbvfGn3iVCTLavsPmh4t+rh2pXdW5jprLyD4VxE440gf73k6cdXzLBDf+nJNzOEgXzBZPIDjp4R0TmJHFBXJq5lsW3LPyO4G9eLI7r/V7Oqo3WzqrqoyLCDe4yO10uq7krGFDOiD5UR3dqMpXhQtyNKGN2bR0t7khhm+vInZ43cmoLMDQk1Oa4NO9Uz5J/Ci4TOpuMC3Tm2mxtl+ttbI/0s7kx+qr+1d+cSb2JBqW9N33rmGInlYgruUVNw9Vfr7mYSLqJfticNV4WbrcrD7ShTA/SJajzt67EwbW1bFw0bD5CGIQ3bZGHaKeF0/4enVZvWwPRSg78b02s/PnPLWN4T43WZh0Zeh7zuafK6bS6v2klaBz4DHL9vgDsXcWPxlntZj/xoNE8XbBsNO1heH1kesrynGGzz2Tz7hcAGI25IwB6IgMF2FQ4UWRiyMGRhyMK6WNhcR8MYgKVw2FsTaevkYBZyMORgT5WDCXNE/rUT/Et6TuReyL2Qez0Y92qurfulHI7mbMvq7A71dXbj0bdTZ5eySttzwVNue51d1/nu4zHSTqSdT4p2JoaJdXY7TEeTLcQ6O2SjWGeHocC/VmeX+JJHjv510rAjpGFIw7DO7l5M7151dhhffARChwV2SOgwvIh8bpMFdl+b32l/zTrooHcHSO+Q3j3FKBsW2O0UAcMCO2RhyMKQhW22wG4rQmydHOwQORhysKfKwbDAbmf4FxbYIfdC7vWoBXZFOLq9wO5ZOoTwN8JFiN5hP/mKKQ509snvNGIJb7IOkma+SmZySHSRXAmIVuilefKfMzMfmFN/6RHuBvNcDgCkjCtqrNTsFRTkpoxhXnJsqAavs1MDYa1zMUv9CEC1V8desxMd1VrATLXMs4RcKl3ZYaoK9VR6Q8kyq37W/BLTSDAnc6mjqIr4rVLrnFZPL803UZm+WrKoF6i64jVos04qgM5e7NAT3WHmhcg+ZJCsjubH4Ps138qkGei+1CVMOeUkcZ17AvQFshKxuAmIcymOGk/f8dMz8gme31PwKRKp8gClkscos39ld2SWe2u3Ltr0F6fbmqxN6YgZPU8GUgmtbq+J52WHOpf91xpmpeNvcx1bSK1t7DcYGnSsa2PradPb7FTmOyiTq/mOokvPmkCnVSLK6i3f1MF32tWE3/eba9g81/A+c2m4R8OmNm3rRpZl9Vtk2N+4EFtmG258NmvRvLTFhuc6aJ7rYNNzWYOWhQ02PpvTPJmz4bkOm+c63PRc1qhlYSNn45rvtGh+ebZnGhZbgK3l94Z+b+z3wDx7YDQ9a9E7WPRg43uW0zt0enDzvfJ0OarZMeNhbmbJROI55zbhiK5fHGdeHKceXr3ILSk7KT1hrsXXli48o0XFl1M8n2QIoPp7c6xwYauvfBiqHxTnrnpE01I/qA5FtXdTMZFcTT9naxDRhDoONc+iDnygDqzOMhipHwrxq0pdbHVZ6n+GMnpjTuGRgIEc0470UeJXYFRJUywjjGY/+e8wOaHbvMwfDYaDZ7f/B/GB8jSHHAEA diff --git a/charts/kubezero-kiam/update.sh b/charts/kubezero-kiam/update.sh new file mode 100755 index 0000000..30d8c24 --- /dev/null +++ b/charts/kubezero-kiam/update.sh @@ -0,0 +1,5 @@ +#!/bin/bash +set -ex + +# Fetch dashboards +../kubezero-metrics/sync_grafana_dashboards.py dashboards.yaml templates/grafana-dashboards.yaml -- 2.40.1 From fefb1ef3c275c12167d95caf62c4d3f23129642a Mon Sep 17 00:00:00 2001 From: Stefan Reimer Date: Mon, 26 Apr 2021 17:07:17 +0200 Subject: [PATCH 16/21] Add CoreDNS and etcd dashboards --- charts/kubezero-metrics/dashboards/dashboards.yaml | 6 ++++++ charts/kubezero-metrics/templates/grafana-dashboards.yaml | 4 ++++ 2 files changed, 10 insertions(+) diff --git a/charts/kubezero-metrics/dashboards/dashboards.yaml b/charts/kubezero-metrics/dashboards/dashboards.yaml index df88a7b..74fd58d 100644 --- a/charts/kubezero-metrics/dashboards/dashboards.yaml +++ b/charts/kubezero-metrics/dashboards/dashboards.yaml @@ -2,6 +2,12 @@ configmap: grafana-dashboards-kube-mixin gzip: true folder: Kubernetes dashboards: +- name: coreDNS + url: https://grafana.com/api/dashboards/12539/revisions/5/download + tags: ['kubernetes', 'DNS'] +- name: etcd + url: https://grafana.com/api/dashboards/3070/revisions/3/download + tags: ['kubernetes'] # cd kube-mixin; for f in *.json; do echo "- name: ${f%%.json}" >> ../dashboards.yaml; echo " url: file://kube-mixin/$f" >> ../dashboards.yaml; done; cd - - name: apiserver url: file://kube-mixin/apiserver.json diff --git a/charts/kubezero-metrics/templates/grafana-dashboards.yaml b/charts/kubezero-metrics/templates/grafana-dashboards.yaml index 3b67dc5..71be71c 100644 --- a/charts/kubezero-metrics/templates/grafana-dashboards.yaml +++ b/charts/kubezero-metrics/templates/grafana-dashboards.yaml @@ -9,6 +9,10 @@ metadata: annotations: k8s-sidecar-target-directory: Kubernetes binaryData: + coreDNS.json.gz: + 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 + etcd.json.gz: + H4sIAAAAAAAC/+1dbW/bOBL+vr+CJ+CAFPDmbCdpmzssDm3T3hXXNyS5XRzawqAl2iIik1qSSuIt8t9vSEq2LFOO7Dqx3OWHFrGGIueNMw+HlPTtJ4SCwYCyNFMy+Dv6DL8R+mb+BwrDEwJXg7OLwafzj+9fX/779X8vgk5BTvCQJJqeCj4hKiaZnBMjIkNBU0U5003mBDVNTacRVljyTIRkTkuTbEzZ26iuU0v/kLP1ad7CNLiD/792rEiC/J5RQRxCFeOPBR5hhued08h5uVDCv6qEayJkLt3x4fFhL2ei4x4uxQyUtTxYGjuHKl8uDbR6DJdKaa0y2bIaXUP2DruH3Q1kk5SNEyIVVstDXjhoy1LOzIkZ49AWqNqedvggoVJp6379KWcsIBFVeJjoEZTIiLk2ZkQZfzrqPuvaK1q5l5wniqZw3V6MaURecaYET/QQI5xIe7+RhWVJYn4llF0Zl7J8CX7jcLCQJwlOJSn3YwgxoeNY89w/6c5dWutu3ku5J9sbDmNySSeEZ6rEypzOEy5e4vBqLHjGouqg8za/4iQrq2aRusiBuS7GQ3zQPz7poJNj+697ePok6LhaHT3roF7/tIOOu7rZ85p2IDfqPetDsxPT27MnQanV1wW2Ss7sdlLTasTFBGvFBIwzskgb42xMZg4zuzzBt4Uuet1uhc0JZQWxSpIxv3GpV0+EGEJNzJPonQ6J8r5W77G4Ikbl2hilRncL/BvfOz5evMYUEdc4cbnConeW5E1TmG+XdrL26mjLHrCot9L0vdYaQoojRW5VxdAoJ+uhFgh3nWadC8zGDTrvL3Ze60Zg7TPwpE8cNCeXTR5oLRriex6Z8UPOGAkViYKldpeaI4fiUy7ViN4u5Lky4Q1Elgv6h+n+pPvXShtB3Pea6ytvNap6D7HmftONYP6YWQK8LytVWcGCD3974SDy2Y0NdS4hqGnXrV4UV+Cijhk5oknySkchY38dKI56ECh6z+G/56c6UvSeLwWUkWbIPdH0KOX+bHd9HXxOj5Y6Ks/r2rloEgv0mU3YsqkUFmOiGliB3KaGJ3DKA6LCaCBhMhMxiLEcJARHRDxZ1v88xClIA/oWSuRysyIyvMGhMpL3l5qAR1ls5bCyVESnw6fdbkMjz6KZljvodnoVnVBlMnHwGuREICDCyIr4z0rDHEQ48MJ8wpenwfPqNDAtmk0DrmUMfqmfAf97fVEfc4JesFZIu3e0Dx9XDNZtOt3MHQUoxtfj+X0lBh8WVNSQPapoK6roe1ThUYVHFT80qrDpdhDG2qASrhI2ULCQTvYVZNQgjMuYwOyZDIlAfJSDDJRLjbTUbQYczskxwwDrzA8PAzwMWBcGHHkY4GGAhwEeBvwgMMDIVQIDI0wTEqFUcJgtYAMPB0r3zNqDsVKCq9Env/oWTI3zbTwH+ZzfvI2qJO31l7ldFvdAZtY6wzIeciwiBD0Ei/RC0/FT975Tkx2WfuMdFpxQLF8VOOXb4tQcYuHMuIAgZPyOsLGKTdxfopG625oAD8dO1pwmhJlyy33rSFeFFjbP9xfzfELGxMC5SqjUXuIOemEmBGGqhgoRp45CWQ1lFeDRk7iGZrxa3htRdZCWLu1pwg2NjNX6TQBO0xSeErApU3jsxsGp7kLgiGZ6jJNlmttdQOkQu4mJ66OEV0KTDc8fIcgLGhEH85AWQ1LnpXkifbp4UQHcd7Kig3ZKonc2yS7T185TMpscQGQhB2ORhkWygvEF6NYmqG+GogP0L1+CjGEx/RLcfT6ZfH3yoKnLTo83s/7OP71C58DocmcweQUN7U5+jQzBZplxLXS7UqOQ9qNklUY75loI7v0XuPjxPzvT8RubrNdR9YJwK1T9srGqm2GQyjzT2nhjQfASfte0i5iOlJuYp0Onj0EkLI4pVJeZ8pxIAIx5XnYHWCxI5IiBmsaFcixCTXAdFICIsohe0yjDC5DjzgmeFg+yGNItvqVymfNhFl7ZMFFVhhYrj7FaZ1UknS/hHHflqcQh5yxbmFMibhGm+LbJ8nTu+jx1uHxxFmqZPU3k45dYLi2QS7nTeZtNnk5SSeS1IsVcCuhBqPbKUZ6G99ax/gQI7rjnEZxHcOsguCXFPQiAuwe7aQoNNdjQFQnbLh0e/oZVGBfII0cjQxpR6EIQPAEE8gT9jKr9O5DM5v0/Jrgx7KALM7bcNrR5EBS5mVnfEcgOD2jWBv0/plkNOw9l1tYj1hehotdu8T1ubSNuvQfxBYHHrQ+FW9tQcH2IMmvQP+mmt8E+l1ojEtIJTlwTe5sgfiwMjP/m2IT1yN4j+xpkf7yr2qzZP4zIMBuPKRsPJtdhOIiGFrQMJMSNAWWD4VS5kFRDwKUfuXE70uJJhGArWO3bN8pAfywkd3fo7CUysW8FZNsIcPf67YBmLvl2i8nCbJIlWANGj8nKM6RmCu0T8HooVqtJxBcFG+IJv9fbKjzR23s8saTYteFETKXiENcng98zzBRNyEH38PS0g2Y7lhZwUHk1uAGEMZJTBoAjs+sggBBgiEgObLy3m5NoOEUHRU7voIR8x35lIyiyKdj47cU7ZORZBTfWEH87yKSzfcMNwZtADYOQTyZUPZ71toAG17BPMyk3Kuy1Bj6CnOgCNILOcuk8kmx/dc+jSI8iNzsceOoBoy9AtawAlQoeEikHkOeAe6YGEzLhYvqdNafvhQrnOTfoveFmFWJYU4A9qi45ZPcbfvtUXPJH1f4kW34fyA0Sfttv6yDqxAGi+h5EeRDlBlFHOzqfN6/PMKJuuLgahAnVUMScRxIkJLCKjiwisVt7pjizM3T1ynCHLgUejWiI3rJ7KzJN5dprvLVaLR567eFZKw+9/FMCD4JC/Fkij0L2CoVI/VdbEcjHTG0EQapC/Ujwo6oTjz/aiD9e+mcUPfp49I2krkcfHn2sgz4e8y0TC9k6JUTUV0AWj6fsDo58Ai43KYfUSrfXQGSVNjwK8SjEo5C9RCEteADrqcctHrfsD25x1ky2hVl2+FjWQoJfp/bi1MqPg3XaVXLxB3DXATv+CK4/MeNPzDjfaOWrRR51tfadpOUXaM/eHj2wr5Muo67HrA19yvkwL8rMBLn3TZn3C/HY75Vyc5SCmJSNd6PMT3ZwdOnWx33azHnfypucOltxUvtkmmqBn74ynGzophUxVij41SMrGKdpQlug3hfAx7RGuzPlnLX+zbd4pFAhk3+PmH+PmK/q/lhV3e6DLiN6DZ9eTOiYvZCX+dCugPGYKw2h14UXtaU2vxL5069E8s/1NPuSz+detMNTcwY5o3f2u3uvEzA/ZGUJwFqgMzxtivxqhdvKGmVH4GYN1Xiws4dgx29i+4rwZhXh/kl3v1+bKkNB01zfQe2yHQkSchFJpBxfZwOwIAmTmSx9oG12/yG6jKlE5jubCAyVJRGiLBTmpdscMgbSgQPRkek6TDKI/ALBHTHBiYqnh+iCQCsYML+AJkQPLPXImCGde2a3TfAUxfiaoIiORkSDvZzZGTslFrFCHDJfzmBEQRMETBhOTTdD6MR+wFKLDhzo4pL+QiLS25Rw90gPaF6qDpQOSrB5xybcF0MQNsLYVNhBXMBVTZtfBM5NG0iBXBDNc0GfcKlyduUhequ0KugkhWmPjTTQgFHI79AYKDYHIxwKLoGnJLF95BqirKzUfyBsTEXhB1PJFFgGMKMZB/bUDSRqaGA/n5f3YLgEPgqmdXYJsSLaDUB7eSNgQyb8RouZscJqX9gXVlNqWduX8ru1oYi1t8UaOUEi7SBTh40R1i+EigVnPJPJ1HZQuEZIZmLXu71WQJ0YuTNnErJtYhxGTrQFDm4o2EYrcwRBR0ErCd0YLhloSCsyhuiBEo6jJ2Bi6/kOtuDyRCsEHCzTOgdXpDDLwSJVS6iKYsAk2mX1CLMZONERCzwN8C1DN7G2ti48ab8DsAo616+B/z0z4BIl9IroCXc9RfZbqwUBjGzdRt0yxNM8VsvDwLXO6zkOF2+yzHOgBLvKcxDmizwH0aY7F+F7l3iOPhut8FZ+3LfRAq+30QJv6Ruvfm237V2mnRfw18rTW3+L8g9ZtF8jXW2o0NZ/MORyXQTYcHns175+7bu/Gxb7X+hfWAjO8SUIDOshNi0HOGHwYAZIGzCpneeH6JzqtQPKN9LL3+rOxmMilbTrHY1NsQXA9llbg4ORWdDM1h0hZowXy6B5V41R5klbzyRtChO3sBHgceIucWL7TsxIdP+Zl9YX5lcL48GGBxu+0P64hfYzQCJDjkWEzn25vYqy6hHLM49YPGKpIpZevx2lrfu+aAGtP/ceuxTzRelKRAJM6i0bYFEJOszsxjwf2W9BwEIiSWCZMpyimw1PIBxto4zV6JMTO9HiSh3m66+5EnMRNipfHbXnqxiytHPhAaMHjB4wesC4b4DxuQeMHjC2FTA2flH1TvBOdffKMIQK/jTO0Qzn5Wm5O9TY6EWbLdKgtOetmmqv9VDxg9W/R4geIXqE6BHiXmzcvhgy7XD6QKLZY5UMpI+5QkW5AR0UlwYSX5P8W/DVYsST0glDXbxAVEp9BlGfh7QHCUOcSbJwZhci/5CgTD9QMkxI473aUw9kPZBtbeWTDDNzrnugZ82qGbO78p0FY7VFPM1zqYRXzP6twNodAbOLalDzEM1DNA/R9gWi/ZQzG8gwJhP8KxHSMtQ7tpfV1PYa4Xz1BWF8PHfI4CqDdSesjsFJZ30pMkn1++zYeDbBIHFKVXj6nW1FzYzJ6SMbhQLGb37uFXMVwkd+LVi4LaUwS8X8ZgiXOsYNiqhdnjDByTy8B71u6cdR+UdvMv/7pPR3r/zjqFumzCNK0C/93Yusbr8WMug8w1O7w1Hmq26UcsdPyx2XR+kfl3/Mt4GCZ1GZ34KXBfX9wU2GDoaC30ACzM1a+M9r/fAKZKcKyg2uZ75hcmEV7Zrb5r4HE7nUQ/5wlERwC06LIXOz6bu1LX66+z+oR+dIPb8AAA== apiserver.json.gz: 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 cluster-total.json.gz: -- 2.40.1 From 201ce9fb7dd5f4fe863baedbd6dd0dfb748e0416 Mon Sep 17 00:00:00 2001 From: Stefan Reimer Date: Mon, 26 Apr 2021 17:12:31 +0200 Subject: [PATCH 17/21] fix: make kiam grafana dashboard optional --- charts/kubezero-kiam/dashboards.yaml | 1 + charts/kubezero-kiam/templates/grafana-dashboards.yaml | 2 ++ 2 files changed, 3 insertions(+) diff --git a/charts/kubezero-kiam/dashboards.yaml b/charts/kubezero-kiam/dashboards.yaml index e0f1622..ac10882 100644 --- a/charts/kubezero-kiam/dashboards.yaml +++ b/charts/kubezero-kiam/dashboards.yaml @@ -1,4 +1,5 @@ configmap: grafana-dashboards-kiam +condition: '.Values.kiam.server.prometheus.servicemonitor.enabled' gzip: true folder: AWS dashboards: diff --git a/charts/kubezero-kiam/templates/grafana-dashboards.yaml b/charts/kubezero-kiam/templates/grafana-dashboards.yaml index 057b543..13b9dac 100644 --- a/charts/kubezero-kiam/templates/grafana-dashboards.yaml +++ b/charts/kubezero-kiam/templates/grafana-dashboards.yaml @@ -1,3 +1,4 @@ +{{- if .Values.kiam.server.prometheus.servicemonitor.enabled }} apiVersion: v1 kind: ConfigMap metadata: @@ -11,3 +12,4 @@ metadata: binaryData: kiam.json.gz: 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 +{{- end }} -- 2.40.1 From a1d54cb80bab4f624a02faaacd94ab7ed1f8f0b7 Mon Sep 17 00:00:00 2001 From: Stefan Reimer Date: Mon, 26 Apr 2021 17:19:11 +0200 Subject: [PATCH 18/21] fix: fix metrics for Istio --- charts/kubezero/templates/istio.yaml | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/charts/kubezero/templates/istio.yaml b/charts/kubezero/templates/istio.yaml index ecaba88..f07e0df 100644 --- a/charts/kubezero/templates/istio.yaml +++ b/charts/kubezero/templates/istio.yaml @@ -1,16 +1,15 @@ {{- define "istio-values" }} -{{- if .Values.HighAvailableControlplane }} -global: - defaultPodDisruptionBudget: - enabled: true - istio-discovery: + telemetry: + enabled: {{ .Values.metrics.enabled }} +{{- if .Values.HighAvailableControlplane }} pilot: replicaCount: 2 - telemetry: - enabled: {{ .Values.metrics.enabled }} +global: + defaultPodDisruptionBudget: + enabled: true {{- end }} {{- end }} -- 2.40.1 From 13184808bfe14a417566c5ce44ef25d691abfcb1 Mon Sep 17 00:00:00 2001 From: Stefan Reimer Date: Mon, 26 Apr 2021 17:59:25 +0200 Subject: [PATCH 19/21] chore: push prelimenary Upgrade docs for 2.20 --- docs/Upgrade-2.20.md | 72 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 docs/Upgrade-2.20.md diff --git a/docs/Upgrade-2.20.md b/docs/Upgrade-2.20.md new file mode 100644 index 0000000..2acd3fa --- /dev/null +++ b/docs/Upgrade-2.20.md @@ -0,0 +1,72 @@ +# Upgrade to KubeZero V2.20 / Kubernetes 1.20 + +# CloudBender +## Changes +- controller node names are now strictly tight to the AZ they are in: AZ1 -> controller00, AZ2 -> controller01 etc. to prevent controller03 from happening in case AWS launches new instances before the old ones are actually terminated + +## Upgrade +- Set Kubernetes version in the controller config to eg. `1.20` +- Update controller and worker stacks with latest CFN code + +- Upgrade requires careful replacement in case existing control planes are shuffled otherwise: ( this might reduce the number of online controllers temporarily to 1 ! ) + - manually set controller ASG to Min/Maz 0 for the ASG currently hosting controller00 + - terminate controller node in AZ1 which will return as controller00 + - replace controller01 and 02 in similar fashion + +- replace worker nodes in a rolling fashion via. drain / terminate / rinse-repeat + +# KubeZero + +## New features + +### NATS +Deploy NATS services + +### TimeCapsule +Providing backup solutions for KubeZero clusters: + +- scheduled snapshots for EBS backed PVCs incl. custome retention and restore + + +## Changes + +### General +- various version bumps +- removed deprecated nodeLabels from `failure-domain.beta.kubernetes.io/[region|zone]` to `topology.kubernetes.io/[region|zone]` please adapt existing affinity rules ! + +### Istio +- hardened and optimized settings for Envoy gateway proxies +- improved deployment strategy to reduce errors during upgrades +- Added various Grafana Dashboards + +## Metrics +- Added various dashboards for KubeZero modules +- Updated / improved dashboard organization incl. folders and tags +- Grafana Dashboards are now all provided via configmaps, no more storing of state required +- Custom dashboards can easily be provided by simple installing a ConfigMap along with workloads in any namespace + + + +## Upgrade - Without ArgoCD +1. Update CRDs of all enabled components: + `./bootstrap.sh crds all clusters/$CLUSTER` + +2. Prepare upgrade +Remove legacy monitoring configmaps +`kubectl delete cm -n monitoring -l grafana_dashboard=1` +Remove previous Grafana stateful config +`kubectl delete pvc metrics-grafana -n monitoring` + +3. Upgrade all components +`./bootstrap.sh deploy all clusters/$CLUSTER` + +## Upgrade - ArgoCD +- ArgoCD itself: `./bootstrap.sh deploy argocd clusters/$CLUSTER` +- push latest cluster config to your git repo +- trigger sync in ArgoCD incl. *prune* starting with the KubeZero root app +( only if auto-sync is not enabled ) + +## Verification / Tests +- check if all pods are RUNNING +- check any Ingress services +- ... -- 2.40.1 From 5b3689348c17c436ca80c3596862fc9bdedec6dc Mon Sep 17 00:00:00 2001 From: Stefan Reimer Date: Mon, 26 Apr 2021 18:14:24 +0200 Subject: [PATCH 20/21] chore: make upgrade docs easier to cp paste --- docs/Upgrade-2.20.md | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/docs/Upgrade-2.20.md b/docs/Upgrade-2.20.md index 2acd3fa..6414a88 100644 --- a/docs/Upgrade-2.20.md +++ b/docs/Upgrade-2.20.md @@ -52,10 +52,15 @@ Providing backup solutions for KubeZero clusters: `./bootstrap.sh crds all clusters/$CLUSTER` 2. Prepare upgrade -Remove legacy monitoring configmaps -`kubectl delete cm -n monitoring -l grafana_dashboard=1` -Remove previous Grafana stateful config -`kubectl delete pvc metrics-grafana -n monitoring` +- Remove legacy monitoring configmaps +- Remove previous Grafana stateful config +- Remove legacy Istio Enovyfilter + +``` +kubectl delete cm -n monitoring -l grafana_dashboard=1 +kubectl delete pvc metrics-grafana -n monitoring +kubectl delete envoyfilter -A -l operator.istio.io/version=1.6.9 +``` 3. Upgrade all components `./bootstrap.sh deploy all clusters/$CLUSTER` -- 2.40.1 From 4dbdaf9225255434e536f082d5cacbba051f69d9 Mon Sep 17 00:00:00 2001 From: Stefan Reimer Date: Tue, 27 Apr 2021 11:17:50 +0200 Subject: [PATCH 21/21] feat: add custom landing page to metrics --- .../{dashboards.yaml => k8s-dashboards.yaml} | 0 .../dashboards/zdt-dashboards.yaml | 5 + .../kubezero-metrics/dashboards/zdt/home.json | 136 ++++++++++++++++++ ...oards.yaml => grafana-dashboards-k8s.yaml} | 0 .../templates/grafana-dashboards-zdt.yaml | 11 ++ charts/kubezero-metrics/update.sh | 5 +- charts/kubezero-metrics/values.yaml | 2 +- 7 files changed, 157 insertions(+), 2 deletions(-) rename charts/kubezero-metrics/dashboards/{dashboards.yaml => k8s-dashboards.yaml} (100%) create mode 100644 charts/kubezero-metrics/dashboards/zdt-dashboards.yaml create mode 100644 charts/kubezero-metrics/dashboards/zdt/home.json rename charts/kubezero-metrics/templates/{grafana-dashboards.yaml => grafana-dashboards-k8s.yaml} (100%) create mode 100644 charts/kubezero-metrics/templates/grafana-dashboards-zdt.yaml diff --git a/charts/kubezero-metrics/dashboards/dashboards.yaml b/charts/kubezero-metrics/dashboards/k8s-dashboards.yaml similarity index 100% rename from charts/kubezero-metrics/dashboards/dashboards.yaml rename to charts/kubezero-metrics/dashboards/k8s-dashboards.yaml diff --git a/charts/kubezero-metrics/dashboards/zdt-dashboards.yaml b/charts/kubezero-metrics/dashboards/zdt-dashboards.yaml new file mode 100644 index 0000000..5f45fee --- /dev/null +++ b/charts/kubezero-metrics/dashboards/zdt-dashboards.yaml @@ -0,0 +1,5 @@ +configmap: grafana-dashboards-zdt +gzip: true +dashboards: +- name: home + url: file://zdt/home.json diff --git a/charts/kubezero-metrics/dashboards/zdt/home.json b/charts/kubezero-metrics/dashboards/zdt/home.json new file mode 100644 index 0000000..c20dd4f --- /dev/null +++ b/charts/kubezero-metrics/dashboards/zdt/home.json @@ -0,0 +1,136 @@ +{ + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": "Prometheus", + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "type": "dashboard" + } + ] + }, + "editable": true, + "gnetId": null, + "graphTooltip": 0, + "id": 29, + "links": [], + "panels": [ + { + "datasource": null, + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 24, + "x": 0, + "y": 0 + }, + "id": 6, + "options": { + "content": "![ZDT Logo](https://cdn.zero-downtime.net/assets/kubezero/logo-small-64.png \"zdt\")\nWelcome to KubeZero Metrics ! ", + "mode": "markdown" + }, + "pluginVersion": "7.5.3", + "timeFrom": null, + "timeShift": null, + "title": "Home", + "type": "text" + }, + { + "datasource": null, + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "gridPos": { + "h": 15, + "w": 12, + "x": 0, + "y": 3 + }, + "id": 3, + "links": [], + "options": { + "folderId": 0, + "maxItems": 30, + "query": "", + "showHeadings": true, + "showRecentlyViewed": true, + "showSearch": false, + "showStarred": true, + "tags": [] + }, + "pluginVersion": "7.5.3", + "tags": [], + "title": "Dashboards", + "type": "dashlist" + }, + { + "datasource": null, + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "gridPos": { + "h": 15, + "w": 12, + "x": 12, + "y": 3 + }, + "id": 4, + "links": [], + "options": { + "feedUrl": "https://zero-downtime.net/index.xml" + }, + "title": "Latest from our blog", + "type": "news" + } + ], + "refresh": "30s", + "schemaVersion": 27, + "style": "dark", + "tags": [], + "templating": { + "list": [] + }, + "time": { + "from": "now-1h", + "to": "now" + }, + "timepicker": { + "hidden": true, + "refresh_intervals": [ + "5s", + "10s", + "30s", + "1m", + "5m", + "15m", + "30m", + "1h", + "2h", + "1d" + ], + "time_options": [ + "5m", + "15m", + "1h", + "6h", + "12h", + "24h", + "2d", + "7d", + "30d" + ], + "type": "timepicker" + }, + "timezone": "browser", + "title": "Home Copy", + "uid": "6QOeg59Mz", + "version": 4 +} diff --git a/charts/kubezero-metrics/templates/grafana-dashboards.yaml b/charts/kubezero-metrics/templates/grafana-dashboards-k8s.yaml similarity index 100% rename from charts/kubezero-metrics/templates/grafana-dashboards.yaml rename to charts/kubezero-metrics/templates/grafana-dashboards-k8s.yaml diff --git a/charts/kubezero-metrics/templates/grafana-dashboards-zdt.yaml b/charts/kubezero-metrics/templates/grafana-dashboards-zdt.yaml new file mode 100644 index 0000000..e08bec0 --- /dev/null +++ b/charts/kubezero-metrics/templates/grafana-dashboards-zdt.yaml @@ -0,0 +1,11 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: {{ printf "%s-%s" (include "kubezero-lib.fullname" $) "grafana-dashboards-zdt" | trunc 63 | trimSuffix "-" }} + namespace: {{ .Release.Namespace }} + labels: + grafana_dashboard: "1" +{{ include "kubezero-lib.labels" . | indent 4 }} +binaryData: + home.json.gz: + H4sIAAAAAAAC/9VVS2/UMBC+8yuMD6hI7e5mH63ghlohKkAUWopEWyFvPEmsdexgO93dVv3v2M7L2RQqbnDZ9XwzHs/jy8z9M4QwEUIaYpgUGr9G9xayIGfaWOnKS6hGvWZZMm5OhVVG+x1KiSFalioGq8BnSuZgMig1DmxAkCV3eqNKCPCM0UdQFktxLLlUzqFKl2Rvso+mUWR/Fot9FL0MXQuS+4ffdLmgF+gNB2V6IZht4e0o0dlSEkVxrXvw/zf298GZY6DM7ESLUwHmlFpElJxXiCJFdiElN6yw+MSDzJlMX/kzZ2Llqnp148WCCOC6rWtT1X71Gu9ekzDg9FiKhKVtc6orkJCSG9+yhyBDeQtK2YJWrzbZtf5SqzuTuu8rs+Is8LF2CcwDYNMkV8tbJw98+8QPW1EWfU550DbVgHDUws+vvp9coA8ylTd7mTGFfj0ex1SM7kDJAyrXwrAcRrbmY6I1GD1elUtwyjG3dw50Tjg/OJyPCpGia3xHzTV+eS2+AY8t+ZCR6L21/27t0UcwisUaPUdtHEEyufT0wzlRK/csHiRW8DJl4hKUtgk506PRYjRrfWAX6FtL+d3mOfw8Y4kZKoynFn5nQw381Ow0sDFVFHUM/xJRosUOU6LpE0yZPc6UlnE7X8nvyZNITkH5TzB8IyebUwO5M56F+M8SlHsfh93WmVy/A0KZSPVw6DjtF4gtQ/n2ksEa6OM250BU7KqREK4HSkOUeuymIelvqv0kw5qbQwqdNKNMD4nkxpyf5P8vmXrAH9g0/3s2AdCvirs6NeNnOHqYoLAZbXI+nAptBz4QA9qgxE4AZMuJlnY+DXshYK3rPtjfah8oSBRoVwg8m1T9wzrOICcdFaZHFWy2vO6pWlWWPVLYoZEX3K4+kQ63eLfXXGKdPqmGFhZyfRBldczYyBrDvWsFi1egust2bVMQPZY3Cf1gdsqrWxLsOqtcBAyNJoEwC4Uo786L4ByFwmwSarLuPA3OUb3db5q8bBI/OipcPflK6PgwdBy+Mp2HAu3ORzSMdzeWZtR3he0V+04Kr18qudZWWSuCtYGOZbGt8NJ/Afjw8ydIF68+3lXobUuh+bOHXxBMSbrqCQAA diff --git a/charts/kubezero-metrics/update.sh b/charts/kubezero-metrics/update.sh index 03efe2b..204398f 100755 --- a/charts/kubezero-metrics/update.sh +++ b/charts/kubezero-metrics/update.sh @@ -10,4 +10,7 @@ curl -L -s -o - https://github.com/prometheus-community/helm-charts/releases/dow patch -p0 -i metrics-zdt.patch --no-backup-if-mismatch # Create ZDT dashboard configmap -./sync_grafana_dashboards.py dashboards/kube-mixin.yaml templates/grafana-dashboards.yaml +cd dashboards +../sync_grafana_dashboards.py k8s-dashboards.yaml ../templates/grafana-dashboards-k8s.yaml +../sync_grafana_dashboards.py zdt-dashboards.yaml ../templates/grafana-dashboards-zdt.yaml +cd - diff --git a/charts/kubezero-metrics/values.yaml b/charts/kubezero-metrics/values.yaml index 1b1b705..dc0ba52 100644 --- a/charts/kubezero-metrics/values.yaml +++ b/charts/kubezero-metrics/values.yaml @@ -147,7 +147,7 @@ kube-prometheus-stack: enabled: true dashboards: min_refresh_interval: "30s" - # default_home_dashboard_path: 'dashboards/kubezero.json' + default_home_dashboard_path: '/tmp/dashboards/home.json' alerting: enabled: false date_formats: -- 2.40.1