From da081f6b634b136cea289ff21462e46bbdceccac Mon Sep 17 00:00:00 2001 From: svcAPLBot <174728082+svcAPLBot@users.noreply.github.com> Date: Wed, 5 Aug 2026 08:44:07 +0000 Subject: [PATCH] chore(chart-deps): update kube-prometheus-stack to version 88.1.5 --- apps.yaml | 6 +- chart/chart-index/Chart.yaml | 2 +- charts/kube-prometheus-stack/Chart.lock | 12 +- charts/kube-prometheus-stack/Chart.yaml | 10 +- .../crds/crds/crd-alertmanagerconfigs.yaml | 56 ++- .../charts/crds/crds/crd-alertmanagers.yaml | 17 +- .../charts/crds/crds/crd-podmonitors.yaml | 21 +- .../charts/crds/crds/crd-probes.yaml | 18 +- .../crds/crds/crd-prometheusagents.yaml | 108 +++++- .../charts/crds/crds/crd-prometheuses.yaml | 134 ++++++- .../charts/crds/crds/crd-prometheusrules.yaml | 6 +- .../charts/crds/crds/crd-scrapeconfigs.yaml | 47 ++- .../charts/crds/crds/crd-servicemonitors.yaml | 30 +- .../charts/crds/crds/crd-thanosrulers.yaml | 22 +- .../charts/crds/files/crds.bz2 | Bin 199495 -> 201063 bytes .../charts/grafana/Chart.yaml | 4 +- .../charts/grafana/README.md | 2 + .../charts/grafana/templates/_pod.tpl | 4 + .../charts/grafana/templates/statefulset.yaml | 6 + .../charts/grafana/values.yaml | 16 +- .../charts/kube-state-metrics/Chart.yaml | 5 +- .../charts/kube-state-metrics/README.md | 11 + .../ci/01-default-values.yaml | 1 + .../02-custom-resource-state-only-values.yaml | 21 ++ .../ci/03-servicemonitor-values.yaml | 19 + .../ci/04-self-monitor-values.yaml | 9 + .../kube-state-metrics/templates/_helpers.tpl | 26 ++ .../templates/ciliumnetworkpolicy.yaml | 33 -- .../templates/deployment.yaml | 16 +- .../templates/networkpolicy.yaml | 5 +- .../kube-state-metrics/templates/role.yaml | 81 +++-- .../unittests/collectors_test.yaml | 230 ++++++++++++ .../unittests/fullname_test.yaml | 40 +++ .../charts/kube-state-metrics/values.yaml | 41 ++- .../prometheus-node-exporter/Chart.yaml | 4 +- .../prometheus-node-exporter/values.yaml | 2 +- .../prometheus-windows-exporter/Chart.yaml | 4 +- .../templates/_helpers.tpl | 77 ++++ .../templates/alertmanager/alertmanager.yaml | 20 ++ .../templates/alertmanager/route.yaml | 64 +--- .../alertmanager/routeperreplica.yaml | 22 ++ .../kube-scheduler/servicemonitor.yaml | 30 ++ .../alertmanager-overview.yaml | 4 +- .../grafana/dashboards-1.14/apiserver.yaml | 4 +- .../dashboards-1.14/cluster-total.yaml | 4 +- .../dashboards-1.14/controller-manager.yaml | 4 +- .../dashboards-1.14/grafana-overview.yaml | 2 +- .../k8s-resources-cluster.yaml | 4 +- .../k8s-resources-multicluster.yaml | 4 +- .../k8s-resources-namespace.yaml | 4 +- .../dashboards-1.14/k8s-resources-node.yaml | 4 +- .../k8s-resources-nodes-overview.yaml | 57 +++ .../dashboards-1.14/k8s-resources-pod.yaml | 4 +- .../k8s-resources-workload.yaml | 4 +- .../k8s-resources-workloads-namespace.yaml | 4 +- .../grafana/dashboards-1.14/kubelet.yaml | 4 +- .../dashboards-1.14/namespace-by-pod.yaml | 4 +- .../namespace-by-workload.yaml | 4 +- .../node-cluster-rsrc-use.yaml | 4 +- .../dashboards-1.14/node-rsrc-use.yaml | 4 +- .../grafana/dashboards-1.14/nodes-aix.yaml | 4 +- .../grafana/dashboards-1.14/nodes-darwin.yaml | 4 +- .../grafana/dashboards-1.14/nodes.yaml | 4 +- .../persistentvolumesusage.yaml | 4 +- .../grafana/dashboards-1.14/pod-total.yaml | 4 +- .../prometheus-remote-write.yaml | 4 +- .../grafana/dashboards-1.14/prometheus.yaml | 4 +- .../grafana/dashboards-1.14/proxy.yaml | 4 +- .../grafana/dashboards-1.14/scheduler.yaml | 4 +- .../dashboards-1.14/workload-total.yaml | 4 +- .../prometheus-operator/deployment.yaml | 7 + .../templates/prometheus/clusterrole.yaml | 12 +- .../templates/prometheus/prometheus.yaml | 60 +++- .../templates/prometheus/route.yaml | 64 +--- .../templates/prometheus/routeperreplica.yaml | 22 ++ .../rules-1.14/alertmanager.rules.yaml | 37 ++ .../templates/prometheus/rules-1.14/etcd.yaml | 44 ++- .../rules-1.14/kubernetes-apps.yaml | 2 + .../templates/thanos-ruler/route.yaml | 64 +--- .../templates/thanos-ruler/ruler.yaml | 90 +++++ .../templates/thanos-ruler/secret.yaml | 10 + charts/kube-prometheus-stack/values.yaml | 335 +++++++++++++++++- 82 files changed, 1752 insertions(+), 440 deletions(-) create mode 100644 charts/kube-prometheus-stack/charts/kube-state-metrics/ci/01-default-values.yaml create mode 100644 charts/kube-prometheus-stack/charts/kube-state-metrics/ci/02-custom-resource-state-only-values.yaml create mode 100644 charts/kube-prometheus-stack/charts/kube-state-metrics/ci/03-servicemonitor-values.yaml create mode 100644 charts/kube-prometheus-stack/charts/kube-state-metrics/ci/04-self-monitor-values.yaml delete mode 100644 charts/kube-prometheus-stack/charts/kube-state-metrics/templates/ciliumnetworkpolicy.yaml create mode 100644 charts/kube-prometheus-stack/charts/kube-state-metrics/unittests/collectors_test.yaml create mode 100644 charts/kube-prometheus-stack/charts/kube-state-metrics/unittests/fullname_test.yaml create mode 100644 charts/kube-prometheus-stack/templates/alertmanager/routeperreplica.yaml create mode 100644 charts/kube-prometheus-stack/templates/grafana/dashboards-1.14/k8s-resources-nodes-overview.yaml create mode 100644 charts/kube-prometheus-stack/templates/prometheus/routeperreplica.yaml diff --git a/apps.yaml b/apps.yaml index 61e2342f51..2006ae0174 100644 --- a/apps.yaml +++ b/apps.yaml @@ -1,7 +1,7 @@ appsInfo: alertmanager: title: Alertmanager - appVersion: 0.33.0 + appVersion: 0.33.1 repo: https://github.com/prometheus/alertmanager maintainers: Prometheus Community relatedLinks: @@ -65,7 +65,7 @@ appsInfo: integration: App Platform uses Gitea as its default repository for App Platform configuration (values). Gitea can also be used by Teams to provide application code repositories. Access to Gitea is provided by the OIDC integration in App Platform. Members of the otomi-admin and team-admin group can seamlessly sign in to Gitea. When Argo CD is enabled, App Platform will automatically create a Gitops repository for each Team in Gitea. grafana: title: Grafana - appVersion: 13.0.2 + appVersion: 13.1.2 repo: https://github.com/grafana/grafana maintainers: Grafana Labs relatedLinks: @@ -175,7 +175,7 @@ appsInfo: integration: Loki can be activated to aggregate all the container logs on the platform and store them in a storage endpoint of choice (defaults to PVC). When App Platform is configured in multi-tenancy mode, logs will be split-up between team namespaces and made available for team members only. App Platform shortcuts can be used to provide selections of logs based on interest. prometheus: title: Prometheus - appVersion: 3.12.0 + appVersion: 3.13.2 repo: https://github.com/prometheus/prometheus maintainers: Prometheus relatedLinks: diff --git a/chart/chart-index/Chart.yaml b/chart/chart-index/Chart.yaml index 4210fb2d2f..b101a1ffd1 100644 --- a/chart/chart-index/Chart.yaml +++ b/chart/chart-index/Chart.yaml @@ -73,7 +73,7 @@ dependencies: version: v0.19.0 repository: oci://ghcr.io/kserve/charts/kserve-resources - name: kube-prometheus-stack - version: 86.3.2 + version: 88.1.5 repository: https://prometheus-community.github.io/helm-charts - name: kyverno version: 3.8.1 diff --git a/charts/kube-prometheus-stack/Chart.lock b/charts/kube-prometheus-stack/Chart.lock index 1ddcc895ab..413404cb98 100644 --- a/charts/kube-prometheus-stack/Chart.lock +++ b/charts/kube-prometheus-stack/Chart.lock @@ -4,15 +4,15 @@ dependencies: version: 0.0.0 - name: kube-state-metrics repository: https://prometheus-community.github.io/helm-charts - version: 7.5.1 + version: 8.1.3 - name: prometheus-node-exporter repository: https://prometheus-community.github.io/helm-charts - version: 4.55.0 + version: 4.56.1 - name: grafana repository: https://grafana-community.github.io/helm-charts - version: 12.4.8 + version: 12.10.3 - name: prometheus-windows-exporter repository: https://prometheus-community.github.io/helm-charts - version: 0.12.7 -digest: sha256:924353d5af6c84462559cf2692f993797b56736f62143406bef95a1926316208 -generated: "2026-06-19T11:58:32.895639612Z" + version: 0.12.8 +digest: sha256:75dc2be4c202f05073c9271ad2cd3b0ab1ded0451e1fff26ecb20e9056486e99 +generated: "2026-08-05T01:49:43.395358112Z" diff --git a/charts/kube-prometheus-stack/Chart.yaml b/charts/kube-prometheus-stack/Chart.yaml index 05827b95db..7258de8c78 100644 --- a/charts/kube-prometheus-stack/Chart.yaml +++ b/charts/kube-prometheus-stack/Chart.yaml @@ -9,7 +9,7 @@ annotations: url: https://github.com/prometheus-community/helm-charts/blob/main/charts/kube-prometheus-stack/README.md#upgrading-chart artifacthub.io/operator: "true" apiVersion: v2 -appVersion: v0.91.0 +appVersion: v0.93.0 dependencies: - condition: crds.enabled name: crds @@ -18,15 +18,15 @@ dependencies: - condition: kubeStateMetrics.enabled name: kube-state-metrics repository: https://prometheus-community.github.io/helm-charts - version: 7.5.1 + version: 8.1.3 - condition: nodeExporter.enabled name: prometheus-node-exporter repository: https://prometheus-community.github.io/helm-charts - version: 4.55.0 + version: 4.56.1 - condition: grafana.enabled name: grafana repository: https://grafana-community.github.io/helm-charts - version: 12.4.8 + version: 12.10.3 - condition: windowsMonitoring.enabled name: prometheus-windows-exporter repository: https://prometheus-community.github.io/helm-charts @@ -69,4 +69,4 @@ sources: - https://github.com/prometheus-community/helm-charts - https://github.com/prometheus-operator/kube-prometheus type: application -version: 86.3.2 +version: 88.1.5 diff --git a/charts/kube-prometheus-stack/charts/crds/crds/crd-alertmanagerconfigs.yaml b/charts/kube-prometheus-stack/charts/crds/crds/crd-alertmanagerconfigs.yaml index d2ffdf9fa1..2b8c3f4c51 100644 --- a/charts/kube-prometheus-stack/charts/crds/crds/crd-alertmanagerconfigs.yaml +++ b/charts/kube-prometheus-stack/charts/crds/crds/crd-alertmanagerconfigs.yaml @@ -1,11 +1,11 @@ -# https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.91.0/example/prometheus-operator-crd/monitoring.coreos.com_alertmanagerconfigs.yaml +# https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.93.0/example/prometheus-operator-crd/monitoring.coreos.com_alertmanagerconfigs.yaml --- apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.20.1 - operator.prometheus.io/version: 0.91.0 + controller-gen.kubebuilder.io/version: v0.21.0 + operator.prometheus.io/version: 0.93.0 name: alertmanagerconfigs.monitoring.coreos.com spec: group: monitoring.coreos.com @@ -761,7 +761,7 @@ spec: tokenUrl: description: tokenUrl defines the URL to fetch the token from. - minLength: 1 + pattern: ^(http|https)://.+$ type: string required: - clientId @@ -1834,7 +1834,7 @@ spec: tokenUrl: description: tokenUrl defines the URL to fetch the token from. - minLength: 1 + pattern: ^(http|https)://.+$ type: string required: - clientId @@ -2601,7 +2601,7 @@ spec: tokenUrl: description: tokenUrl defines the URL to fetch the token from. - minLength: 1 + pattern: ^(http|https)://.+$ type: string required: - clientId @@ -3439,7 +3439,7 @@ spec: tokenUrl: description: tokenUrl defines the URL to fetch the token from. - minLength: 1 + pattern: ^(http|https)://.+$ type: string required: - clientId @@ -4287,7 +4287,7 @@ spec: tokenUrl: description: tokenUrl defines the URL to fetch the token from. - minLength: 1 + pattern: ^(http|https)://.+$ type: string required: - clientId @@ -5147,7 +5147,7 @@ spec: tokenUrl: description: tokenUrl defines the URL to fetch the token from. - minLength: 1 + pattern: ^(http|https)://.+$ type: string required: - clientId @@ -6075,7 +6075,7 @@ spec: tokenUrl: description: tokenUrl defines the URL to fetch the token from. - minLength: 1 + pattern: ^(http|https)://.+$ type: string required: - clientId @@ -7068,7 +7068,7 @@ spec: tokenUrl: description: tokenUrl defines the URL to fetch the token from. - minLength: 1 + pattern: ^(http|https)://.+$ type: string required: - clientId @@ -7373,6 +7373,12 @@ spec: description: titleLink defines the URL that the title will link to when clicked. type: string + updateMessage: + description: |- + updateMessage enables updating existing Slack messages instead of creating new ones + when alert state changes. Please note that Webhook URLs do not support updates. + It requires Alertmanager >= v0.32.0. + type: boolean username: description: username defines the slack bot user name. minLength: 1 @@ -7875,7 +7881,7 @@ spec: tokenUrl: description: tokenUrl defines the URL to fetch the token from. - minLength: 1 + pattern: ^(http|https)://.+$ type: string required: - clientId @@ -8224,6 +8230,14 @@ spec: If you don't specify this value, you must specify a value for the PhoneNumber or TargetARN. minLength: 1 type: string + useAWSHTTPClient: + description: |- + useAWSHTTPClient forces the AWS SDK's BuildableClient instead of + alertmanager's tracing-wrapped HTTP client. Auto-enabled when AWS_CA_BUNDLE + is set; set explicitly when configuring ca_bundle via shared AWS config. + + It requires Alertmanager >= 0.33.0. + type: boolean type: object type: array x-kubernetes-list-type: atomic @@ -8762,7 +8776,7 @@ spec: tokenUrl: description: tokenUrl defines the URL to fetch the token from. - minLength: 1 + pattern: ^(http|https)://.+$ type: string required: - clientId @@ -9570,7 +9584,7 @@ spec: tokenUrl: description: tokenUrl defines the URL to fetch the token from. - minLength: 1 + pattern: ^(http|https)://.+$ type: string required: - clientId @@ -10320,7 +10334,7 @@ spec: tokenUrl: description: tokenUrl defines the URL to fetch the token from. - minLength: 1 + pattern: ^(http|https)://.+$ type: string required: - clientId @@ -11050,7 +11064,7 @@ spec: tokenUrl: description: tokenUrl defines the URL to fetch the token from. - minLength: 1 + pattern: ^(http|https)://.+$ type: string required: - clientId @@ -11287,6 +11301,14 @@ spec: format: int32 minimum: 0 type: integer + payload: + description: |- + payload define custom payload to be sent to the webhook endpoint. + This is an advanced configuration option that allows you + to define a custom payload using Go templates. + It requires Alertmanager >= v0.32.0. + minLength: 1 + type: string sendResolved: description: sendResolved defines whether or not to notify about resolved alerts. @@ -11862,7 +11884,7 @@ spec: tokenUrl: description: tokenUrl defines the URL to fetch the token from. - minLength: 1 + pattern: ^(http|https)://.+$ type: string required: - clientId diff --git a/charts/kube-prometheus-stack/charts/crds/crds/crd-alertmanagers.yaml b/charts/kube-prometheus-stack/charts/crds/crds/crd-alertmanagers.yaml index 74e2095497..3afe534f21 100644 --- a/charts/kube-prometheus-stack/charts/crds/crds/crd-alertmanagers.yaml +++ b/charts/kube-prometheus-stack/charts/crds/crds/crd-alertmanagers.yaml @@ -1,11 +1,11 @@ -# https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.91.0/example/prometheus-operator-crd/monitoring.coreos.com_alertmanagers.yaml +# https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.93.0/example/prometheus-operator-crd/monitoring.coreos.com_alertmanagers.yaml --- apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.20.1 - operator.prometheus.io/version: 0.91.0 + controller-gen.kubebuilder.io/version: v0.21.0 + operator.prometheus.io/version: 0.93.0 name: alertmanagers.monitoring.coreos.com spec: group: monitoring.coreos.com @@ -1629,7 +1629,7 @@ spec: tokenUrl: description: tokenUrl defines the URL to fetch the token from. - minLength: 1 + pattern: ^(http|https)://.+$ type: string required: - clientId @@ -4041,7 +4041,6 @@ spec: procMount denotes the type of proc mount to use for the containers. The default value is Default which uses the container runtime defaults for readonly paths and masked paths. - This requires the ProcMountType feature flag to be enabled. Note that this field cannot be set when spec.os.name is windows. type: string readOnlyRootFilesystem: @@ -5741,7 +5740,6 @@ spec: procMount denotes the type of proc mount to use for the containers. The default value is Default which uses the container runtime defaults for readonly paths and masked paths. - This requires the ProcMountType feature flag to be enabled. Note that this field cannot be set when spec.os.name is windows. type: string readOnlyRootFilesystem: @@ -8645,7 +8643,7 @@ spec: A failure to resolve or pull the image during pod startup will block containers from starting and may add significant latency. Failures will be retried using normal volume backoff and will be reported on the pod reason and message. The types of objects that may be mounted by this volume are defined by the container runtime implementation on a host machine and at minimum must include all valid types supported by the container image field. The OCI object gets mounted in a single directory (spec.containers[*].volumeMounts.mountPath) by merging the manifest layers in the same way as for container images. - The volume will be mounted read-only (ro) and non-executable files (noexec). + The volume will be mounted read-only (ro). Sub path mounts for containers are not supported (spec.containers[*].volumeMounts.subpath) before 1.33. The field spec.securityContext.fsGroupChangePolicy has no effect on this volume type. properties: @@ -8817,8 +8815,7 @@ spec: description: |- portworxVolume represents a portworx volume attached and mounted on kubelets host machine. Deprecated: PortworxVolume is deprecated. All operations for the in-tree portworxVolume type - are redirected to the pxd.portworx.com CSI driver when the CSIMigrationPortworx feature-gate - is on. + are redirected to the pxd.portworx.com CSI driver. properties: fsType: description: |- @@ -9639,6 +9636,7 @@ spec: getConcurrency defines the maximum number of GET requests processed concurrently. This corresponds to the Alertmanager's `--web.get-concurrency` flag. format: int32 + minimum: 0 type: integer httpConfig: description: httpConfig defines HTTP parameters for web server. @@ -9699,6 +9697,7 @@ spec: timeout for HTTP requests. This corresponds to the Alertmanager's `--web.timeout` flag. format: int32 + minimum: 0 type: integer tlsConfig: description: tlsConfig defines the TLS parameters for HTTPS. diff --git a/charts/kube-prometheus-stack/charts/crds/crds/crd-podmonitors.yaml b/charts/kube-prometheus-stack/charts/crds/crds/crd-podmonitors.yaml index 4aec957fe8..e22ec01582 100644 --- a/charts/kube-prometheus-stack/charts/crds/crds/crd-podmonitors.yaml +++ b/charts/kube-prometheus-stack/charts/crds/crds/crd-podmonitors.yaml @@ -1,11 +1,11 @@ -# https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.91.0/example/prometheus-operator-crd/monitoring.coreos.com_podmonitors.yaml +# https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.93.0/example/prometheus-operator-crd/monitoring.coreos.com_podmonitors.yaml --- apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.20.1 - operator.prometheus.io/version: 0.91.0 + controller-gen.kubebuilder.io/version: v0.21.0 + operator.prometheus.io/version: 0.93.0 name: podmonitors.monitoring.coreos.com spec: group: monitoring.coreos.com @@ -68,6 +68,10 @@ spec: The Prometheus service account must have the `list` and `watch` permissions on the `Nodes` objects. + + Node metadata labels are not automatically added to scraped metrics. They are + exposed as `__meta_kubernetes_node_*` labels and can be copied to timeseries + with relabeling configuration. type: boolean type: object bodySizeLimit: @@ -115,6 +119,7 @@ spec: It requires Prometheus >= v2.47.0. format: int64 + minimum: 0 type: integer labelLimit: description: |- @@ -122,6 +127,7 @@ spec: It requires Prometheus >= v2.27.0. format: int64 + minimum: 0 type: integer labelNameLengthLimit: description: |- @@ -129,6 +135,7 @@ spec: It requires Prometheus >= v2.27.0. format: int64 + minimum: 0 type: integer labelValueLengthLimit: description: |- @@ -136,6 +143,7 @@ spec: It requires Prometheus >= v2.27.0. format: int64 + minimum: 0 type: integer namespaceSelector: description: |- @@ -160,6 +168,7 @@ spec: buckets will be merged to stay within the limit. It requires Prometheus >= v2.45.0. format: int64 + minimum: 0 type: integer nativeHistogramMinBucketFactor: anyOf: @@ -396,6 +405,7 @@ spec: Only applicable when the action is `HashMod`. format: int64 + minimum: 0 type: integer regex: description: regex defines the regular expression against @@ -769,7 +779,7 @@ spec: tokenUrl: description: tokenUrl defines the URL to fetch the token from. - minLength: 1 + pattern: ^(http|https)://.+$ type: string required: - clientId @@ -920,6 +930,7 @@ spec: Only applicable when the action is `HashMod`. format: int64 + minimum: 0 type: integer regex: description: regex defines the regular expression against @@ -1176,6 +1187,7 @@ spec: sampleLimit defines a per-scrape limit on the number of scraped samples that will be accepted. format: int64 + minimum: 0 type: integer scrapeClass: description: scrapeClass defines the scrape class to apply. @@ -1283,6 +1295,7 @@ spec: targetLimit defines a limit on the number of scraped targets that will be accepted. format: int64 + minimum: 0 type: integer required: - selector diff --git a/charts/kube-prometheus-stack/charts/crds/crds/crd-probes.yaml b/charts/kube-prometheus-stack/charts/crds/crds/crd-probes.yaml index 3d33af17e3..dcefb3f31c 100644 --- a/charts/kube-prometheus-stack/charts/crds/crds/crd-probes.yaml +++ b/charts/kube-prometheus-stack/charts/crds/crds/crd-probes.yaml @@ -1,11 +1,11 @@ -# https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.91.0/example/prometheus-operator-crd/monitoring.coreos.com_probes.yaml +# https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.93.0/example/prometheus-operator-crd/monitoring.coreos.com_probes.yaml --- apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.20.1 - operator.prometheus.io/version: 0.91.0 + controller-gen.kubebuilder.io/version: v0.21.0 + operator.prometheus.io/version: 0.93.0 name: probes.monitoring.coreos.com spec: group: monitoring.coreos.com @@ -226,24 +226,28 @@ spec: It requires Prometheus >= v2.47.0. format: int64 + minimum: 0 type: integer labelLimit: description: |- labelLimit defines the per-scrape limit on number of labels that will be accepted for a sample. Only valid in Prometheus versions 2.27.0 and newer. format: int64 + minimum: 0 type: integer labelNameLengthLimit: description: |- labelNameLengthLimit defines the per-scrape limit on length of labels name that will be accepted for a sample. Only valid in Prometheus versions 2.27.0 and newer. format: int64 + minimum: 0 type: integer labelValueLengthLimit: description: |- labelValueLengthLimit defines the per-scrape limit on length of labels value that will be accepted for a sample. Only valid in Prometheus versions 2.27.0 and newer. format: int64 + minimum: 0 type: integer metricRelabelings: description: metricRelabelings defines the RelabelConfig to apply @@ -294,6 +298,7 @@ spec: Only applicable when the action is `HashMod`. format: int64 + minimum: 0 type: integer regex: description: regex defines the regular expression against which @@ -345,6 +350,7 @@ spec: buckets will be merged to stay within the limit. It requires Prometheus >= v2.45.0. format: int64 + minimum: 0 type: integer nativeHistogramMinBucketFactor: anyOf: @@ -681,7 +687,7 @@ spec: type: object tokenUrl: description: tokenUrl defines the URL to fetch the token from. - minLength: 1 + pattern: ^(http|https)://.+$ type: string required: - clientId @@ -804,6 +810,7 @@ spec: description: sampleLimit defines per-scrape limit on number of scraped samples that will be accepted. format: int64 + minimum: 0 type: integer scrapeClass: description: scrapeClass defines the scrape class to apply. @@ -858,6 +865,7 @@ spec: description: targetLimit defines a limit on the number of scraped targets that will be accepted. format: int64 + minimum: 0 type: integer targets: description: targets defines a set of static or dynamically discovered @@ -940,6 +948,7 @@ spec: Only applicable when the action is `HashMod`. format: int64 + minimum: 0 type: integer regex: description: regex defines the regular expression against @@ -1090,6 +1099,7 @@ spec: Only applicable when the action is `HashMod`. format: int64 + minimum: 0 type: integer regex: description: regex defines the regular expression against diff --git a/charts/kube-prometheus-stack/charts/crds/crds/crd-prometheusagents.yaml b/charts/kube-prometheus-stack/charts/crds/crds/crd-prometheusagents.yaml index 24a2e74ffa..c7060058e9 100644 --- a/charts/kube-prometheus-stack/charts/crds/crds/crd-prometheusagents.yaml +++ b/charts/kube-prometheus-stack/charts/crds/crds/crd-prometheusagents.yaml @@ -1,11 +1,11 @@ -# https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.91.0/example/prometheus-operator-crd/monitoring.coreos.com_prometheusagents.yaml +# https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.93.0/example/prometheus-operator-crd/monitoring.coreos.com_prometheusagents.yaml --- apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.20.1 - operator.prometheus.io/version: 0.91.0 + controller-gen.kubebuilder.io/version: v0.21.0 + operator.prometheus.io/version: 0.93.0 name: prometheusagents.monitoring.coreos.com spec: group: monitoring.coreos.com @@ -2578,7 +2578,6 @@ spec: procMount denotes the type of proc mount to use for the containers. The default value is Default which uses the container runtime defaults for readonly paths and masked paths. - This requires the ProcMountType feature flag to be enabled. Note that this field cannot be set when spec.os.name is windows. type: string readOnlyRootFilesystem: @@ -3133,6 +3132,7 @@ spec: * Scrape objects with a keepDroppedTargets value less than or equal to enforcedKeepDroppedTargets keep their specific value. * Scrape objects with a keepDroppedTargets value greater than enforcedKeepDroppedTargets are set to enforcedKeepDroppedTargets. format: int64 + minimum: 0 type: integer enforcedLabelLimit: description: |- @@ -3149,6 +3149,7 @@ spec: * Scrape objects with a labelLimit value less than or equal to enforcedLabelLimit keep their specific value. * Scrape objects with a labelLimit value greater than enforcedLabelLimit are set to enforcedLabelLimit. format: int64 + minimum: 0 type: integer enforcedLabelNameLengthLimit: description: |- @@ -3165,6 +3166,7 @@ spec: * Scrape objects with a labelNameLengthLimit value less than or equal to enforcedLabelNameLengthLimit keep their specific value. * Scrape objects with a labelNameLengthLimit value greater than enforcedLabelNameLengthLimit are set to enforcedLabelNameLengthLimit. format: int64 + minimum: 0 type: integer enforcedLabelValueLengthLimit: description: |- @@ -3181,6 +3183,7 @@ spec: * Scrape objects with a labelValueLengthLimit value less than or equal to enforcedLabelValueLengthLimit keep their specific value. * Scrape objects with a labelValueLengthLimit value greater than enforcedLabelValueLengthLimit are set to enforcedLabelValueLengthLimit. format: int64 + minimum: 0 type: integer enforcedNamespaceLabel: description: |- @@ -3214,6 +3217,7 @@ spec: * Scrape objects with a sampleLimit value less than or equal to enforcedSampleLimit keep their specific value. * Scrape objects with a sampleLimit value greater than enforcedSampleLimit are set to enforcedSampleLimit. format: int64 + minimum: 0 type: integer enforcedTargetLimit: description: |- @@ -3231,6 +3235,7 @@ spec: * Scrape objects with a targetLimit value less than or equal to enforcedTargetLimit keep their specific value. * Scrape objects with a targetLimit value greater than enforcedTargetLimit are set to enforcedTargetLimit. format: int64 + minimum: 0 type: integer excludedFromEnforcement: description: |- @@ -4499,7 +4504,6 @@ spec: procMount denotes the type of proc mount to use for the containers. The default value is Default which uses the container runtime defaults for readonly paths and masked paths. - This requires the ProcMountType feature flag to be enabled. Note that this field cannot be set when spec.os.name is windows. type: string readOnlyRootFilesystem: @@ -4932,6 +4936,7 @@ spec: Note that the global limit only applies to scrape objects that don't specify an explicit limit value. If you want to enforce a maximum limit for all scrape objects, refer to enforcedKeepDroppedTargets. format: int64 + minimum: 0 type: integer labelLimit: description: |- @@ -4941,6 +4946,7 @@ spec: Note that the global limit only applies to scrape objects that don't specify an explicit limit value. If you want to enforce a maximum limit for all scrape objects, refer to enforcedLabelLimit. format: int64 + minimum: 0 type: integer labelNameLengthLimit: description: |- @@ -4950,6 +4956,7 @@ spec: Note that the global limit only applies to scrape objects that don't specify an explicit limit value. If you want to enforce a maximum limit for all scrape objects, refer to enforcedLabelNameLengthLimit. format: int64 + minimum: 0 type: integer labelValueLengthLimit: description: |- @@ -4959,6 +4966,7 @@ spec: Note that the global limit only applies to scrape objects that don't specify an explicit limit value. If you want to enforce a maximum limit for all scrape objects, refer to enforcedLabelValueLengthLimit. format: int64 + minimum: 0 type: integer listenLocal: description: |- @@ -5063,6 +5071,26 @@ spec: It requires Prometheus >= v3.1.0. type: boolean + labelNamePreserveMultipleUnderscores: + description: |- + labelNamePreserveMultipleUnderscores enables preserving of multiple consecutive underscores in label names when translation_strategy uses + underscore escaping. + When true (default), multiple consecutive underscores are preserved during label name sanitization. + + Notice: This one has no impact if `nameEscapingScheme` is `AllowUTF8`. + + It requires Prometheus >= v3.8.0. + type: boolean + labelNameUnderscoreSanitization: + description: |- + labelNameUnderscoreSanitization controls whether to enable prepending of 'key_' to labels starting with '_'. + Reserved labels starting with '__' are not modified. + This is only relevant when translation_strategy uses underscore escaping (e.g., "UnderscoreEscapingWithSuffixes" or "UnderscoreEscapingWithoutSuffixes"). + + Notice: This one has no impact if `nameEscapingScheme` is `AllowUTF8`. + + It requires Prometheus >= v3.8.0. + type: boolean promoteAllResourceAttributes: description: |- promoteAllResourceAttributes promotes all resource attributes to metric labels except the ones defined in `ignoreResourceAttributes`. @@ -5740,8 +5768,10 @@ spec: minimum: -1 type: integer send: - description: send defines whether metric metadata is sent - to the remote storage or not. + description: |- + send defines whether metric metadata is sent to the remote storage or not. + + The setting is ignored when Remote Write message's version 2.0 is used. type: boolean sendInterval: description: sendInterval defines how frequently metric @@ -6090,7 +6120,7 @@ spec: tokenUrl: description: tokenUrl defines the URL to fetch the token from. - minLength: 1 + pattern: ^(http|https)://.+$ type: string required: - clientId @@ -6549,6 +6579,7 @@ spec: Only applicable when the action is `HashMod`. format: int64 + minimum: 0 type: integer regex: description: regex defines the regular expression against @@ -6712,6 +6743,7 @@ spec: Note that the global limit only applies to scrape objects that don't specify an explicit limit value. If you want to enforce a maximum limit for all scrape objects, refer to enforcedSampleLimit. format: int64 + minimum: 0 type: integer schedulerName: description: schedulerName defines the scheduler to use for Pod scheduling. @@ -6740,6 +6772,10 @@ spec: The Prometheus service account must have the `list` and `watch` permissions on the `Nodes` objects. + + Node metadata labels are not automatically added to scraped metrics. They are + exposed as `__meta_kubernetes_node_*` labels and can be copied to timeseries + with relabeling configuration. type: boolean type: object authorization: @@ -6860,6 +6896,7 @@ spec: Only applicable when the action is `HashMod`. format: int64 + minimum: 0 type: integer regex: description: regex defines the regular expression against @@ -6959,6 +6996,7 @@ spec: Only applicable when the action is `HashMod`. format: int64 + minimum: 0 type: integer regex: description: regex defines the regular expression against @@ -7793,6 +7831,7 @@ spec: - message: topology can only be defined when mode is set to 'Topology' rule: '!has(self.topology) || (has(self.mode) && self.mode == ''Topology'')' shards: + default: 1 description: |- shards defines the number of shards to distribute the scraped targets onto. @@ -7820,6 +7859,8 @@ spec: You can also disable sharding on a specific target by setting the `__tmp_disable_sharding` label with relabeling configuration. When the label value isn't empty, all Prometheus shards will scrape the target. + + Default: 1 format: int32 type: integer storage: @@ -8539,6 +8580,7 @@ spec: Note that the global limit only applies to scrape objects that don't specify an explicit limit value. If you want to enforce a maximum limit for all scrape objects, refer to enforcedTargetLimit. format: int64 + minimum: 0 type: integer terminationGracePeriodSeconds: description: |- @@ -9009,6 +9051,31 @@ spec: tsdb defines the runtime reloadable configuration of the timeseries database(TSDB). It requires Prometheus >= v2.39.0 or PrometheusAgent >= v2.54.0. properties: + chunkEncoding: + description: |- + chunkEncoding configures per-chunk-type encoding overrides. + + It requires Prometheus >= v3.13.0. + + Notice: Setting "Xor" is incompatible with --enable-feature=st-storage + (XOR chunks do not store start timestamps). + properties: + floats: + description: |- + floats selects the encoding used for float chunks. + Valid values are "Xor" and "Xor2". + + Notice: + * Setting "Xor" is incompatible with --enable-feature=st-storage + (XOR chunks do not store start timestamps). + * Setting "Xor2" automatically adds the `xor2-encoding` feature flag. + + It requires Prometheus >= v3.13.0. + enum: + - Xor + - Xor2 + type: string + type: object outOfOrderTimeWindow: description: |- outOfOrderTimeWindow defines how old an out-of-order/out-of-bounds sample can be with @@ -9023,6 +9090,26 @@ spec: It requires Prometheus >= v2.39.0 or PrometheusAgent >= v2.54.0. pattern: ^(0|(([0-9]+)y)?(([0-9]+)w)?(([0-9]+)d)?(([0-9]+)h)?(([0-9]+)m)?(([0-9]+)s)?(([0-9]+)ms)?)$ type: string + staleSeriesCompactionThreshold: + anyOf: + - type: integer + - type: string + description: |- + staleSeriesCompactionThreshold configures the trigger point for compacting + stale series from memory into persistent blocks and removing those stale + series from memory. + + The threshold is a number between 0.0 and 1.0. It represents the ratio of + stale series in memory to the total series in memory. The stale series + compaction is triggered when this ratio crosses the configured threshold. + It may not trigger the stale series compaction if the usual head compaction + is about to happen soon. + + If set to 0, stale series compaction is disabled. + + It requires Prometheus >= v3.10.0. + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true type: object updateStrategy: description: |- @@ -10063,7 +10150,7 @@ spec: A failure to resolve or pull the image during pod startup will block containers from starting and may add significant latency. Failures will be retried using normal volume backoff and will be reported on the pod reason and message. The types of objects that may be mounted by this volume are defined by the container runtime implementation on a host machine and at minimum must include all valid types supported by the container image field. The OCI object gets mounted in a single directory (spec.containers[*].volumeMounts.mountPath) by merging the manifest layers in the same way as for container images. - The volume will be mounted read-only (ro) and non-executable files (noexec). + The volume will be mounted read-only (ro). Sub path mounts for containers are not supported (spec.containers[*].volumeMounts.subpath) before 1.33. The field spec.securityContext.fsGroupChangePolicy has no effect on this volume type. properties: @@ -10235,8 +10322,7 @@ spec: description: |- portworxVolume represents a portworx volume attached and mounted on kubelets host machine. Deprecated: PortworxVolume is deprecated. All operations for the in-tree portworxVolume type - are redirected to the pxd.portworx.com CSI driver when the CSIMigrationPortworx feature-gate - is on. + are redirected to the pxd.portworx.com CSI driver. properties: fsType: description: |- diff --git a/charts/kube-prometheus-stack/charts/crds/crds/crd-prometheuses.yaml b/charts/kube-prometheus-stack/charts/crds/crds/crd-prometheuses.yaml index 5ffa5ffe18..e3253b0a7d 100644 --- a/charts/kube-prometheus-stack/charts/crds/crds/crd-prometheuses.yaml +++ b/charts/kube-prometheus-stack/charts/crds/crds/crd-prometheuses.yaml @@ -1,11 +1,11 @@ -# https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.91.0/example/prometheus-operator-crd/monitoring.coreos.com_prometheuses.yaml +# https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.93.0/example/prometheus-operator-crd/monitoring.coreos.com_prometheuses.yaml --- apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.20.1 - operator.prometheus.io/version: 0.91.0 + controller-gen.kubebuilder.io/version: v0.21.0 + operator.prometheus.io/version: 0.93.0 name: prometheuses.monitoring.coreos.com spec: group: monitoring.coreos.com @@ -1190,6 +1190,7 @@ spec: Only applicable when the action is `HashMod`. format: int64 + minimum: 0 type: integer regex: description: regex defines the regular expression @@ -1474,6 +1475,7 @@ spec: Only applicable when the action is `HashMod`. format: int64 + minimum: 0 type: integer regex: description: regex defines the regular expression @@ -3338,7 +3340,6 @@ spec: procMount denotes the type of proc mount to use for the containers. The default value is Default which uses the container runtime defaults for readonly paths and masked paths. - This requires the ProcMountType feature flag to be enabled. Note that this field cannot be set when spec.os.name is windows. type: string readOnlyRootFilesystem: @@ -3771,8 +3772,15 @@ spec: disableCompaction: description: |- disableCompaction when true, the Prometheus compaction is disabled. - When `spec.thanos.objectStorageConfig` or `spec.objectStorageConfigFile` are defined, the operator automatically - disables block compaction to avoid race conditions during block uploads (as the Thanos documentation recommends). + + When `spec.thanos.objectStorageConfig` or `spec.thanos.objectStorageConfigFile` are defined, the operator's + default handling depends on the Prometheus and Thanos sidecar versions: + - With Prometheus < v3.9.0 or a Thanos sidecar < v0.41.0, block compaction is disabled to avoid race + conditions during block uploads (as the Thanos documentation recommends). + - With Prometheus >= v3.9.0 and a Thanos sidecar >= v0.41.0, local compaction is kept enabled and coordinated + with the sidecar through the shipper meta file (`--storage.tsdb.delay-compact-file.path`), so blocks are only + compacted after they have been uploaded. + Setting this field to true always disables local compaction regardless of the versions. type: boolean dnsConfig: description: dnsConfig defines the DNS configuration for the pods. @@ -3911,6 +3919,7 @@ spec: * Scrape objects with a keepDroppedTargets value less than or equal to enforcedKeepDroppedTargets keep their specific value. * Scrape objects with a keepDroppedTargets value greater than enforcedKeepDroppedTargets are set to enforcedKeepDroppedTargets. format: int64 + minimum: 0 type: integer enforcedLabelLimit: description: |- @@ -3927,6 +3936,7 @@ spec: * Scrape objects with a labelLimit value less than or equal to enforcedLabelLimit keep their specific value. * Scrape objects with a labelLimit value greater than enforcedLabelLimit are set to enforcedLabelLimit. format: int64 + minimum: 0 type: integer enforcedLabelNameLengthLimit: description: |- @@ -3943,6 +3953,7 @@ spec: * Scrape objects with a labelNameLengthLimit value less than or equal to enforcedLabelNameLengthLimit keep their specific value. * Scrape objects with a labelNameLengthLimit value greater than enforcedLabelNameLengthLimit are set to enforcedLabelNameLengthLimit. format: int64 + minimum: 0 type: integer enforcedLabelValueLengthLimit: description: |- @@ -3959,6 +3970,7 @@ spec: * Scrape objects with a labelValueLengthLimit value less than or equal to enforcedLabelValueLengthLimit keep their specific value. * Scrape objects with a labelValueLengthLimit value greater than enforcedLabelValueLengthLimit are set to enforcedLabelValueLengthLimit. format: int64 + minimum: 0 type: integer enforcedNamespaceLabel: description: |- @@ -3992,6 +4004,7 @@ spec: * Scrape objects with a sampleLimit value less than or equal to enforcedSampleLimit keep their specific value. * Scrape objects with a sampleLimit value greater than enforcedSampleLimit are set to enforcedSampleLimit. format: int64 + minimum: 0 type: integer enforcedTargetLimit: description: |- @@ -4009,6 +4022,7 @@ spec: * Scrape objects with a targetLimit value less than or equal to enforcedTargetLimit keep their specific value. * Scrape objects with a targetLimit value greater than enforcedTargetLimit are set to enforcedTargetLimit. format: int64 + minimum: 0 type: integer evaluationInterval: default: 30s @@ -5301,7 +5315,6 @@ spec: procMount denotes the type of proc mount to use for the containers. The default value is Default which uses the container runtime defaults for readonly paths and masked paths. - This requires the ProcMountType feature flag to be enabled. Note that this field cannot be set when spec.os.name is windows. type: string readOnlyRootFilesystem: @@ -5734,6 +5747,7 @@ spec: Note that the global limit only applies to scrape objects that don't specify an explicit limit value. If you want to enforce a maximum limit for all scrape objects, refer to enforcedKeepDroppedTargets. format: int64 + minimum: 0 type: integer labelLimit: description: |- @@ -5743,6 +5757,7 @@ spec: Note that the global limit only applies to scrape objects that don't specify an explicit limit value. If you want to enforce a maximum limit for all scrape objects, refer to enforcedLabelLimit. format: int64 + minimum: 0 type: integer labelNameLengthLimit: description: |- @@ -5752,6 +5767,7 @@ spec: Note that the global limit only applies to scrape objects that don't specify an explicit limit value. If you want to enforce a maximum limit for all scrape objects, refer to enforcedLabelNameLengthLimit. format: int64 + minimum: 0 type: integer labelValueLengthLimit: description: |- @@ -5761,6 +5777,7 @@ spec: Note that the global limit only applies to scrape objects that don't specify an explicit limit value. If you want to enforce a maximum limit for all scrape objects, refer to enforcedLabelValueLengthLimit. format: int64 + minimum: 0 type: integer listenLocal: description: |- @@ -5856,6 +5873,26 @@ spec: It requires Prometheus >= v3.1.0. type: boolean + labelNamePreserveMultipleUnderscores: + description: |- + labelNamePreserveMultipleUnderscores enables preserving of multiple consecutive underscores in label names when translation_strategy uses + underscore escaping. + When true (default), multiple consecutive underscores are preserved during label name sanitization. + + Notice: This one has no impact if `nameEscapingScheme` is `AllowUTF8`. + + It requires Prometheus >= v3.8.0. + type: boolean + labelNameUnderscoreSanitization: + description: |- + labelNameUnderscoreSanitization controls whether to enable prepending of 'key_' to labels starting with '_'. + Reserved labels starting with '__' are not modified. + This is only relevant when translation_strategy uses underscore escaping (e.g., "UnderscoreEscapingWithSuffixes" or "UnderscoreEscapingWithoutSuffixes"). + + Notice: This one has no impact if `nameEscapingScheme` is `AllowUTF8`. + + It requires Prometheus >= v3.8.0. + type: boolean promoteAllResourceAttributes: description: |- promoteAllResourceAttributes promotes all resource attributes to metric labels except the ones defined in `ignoreResourceAttributes`. @@ -6786,7 +6823,7 @@ spec: tokenUrl: description: tokenUrl defines the URL to fetch the token from. - minLength: 1 + pattern: ^(http|https)://.+$ type: string required: - clientId @@ -7034,7 +7071,11 @@ spec: type: string type: object url: - description: url defines the URL of the endpoint to query from. + description: |- + url defines the URL of the endpoint to query from. + + It must use the HTTP or HTTPS scheme. + pattern: ^(http|https)://.+$ type: string required: - url @@ -7339,8 +7380,10 @@ spec: minimum: -1 type: integer send: - description: send defines whether metric metadata is sent - to the remote storage or not. + description: |- + send defines whether metric metadata is sent to the remote storage or not. + + The setting is ignored when Remote Write message's version 2.0 is used. type: boolean sendInterval: description: sendInterval defines how frequently metric @@ -7689,7 +7732,7 @@ spec: tokenUrl: description: tokenUrl defines the URL to fetch the token from. - minLength: 1 + pattern: ^(http|https)://.+$ type: string required: - clientId @@ -8148,6 +8191,7 @@ spec: Only applicable when the action is `HashMod`. format: int64 + minimum: 0 type: integer regex: description: regex defines the regular expression against @@ -8456,6 +8500,7 @@ spec: Note that the global limit only applies to scrape objects that don't specify an explicit limit value. If you want to enforce a maximum limit for all scrape objects, refer to enforcedSampleLimit. format: int64 + minimum: 0 type: integer schedulerName: description: schedulerName defines the scheduler to use for Pod scheduling. @@ -8484,6 +8529,10 @@ spec: The Prometheus service account must have the `list` and `watch` permissions on the `Nodes` objects. + + Node metadata labels are not automatically added to scraped metrics. They are + exposed as `__meta_kubernetes_node_*` labels and can be copied to timeseries + with relabeling configuration. type: boolean type: object authorization: @@ -8604,6 +8653,7 @@ spec: Only applicable when the action is `HashMod`. format: int64 + minimum: 0 type: integer regex: description: regex defines the regular expression against @@ -8703,6 +8753,7 @@ spec: Only applicable when the action is `HashMod`. format: int64 + minimum: 0 type: integer regex: description: regex defines the regular expression against @@ -9495,11 +9546,8 @@ spec: shardRetentionPolicy: description: |- shardRetentionPolicy defines the retention policy for the Prometheus shards. - (Alpha) Using this field requires the 'PrometheusShardRetentionPolicy' feature gate to be enabled. - The final goals for this feature can be seen at https://github.com/prometheus-operator/prometheus-operator/blob/main/Documentation/proposals/202310-shard-autoscaling.md#graceful-scale-down-of-prometheus-servers, - however, the feature is not yet fully implemented in this PR. The limitation being: - * Retention duration is not settable, for now, shards are retained forever. + (Beta) Using this mode requires the `PrometheusShardRetentionPolicy` feature gate (enabled by default). properties: retain: description: |- @@ -9580,6 +9628,7 @@ spec: - message: topology can only be defined when mode is set to 'Topology' rule: '!has(self.topology) || (has(self.mode) && self.mode == ''Topology'')' shards: + default: 1 description: |- shards defines the number of shards to distribute the scraped targets onto. @@ -9607,6 +9656,8 @@ spec: You can also disable sharding on a specific target by setting the `__tmp_disable_sharding` label with relabeling configuration. When the label value isn't empty, all Prometheus shards will scrape the target. + + Default: 1 format: int32 type: integer storage: @@ -10330,6 +10381,7 @@ spec: Note that the global limit only applies to scrape objects that don't specify an explicit limit value. If you want to enforce a maximum limit for all scrape objects, refer to enforcedTargetLimit. format: int64 + minimum: 0 type: integer terminationGracePeriodSeconds: description: |- @@ -11352,6 +11404,31 @@ spec: tsdb defines the runtime reloadable configuration of the timeseries database(TSDB). It requires Prometheus >= v2.39.0 or PrometheusAgent >= v2.54.0. properties: + chunkEncoding: + description: |- + chunkEncoding configures per-chunk-type encoding overrides. + + It requires Prometheus >= v3.13.0. + + Notice: Setting "Xor" is incompatible with --enable-feature=st-storage + (XOR chunks do not store start timestamps). + properties: + floats: + description: |- + floats selects the encoding used for float chunks. + Valid values are "Xor" and "Xor2". + + Notice: + * Setting "Xor" is incompatible with --enable-feature=st-storage + (XOR chunks do not store start timestamps). + * Setting "Xor2" automatically adds the `xor2-encoding` feature flag. + + It requires Prometheus >= v3.13.0. + enum: + - Xor + - Xor2 + type: string + type: object outOfOrderTimeWindow: description: |- outOfOrderTimeWindow defines how old an out-of-order/out-of-bounds sample can be with @@ -11366,6 +11443,26 @@ spec: It requires Prometheus >= v2.39.0 or PrometheusAgent >= v2.54.0. pattern: ^(0|(([0-9]+)y)?(([0-9]+)w)?(([0-9]+)d)?(([0-9]+)h)?(([0-9]+)m)?(([0-9]+)s)?(([0-9]+)ms)?)$ type: string + staleSeriesCompactionThreshold: + anyOf: + - type: integer + - type: string + description: |- + staleSeriesCompactionThreshold configures the trigger point for compacting + stale series from memory into persistent blocks and removing those stale + series from memory. + + The threshold is a number between 0.0 and 1.0. It represents the ratio of + stale series in memory to the total series in memory. The stale series + compaction is triggered when this ratio crosses the configured threshold. + It may not trigger the stale series compaction if the usual head compaction + is about to happen soon. + + If set to 0, stale series compaction is disabled. + + It requires Prometheus >= v3.10.0. + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true type: object updateStrategy: description: |- @@ -12406,7 +12503,7 @@ spec: A failure to resolve or pull the image during pod startup will block containers from starting and may add significant latency. Failures will be retried using normal volume backoff and will be reported on the pod reason and message. The types of objects that may be mounted by this volume are defined by the container runtime implementation on a host machine and at minimum must include all valid types supported by the container image field. The OCI object gets mounted in a single directory (spec.containers[*].volumeMounts.mountPath) by merging the manifest layers in the same way as for container images. - The volume will be mounted read-only (ro) and non-executable files (noexec). + The volume will be mounted read-only (ro). Sub path mounts for containers are not supported (spec.containers[*].volumeMounts.subpath) before 1.33. The field spec.securityContext.fsGroupChangePolicy has no effect on this volume type. properties: @@ -12578,8 +12675,7 @@ spec: description: |- portworxVolume represents a portworx volume attached and mounted on kubelets host machine. Deprecated: PortworxVolume is deprecated. All operations for the in-tree portworxVolume type - are redirected to the pxd.portworx.com CSI driver when the CSIMigrationPortworx feature-gate - is on. + are redirected to the pxd.portworx.com CSI driver. properties: fsType: description: |- diff --git a/charts/kube-prometheus-stack/charts/crds/crds/crd-prometheusrules.yaml b/charts/kube-prometheus-stack/charts/crds/crds/crd-prometheusrules.yaml index c3ba91a4c3..63cd2bcf90 100644 --- a/charts/kube-prometheus-stack/charts/crds/crds/crd-prometheusrules.yaml +++ b/charts/kube-prometheus-stack/charts/crds/crds/crd-prometheusrules.yaml @@ -1,11 +1,11 @@ -# https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.91.0/example/prometheus-operator-crd/monitoring.coreos.com_prometheusrules.yaml +# https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.93.0/example/prometheus-operator-crd/monitoring.coreos.com_prometheusrules.yaml --- apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.20.1 - operator.prometheus.io/version: 0.91.0 + controller-gen.kubebuilder.io/version: v0.21.0 + operator.prometheus.io/version: 0.93.0 name: prometheusrules.monitoring.coreos.com spec: group: monitoring.coreos.com diff --git a/charts/kube-prometheus-stack/charts/crds/crds/crd-scrapeconfigs.yaml b/charts/kube-prometheus-stack/charts/crds/crds/crd-scrapeconfigs.yaml index 25ab35da4a..48df61dcf8 100644 --- a/charts/kube-prometheus-stack/charts/crds/crds/crd-scrapeconfigs.yaml +++ b/charts/kube-prometheus-stack/charts/crds/crds/crd-scrapeconfigs.yaml @@ -1,11 +1,11 @@ -# https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.91.0/example/prometheus-operator-crd/monitoring.coreos.com_scrapeconfigs.yaml +# https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.93.0/example/prometheus-operator-crd/monitoring.coreos.com_scrapeconfigs.yaml --- apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.20.1 - operator.prometheus.io/version: 0.91.0 + controller-gen.kubebuilder.io/version: v0.21.0 + operator.prometheus.io/version: 0.93.0 name: scrapeconfigs.monitoring.coreos.com spec: group: monitoring.coreos.com @@ -574,7 +574,7 @@ spec: tokenUrl: description: tokenUrl defines the URL to fetch the token from. - minLength: 1 + pattern: ^(http|https)://.+$ type: string required: - clientId @@ -1376,7 +1376,7 @@ spec: tokenUrl: description: tokenUrl defines the URL to fetch the token from. - minLength: 1 + pattern: ^(http|https)://.+$ type: string required: - clientId @@ -2067,7 +2067,7 @@ spec: tokenUrl: description: tokenUrl defines the URL to fetch the token from. - minLength: 1 + pattern: ^(http|https)://.+$ type: string required: - clientId @@ -2836,7 +2836,7 @@ spec: tokenUrl: description: tokenUrl defines the URL to fetch the token from. - minLength: 1 + pattern: ^(http|https)://.+$ type: string required: - clientId @@ -3550,7 +3550,7 @@ spec: tokenUrl: description: tokenUrl defines the URL to fetch the token from. - minLength: 1 + pattern: ^(http|https)://.+$ type: string required: - clientId @@ -4597,7 +4597,7 @@ spec: tokenUrl: description: tokenUrl defines the URL to fetch the token from. - minLength: 1 + pattern: ^(http|https)://.+$ type: string required: - clientId @@ -5381,7 +5381,7 @@ spec: tokenUrl: description: tokenUrl defines the URL to fetch the token from. - minLength: 1 + pattern: ^(http|https)://.+$ type: string required: - clientId @@ -6080,7 +6080,7 @@ spec: tokenUrl: description: tokenUrl defines the URL to fetch the token from. - minLength: 1 + pattern: ^(http|https)://.+$ type: string required: - clientId @@ -6703,7 +6703,7 @@ spec: tokenUrl: description: tokenUrl defines the URL to fetch the token from. - minLength: 1 + pattern: ^(http|https)://.+$ type: string required: - clientId @@ -6956,6 +6956,7 @@ spec: It requires Prometheus >= v2.47.0. format: int64 + minimum: 0 type: integer kubernetesSDConfigs: description: kubernetesSDConfigs defines a list of Kubernetes service @@ -7440,7 +7441,7 @@ spec: tokenUrl: description: tokenUrl defines the URL to fetch the token from. - minLength: 1 + pattern: ^(http|https)://.+$ type: string required: - clientId @@ -8165,7 +8166,7 @@ spec: tokenUrl: description: tokenUrl defines the URL to fetch the token from. - minLength: 1 + pattern: ^(http|https)://.+$ type: string required: - clientId @@ -8404,18 +8405,21 @@ spec: labelLimit defines the per-scrape limit on number of labels that will be accepted for a sample. Only valid in Prometheus versions 2.27.0 and newer. format: int64 + minimum: 0 type: integer labelNameLengthLimit: description: |- labelNameLengthLimit defines the per-scrape limit on length of labels name that will be accepted for a sample. Only valid in Prometheus versions 2.27.0 and newer. format: int64 + minimum: 0 type: integer labelValueLengthLimit: description: |- labelValueLengthLimit defines the per-scrape limit on length of labels value that will be accepted for a sample. Only valid in Prometheus versions 2.27.0 and newer. format: int64 + minimum: 0 type: integer lightSailSDConfigs: description: lightSailSDConfigs defines a list of Lightsail service @@ -8888,7 +8892,7 @@ spec: tokenUrl: description: tokenUrl defines the URL to fetch the token from. - minLength: 1 + pattern: ^(http|https)://.+$ type: string required: - clientId @@ -9540,7 +9544,7 @@ spec: tokenUrl: description: tokenUrl defines the URL to fetch the token from. - minLength: 1 + pattern: ^(http|https)://.+$ type: string required: - clientId @@ -9832,6 +9836,7 @@ spec: Only applicable when the action is `HashMod`. format: int64 + minimum: 0 type: integer regex: description: regex defines the regular expression against which @@ -9903,6 +9908,7 @@ spec: buckets will be merged to stay within the limit. It requires Prometheus >= v2.45.0. format: int64 + minimum: 0 type: integer nativeHistogramMinBucketFactor: anyOf: @@ -10374,7 +10380,7 @@ spec: tokenUrl: description: tokenUrl defines the URL to fetch the token from. - minLength: 1 + pattern: ^(http|https)://.+$ type: string required: - clientId @@ -10942,7 +10948,7 @@ spec: type: object tokenUrl: description: tokenUrl defines the URL to fetch the token from. - minLength: 1 + pattern: ^(http|https)://.+$ type: string required: - clientId @@ -11872,7 +11878,7 @@ spec: tokenUrl: description: tokenUrl defines the URL to fetch the token from. - minLength: 1 + pattern: ^(http|https)://.+$ type: string required: - clientId @@ -12172,6 +12178,7 @@ spec: Only applicable when the action is `HashMod`. format: int64 + minimum: 0 type: integer regex: description: regex defines the regular expression against which @@ -12216,6 +12223,7 @@ spec: description: sampleLimit defines per-scrape limit on number of scraped samples that will be accepted. format: int64 + minimum: 0 type: integer scalewaySDConfigs: description: scalewaySDConfigs defines a list of Scaleway instances @@ -12636,6 +12644,7 @@ spec: description: targetLimit defines a limit on the number of scraped targets that will be accepted. format: int64 + minimum: 0 type: integer tlsConfig: description: tlsConfig defines the TLS configuration to use on every diff --git a/charts/kube-prometheus-stack/charts/crds/crds/crd-servicemonitors.yaml b/charts/kube-prometheus-stack/charts/crds/crds/crd-servicemonitors.yaml index a8f208f0c7..84e685e525 100644 --- a/charts/kube-prometheus-stack/charts/crds/crds/crd-servicemonitors.yaml +++ b/charts/kube-prometheus-stack/charts/crds/crds/crd-servicemonitors.yaml @@ -1,11 +1,11 @@ -# https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.91.0/example/prometheus-operator-crd/monitoring.coreos.com_servicemonitors.yaml +# https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.93.0/example/prometheus-operator-crd/monitoring.coreos.com_servicemonitors.yaml --- apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.20.1 - operator.prometheus.io/version: 0.91.0 + controller-gen.kubebuilder.io/version: v0.21.0 + operator.prometheus.io/version: 0.93.0 name: servicemonitors.monitoring.coreos.com spec: group: monitoring.coreos.com @@ -69,6 +69,10 @@ spec: The Prometheus service account must have the `list` and `watch` permissions on the `Nodes` objects. + + Node metadata labels are not automatically added to scraped metrics. They are + exposed as `__meta_kubernetes_node_*` labels and can be copied to timeseries + with relabeling configuration. type: boolean type: object bodySizeLimit: @@ -317,6 +321,7 @@ spec: Only applicable when the action is `HashMod`. format: int64 + minimum: 0 type: integer regex: description: regex defines the regular expression against @@ -690,7 +695,7 @@ spec: tokenUrl: description: tokenUrl defines the URL to fetch the token from. - minLength: 1 + pattern: ^(http|https)://.+$ type: string required: - clientId @@ -712,7 +717,8 @@ spec: type: string port: description: |- - port defines the name of the Service port which this endpoint refers to. + port defines the name of the Service port which this endpoint refers to + (e.g. `.spec.ports[].name`). It takes precedence over `targetPort`. type: string @@ -816,6 +822,7 @@ spec: Only applicable when the action is `HashMod`. format: int64 + minimum: 0 type: integer regex: description: regex defines the regular expression against @@ -878,8 +885,10 @@ spec: - type: integer - type: string description: |- - targetPort defines the name or number of the target port of the `Pod` object behind the - Service. The port must be specified with the container's port property. + targetPort defines the name or number of a container port on Pods selected + by the Service. + If a name, it matches against `.spec.containers[].ports[].name` of the Pods. + If a number, it matches against `.spec.containers[].ports[].containerPort` of the Pods. x-kubernetes-int-or-string: true tlsConfig: description: tlsConfig defines TLS configuration used by the @@ -1103,6 +1112,7 @@ spec: It requires Prometheus >= v2.47.0. format: int64 + minimum: 0 type: integer labelLimit: description: |- @@ -1110,6 +1120,7 @@ spec: It requires Prometheus >= v2.27.0. format: int64 + minimum: 0 type: integer labelNameLengthLimit: description: |- @@ -1117,6 +1128,7 @@ spec: It requires Prometheus >= v2.27.0. format: int64 + minimum: 0 type: integer labelValueLengthLimit: description: |- @@ -1124,6 +1136,7 @@ spec: It requires Prometheus >= v2.27.0. format: int64 + minimum: 0 type: integer namespaceSelector: description: |- @@ -1148,6 +1161,7 @@ spec: buckets will be merged to stay within the limit. It requires Prometheus >= v2.45.0. format: int64 + minimum: 0 type: integer nativeHistogramMinBucketFactor: anyOf: @@ -1171,6 +1185,7 @@ spec: sampleLimit defines a per-scrape limit on the number of scraped samples that will be accepted. format: int64 + minimum: 0 type: integer scrapeClass: description: scrapeClass defines the scrape class to apply. @@ -1296,6 +1311,7 @@ spec: targetLimit defines a limit on the number of scraped targets that will be accepted. format: int64 + minimum: 0 type: integer required: - endpoints diff --git a/charts/kube-prometheus-stack/charts/crds/crds/crd-thanosrulers.yaml b/charts/kube-prometheus-stack/charts/crds/crds/crd-thanosrulers.yaml index 0f83c12484..89ba00f8c5 100644 --- a/charts/kube-prometheus-stack/charts/crds/crds/crd-thanosrulers.yaml +++ b/charts/kube-prometheus-stack/charts/crds/crds/crd-thanosrulers.yaml @@ -1,11 +1,11 @@ -# https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.91.0/example/prometheus-operator-crd/monitoring.coreos.com_thanosrulers.yaml +# https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.93.0/example/prometheus-operator-crd/monitoring.coreos.com_thanosrulers.yaml --- apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.20.1 - operator.prometheus.io/version: 0.91.0 + controller-gen.kubebuilder.io/version: v0.21.0 + operator.prometheus.io/version: 0.93.0 name: thanosrulers.monitoring.coreos.com spec: group: monitoring.coreos.com @@ -2231,7 +2231,6 @@ spec: procMount denotes the type of proc mount to use for the containers. The default value is Default which uses the container runtime defaults for readonly paths and masked paths. - This requires the ProcMountType feature flag to be enabled. Note that this field cannot be set when spec.os.name is windows. type: string readOnlyRootFilesystem: @@ -4174,7 +4173,6 @@ spec: procMount denotes the type of proc mount to use for the containers. The default value is Default which uses the container runtime defaults for readonly paths and masked paths. - This requires the ProcMountType feature flag to be enabled. Note that this field cannot be set when spec.os.name is windows. type: string readOnlyRootFilesystem: @@ -5120,8 +5118,10 @@ spec: minimum: -1 type: integer send: - description: send defines whether metric metadata is sent - to the remote storage or not. + description: |- + send defines whether metric metadata is sent to the remote storage or not. + + The setting is ignored when Remote Write message's version 2.0 is used. type: boolean sendInterval: description: sendInterval defines how frequently metric @@ -5470,7 +5470,7 @@ spec: tokenUrl: description: tokenUrl defines the URL to fetch the token from. - minLength: 1 + pattern: ^(http|https)://.+$ type: string required: - clientId @@ -5929,6 +5929,7 @@ spec: Only applicable when the action is `HashMod`. format: int64 + minimum: 0 type: integer regex: description: regex defines the regular expression against @@ -8446,7 +8447,7 @@ spec: A failure to resolve or pull the image during pod startup will block containers from starting and may add significant latency. Failures will be retried using normal volume backoff and will be reported on the pod reason and message. The types of objects that may be mounted by this volume are defined by the container runtime implementation on a host machine and at minimum must include all valid types supported by the container image field. The OCI object gets mounted in a single directory (spec.containers[*].volumeMounts.mountPath) by merging the manifest layers in the same way as for container images. - The volume will be mounted read-only (ro) and non-executable files (noexec). + The volume will be mounted read-only (ro). Sub path mounts for containers are not supported (spec.containers[*].volumeMounts.subpath) before 1.33. The field spec.securityContext.fsGroupChangePolicy has no effect on this volume type. properties: @@ -8618,8 +8619,7 @@ spec: description: |- portworxVolume represents a portworx volume attached and mounted on kubelets host machine. Deprecated: PortworxVolume is deprecated. All operations for the in-tree portworxVolume type - are redirected to the pxd.portworx.com CSI driver when the CSIMigrationPortworx feature-gate - is on. + are redirected to the pxd.portworx.com CSI driver. properties: fsType: description: |- diff --git a/charts/kube-prometheus-stack/charts/crds/files/crds.bz2 b/charts/kube-prometheus-stack/charts/crds/files/crds.bz2 index b038b68d551bda60bbc12719239a43dcf03b3f2b..c2b6b826d904f998029a431dbb98e57eb68bf173 100644 GIT binary patch literal 201063 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

3={<-wanLon?RGCtg$eVqIR!|Aen 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�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ŧVWwxjHNm3<1qb0g zo4Ev6M=Fx-US61|xt=U`g_QSy&f9gHwunY6K$ZR(^u{+6aEVMKp<}1|d!Ey3w-zzI za|1Xl{kx&~q+tFNr_bL?J2^tjXDoDP6t-JtZ`)xVVk{0EI__K;xBC99IP+bL-LRa3 z7XYM)fA~`oM*Z|D_Iaau)}NJktXmE~{l0W;NphHe`CKfV*AZello?wf$r)dfclnZ6 z^+l|*AY)YO_&eO8Ca%lztJy5Zq-^39ZYR#ir:px^v)D0{3)(zCdAmtdd?u*>)* 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

AD{E7~3*FZ%boT?@ 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%0DF=Vvy{!^-9aBtdBtReNa$WsvH&38 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�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

0(%Wi5$VxaD>wcutQFtLO3#a>sA1 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 M$rRy2LASF0e1LK#x&QzG diff --git a/charts/kube-prometheus-stack/charts/grafana/Chart.yaml b/charts/kube-prometheus-stack/charts/grafana/Chart.yaml index e43268d116..8bd8a91d30 100644 --- a/charts/kube-prometheus-stack/charts/grafana/Chart.yaml +++ b/charts/kube-prometheus-stack/charts/grafana/Chart.yaml @@ -6,7 +6,7 @@ annotations: - name: Upstream Project url: https://github.com/grafana/grafana apiVersion: v2 -appVersion: 13.0.2 +appVersion: 13.1.2 description: The leading tool for querying and visualizing time series and metrics. home: https://grafana.com icon: https://artifacthub.io/image/b4fed1a7-6c8f-4945-b99d-096efa3e4116 @@ -26,4 +26,4 @@ sources: - https://github.com/grafana/grafana - https://github.com/grafana-community/helm-charts type: application -version: 12.4.8 +version: 12.10.3 diff --git a/charts/kube-prometheus-stack/charts/grafana/README.md b/charts/kube-prometheus-stack/charts/grafana/README.md index e36149a97c..af3a7090ae 100644 --- a/charts/kube-prometheus-stack/charts/grafana/README.md +++ b/charts/kube-prometheus-stack/charts/grafana/README.md @@ -86,6 +86,8 @@ Grafana 13 is configured by default. Grafana 13 explicit requires an image rende ## Configuration +Grafana is primarily configured through `grafana.ini`. The `grafana.ini` key in `values.yaml` maps directly to the Grafana configuration file and supports all settings documented in the [official Grafana configuration reference](https://grafana.com/docs/grafana/latest/setup-grafana/configure-grafana/). + ### Example ingress with path With grafana 6.3 and above diff --git a/charts/kube-prometheus-stack/charts/grafana/templates/_pod.tpl b/charts/kube-prometheus-stack/charts/grafana/templates/_pod.tpl index 7418700998..917a68e80b 100644 --- a/charts/kube-prometheus-stack/charts/grafana/templates/_pod.tpl +++ b/charts/kube-prometheus-stack/charts/grafana/templates/_pod.tpl @@ -1522,6 +1522,10 @@ containers: {{- end }} {{- end }} {{- end }} + {{- with .Values.startupProbe }} + startupProbe: + {{- toYaml . | nindent 6 }} + {{- end }} {{- with .Values.livenessProbe }} livenessProbe: {{- toYaml . | nindent 6 }} diff --git a/charts/kube-prometheus-stack/charts/grafana/templates/statefulset.yaml b/charts/kube-prometheus-stack/charts/grafana/templates/statefulset.yaml index 3262838390..2a2548cf4d 100644 --- a/charts/kube-prometheus-stack/charts/grafana/templates/statefulset.yaml +++ b/charts/kube-prometheus-stack/charts/grafana/templates/statefulset.yaml @@ -17,6 +17,12 @@ spec: matchLabels: {{- include "grafana.selectorLabels" . | nindent 6 }} serviceName: {{ include "grafana.fullname" . }}-headless + {{- if .Values.persistence.enabled }} + {{- with .Values.persistence.persistentVolumeClaimRetentionPolicy }} + persistentVolumeClaimRetentionPolicy: + {{- toYaml . | nindent 4 }} + {{- end }} + {{- end }} template: metadata: labels: diff --git a/charts/kube-prometheus-stack/charts/grafana/values.yaml b/charts/kube-prometheus-stack/charts/grafana/values.yaml index 211b4061a4..9c25a4f76b 100644 --- a/charts/kube-prometheus-stack/charts/grafana/values.yaml +++ b/charts/kube-prometheus-stack/charts/grafana/values.yaml @@ -83,6 +83,10 @@ deploymentStrategy: ## ref: https://kubernetes.io/docs/concepts/workloads/controllers/deployment/#progress-deadline-seconds progressDeadlineSeconds: null +## Startup probe. Holds off the liveness and readiness probes until it succeeds, useful for slow starts. +## ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/ +startupProbe: {} + readinessProbe: httpGet: path: /api/health @@ -129,7 +133,7 @@ testFramework: # -- The Docker registry registry: docker.io repository: bats/bats - tag: "1.13.0" + tag: "1.14.0" imagePullPolicy: IfNotPresent securityContext: {} containerSecurityContext: {} @@ -204,7 +208,7 @@ downloadDashboardsImage: # -- The Docker registry registry: docker.io repository: curlimages/curl - tag: 8.20.0 + tag: 8.21.0 sha: "" pullPolicy: IfNotPresent @@ -502,6 +506,12 @@ persistence: ## Extra labels to apply to a PVC. extraPvcLabels: {} disableWarning: false + ## Configure StatefulSet persistent volume claim retention policy. + ## This is ignored when Grafana is configured to use a Deployment with a PVC. + ## By default, Kubernetes uses Retain for both whenDeleted and whenScaled. + persistentVolumeClaimRetentionPolicy: {} + # whenDeleted: Retain + # whenScaled: Retain ## If persistence is not enabled, this allows to mount the ## local storage in-memory to improve performance @@ -1032,7 +1042,7 @@ sidecar: # -- The Docker registry registry: quay.io repository: kiwigrid/k8s-sidecar - tag: 2.7.3 + tag: 2.10.1 sha: "" imagePullPolicy: IfNotPresent resources: {} diff --git a/charts/kube-prometheus-stack/charts/kube-state-metrics/Chart.yaml b/charts/kube-prometheus-stack/charts/kube-state-metrics/Chart.yaml index 091c07487f..61d337d963 100644 --- a/charts/kube-prometheus-stack/charts/kube-state-metrics/Chart.yaml +++ b/charts/kube-prometheus-stack/charts/kube-state-metrics/Chart.yaml @@ -22,8 +22,11 @@ maintainers: - email: david@0xdc.me name: dotdc url: https://github.com/dotdc +- email: git@gaiser.bayern + name: sebastiangaiser + url: https://github.com/sebastiangaiser name: kube-state-metrics sources: - https://github.com/kubernetes/kube-state-metrics/ type: application -version: 7.5.1 +version: 8.1.3 diff --git a/charts/kube-prometheus-stack/charts/kube-state-metrics/README.md b/charts/kube-prometheus-stack/charts/kube-state-metrics/README.md index 9348d4c0ba..89fa3bf30d 100644 --- a/charts/kube-prometheus-stack/charts/kube-state-metrics/README.md +++ b/charts/kube-prometheus-stack/charts/kube-state-metrics/README.md @@ -45,6 +45,11 @@ You can upgrade in-place: 1. [upgrade](#upgrading-chart) your existing release name using the new chart repository +## Upgrading to v8.0.0 + +This version drops support for configuring `CiliumNetworkPolicy` as it is a vendor specific resource. +In addition, the `networkPolicy.flavor` setting is no longer persistent and can be safely dropped as only Kubernetes `NetworkPolicy` resources are supported. + ## Upgrading to v6.0.0 This version drops support for deprecated Pod Security Policy resources. @@ -85,3 +90,9 @@ rules: ``` See [kube-rbac-proxy examples](https://github.com/brancz/kube-rbac-proxy/tree/master/examples/resource-attributes) for more details. + +### auth-filter + +As an alternative to `kube-rbac-proxy`, `kube-state-metrics` can authenticate and authorize requests itself using its built-in `--auth-filter`. Set `authFilter.enabled: true` to add the `--auth-filter` flag and the `create` permissions on `tokenreviews` and `subjectaccessreviews` that the filter requires. + +Scrapers must then authenticate (for example via a `ServiceAccount` token) and be authorized to `get` the `kube-state-metrics` service. See the upstream [Authentication / Authorization](https://github.com/kubernetes/kube-state-metrics/blob/main/docs/README.md#protecting-metrics-endpoints) documentation for the scraper-side `ClusterRole` and `ClusterRoleBinding`. diff --git a/charts/kube-prometheus-stack/charts/kube-state-metrics/ci/01-default-values.yaml b/charts/kube-prometheus-stack/charts/kube-state-metrics/ci/01-default-values.yaml new file mode 100644 index 0000000000..fc2ba605ad --- /dev/null +++ b/charts/kube-prometheus-stack/charts/kube-state-metrics/ci/01-default-values.yaml @@ -0,0 +1 @@ +# Leave this file empty to ensure that CI runs builds against the default configuration in values.yaml. diff --git a/charts/kube-prometheus-stack/charts/kube-state-metrics/ci/02-custom-resource-state-only-values.yaml b/charts/kube-prometheus-stack/charts/kube-state-metrics/ci/02-custom-resource-state-only-values.yaml new file mode 100644 index 0000000000..dcac778d30 --- /dev/null +++ b/charts/kube-prometheus-stack/charts/kube-state-metrics/ci/02-custom-resource-state-only-values.yaml @@ -0,0 +1,21 @@ +collectors: [] +extraArgs: + - --custom-resource-state-only=true +customResourceState: + enabled: true + config: + spec: + resources: + - groupVersionKind: + group: apiextensions.k8s.io + version: v1 + kind: CustomResourceDefinition + metricNamePrefix: ksm_ci_crd + metrics: + - name: info + help: Info metric for CustomResourceDefinition objects. + each: + type: Info + info: + labelsFromPath: + name: [metadata, name] diff --git a/charts/kube-prometheus-stack/charts/kube-state-metrics/ci/03-servicemonitor-values.yaml b/charts/kube-prometheus-stack/charts/kube-state-metrics/ci/03-servicemonitor-values.yaml new file mode 100644 index 0000000000..bfbaa1a716 --- /dev/null +++ b/charts/kube-prometheus-stack/charts/kube-state-metrics/ci/03-servicemonitor-values.yaml @@ -0,0 +1,19 @@ +prometheus: + monitor: + enabled: true + additionalLabels: + release: prometheus + jobLabel: app.kubernetes.io/name + targetLabels: + - app.kubernetes.io/name + http: + interval: 30s + scrapeTimeout: 10s + honorLabels: true + relabelings: + - sourceLabels: [__meta_kubernetes_pod_node_name] + targetLabel: node + metricRelabelings: + - sourceLabels: [__name__] + regex: kube_pod_status_phase + action: keep diff --git a/charts/kube-prometheus-stack/charts/kube-state-metrics/ci/04-self-monitor-values.yaml b/charts/kube-prometheus-stack/charts/kube-state-metrics/ci/04-self-monitor-values.yaml new file mode 100644 index 0000000000..40ed04fb58 --- /dev/null +++ b/charts/kube-prometheus-stack/charts/kube-state-metrics/ci/04-self-monitor-values.yaml @@ -0,0 +1,9 @@ +selfMonitor: + enabled: true +prometheus: + monitor: + enabled: true + metrics: + interval: 30s + scrapeTimeout: 10s + honorLabels: true diff --git a/charts/kube-prometheus-stack/charts/kube-state-metrics/templates/_helpers.tpl b/charts/kube-prometheus-stack/charts/kube-state-metrics/templates/_helpers.tpl index c8cfa56b6d..e1eafbe24d 100644 --- a/charts/kube-prometheus-stack/charts/kube-state-metrics/templates/_helpers.tpl +++ b/charts/kube-prometheus-stack/charts/kube-state-metrics/templates/_helpers.tpl @@ -155,6 +155,32 @@ The image to use for kube-state-metrics {{- end }} {{- end }} +{{/* +Compute the effective collectors list from collectors, collectorsExclude, and collectorsExtra. +*/}} +{{- define "kube-state-metrics.collectors" -}} +{{- $exclude := .Values.collectorsExclude | default (list) }} +{{- if kindIs "string" $exclude }} +{{- $exclude = list $exclude }} +{{- end }} +{{- $collectors := .Values.collectors | default (list) }} +{{- if kindIs "string" $collectors }} +{{- $collectors = list $collectors }} +{{- end }} +{{- $extra := .Values.collectorsExtra | default (list) }} +{{- if kindIs "string" $extra }} +{{- $extra = list $extra }} +{{- end }} +{{- $final := list }} +{{- range $collectors }} +{{- if not (has . $exclude) }} +{{- $final = append $final . }} +{{- end }} +{{- end }} +{{- $final = concat $final $extra | mustUniq }} +{{- toYaml $final | nindent 0 -}} +{{- end -}} + {{/* The image to use for kubeRBACProxy */}} diff --git a/charts/kube-prometheus-stack/charts/kube-state-metrics/templates/ciliumnetworkpolicy.yaml b/charts/kube-prometheus-stack/charts/kube-state-metrics/templates/ciliumnetworkpolicy.yaml deleted file mode 100644 index 025cd47a88..0000000000 --- a/charts/kube-prometheus-stack/charts/kube-state-metrics/templates/ciliumnetworkpolicy.yaml +++ /dev/null @@ -1,33 +0,0 @@ -{{- if and .Values.networkPolicy.enabled (eq .Values.networkPolicy.flavor "cilium") }} -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - {{- if .Values.annotations }} - annotations: - {{ toYaml .Values.annotations | nindent 4 }} - {{- end }} - labels: - {{- include "kube-state-metrics.labels" . | indent 4 }} - name: {{ template "kube-state-metrics.fullname" . }} - namespace: {{ template "kube-state-metrics.namespace" . }} -spec: - endpointSelector: - matchLabels: - {{- include "kube-state-metrics.selectorLabels" . | indent 6 }} - egress: - {{- if and .Values.networkPolicy.cilium .Values.networkPolicy.cilium.kubeApiServerSelector }} - {{ toYaml .Values.networkPolicy.cilium.kubeApiServerSelector | nindent 6 }} - {{- else }} - - toEntities: - - kube-apiserver - {{- end }} - ingress: - - toPorts: - - ports: - - port: {{ .Values.service.port | quote }} - protocol: TCP - {{- if .Values.selfMonitor.enabled }} - - port: {{ .Values.selfMonitor.telemetryPort | default 8081 | quote }} - protocol: TCP - {{ end }} -{{ end }} diff --git a/charts/kube-prometheus-stack/charts/kube-state-metrics/templates/deployment.yaml b/charts/kube-prometheus-stack/charts/kube-state-metrics/templates/deployment.yaml index bf2ddba02d..3d9dbabe99 100644 --- a/charts/kube-prometheus-stack/charts/kube-state-metrics/templates/deployment.yaml +++ b/charts/kube-prometheus-stack/charts/kube-state-metrics/templates/deployment.yaml @@ -93,9 +93,10 @@ spec: - --host=127.0.0.1 {{- end }} - --port={{ $servicePort }} - {{- if .Values.collectors }} - - --resources={{ .Values.collectors | join "," }} - {{- end }} + {{- $activeCollectors := include "kube-state-metrics.collectors" . | fromYamlArray }} + {{- if $activeCollectors }} + - --resources={{ join "," $activeCollectors }} + {{- end }} {{- if .Values.metricLabelsAllowlist }} - --metric-labels-allowlist={{ .Values.metricLabelsAllowlist | join "," }} {{- end }} @@ -144,6 +145,9 @@ spec: {{- if .Values.customResourceState.enabled }} - --custom-resource-state-config-file=/etc/customresourcestate/{{ .Values.customResourceState.key }} {{- end }} + {{- if .Values.authFilter.enabled }} + - --auth-filter + {{- end }} {{- if or (.Values.kubeconfig.enabled) (.Values.customResourceState.enabled) (.Values.volumeMounts) }} volumeMounts: {{- if .Values.kubeconfig.enabled }} @@ -176,11 +180,13 @@ spec: {{- if .Values.hostNetwork }} host: 127.0.0.1 {{- end }} + {{- if .Values.startupProbe.httpGet.httpHeaders }} httpHeaders: {{- range $_, $header := .Values.startupProbe.httpGet.httpHeaders }} - name: {{ $header.name }} value: {{ $header.value }} {{- end }} + {{- end }} path: /healthz port: http {{- if .Values.kubeRBACProxy.enabled }} @@ -199,11 +205,13 @@ spec: {{- if .Values.hostNetwork }} host: 127.0.0.1 {{- end }} + {{- if .Values.livenessProbe.httpGet.httpHeaders }} httpHeaders: {{- range $_, $header := .Values.livenessProbe.httpGet.httpHeaders }} - name: {{ $header.name }} value: {{ $header.value }} {{- end }} + {{- end }} path: /livez port: http {{- if .Values.kubeRBACProxy.enabled }} @@ -221,11 +229,13 @@ spec: {{- if .Values.hostNetwork }} host: 127.0.0.1 {{- end }} + {{- if .Values.readinessProbe.httpGet.httpHeaders }} httpHeaders: {{- range $_, $header := .Values.readinessProbe.httpGet.httpHeaders }} - name: {{ $header.name }} value: {{ $header.value }} {{- end }} + {{- end }} path: /readyz port: metrics {{- if .Values.kubeRBACProxy.enabled }} diff --git a/charts/kube-prometheus-stack/charts/kube-state-metrics/templates/networkpolicy.yaml b/charts/kube-prometheus-stack/charts/kube-state-metrics/templates/networkpolicy.yaml index abe292a728..76ef48897e 100644 --- a/charts/kube-prometheus-stack/charts/kube-state-metrics/templates/networkpolicy.yaml +++ b/charts/kube-prometheus-stack/charts/kube-state-metrics/templates/networkpolicy.yaml @@ -1,4 +1,5 @@ -{{- if and .Values.networkPolicy.enabled (eq .Values.networkPolicy.flavor "kubernetes") }} +{{- if .Values.networkPolicy.enabled -}} +--- kind: NetworkPolicy apiVersion: networking.k8s.io/v1 metadata: @@ -40,4 +41,4 @@ spec: policyTypes: - Ingress - Egress -{{- end }} +{{- end -}} diff --git a/charts/kube-prometheus-stack/charts/kube-state-metrics/templates/role.yaml b/charts/kube-prometheus-stack/charts/kube-state-metrics/templates/role.yaml index 4b6537b1b8..f1f8f9bdcc 100644 --- a/charts/kube-prometheus-stack/charts/kube-state-metrics/templates/role.yaml +++ b/charts/kube-prometheus-stack/charts/kube-state-metrics/templates/role.yaml @@ -14,206 +14,219 @@ metadata: {{- if eq $.Values.rbac.useClusterRole false }} namespace: {{ . }} {{- end }} +{{- $activeCollectors := include "kube-state-metrics.collectors" $ | fromYamlArray }} rules: -{{ if has "certificatesigningrequests" $.Values.collectors }} +{{ if has "certificatesigningrequests" $activeCollectors }} - apiGroups: ["certificates.k8s.io"] resources: - certificatesigningrequests verbs: ["list", "watch"] {{ end -}} -{{ if has "configmaps" $.Values.collectors }} +{{ if has "configmaps" $activeCollectors }} - apiGroups: [""] resources: - configmaps verbs: ["list", "watch"] {{ end -}} -{{ if has "cronjobs" $.Values.collectors }} +{{ if has "cronjobs" $activeCollectors }} - apiGroups: ["batch"] resources: - cronjobs verbs: ["list", "watch"] {{ end -}} -{{ if has "daemonsets" $.Values.collectors }} +{{ if has "daemonsets" $activeCollectors }} - apiGroups: ["apps"] resources: - daemonsets verbs: ["list", "watch"] {{ end -}} -{{ if has "deployments" $.Values.collectors }} +{{ if has "deployments" $activeCollectors }} - apiGroups: ["apps"] resources: - deployments verbs: ["list", "watch"] {{ end -}} -{{ if has "endpoints" $.Values.collectors }} +{{ if has "endpoints" $activeCollectors }} - apiGroups: [""] resources: - endpoints verbs: ["list", "watch"] {{ end -}} -{{ if has "endpointslices" $.Values.collectors }} +{{ if has "endpointslices" $activeCollectors }} - apiGroups: ["discovery.k8s.io"] resources: - endpointslices verbs: ["list", "watch"] {{ end -}} -{{ if has "horizontalpodautoscalers" $.Values.collectors }} +{{ if has "horizontalpodautoscalers" $activeCollectors }} - apiGroups: ["autoscaling"] resources: - horizontalpodautoscalers verbs: ["list", "watch"] {{ end -}} -{{ if has "ingresses" $.Values.collectors }} +{{ if has "ingresses" $activeCollectors }} - apiGroups: ["networking.k8s.io"] resources: - ingresses verbs: ["list", "watch"] {{ end -}} -{{ if has "jobs" $.Values.collectors }} +{{ if has "jobs" $activeCollectors }} - apiGroups: ["batch"] resources: - jobs verbs: ["list", "watch"] {{ end -}} -{{ if has "leases" $.Values.collectors }} +{{ if has "leases" $activeCollectors }} - apiGroups: ["coordination.k8s.io"] resources: - leases verbs: ["list", "watch"] {{ end -}} -{{ if has "limitranges" $.Values.collectors }} +{{ if has "limitranges" $activeCollectors }} - apiGroups: [""] resources: - limitranges verbs: ["list", "watch"] {{ end -}} -{{ if has "mutatingwebhookconfigurations" $.Values.collectors }} +{{ if has "mutatingwebhookconfigurations" $activeCollectors }} - apiGroups: ["admissionregistration.k8s.io"] resources: - mutatingwebhookconfigurations verbs: ["list", "watch"] {{ end -}} -{{ if has "namespaces" $.Values.collectors }} +{{ if has "namespaces" $activeCollectors }} - apiGroups: [""] resources: - namespaces verbs: ["list", "watch"] {{ end -}} -{{ if has "networkpolicies" $.Values.collectors }} +{{ if has "networkpolicies" $activeCollectors }} - apiGroups: ["networking.k8s.io"] resources: - networkpolicies verbs: ["list", "watch"] {{ end -}} -{{ if has "ingressclasses" $.Values.collectors }} +{{ if has "ingressclasses" $activeCollectors }} - apiGroups: ["networking.k8s.io"] resources: - ingressclasses verbs: ["list", "watch"] {{ end -}} -{{ if has "clusterrolebindings" $.Values.collectors }} +{{ if has "clusterrolebindings" $activeCollectors }} - apiGroups: ["rbac.authorization.k8s.io"] resources: - clusterrolebindings verbs: ["list", "watch"] {{ end -}} -{{ if has "clusterroles" $.Values.collectors }} +{{ if has "clusterroles" $activeCollectors }} - apiGroups: ["rbac.authorization.k8s.io"] resources: - clusterroles verbs: ["list", "watch"] {{ end -}} -{{ if has "roles" $.Values.collectors }} +{{ if has "roles" $activeCollectors }} - apiGroups: ["rbac.authorization.k8s.io"] resources: - roles verbs: ["list", "watch"] {{ end -}} -{{ if has "nodes" $.Values.collectors }} +{{ if has "rolebindings" $activeCollectors }} +- apiGroups: ["rbac.authorization.k8s.io"] + resources: + - rolebindings + verbs: ["list", "watch"] +{{ end -}} +{{ if has "nodes" $activeCollectors }} - apiGroups: [""] resources: - nodes verbs: ["list", "watch"] {{ end -}} -{{ if has "persistentvolumeclaims" $.Values.collectors }} +{{ if has "persistentvolumeclaims" $activeCollectors }} - apiGroups: [""] resources: - persistentvolumeclaims verbs: ["list", "watch"] {{ end -}} -{{ if has "persistentvolumes" $.Values.collectors }} +{{ if has "persistentvolumes" $activeCollectors }} - apiGroups: [""] resources: - persistentvolumes verbs: ["list", "watch"] {{ end -}} -{{ if has "poddisruptionbudgets" $.Values.collectors }} +{{ if has "poddisruptionbudgets" $activeCollectors }} - apiGroups: ["policy"] resources: - poddisruptionbudgets verbs: ["list", "watch"] {{ end -}} -{{ if has "pods" $.Values.collectors }} +{{ if has "pods" $activeCollectors }} - apiGroups: [""] resources: - pods verbs: ["list", "watch"] {{ end -}} -{{ if has "replicasets" $.Values.collectors }} +{{ if has "replicasets" $activeCollectors }} - apiGroups: ["apps"] resources: - replicasets verbs: ["list", "watch"] {{ end -}} -{{ if has "replicationcontrollers" $.Values.collectors }} +{{ if has "replicationcontrollers" $activeCollectors }} - apiGroups: [""] resources: - replicationcontrollers verbs: ["list", "watch"] {{ end -}} -{{ if has "resourcequotas" $.Values.collectors }} +{{ if has "resourcequotas" $activeCollectors }} - apiGroups: [""] resources: - resourcequotas verbs: ["list", "watch"] {{ end -}} -{{ if has "secrets" $.Values.collectors }} +{{ if has "secrets" $activeCollectors }} - apiGroups: [""] resources: - secrets verbs: ["list", "watch"] {{ end -}} -{{ if has "services" $.Values.collectors }} +{{ if has "serviceaccounts" $activeCollectors }} +- apiGroups: [""] + resources: + - serviceaccounts + verbs: ["list", "watch"] +{{ end -}} +{{ if has "services" $activeCollectors }} - apiGroups: [""] resources: - services verbs: ["list", "watch"] {{ end -}} -{{ if has "statefulsets" $.Values.collectors }} +{{ if has "statefulsets" $activeCollectors }} - apiGroups: ["apps"] resources: - statefulsets verbs: ["list", "watch"] {{ end -}} -{{ if has "storageclasses" $.Values.collectors }} +{{ if has "storageclasses" $activeCollectors }} - apiGroups: ["storage.k8s.io"] resources: - storageclasses verbs: ["list", "watch"] {{ end -}} -{{ if has "validatingwebhookconfigurations" $.Values.collectors }} +{{ if has "validatingwebhookconfigurations" $activeCollectors }} - apiGroups: ["admissionregistration.k8s.io"] resources: - validatingwebhookconfigurations verbs: ["list", "watch"] {{ end -}} -{{ if has "volumeattachments" $.Values.collectors }} +{{ if has "volumeattachments" $activeCollectors }} - apiGroups: ["storage.k8s.io"] resources: - volumeattachments verbs: ["list", "watch"] {{ end -}} -{{- if $.Values.kubeRBACProxy.enabled }} +{{- if or $.Values.kubeRBACProxy.enabled $.Values.authFilter.enabled }} - apiGroups: ["authentication.k8s.io"] resources: - tokenreviews diff --git a/charts/kube-prometheus-stack/charts/kube-state-metrics/unittests/collectors_test.yaml b/charts/kube-prometheus-stack/charts/kube-state-metrics/unittests/collectors_test.yaml new file mode 100644 index 0000000000..daf52b7a2c --- /dev/null +++ b/charts/kube-prometheus-stack/charts/kube-state-metrics/unittests/collectors_test.yaml @@ -0,0 +1,230 @@ +# yaml-language-server: $schema=https://raw.githubusercontent.com/helm-unittest/helm-unittest/main/schema/helm-testsuite.json +suite: test collectors templates +templates: + - deployment.yaml + - role.yaml +tests: + - it: should render default resources flag + template: deployment.yaml + asserts: + - contains: + path: spec.template.spec.containers[0].args + content: --resources=certificatesigningrequests,configmaps,cronjobs,daemonsets,deployments,endpointslices,horizontalpodautoscalers,ingresses,jobs,leases,limitranges,mutatingwebhookconfigurations,namespaces,networkpolicies,nodes,persistentvolumeclaims,persistentvolumes,poddisruptionbudgets,pods,replicasets,replicationcontrollers,resourcequotas,secrets,services,statefulsets,storageclasses,validatingwebhookconfigurations,volumeattachments + + - it: should render resources flag when collectors are excluded + template: deployment.yaml + set: + collectorsExclude: + - pods + - services + asserts: + - contains: + path: spec.template.spec.containers[0].args + content: --resources=certificatesigningrequests,configmaps,cronjobs,daemonsets,deployments,endpointslices,horizontalpodautoscalers,ingresses,jobs,leases,limitranges,mutatingwebhookconfigurations,namespaces,networkpolicies,nodes,persistentvolumeclaims,persistentvolumes,poddisruptionbudgets,replicasets,replicationcontrollers,resourcequotas,secrets,statefulsets,storageclasses,validatingwebhookconfigurations,volumeattachments + + - it: should render resources flag when collectors are added + template: deployment.yaml + set: + collectorsExtra: + - rolebindings + asserts: + - contains: + path: spec.template.spec.containers[0].args + content: --resources=certificatesigningrequests,configmaps,cronjobs,daemonsets,deployments,endpointslices,horizontalpodautoscalers,ingresses,jobs,leases,limitranges,mutatingwebhookconfigurations,namespaces,networkpolicies,nodes,persistentvolumeclaims,persistentvolumes,poddisruptionbudgets,pods,replicasets,replicationcontrollers,resourcequotas,secrets,services,statefulsets,storageclasses,validatingwebhookconfigurations,volumeattachments,rolebindings + + - it: should render resources flag when collectors list is empty and extra collectors are added + template: deployment.yaml + set: + collectors: [] + collectorsExtra: + - rolebindings + asserts: + - contains: + path: spec.template.spec.containers[0].args + content: --resources=rolebindings + + - it: should not duplicate collectors when extra collector already exists in the default list + template: deployment.yaml + set: + collectorsExtra: + - pods + asserts: + - notContains: + path: spec.template.spec.containers[0].args + content: pods,pods + + - it: should render resources flag when collectors are excluded and added + template: deployment.yaml + set: + collectorsExclude: + - pods + collectorsExtra: + - rolebindings + asserts: + - contains: + path: spec.template.spec.containers[0].args + content: --resources=certificatesigningrequests,configmaps,cronjobs,daemonsets,deployments,endpointslices,horizontalpodautoscalers,ingresses,jobs,leases,limitranges,mutatingwebhookconfigurations,namespaces,networkpolicies,nodes,persistentvolumeclaims,persistentvolumes,poddisruptionbudgets,replicasets,replicationcontrollers,resourcequotas,secrets,services,statefulsets,storageclasses,validatingwebhookconfigurations,volumeattachments,rolebindings + + - it: should work with custom collectors + template: deployment.yaml + set: + collectors: + - pods + - nodes + collectorsExclude: + - pods + asserts: + - contains: + path: spec.template.spec.containers[0].args + content: --resources=nodes + + - it: should omit --resources when collectors is empty and no extra + template: deployment.yaml + set: + collectors: [] + collectorsExclude: [] + asserts: + - notContains: + path: spec.template.spec.containers[0].args + content: --resources=certificatesigningrequests,configmaps,cronjobs,daemonsets,deployments,endpointslices,horizontalpodautoscalers,ingresses,jobs,leases,limitranges,mutatingwebhookconfigurations,namespaces,networkpolicies,nodes,persistentvolumeclaims,persistentvolumes,poddisruptionbudgets,pods,replicasets,replicationcontrollers,resourcequotas,secrets,services,statefulsets,storageclasses,validatingwebhookconfigurations,volumeattachments + - notContains: + path: spec.template.spec.containers[0].args + content: "--resources=" + + - it: should omit --resources for a custom-resource-state-only setup (collectors empty) + template: deployment.yaml + set: + collectors: [] + extraArgs: + - --custom-resource-state-only=true + asserts: + - contains: + path: spec.template.spec.containers[0].args + content: --custom-resource-state-only=true + - notContains: + path: spec.template.spec.containers[0].args + content: "--resources=" + + - it: should omit --resources when excluding all collectors leaves no resources + template: deployment.yaml + set: + collectorsExclude: + - certificatesigningrequests + - configmaps + - cronjobs + - daemonsets + - deployments + - endpointslices + - horizontalpodautoscalers + - ingresses + - jobs + - leases + - limitranges + - mutatingwebhookconfigurations + - namespaces + - networkpolicies + - nodes + - persistentvolumeclaims + - persistentvolumes + - poddisruptionbudgets + - pods + - replicasets + - replicationcontrollers + - resourcequotas + - secrets + - services + - statefulsets + - storageclasses + - validatingwebhookconfigurations + - volumeattachments + asserts: + - notContains: + path: spec.template.spec.containers[0].args + content: "--resources=" + + - it: should include RBAC for collectorsExtra resources + template: role.yaml + set: + collectorsExtra: + - rolebindings + asserts: + - contains: + path: rules + content: + apiGroups: + - rbac.authorization.k8s.io + resources: + - rolebindings + verbs: + - list + - watch + + - it: should omit RBAC for excluded collectors + template: role.yaml + set: + collectorsExclude: + - pods + asserts: + - notContains: + path: rules + content: + apiGroups: + - "" + resources: + - pods + verbs: + - list + - watch + + - it: should include RBAC for collectorsExtra and exclude combined + template: role.yaml + set: + collectorsExclude: + - pods + collectorsExtra: + - rolebindings + asserts: + - contains: + path: rules + content: + apiGroups: + - rbac.authorization.k8s.io + resources: + - rolebindings + verbs: + - list + - watch + - notContains: + path: rules + content: + apiGroups: + - "" + resources: + - pods + verbs: + - list + - watch + + - it: should keep default RBAC rules when no overrides are set + template: role.yaml + asserts: + - contains: + path: rules + content: + apiGroups: + - "" + resources: + - pods + verbs: + - list + - watch + - contains: + path: rules + content: + apiGroups: + - apps + resources: + - deployments + verbs: + - list + - watch diff --git a/charts/kube-prometheus-stack/charts/kube-state-metrics/unittests/fullname_test.yaml b/charts/kube-prometheus-stack/charts/kube-state-metrics/unittests/fullname_test.yaml new file mode 100644 index 0000000000..e9cc0f3818 --- /dev/null +++ b/charts/kube-prometheus-stack/charts/kube-state-metrics/unittests/fullname_test.yaml @@ -0,0 +1,40 @@ +# yaml-language-server: $schema=https://raw.githubusercontent.com/helm-unittest/helm-unittest/main/schema/helm-testsuite.json +suite: test name and fullname overrides +templates: + - serviceaccount.yaml +tests: + - it: uses release name + chart name by default + asserts: + - equal: + path: metadata.name + value: RELEASE-NAME-kube-state-metrics + - equal: + path: metadata.labels["app.kubernetes.io/name"] + value: kube-state-metrics + + - it: nameOverride replaces the chart name in the resource name and labels + set: + nameOverride: custom + asserts: + - equal: + path: metadata.name + value: RELEASE-NAME-custom + - equal: + path: metadata.labels["app.kubernetes.io/name"] + value: custom + + - it: fullnameOverride fully overrides the resource name + set: + fullnameOverride: my-ksm + asserts: + - equal: + path: metadata.name + value: my-ksm + + - it: uses the release name alone when it already contains the chart name + release: + name: kube-state-metrics + asserts: + - equal: + path: metadata.name + value: kube-state-metrics diff --git a/charts/kube-prometheus-stack/charts/kube-state-metrics/values.yaml b/charts/kube-prometheus-stack/charts/kube-state-metrics/values.yaml index 9a6a333fca..4e1d9d09ad 100644 --- a/charts/kube-prometheus-stack/charts/kube-state-metrics/values.yaml +++ b/charts/kube-prometheus-stack/charts/kube-state-metrics/values.yaml @@ -28,6 +28,11 @@ global: # Allow parent charts to override registry hostname imageRegistry: "" +# Provide a name in place of kube-state-metrics for `app.kubernetes.io/name` labels. +nameOverride: "" +# Provide a name to substitute for the full names of resources. +fullnameOverride: "" + # If set to true, this will deploy kube-state-metrics as a StatefulSet and the data # will be automatically sharded across <.Values.replicas> pods using the built-in # autodiscovery feature: https://github.com/kubernetes/kube-state-metrics#automated-sharding @@ -103,6 +108,15 @@ rbac: # verbs: ["list", "watch"] extraRules: [] +# Enable kube-state-metrics native request authn/authz on the metrics endpoints +# via the `--auth-filter` flag, as an alternative to running kube-rbac-proxy. +# When enabled, the `create` permissions on `tokenreviews` and +# `subjectaccessreviews` required by the filter are added to the (Cluster)Role +# automatically. Scrapers must authenticate; see the chart README and the +# kube-state-metrics docs on protecting metrics endpoints. +authFilter: + enabled: false + # Configure kube-rbac-proxy. When enabled, creates one kube-rbac-proxy container per exposed HTTP endpoint (metrics and telemetry if enabled). # The requests are served through the same service but requests are then HTTPS. kubeRBACProxy: @@ -110,7 +124,7 @@ kubeRBACProxy: image: registry: quay.io repository: brancz/kube-rbac-proxy - tag: v0.22.0 + tag: v0.22.1 sha: "" pullPolicy: IfNotPresent @@ -297,18 +311,6 @@ prometheus: ## Configure network policy for kube-state-metrics networkPolicy: enabled: false - # networkPolicy.flavor -- Flavor of the network policy to use. - # Can be: - # * kubernetes for networking.k8s.io/v1/NetworkPolicy - # * cilium for cilium.io/v2/CiliumNetworkPolicy - flavor: kubernetes - - ## Configure the cilium network policy kube-apiserver selector - # cilium: - # kubeApiServerSelector: - # - toEntities: - # - kube-apiserver - # egress: # - {} # ingress: @@ -441,6 +443,19 @@ collectors: # - clusterrolebindings # - clusterroles # - roles + # - rolebindings + # - serviceaccounts + +# collectorsExclude / collectorsExtra tweak the default `collectors` list above +# without redefining it. Both operate on `.Values.collectors` (not on KSM's +# built-in defaults): with `collectors: []` there is nothing to layer onto and +# `collectorsExtra` becomes the entire --resources list. +# collectorsExclude removes entries from the list: +collectorsExclude: [] + # - pods +# collectorsExtra appends entries after exclusion (deduplicated): +collectorsExtra: [] + # - rolebindings # Enabling kubeconfig will pass the --kubeconfig argument to the container kubeconfig: diff --git a/charts/kube-prometheus-stack/charts/prometheus-node-exporter/Chart.yaml b/charts/kube-prometheus-stack/charts/prometheus-node-exporter/Chart.yaml index 9d3b9cfffe..47cce3e5d5 100644 --- a/charts/kube-prometheus-stack/charts/prometheus-node-exporter/Chart.yaml +++ b/charts/kube-prometheus-stack/charts/prometheus-node-exporter/Chart.yaml @@ -4,7 +4,7 @@ annotations: - name: Chart Source url: https://github.com/prometheus-community/helm-charts apiVersion: v2 -appVersion: 1.11.1 +appVersion: 1.12.1 description: A Helm chart for prometheus node-exporter home: https://github.com/prometheus/node_exporter/ icon: https://raw.githubusercontent.com/cncf/artwork/refs/heads/main/projects/prometheus/icon/color/prometheus-icon-color.svg @@ -26,4 +26,4 @@ name: prometheus-node-exporter sources: - https://github.com/prometheus/node_exporter/ type: application -version: 4.55.0 +version: 4.56.1 diff --git a/charts/kube-prometheus-stack/charts/prometheus-node-exporter/values.yaml b/charts/kube-prometheus-stack/charts/prometheus-node-exporter/values.yaml index 1bb18f2bac..8f382d4693 100644 --- a/charts/kube-prometheus-stack/charts/prometheus-node-exporter/values.yaml +++ b/charts/kube-prometheus-stack/charts/prometheus-node-exporter/values.yaml @@ -47,7 +47,7 @@ kubeRBACProxy: image: registry: quay.io repository: brancz/kube-rbac-proxy - tag: v0.22.0 + tag: v0.22.1 sha: "" pullPolicy: IfNotPresent diff --git a/charts/kube-prometheus-stack/charts/prometheus-windows-exporter/Chart.yaml b/charts/kube-prometheus-stack/charts/prometheus-windows-exporter/Chart.yaml index 3ee70cf32d..c018e5f27f 100644 --- a/charts/kube-prometheus-stack/charts/prometheus-windows-exporter/Chart.yaml +++ b/charts/kube-prometheus-stack/charts/prometheus-windows-exporter/Chart.yaml @@ -1,5 +1,5 @@ apiVersion: v2 -appVersion: 0.31.7 +appVersion: 0.31.8 description: A Helm chart for prometheus windows-exporter home: https://github.com/prometheus-community/windows_exporter/ icon: https://raw.githubusercontent.com/cncf/artwork/master/prometheus/icon/color/prometheus-icon-color.svg @@ -16,4 +16,4 @@ name: prometheus-windows-exporter sources: - https://github.com/prometheus-community/windows_exporter/ type: application -version: 0.12.7 +version: 0.12.8 diff --git a/charts/kube-prometheus-stack/templates/_helpers.tpl b/charts/kube-prometheus-stack/templates/_helpers.tpl index 8fb4041c7a..a4a46cf835 100644 --- a/charts/kube-prometheus-stack/templates/_helpers.tpl +++ b/charts/kube-prometheus-stack/templates/_helpers.tpl @@ -397,3 +397,80 @@ folderUID: {{ $folderUID | quote }} folderRef: {{ $folderRef | quote }} {{- end }} {{- end }} + +{{/* +Render a full Gateway API route object. +Shared by the route and routePerReplica templates. +Expects a dict: + { "context": $, "route": , "name": , "namespace": , + "labelApp": , "hostnames": , "serviceName": , "servicePort": } +*/}} +{{- define "kube-prometheus-stack.route" -}} +{{- $context := .context -}} +{{- $route := .route -}} +apiVersion: {{ $route.apiVersion | default "gateway.networking.k8s.io/v1" }} +kind: {{ $route.kind | default "HTTPRoute" }} +metadata: + {{- with $route.annotations }} + annotations: + {{- toYaml . | nindent 4 }} + {{- end }} + name: {{ .name }} + namespace: {{ .namespace }} + labels: + app: {{ .labelApp }} + {{- include "kube-prometheus-stack.labels" $context | nindent 4 }} + {{- with $route.labels }} + {{- toYaml . | nindent 4 }} + {{- end }} +spec: + {{- with $route.parentRefs }} + parentRefs: + {{- toYaml . | nindent 4 }} + {{- end }} + {{- with .hostnames }} + hostnames: + {{- tpl (toYaml .) $context | nindent 4 }} + {{- end }} + rules: + {{- include "kube-prometheus-stack.route.rules" (dict "context" $context "route" $route "serviceName" .serviceName "servicePort" .servicePort) | trim | nindent 4 }} +{{- end }} + +{{/* +Render the rules block for a Gateway API route. +Shared by the route and routePerReplica templates. +Expects a dict: { "context": $, "route": , "serviceName": , "servicePort": } +*/}} +{{- define "kube-prometheus-stack.route.rules" -}} +{{- $context := .context -}} +{{- $route := .route -}} +{{- if $route.additionalRules }} +{{- tpl (toYaml $route.additionalRules) $context }} +{{- end }} +{{- if $route.httpsRedirect }} +- filters: + - type: RequestRedirect + requestRedirect: + scheme: https + statusCode: 301 +{{- else }} +- backendRefs: + - group: "" + kind: Service + weight: 1 + name: {{ .serviceName }} + port: {{ .servicePort }} + {{- with $route.filters }} + filters: + {{- toYaml . | nindent 4 }} + {{- end }} + {{- with $route.matches }} + matches: + {{- toYaml . | nindent 4 }} + {{- end }} + {{- with $route.sessionPersistence }} + sessionPersistence: + {{- toYaml . | nindent 4 }} + {{- end }} +{{- end }} +{{- end }} diff --git a/charts/kube-prometheus-stack/templates/alertmanager/alertmanager.yaml b/charts/kube-prometheus-stack/templates/alertmanager/alertmanager.yaml index 118c17adc0..d3e7ec3ab6 100644 --- a/charts/kube-prometheus-stack/templates/alertmanager/alertmanager.yaml +++ b/charts/kube-prometheus-stack/templates/alertmanager/alertmanager.yaml @@ -43,6 +43,8 @@ spec: externalUrl: "{{ tpl .Values.alertmanager.alertmanagerSpec.externalUrl . }}" {{- else if and .Values.alertmanager.ingress.enabled .Values.alertmanager.ingress.hosts }} externalUrl: "http://{{ tpl (index .Values.alertmanager.ingress.hosts 0) . }}{{ .Values.alertmanager.alertmanagerSpec.routePrefix }}" +{{- else if and .Values.alertmanager.route.main.enabled .Values.alertmanager.route.main.hostnames }} + externalUrl: "http://{{ tpl (index .Values.alertmanager.route.main.hostnames 0) . }}{{ .Values.alertmanager.alertmanagerSpec.routePrefix }}" {{- else }} externalUrl: http://{{ template "kube-prometheus-stack.fullname" . }}-alertmanager.{{ template "kube-prometheus-stack.namespace" . }}:{{ .Values.alertmanager.service.port }} {{- end }} @@ -215,6 +217,24 @@ spec: {{- if .Values.alertmanager.alertmanagerSpec.terminationGracePeriodSeconds }} terminationGracePeriodSeconds: {{ .Values.alertmanager.alertmanagerSpec.terminationGracePeriodSeconds }} {{- end }} +{{- if kindIs "bool" .Values.alertmanager.alertmanagerSpec.enableServiceLinks }} + enableServiceLinks: {{ .Values.alertmanager.alertmanagerSpec.enableServiceLinks }} +{{- end }} +{{- with .Values.alertmanager.alertmanagerSpec.schedulerName }} + schedulerName: {{ . }} +{{- end }} +{{- with .Values.alertmanager.alertmanagerSpec.hostAliases }} + hostAliases: +{{ toYaml . | indent 4 }} +{{- end }} +{{- with .Values.alertmanager.alertmanagerSpec.limits }} + limits: +{{ toYaml . | indent 4 }} +{{- end }} +{{- with .Values.alertmanager.alertmanagerSpec.clusterTLS }} + clusterTLS: +{{ toYaml . | indent 4 }} +{{- end }} {{- with .Values.alertmanager.alertmanagerSpec.additionalConfig }} {{- tpl (toYaml .) $ | nindent 2 }} {{- end }} diff --git a/charts/kube-prometheus-stack/templates/alertmanager/route.yaml b/charts/kube-prometheus-stack/templates/alertmanager/route.yaml index bc0858da90..821fa60665 100644 --- a/charts/kube-prometheus-stack/templates/alertmanager/route.yaml +++ b/charts/kube-prometheus-stack/templates/alertmanager/route.yaml @@ -4,60 +4,16 @@ {{- range $name, $route := .Values.alertmanager.route }} {{- if $route.enabled }} --- -apiVersion: {{ $route.apiVersion | default "gateway.networking.k8s.io/v1" }} -kind: {{ $route.kind | default "HTTPRoute" }} -metadata: - {{- with $route.annotations }} - annotations: - {{- toYaml . | nindent 4 }} - {{- end }} - name: {{ $serviceName }}{{ if ne $name "main" }}-{{ $name }}{{ end }} - namespace: {{ template "kube-prometheus-stack-alertmanager.namespace" $ }} - labels: - app: {{ template "kube-prometheus-stack.name" $ }}-alertmanager - {{- include "kube-prometheus-stack.labels" $ | nindent 4 }} - {{- with $route.labels }} - {{- toYaml . | nindent 4 }} - {{- end }} -spec: - {{- with $route.parentRefs }} - parentRefs: - {{- toYaml . | nindent 4 }} - {{- end }} - {{- with $route.hostnames }} - hostnames: - {{- tpl (toYaml .) $ | nindent 4 }} - {{- end }} - rules: - {{- if $route.additionalRules }} - {{- tpl (toYaml $route.additionalRules) $ | nindent 4 }} - {{- end }} - {{- if $route.httpsRedirect }} - - filters: - - type: RequestRedirect - requestRedirect: - scheme: https - statusCode: 301 - {{- else }} - - backendRefs: - - group: "" - kind: Service - weight: 1 - name: {{ $serviceName }} - port: {{ $servicePort }} - {{- with $route.filters }} - filters: - {{- toYaml . | nindent 8 }} - {{- end }} - {{- with $route.matches }} - matches: - {{- toYaml . | nindent 8 }} - {{- end }} - {{- with $route.sessionPersistence }} - sessionPersistence: - {{- toYaml . | nindent 8 }} - {{- end }} - {{- end }} +{{ include "kube-prometheus-stack.route" (dict + "context" $ + "route" $route + "name" (ternary $serviceName (printf "%s-%s" $serviceName $name) (eq $name "main")) + "namespace" (include "kube-prometheus-stack-alertmanager.namespace" $) + "labelApp" (printf "%s-alertmanager" (include "kube-prometheus-stack.name" $)) + "hostnames" $route.hostnames + "serviceName" $serviceName + "servicePort" $servicePort + ) }} {{- end }} {{- end }} {{- end }} diff --git a/charts/kube-prometheus-stack/templates/alertmanager/routeperreplica.yaml b/charts/kube-prometheus-stack/templates/alertmanager/routeperreplica.yaml new file mode 100644 index 0000000000..cf01b81ee8 --- /dev/null +++ b/charts/kube-prometheus-stack/templates/alertmanager/routeperreplica.yaml @@ -0,0 +1,22 @@ +{{- if and .Values.alertmanager.enabled .Values.alertmanager.servicePerReplica.enabled }} +{{- $count := .Values.alertmanager.alertmanagerSpec.replicas | int -}} +{{- $servicePort := .Values.alertmanager.service.port -}} +{{- range $name, $route := .Values.alertmanager.routePerReplica }} +{{- if $route.enabled }} +{{- range $i := until $count }} +{{- $serviceName := printf "%s-alertmanager-%d" (include "kube-prometheus-stack.fullname" $) $i }} +--- +{{ include "kube-prometheus-stack.route" (dict + "context" $ + "route" $route + "name" (ternary $serviceName (printf "%s-%s" $serviceName $name) (eq $name "main")) + "namespace" (include "kube-prometheus-stack-alertmanager.namespace" $) + "labelApp" (printf "%s-alertmanager" (include "kube-prometheus-stack.name" $)) + "hostnames" (list (printf "%s-%d.%s" $route.hostPrefix $i $route.hostDomain)) + "serviceName" $serviceName + "servicePort" $servicePort + ) }} +{{- end }} +{{- end }} +{{- end }} +{{- end }} diff --git a/charts/kube-prometheus-stack/templates/exporters/kube-scheduler/servicemonitor.yaml b/charts/kube-prometheus-stack/templates/exporters/kube-scheduler/servicemonitor.yaml index 26c2853ef2..2e2279750a 100644 --- a/charts/kube-prometheus-stack/templates/exporters/kube-scheduler/servicemonitor.yaml +++ b/charts/kube-prometheus-stack/templates/exporters/kube-scheduler/servicemonitor.yaml @@ -60,4 +60,34 @@ spec: relabelings: {{ tpl (toYaml .Values.kubeScheduler.serviceMonitor.relabelings | indent 4) . }} {{- end }} +{{- if .Values.kubeScheduler.serviceMonitor.resource.enabled }} + - port: {{ .Values.kubeScheduler.serviceMonitor.port }} + path: "/metrics/resources" + {{- if .Values.kubeScheduler.serviceMonitor.resource.interval }} + interval: {{ .Values.kubeScheduler.serviceMonitor.resource.interval }} + {{- end }} + bearerTokenFile: /var/run/secrets/kubernetes.io/serviceaccount/token + {{- if .Values.kubeScheduler.serviceMonitor.proxyUrl }} + proxyUrl: {{ .Values.kubeScheduler.serviceMonitor.proxyUrl}} + {{- end }} + {{- if eq (include "kube-prometheus-stack.kubeScheduler.insecureScrape" (list . false true .Values.kubeScheduler.serviceMonitor.https )) "true" }} + scheme: https + tlsConfig: + caFile: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt + {{- if eq (include "kube-prometheus-stack.kubeScheduler.insecureScrape" (list . nil true .Values.kubeScheduler.serviceMonitor.insecureSkipVerify)) "true" }} + insecureSkipVerify: true + {{- end }} + {{- if .Values.kubeScheduler.serviceMonitor.serverName }} + serverName: {{ .Values.kubeScheduler.serviceMonitor.serverName }} + {{- end}} + {{- end}} +{{- if .Values.kubeScheduler.serviceMonitor.resource.metricRelabelings }} + metricRelabelings: +{{ tpl (toYaml .Values.kubeScheduler.serviceMonitor.resource.metricRelabelings | indent 4) . }} +{{- end }} +{{- if .Values.kubeScheduler.serviceMonitor.resource.relabelings }} + relabelings: +{{ tpl (toYaml .Values.kubeScheduler.serviceMonitor.reource.relabelings | indent 4) . }} +{{- end }} +{{- end }} {{- end }} diff --git a/charts/kube-prometheus-stack/templates/grafana/dashboards-1.14/alertmanager-overview.yaml b/charts/kube-prometheus-stack/templates/grafana/dashboards-1.14/alertmanager-overview.yaml index 3ef07e6816..1912e5a912 100644 --- a/charts/kube-prometheus-stack/templates/grafana/dashboards-1.14/alertmanager-overview.yaml +++ b/charts/kube-prometheus-stack/templates/grafana/dashboards-1.14/alertmanager-overview.yaml @@ -1,5 +1,5 @@ {{- /* -Generated from 'alertmanager-overview' from https://raw.githubusercontent.com/prometheus-operator/kube-prometheus/eaca1a5fd76b356974054906af46810fec1cd7f8/manifests/grafana-dashboardDefinitions.yaml +Generated from 'alertmanager-overview' from https://raw.githubusercontent.com/prometheus-operator/kube-prometheus/4eafa8b5395ef839bb02a55e3b5fbdfa03280cf9/manifests/grafana-dashboardDefinitions.yaml Do not change in-place! In order to change this file first read following link: https://github.com/prometheus-community/helm-charts/tree/main/charts/kube-prometheus-stack/hack */ -}} @@ -20,7 +20,7 @@ metadata: {{- include "kube-prometheus-stack.labels" $ | nindent 4 }} data: alertmanager-overview.json: |- - {{`{"graphTooltip":1,"panels":[{"collapsed":false,"gridPos":{"h":1,"w":24,"x":0,"y":0},"id":1,"panels":[],"title":"Alerts","type":"row"},{"datasource":{"type":"prometheus","uid":"$datasource"},"description":"current set of alerts stored in the Alertmanager","fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","stacking":{"mode":"normal"}},"unit":"none"}},"gridPos":{"h":7,"w":12,"x":0,"y":1},"id":2,"options":{"legend":{"showLegend":false},"tooltip":{"mode":"multi"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"sum(alertmanager_alerts{namespace=~\"$namespace\",service=~\"$service\"}) by (namespace,service,instance)","intervalFactor":2,"legendFormat":"{{instance}}"}],"title":"Alerts","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"$datasource"},"description":"rate of successful and invalid alerts received by the Alertmanager","fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","stacking":{"mode":"normal"}},"unit":"ops"}},"gridPos":{"h":7,"w":12,"x":12,"y":1},"id":3,"options":{"legend":{"showLegend":false},"tooltip":{"mode":"multi"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"sum(rate(alertmanager_alerts_received_total{namespace=~\"$namespace\",service=~\"$service\"}[$__rate_interval])) by (namespace,service,instance)","intervalFactor":2,"legendFormat":"{{instance}} Received"},{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"sum(rate(alertmanager_alerts_invalid_total{namespace=~\"$namespace\",service=~\"$service\"}[$__rate_interval])) by (namespace,service,instance)","intervalFactor":2,"legendFormat":"{{instance}} Invalid"}],"title":"Alerts receive rate","type":"timeseries"},{"collapsed":false,"gridPos":{"h":1,"w":24,"x":0,"y":8},"id":4,"panels":[],"title":"Notifications","type":"row"},{"datasource":{"type":"prometheus","uid":"$datasource"},"description":"rate of successful and invalid notifications sent by the Alertmanager","fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","stacking":{"mode":"normal"}},"unit":"ops"}},"gridPos":{"h":7,"w":12,"x":0,"y":9},"id":5,"options":{"legend":{"showLegend":false},"tooltip":{"mode":"multi"}},"pluginVersion":"v11.4.0","repeat":"integration","targets":[{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"sum(rate(alertmanager_notifications_total{namespace=~\"$namespace\",service=~\"$service\", integration=\"$integration\"}[$__rate_interval])) by (integration,namespace,service,instance)","intervalFactor":2,"legendFormat":"{{instance}} Total"},{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"sum(rate(alertmanager_notifications_failed_total{namespace=~\"$namespace\",service=~\"$service\", integration=\"$integration\"}[$__rate_interval])) by (integration,namespace,service,instance)","intervalFactor":2,"legendFormat":"{{instance}} Failed"}],"title":"$integration: Notifications Send Rate","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"$datasource"},"description":"latency of notifications sent by the Alertmanager","fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","stacking":{"mode":"normal"}},"unit":"s"}},"gridPos":{"h":7,"w":12,"x":12,"y":9},"id":6,"options":{"legend":{"showLegend":false},"tooltip":{"mode":"multi"}},"pluginVersion":"v11.4.0","repeat":"integration","targets":[{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"histogram_quantile(0.99,\n sum(rate(alertmanager_notification_latency_seconds_bucket{namespace=~\"$namespace\",service=~\"$service\", integration=\"$integration\"}[$__rate_interval])) by (le,namespace,service,instance)\n)\n","intervalFactor":2,"legendFormat":"{{instance}} 99th Percentile"},{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"histogram_quantile(0.50,\n sum(rate(alertmanager_notification_latency_seconds_bucket{namespace=~\"$namespace\",service=~\"$service\", integration=\"$integration\"}[$__rate_interval])) by (le,namespace,service,instance)\n)\n","intervalFactor":2,"legendFormat":"{{instance}} Median"},{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"sum(rate(alertmanager_notification_latency_seconds_sum{namespace=~\"$namespace\",service=~\"$service\", integration=\"$integration\"}[$__rate_interval])) by (namespace,service,instance)\n/\nsum(rate(alertmanager_notification_latency_seconds_count{namespace=~\"$namespace\",service=~\"$service\", integration=\"$integration\"}[$__rate_interval])) by (namespace,service,instance)\n","intervalFactor":2,"legendFormat":"{{instance}} Average"}],"title":"$integration: Notification Duration","type":"timeseries"}],"schemaVersion":39,"tags":["alertmanager-mixin"],"templating":{"list":[{"current":{"selected":false,"text":"Prometheus","value":"Prometheus"},"hide":0,"label":"Data Source","name":"datasource","query":"prometheus","type":"datasource"},{"current":{"selected":false,"text":"","value":""},"datasource":{"type":"prometheus","uid":"${datasource}"},"includeAll":false,"label":"namespace","name":"namespace","query":"label_values(alertmanager_alerts, namespace)","refresh":2,"sort":1,"type":"query"},{"current":{"selected":false,"text":"","value":""},"datasource":{"type":"prometheus","uid":"${datasource}"},"includeAll":false,"label":"service","name":"service","query":"label_values(alertmanager_alerts, service)","refresh":2,"sort":1,"type":"query"},{"current":{"selected":false,"text":"$__all","value":"$__all"},"datasource":{"type":"prometheus","uid":"${datasource}"},"hide":2,"includeAll":true,"name":"integration","query":"label_values(alertmanager_notifications_total{integration=~\".*\"}, integration)","refresh":2,"sort":1,"type":"query"}]},"time":{"from":"now-1h","to":"now"},"timepicker":{"refresh_intervals":["30s"]},"timezone": "`}}{{ .Values.grafana.defaultDashboardsTimezone }}{{`","title":"Alertmanager / Overview","uid":"alertmanager-overview"}`}} + {{`{"graphTooltip":1,"panels":[{"collapsed":false,"gridPos":{"h":1,"w":24,"x":0,"y":0},"id":1,"panels":[],"title":"Alerts","type":"row"},{"datasource":{"type":"prometheus","uid":"$datasource"},"description":"current set of alerts stored in the Alertmanager","fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","stacking":{"mode":"normal"}},"unit":"none"}},"gridPos":{"h":7,"w":12,"x":0,"y":1},"id":2,"options":{"legend":{"showLegend":false},"tooltip":{"mode":"multi"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"sum(alertmanager_alerts{namespace=~\"$namespace\",service=~\"$service\"}) by (namespace,service,instance)","intervalFactor":2,"legendFormat":"{{instance}}"}],"title":"Alerts","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"$datasource"},"description":"rate of successful and invalid alerts received by the Alertmanager","fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","stacking":{"mode":"normal"}},"unit":"ops"}},"gridPos":{"h":7,"w":12,"x":12,"y":1},"id":3,"options":{"legend":{"showLegend":false},"tooltip":{"mode":"multi"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"sum(rate(alertmanager_alerts_received_total{namespace=~\"$namespace\",service=~\"$service\"}[$__rate_interval])) by (namespace,service,instance)","intervalFactor":2,"legendFormat":"{{instance}} Received"},{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"sum(rate(alertmanager_alerts_invalid_total{namespace=~\"$namespace\",service=~\"$service\"}[$__rate_interval])) by (namespace,service,instance)","intervalFactor":2,"legendFormat":"{{instance}} Invalid"}],"title":"Alerts receive rate","type":"timeseries"},{"collapsed":false,"gridPos":{"h":1,"w":24,"x":0,"y":8},"id":4,"panels":[],"title":"Notifications","type":"row"},{"datasource":{"type":"prometheus","uid":"$datasource"},"description":"rate of successful and invalid notifications sent by the Alertmanager","fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","stacking":{"mode":"normal"}},"unit":"ops"}},"gridPos":{"h":7,"w":12,"x":0,"y":9},"id":5,"options":{"legend":{"showLegend":false},"tooltip":{"mode":"multi"}},"pluginVersion":"v13.0.0","repeat":"integration","targets":[{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"sum(rate(alertmanager_notifications_total{namespace=~\"$namespace\",service=~\"$service\", integration=\"$integration\"}[$__rate_interval])) by (integration,namespace,service,instance)","intervalFactor":2,"legendFormat":"{{instance}} Total"},{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"sum(rate(alertmanager_notifications_failed_total{namespace=~\"$namespace\",service=~\"$service\", integration=\"$integration\"}[$__rate_interval])) by (integration,namespace,service,instance)","intervalFactor":2,"legendFormat":"{{instance}} Failed"}],"title":"$integration: Notifications Send Rate","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"$datasource"},"description":"latency of notifications sent by the Alertmanager","fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","stacking":{"mode":"normal"}},"unit":"s"}},"gridPos":{"h":7,"w":12,"x":12,"y":9},"id":6,"options":{"legend":{"showLegend":false},"tooltip":{"mode":"multi"}},"pluginVersion":"v13.0.0","repeat":"integration","targets":[{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"histogram_quantile(0.99,\n sum(rate(alertmanager_notification_latency_seconds_bucket{namespace=~\"$namespace\",service=~\"$service\", integration=\"$integration\"}[$__rate_interval])) by (le,namespace,service,instance)\n)\n","intervalFactor":2,"legendFormat":"{{instance}} 99th Percentile"},{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"histogram_quantile(0.50,\n sum(rate(alertmanager_notification_latency_seconds_bucket{namespace=~\"$namespace\",service=~\"$service\", integration=\"$integration\"}[$__rate_interval])) by (le,namespace,service,instance)\n)\n","intervalFactor":2,"legendFormat":"{{instance}} Median"},{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"sum(rate(alertmanager_notification_latency_seconds_sum{namespace=~\"$namespace\",service=~\"$service\", integration=\"$integration\"}[$__rate_interval])) by (namespace,service,instance)\n/\nsum(rate(alertmanager_notification_latency_seconds_count{namespace=~\"$namespace\",service=~\"$service\", integration=\"$integration\"}[$__rate_interval])) by (namespace,service,instance)\n","intervalFactor":2,"legendFormat":"{{instance}} Average"}],"title":"$integration: Notification Duration","type":"timeseries"}],"schemaVersion":39,"tags":["alertmanager-mixin"],"templating":{"list":[{"current":{"selected":false,"text":"Prometheus","value":"Prometheus"},"hide":0,"label":"Data Source","name":"datasource","query":"prometheus","type":"datasource"},{"current":{"selected":false,"text":"","value":""},"datasource":{"type":"prometheus","uid":"${datasource}"},"includeAll":false,"label":"namespace","name":"namespace","query":"label_values(alertmanager_alerts, namespace)","refresh":2,"sort":1,"type":"query"},{"current":{"selected":false,"text":"","value":""},"datasource":{"type":"prometheus","uid":"${datasource}"},"includeAll":false,"label":"service","name":"service","query":"label_values(alertmanager_alerts, service)","refresh":2,"sort":1,"type":"query"},{"current":{"selected":false,"text":"$__all","value":"$__all"},"datasource":{"type":"prometheus","uid":"${datasource}"},"hide":2,"includeAll":true,"name":"integration","query":"label_values(alertmanager_notifications_total{integration=~\".*\"}, integration)","refresh":2,"sort":1,"type":"query"}]},"time":{"from":"now-1h","to":"now"},"timepicker":{"refresh_intervals":["30s"]},"timezone": "`}}{{ .Values.grafana.defaultDashboardsTimezone }}{{`","title":"Alertmanager / Overview","uid":"alertmanager-overview"}`}} {{- end }} --- {{- if and .Values.grafana.operator.dashboardsConfigMapRefEnabled (or .Values.grafana.enabled .Values.grafana.forceDeployDashboards) (semverCompare ">=1.14.0-0" $kubeTargetVersion) (semverCompare "<9.9.9-9" $kubeTargetVersion) .Values.grafana.defaultDashboardsEnabled (or .Values.alertmanager.enabled .Values.alertmanager.forceDeployDashboards) }} diff --git a/charts/kube-prometheus-stack/templates/grafana/dashboards-1.14/apiserver.yaml b/charts/kube-prometheus-stack/templates/grafana/dashboards-1.14/apiserver.yaml index bd6d42c41e..3d5f98a1c3 100644 --- a/charts/kube-prometheus-stack/templates/grafana/dashboards-1.14/apiserver.yaml +++ b/charts/kube-prometheus-stack/templates/grafana/dashboards-1.14/apiserver.yaml @@ -1,5 +1,5 @@ {{- /* -Generated from 'apiserver' from https://raw.githubusercontent.com/prometheus-operator/kube-prometheus/eaca1a5fd76b356974054906af46810fec1cd7f8/manifests/grafana-dashboardDefinitions.yaml +Generated from 'apiserver' from https://raw.githubusercontent.com/prometheus-operator/kube-prometheus/4eafa8b5395ef839bb02a55e3b5fbdfa03280cf9/manifests/grafana-dashboardDefinitions.yaml Do not change in-place! In order to change this file first read following link: https://github.com/prometheus-community/helm-charts/tree/main/charts/kube-prometheus-stack/hack */ -}} @@ -21,7 +21,7 @@ metadata: {{- include "kube-prometheus-stack.labels" $ | nindent 4 }} data: apiserver.json: |- - {{`{"editable":`}}{{ .Values.grafana.defaultDashboardsEditable }}{{`,"links":[{"asDropdown":true,"includeVars":true,"keepTime":true,"tags":["kubernetes-mixin"],"targetBlank":false,"title":"Kubernetes","type":"dashboards"}],"panels":[{"datasource":{"type":"datasource","uid":"-- Mixed --"},"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":1,"options":{"content":"The SLO (service level objective) and other metrics displayed on this dashboard are for informational purposes only."},"pluginVersion":"v11.4.0","title":"Notice","type":"text"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"description":"How many percent of requests (both read and write) in 30 days have been answered successfully and fast enough?","fieldConfig":{"defaults":{"decimals":3,"unit":"percentunit"}},"gridPos":{"h":7,"w":8,"x":0,"y":2},"id":2,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"apiserver_request:availability30d{verb=\"all\", cluster=\"$cluster\"}"}],"title":"Availability (30d) > 99.000%","type":"stat"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"description":"How much error budget is left looking at our 99.000% availability guarantee?","fieldConfig":{"defaults":{"custom":{"fillOpacity":100},"decimals":3,"unit":"percentunit"}},"gridPos":{"h":7,"w":16,"x":8,"y":2},"id":3,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"100 * (apiserver_request:availability30d{verb=\"all\", cluster=\"$cluster\"} - 0.990000)","legendFormat":"error budget"}],"title":"Error Budget (30d) > 99.000%","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"description":"How many percent of read requests (LIST,GET) in 30 days have been answered successfully and fast enough?","fieldConfig":{"defaults":{"decimals":3,"unit":"percentunit"}},"gridPos":{"h":7,"w":6,"x":0,"y":9},"id":4,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"apiserver_request:availability30d{verb=\"read\", cluster=\"$cluster\"}"}],"title":"Read Availability (30d)","type":"stat"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"description":"How many read requests (LIST,GET) per second do the apiservers get by code?","fieldConfig":{"defaults":{"custom":{"fillOpacity":100,"stacking":{"mode":"normal"}},"unit":"reqps"},"overrides":[{"matcher":{"id":"byRegexp","options":"/2../i"},"properties":[{"id":"color","value":"#56A64B"}]},{"matcher":{"id":"byRegexp","options":"/3../i"},"properties":[{"id":"color","value":"#F2CC0C"}]},{"matcher":{"id":"byRegexp","options":"/4../i"},"properties":[{"id":"color","value":"#3274D9"}]},{"matcher":{"id":"byRegexp","options":"/5../i"},"properties":[{"id":"color","value":"#E02F44"}]}]},"gridPos":{"h":7,"w":6,"x":6,"y":9},"id":5,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum by (code) (code_resource:apiserver_request_total:rate5m{verb=\"read\", cluster=\"$cluster\"})","legendFormat":"{{ code }}"}],"title":"Read SLI - Requests","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"description":"How many percent of read requests (LIST,GET) per second are returned with errors (5xx)?","fieldConfig":{"defaults":{"min":0,"unit":"percentunit"}},"gridPos":{"h":7,"w":6,"x":12,"y":9},"id":6,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"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\"})","legendFormat":"{{ resource }}"}],"title":"Read SLI - Errors","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"description":"How many seconds is the 99th percentile for reading (LIST|GET) a given resource?","fieldConfig":{"defaults":{"unit":"s"}},"gridPos":{"h":7,"w":6,"x":18,"y":9},"id":7,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"cluster_quantile:apiserver_request_sli_duration_seconds:histogram_quantile{verb=\"read\", cluster=\"$cluster\"}","legendFormat":"{{ resource }}"}],"title":"Read SLI - Duration","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"description":"How many percent of write requests (POST|PUT|PATCH|DELETE) in 30 days have been answered successfully and fast enough?","fieldConfig":{"defaults":{"decimals":3,"unit":"percentunit"}},"gridPos":{"h":7,"w":6,"x":0,"y":16},"id":8,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"apiserver_request:availability30d{verb=\"write\", cluster=\"$cluster\"}"}],"title":"Write Availability (30d)","type":"stat"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"description":"How many write requests (POST|PUT|PATCH|DELETE) per second do the apiservers get by code?","fieldConfig":{"defaults":{"custom":{"fillOpacity":100,"stacking":{"mode":"normal"}},"unit":"reqps"},"overrides":[{"matcher":{"id":"byRegexp","options":"/2../i"},"properties":[{"id":"color","value":"#56A64B"}]},{"matcher":{"id":"byRegexp","options":"/3../i"},"properties":[{"id":"color","value":"#F2CC0C"}]},{"matcher":{"id":"byRegexp","options":"/4../i"},"properties":[{"id":"color","value":"#3274D9"}]},{"matcher":{"id":"byRegexp","options":"/5../i"},"properties":[{"id":"color","value":"#E02F44"}]}]},"gridPos":{"h":7,"w":6,"x":6,"y":16},"id":9,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum by (code) (code_resource:apiserver_request_total:rate5m{verb=\"write\", cluster=\"$cluster\"})","legendFormat":"{{ code }}"}],"title":"Write SLI - Requests","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"description":"How many percent of write requests (POST|PUT|PATCH|DELETE) per second are returned with errors (5xx)?","fieldConfig":{"defaults":{"min":0,"unit":"percentunit"}},"gridPos":{"h":7,"w":6,"x":12,"y":16},"id":10,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"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\"})","legendFormat":"{{ resource }}"}],"title":"Write SLI - Errors","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"description":"How many seconds is the 99th percentile for writing (POST|PUT|PATCH|DELETE) a given resource?","fieldConfig":{"defaults":{"unit":"s"}},"gridPos":{"h":7,"w":6,"x":18,"y":16},"id":11,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"cluster_quantile:apiserver_request_sli_duration_seconds:histogram_quantile{verb=\"write\", cluster=\"$cluster\"}","legendFormat":"{{ resource }}"}],"title":"Write SLI - Duration","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"min":0,"unit":"ops"}},"gridPos":{"h":7,"w":12,"x":0,"y":23},"id":12,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"placement":"right","showLegend":false},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(rate(workqueue_adds_total{job=\"`}}{{ $kubeApiserverJob }}{{`\", instance=~\"$instance\", cluster=\"$cluster\"}[$__rate_interval])) by (instance, name)","legendFormat":"{{instance}} {{name}}"}],"title":"Work Queue Add Rate","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"min":0,"unit":"short"}},"gridPos":{"h":7,"w":12,"x":12,"y":23},"id":13,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"placement":"right","showLegend":false},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(rate(workqueue_depth{job=\"`}}{{ $kubeApiserverJob }}{{`\", instance=~\"$instance\", cluster=\"$cluster\"}[$__rate_interval])) by (instance, name)","legendFormat":"{{instance}} {{name}}"}],"title":"Work Queue Depth","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"min":0,"unit":"s"}},"gridPos":{"h":7,"w":24,"x":0,"y":30},"id":14,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"histogram_quantile(0.99, sum(rate(workqueue_queue_duration_seconds_bucket{job=\"`}}{{ $kubeApiserverJob }}{{`\", instance=~\"$instance\", cluster=\"$cluster\"}[$__rate_interval])) by (instance, name, le))","legendFormat":"{{instance}} {{name}}"}],"title":"Work Queue Latency","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"unit":"bytes"}},"gridPos":{"h":7,"w":8,"x":0,"y":37},"id":15,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"process_resident_memory_bytes{job=\"`}}{{ $kubeApiserverJob }}{{`\",instance=~\"$instance\", cluster=\"$cluster\"}","legendFormat":"{{instance}}"}],"title":"Memory","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"min":0,"unit":"short"}},"gridPos":{"h":7,"w":8,"x":8,"y":37},"id":16,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"rate(process_cpu_seconds_total{job=\"`}}{{ $kubeApiserverJob }}{{`\",instance=~\"$instance\", cluster=\"$cluster\"}[$__rate_interval])","legendFormat":"{{instance}}"}],"title":"CPU usage","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"unit":"short"}},"gridPos":{"h":7,"w":8,"x":16,"y":37},"id":17,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"go_goroutines{job=\"`}}{{ $kubeApiserverJob }}{{`\",instance=~\"$instance\", cluster=\"$cluster\"}","legendFormat":"{{instance}}"}],"title":"Goroutines","type":"timeseries"}],"refresh":"10s","schemaVersion":39,"tags":["kubernetes-mixin"],"templating":{"list":[{"current":{"selected":true,"text":"default","value":"default"},"hide":0,"label":"Data source","name":"datasource","query":"prometheus","regex":"","type":"datasource"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"hide":`}}{{ if .Values.grafana.sidecar.dashboards.multicluster.global.enabled }}0{{ else }}2{{ end }}{{`,"label":"cluster","name":"cluster","query":"label_values(up{job=\"`}}{{ $kubeApiserverJob }}{{`\"}, cluster)","refresh":2,"sort":1,"type":"query","allValue":".*"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"hide":0,"includeAll":true,"name":"instance","query":"label_values(up{job=\"`}}{{ $kubeApiserverJob }}{{`\", cluster=\"$cluster\"}, instance)","refresh":2,"sort":1,"type":"query"}]},"time":{"from":"now-1h","to":"now"},"timezone": "`}}{{ .Values.grafana.defaultDashboardsTimezone }}{{`","title":"Kubernetes / API server","uid":"09ec8aa1e996d6ffcd6817bbaff4db1b"}`}} + {{`{"editable":`}}{{ .Values.grafana.defaultDashboardsEditable }}{{`,"links":[{"asDropdown":true,"includeVars":true,"keepTime":true,"tags":["kubernetes-mixin"],"targetBlank":false,"title":"Kubernetes","type":"dashboards"}],"panels":[{"datasource":{"type":"datasource","uid":"-- Mixed --"},"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":1,"options":{"content":"The SLO (service level objective) and other metrics displayed on this dashboard are for informational purposes only."},"pluginVersion":"v13.0.0","title":"Notice","type":"text"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"description":"How many percent of requests (both read and write) in 30 days have been answered successfully and fast enough?","fieldConfig":{"defaults":{"decimals":3,"unit":"percentunit"}},"gridPos":{"h":7,"w":8,"x":0,"y":2},"id":2,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"apiserver_request:availability30d{verb=\"all\", cluster=\"$cluster\"}"}],"title":"Availability (30d) > 99.000%","type":"stat"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"description":"How much error budget is left looking at our 99.000% availability guarantee?","fieldConfig":{"defaults":{"custom":{"fillOpacity":100},"decimals":3,"unit":"percentunit"}},"gridPos":{"h":7,"w":16,"x":8,"y":2},"id":3,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"100 * (apiserver_request:availability30d{verb=\"all\", cluster=\"$cluster\"} - 0.990000)","legendFormat":"error budget"}],"title":"Error Budget (30d) > 99.000%","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"description":"How many percent of read requests (LIST,GET) in 30 days have been answered successfully and fast enough?","fieldConfig":{"defaults":{"decimals":3,"unit":"percentunit"}},"gridPos":{"h":7,"w":6,"x":0,"y":9},"id":4,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"apiserver_request:availability30d{verb=\"read\", cluster=\"$cluster\"}"}],"title":"Read Availability (30d)","type":"stat"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"description":"How many read requests (LIST,GET) per second do the apiservers get by code?","fieldConfig":{"defaults":{"custom":{"fillOpacity":100,"stacking":{"mode":"normal"}},"unit":"reqps"},"overrides":[{"matcher":{"id":"byRegexp","options":"/2../i"},"properties":[{"id":"color","value":"#56A64B"}]},{"matcher":{"id":"byRegexp","options":"/3../i"},"properties":[{"id":"color","value":"#F2CC0C"}]},{"matcher":{"id":"byRegexp","options":"/4../i"},"properties":[{"id":"color","value":"#3274D9"}]},{"matcher":{"id":"byRegexp","options":"/5../i"},"properties":[{"id":"color","value":"#E02F44"}]}]},"gridPos":{"h":7,"w":6,"x":6,"y":9},"id":5,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum by (code) (code_resource:apiserver_request_total:rate5m{verb=\"read\", cluster=\"$cluster\"})","legendFormat":"{{ code }}"}],"title":"Read SLI - Requests","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"description":"How many percent of read requests (LIST,GET) per second are returned with errors (5xx)?","fieldConfig":{"defaults":{"min":0,"unit":"percentunit"}},"gridPos":{"h":7,"w":6,"x":12,"y":9},"id":6,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"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\"})","legendFormat":"{{ resource }}"}],"title":"Read SLI - Errors","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"description":"How many seconds is the 99th percentile for reading (LIST|GET) a given resource?","fieldConfig":{"defaults":{"unit":"s"}},"gridPos":{"h":7,"w":6,"x":18,"y":9},"id":7,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"cluster_quantile:apiserver_request_sli_duration_seconds:histogram_quantile{verb=\"read\", cluster=\"$cluster\"}","legendFormat":"{{ resource }}"}],"title":"Read SLI - Duration","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"description":"How many percent of write requests (POST|PUT|PATCH|DELETE) in 30 days have been answered successfully and fast enough?","fieldConfig":{"defaults":{"decimals":3,"unit":"percentunit"}},"gridPos":{"h":7,"w":6,"x":0,"y":16},"id":8,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"apiserver_request:availability30d{verb=\"write\", cluster=\"$cluster\"}"}],"title":"Write Availability (30d)","type":"stat"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"description":"How many write requests (POST|PUT|PATCH|DELETE) per second do the apiservers get by code?","fieldConfig":{"defaults":{"custom":{"fillOpacity":100,"stacking":{"mode":"normal"}},"unit":"reqps"},"overrides":[{"matcher":{"id":"byRegexp","options":"/2../i"},"properties":[{"id":"color","value":"#56A64B"}]},{"matcher":{"id":"byRegexp","options":"/3../i"},"properties":[{"id":"color","value":"#F2CC0C"}]},{"matcher":{"id":"byRegexp","options":"/4../i"},"properties":[{"id":"color","value":"#3274D9"}]},{"matcher":{"id":"byRegexp","options":"/5../i"},"properties":[{"id":"color","value":"#E02F44"}]}]},"gridPos":{"h":7,"w":6,"x":6,"y":16},"id":9,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum by (code) (code_resource:apiserver_request_total:rate5m{verb=\"write\", cluster=\"$cluster\"})","legendFormat":"{{ code }}"}],"title":"Write SLI - Requests","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"description":"How many percent of write requests (POST|PUT|PATCH|DELETE) per second are returned with errors (5xx)?","fieldConfig":{"defaults":{"min":0,"unit":"percentunit"}},"gridPos":{"h":7,"w":6,"x":12,"y":16},"id":10,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"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\"})","legendFormat":"{{ resource }}"}],"title":"Write SLI - Errors","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"description":"How many seconds is the 99th percentile for writing (POST|PUT|PATCH|DELETE) a given resource?","fieldConfig":{"defaults":{"unit":"s"}},"gridPos":{"h":7,"w":6,"x":18,"y":16},"id":11,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"cluster_quantile:apiserver_request_sli_duration_seconds:histogram_quantile{verb=\"write\", cluster=\"$cluster\"}","legendFormat":"{{ resource }}"}],"title":"Write SLI - Duration","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"min":0,"unit":"ops"}},"gridPos":{"h":7,"w":12,"x":0,"y":23},"id":12,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"placement":"right","showLegend":false},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(rate(workqueue_adds_total{job=\"`}}{{ $kubeApiserverJob }}{{`\", instance=~\"$instance\", cluster=\"$cluster\"}[$__rate_interval])) by (instance, name)","legendFormat":"{{instance}} {{name}}"}],"title":"Work Queue Add Rate","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"min":0,"unit":"short"}},"gridPos":{"h":7,"w":12,"x":12,"y":23},"id":13,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"placement":"right","showLegend":false},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(rate(workqueue_depth{job=\"`}}{{ $kubeApiserverJob }}{{`\", instance=~\"$instance\", cluster=\"$cluster\"}[$__rate_interval])) by (instance, name)","legendFormat":"{{instance}} {{name}}"}],"title":"Work Queue Depth","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"min":0,"unit":"s"}},"gridPos":{"h":7,"w":24,"x":0,"y":30},"id":14,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"histogram_quantile(0.99, sum(rate(workqueue_queue_duration_seconds_bucket{job=\"`}}{{ $kubeApiserverJob }}{{`\", instance=~\"$instance\", cluster=\"$cluster\"}[$__rate_interval])) by (instance, name, le))","legendFormat":"{{instance}} {{name}}"}],"title":"Work Queue Latency","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"unit":"bytes"}},"gridPos":{"h":7,"w":8,"x":0,"y":37},"id":15,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"process_resident_memory_bytes{job=\"`}}{{ $kubeApiserverJob }}{{`\",instance=~\"$instance\", cluster=\"$cluster\"}","legendFormat":"{{instance}}"}],"title":"Memory","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"min":0,"unit":"short"}},"gridPos":{"h":7,"w":8,"x":8,"y":37},"id":16,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"rate(process_cpu_seconds_total{job=\"`}}{{ $kubeApiserverJob }}{{`\",instance=~\"$instance\", cluster=\"$cluster\"}[$__rate_interval])","legendFormat":"{{instance}}"}],"title":"CPU usage","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"unit":"short"}},"gridPos":{"h":7,"w":8,"x":16,"y":37},"id":17,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"go_goroutines{job=\"`}}{{ $kubeApiserverJob }}{{`\",instance=~\"$instance\", cluster=\"$cluster\"}","legendFormat":"{{instance}}"}],"title":"Goroutines","type":"timeseries"}],"refresh":"10s","schemaVersion":39,"tags":["kubernetes-mixin"],"templating":{"list":[{"current":{"selected":true,"text":"default","value":"default"},"hide":0,"label":"Data source","name":"datasource","query":"prometheus","regex":"","type":"datasource"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"hide":`}}{{ if .Values.grafana.sidecar.dashboards.multicluster.global.enabled }}0{{ else }}2{{ end }}{{`,"label":"cluster","name":"cluster","query":"label_values(up{job=\"`}}{{ $kubeApiserverJob }}{{`\"}, cluster)","refresh":2,"sort":1,"type":"query","allValue":".*"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"hide":0,"includeAll":true,"name":"instance","query":"label_values(up{job=\"`}}{{ $kubeApiserverJob }}{{`\", cluster=\"$cluster\"}, instance)","refresh":2,"sort":1,"type":"query"}]},"time":{"from":"now-1h","to":"now"},"timezone": "`}}{{ .Values.grafana.defaultDashboardsTimezone }}{{`","title":"Kubernetes / API server","uid":"09ec8aa1e996d6ffcd6817bbaff4db1b"}`}} {{- end }} --- {{- if and .Values.grafana.operator.dashboardsConfigMapRefEnabled (or .Values.grafana.enabled .Values.grafana.forceDeployDashboards) (semverCompare ">=1.14.0-0" $kubeTargetVersion) (semverCompare "<9.9.9-9" $kubeTargetVersion) .Values.grafana.defaultDashboardsEnabled .Values.kubeApiServer.enabled }} diff --git a/charts/kube-prometheus-stack/templates/grafana/dashboards-1.14/cluster-total.yaml b/charts/kube-prometheus-stack/templates/grafana/dashboards-1.14/cluster-total.yaml index d16b826120..cc24956cf3 100644 --- a/charts/kube-prometheus-stack/templates/grafana/dashboards-1.14/cluster-total.yaml +++ b/charts/kube-prometheus-stack/templates/grafana/dashboards-1.14/cluster-total.yaml @@ -1,5 +1,5 @@ {{- /* -Generated from 'cluster-total' from https://raw.githubusercontent.com/prometheus-operator/kube-prometheus/eaca1a5fd76b356974054906af46810fec1cd7f8/manifests/grafana-dashboardDefinitions.yaml +Generated from 'cluster-total' from https://raw.githubusercontent.com/prometheus-operator/kube-prometheus/4eafa8b5395ef839bb02a55e3b5fbdfa03280cf9/manifests/grafana-dashboardDefinitions.yaml Do not change in-place! In order to change this file first read following link: https://github.com/prometheus-community/helm-charts/tree/main/charts/kube-prometheus-stack/hack */ -}} @@ -21,7 +21,7 @@ metadata: {{- include "kube-prometheus-stack.labels" $ | nindent 4 }} data: cluster-total.json: |- - {{`{"editable":`}}{{ .Values.grafana.defaultDashboardsEditable }}{{`,"links":[{"asDropdown":true,"includeVars":true,"keepTime":true,"tags":["kubernetes-mixin"],"targetBlank":false,"title":"Kubernetes","type":"dashboards"}],"panels":[{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"showPoints":"never"},"unit":"bps"}},"gridPos":{"h":9,"w":12,"x":0,"y":0},"id":1,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum by (namespace) (\n (8 * rate(container_network_receive_bytes_total{cluster=\"$cluster\",namespace!=\"\"}[$__rate_interval]))\n * on (cluster,namespace,pod) group_left ()\n topk by (cluster,namespace,pod) (\n 1,\n max by (cluster,namespace,pod) (kube_pod_info{host_network=\"false\",cluster=\"$cluster\"})\n )\n)\n","legendFormat":"__auto"}],"title":"Current Rate of Bits Received","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"showPoints":"never"},"unit":"bps"}},"gridPos":{"h":9,"w":12,"x":12,"y":0},"id":2,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum by (namespace) (\n (8 * rate(container_network_transmit_bytes_total{cluster=\"$cluster\",namespace!=\"\"}[$__rate_interval]))\n * on (cluster,namespace,pod) group_left ()\n topk by (cluster,namespace,pod) (\n 1,\n max by (cluster,namespace,pod) (kube_pod_info{host_network=\"false\",cluster=\"$cluster\"})\n )\n)\n","legendFormat":"__auto"}],"title":"Current Rate of Bits Transmitted","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"overrides":[{"matcher":{"id":"byRegexp","options":"/Bits/"},"properties":[{"id":"unit","value":"bps"}]},{"matcher":{"id":"byRegexp","options":"/Packets/"},"properties":[{"id":"unit","value":"pps"}]},{"matcher":{"id":"byName","options":"Namespace"},"properties":[{"id":"links","value":[{"title":"Drill down","url":"/d/8b7a8b326d7a6f1f04244066368c67af?${datasource:queryparam}&var-cluster=${cluster}&var-namespace=${__data.fields.Namespace}"}]}]}]},"gridPos":{"h":9,"w":24,"x":0,"y":9},"id":3,"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum by (namespace) (\n (8 * rate(container_network_receive_bytes_total{cluster=\"$cluster\",namespace!=\"\"}[$__rate_interval]))\n * on (cluster,namespace,pod) group_left ()\n topk by (cluster,namespace,pod) (\n 1,\n max by (cluster,namespace,pod) (kube_pod_info{host_network=\"false\",cluster=\"$cluster\"})\n )\n)\n","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum by (namespace) (\n (8 * rate(container_network_transmit_bytes_total{cluster=\"$cluster\",namespace!=\"\"}[$__rate_interval]))\n * on (cluster,namespace,pod) group_left ()\n topk by (cluster,namespace,pod) (\n 1,\n max by (cluster,namespace,pod) (kube_pod_info{host_network=\"false\",cluster=\"$cluster\"})\n )\n)\n","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"avg by (namespace) (\n (8 * rate(container_network_receive_bytes_total{cluster=\"$cluster\",namespace!=\"\"}[$__rate_interval]))\n * on (cluster,namespace,pod) group_left ()\n topk by (cluster,namespace,pod) (\n 1,\n max by (cluster,namespace,pod) (kube_pod_info{host_network=\"false\",cluster=\"$cluster\"})\n )\n)\n","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"avg by (namespace) (\n (8 * rate(container_network_transmit_bytes_total{cluster=\"$cluster\",namespace!=\"\"}[$__rate_interval]))\n * on (cluster,namespace,pod) group_left ()\n topk by (cluster,namespace,pod) (\n 1,\n max by (cluster,namespace,pod) (kube_pod_info{host_network=\"false\",cluster=\"$cluster\"})\n )\n)\n","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum by (namespace) (\n rate(container_network_receive_packets_total{cluster=\"$cluster\",namespace!=\"\"}[$__rate_interval])\n * on (cluster,namespace,pod) group_left ()\n topk by (cluster,namespace,pod) (\n 1,\n max by (cluster,namespace,pod) (kube_pod_info{host_network=\"false\",cluster=\"$cluster\"})\n )\n)\n","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum by (namespace) (\n rate(container_network_transmit_packets_total{cluster=\"$cluster\",namespace!=\"\"}[$__rate_interval])\n * on (cluster,namespace,pod) group_left ()\n topk by (cluster,namespace,pod) (\n 1,\n max by (cluster,namespace,pod) (kube_pod_info{host_network=\"false\",cluster=\"$cluster\"})\n )\n)\n","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum by (namespace) (\n rate(container_network_receive_packets_dropped_total{cluster=\"$cluster\",namespace!=\"\"}[$__rate_interval])\n * on (cluster,namespace,pod) group_left ()\n topk by (cluster,namespace,pod) (\n 1,\n max by (cluster,namespace,pod) (kube_pod_info{host_network=\"false\",cluster=\"$cluster\"})\n )\n)\n","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum by (namespace) (\n rate(container_network_transmit_packets_dropped_total{cluster=\"$cluster\",namespace!=\"\"}[$__rate_interval])\n * on (cluster,namespace,pod) group_left ()\n topk by (cluster,namespace,pod) (\n 1,\n max by (cluster,namespace,pod) (kube_pod_info{host_network=\"false\",cluster=\"$cluster\"})\n )\n)\n","format":"table","instant":true}],"title":"Current Status","transformations":[{"id":"joinByField","options":{"byField":"namespace","mode":"outer"}},{"id":"organize","options":{"excludeByName":{"Time":true,"Time 1":true,"Time 2":true,"Time 3":true,"Time 4":true,"Time 5":true,"Time 6":true,"Time 7":true,"Time 8":true},"indexByName":{"Time 1":0,"Time 2":1,"Time 3":2,"Time 4":3,"Time 5":4,"Time 6":5,"Time 7":6,"Time 8":7,"Value #A":9,"Value #B":10,"Value #C":11,"Value #D":12,"Value #E":13,"Value #F":14,"Value #G":15,"Value #H":16,"namespace":8},"renameByName":{"Value #A":"Rx Bits","Value #B":"Tx Bits","Value #C":"Rx Bits (Avg)","Value #D":"Tx Bits (Avg)","Value #E":"Rx Packets","Value #F":"Tx Packets","Value #G":"Rx Packets Dropped","Value #H":"Tx Packets Dropped","namespace":"Namespace"}}}],"type":"table"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"showPoints":"never"},"unit":"bps"}},"gridPos":{"h":9,"w":12,"x":0,"y":18},"id":4,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"avg by (namespace) (\n (8 * rate(container_network_receive_bytes_total{cluster=\"$cluster\",namespace!=\"\"}[$__rate_interval]))\n * on (cluster,namespace,pod) group_left ()\n topk by (cluster,namespace,pod) (\n 1,\n max by (cluster,namespace,pod) (kube_pod_info{host_network=\"false\",cluster=\"$cluster\"})\n )\n)\n","legendFormat":"__auto"}],"title":"Average Rate of Bits Received","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"showPoints":"never"},"unit":"bps"}},"gridPos":{"h":9,"w":12,"x":12,"y":18},"id":5,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"avg by (namespace) (\n (8 * rate(container_network_transmit_bytes_total{cluster=\"$cluster\",namespace!=\"\"}[$__rate_interval]))\n * on (cluster,namespace,pod) group_left ()\n topk by (cluster,namespace,pod) (\n 1,\n max by (cluster,namespace,pod) (kube_pod_info{host_network=\"false\",cluster=\"$cluster\"})\n )\n)\n","legendFormat":"__auto"}],"title":"Average Rate of Bits Transmitted","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"showPoints":"never"},"unit":"bps"}},"gridPos":{"h":9,"w":12,"x":0,"y":27},"id":6,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum by (namespace) (\n (8 * rate(container_network_receive_bytes_total{cluster=\"$cluster\",namespace!=\"\"}[$__rate_interval]))\n * on (cluster,namespace,pod) group_left ()\n topk by (cluster,namespace,pod) (\n 1,\n max by (cluster,namespace,pod) (kube_pod_info{host_network=\"false\",cluster=\"$cluster\"})\n )\n)\n","legendFormat":"__auto"}],"title":"Receive Bandwidth","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"showPoints":"never"},"unit":"bps"}},"gridPos":{"h":9,"w":12,"x":12,"y":27},"id":7,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum by (namespace) (\n (8 * rate(container_network_transmit_bytes_total{cluster=\"$cluster\",namespace!=\"\"}[$__rate_interval]))\n * on (cluster,namespace,pod) group_left ()\n topk by (cluster,namespace,pod) (\n 1,\n max by (cluster,namespace,pod) (kube_pod_info{host_network=\"false\",cluster=\"$cluster\"})\n )\n)\n","legendFormat":"__auto"}],"title":"Transmit Bandwidth","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"showPoints":"never"},"unit":"pps"}},"gridPos":{"h":9,"w":12,"x":0,"y":36},"id":8,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum by (namespace) (\n rate(container_network_receive_packets_total{cluster=\"$cluster\",namespace!=\"\"}[$__rate_interval])\n * on (cluster,namespace,pod) group_left ()\n topk by (cluster,namespace,pod) (\n 1,\n max by (cluster,namespace,pod) (kube_pod_info{host_network=\"false\",cluster=\"$cluster\"})\n )\n)\n","legendFormat":"__auto"}],"title":"Rate of Received Packets","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"showPoints":"never"},"unit":"pps"}},"gridPos":{"h":9,"w":12,"x":12,"y":36},"id":9,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum by (namespace) (\n rate(container_network_transmit_packets_total{cluster=\"$cluster\",namespace!=\"\"}[$__rate_interval])\n * on (cluster,namespace,pod) group_left ()\n topk by (cluster,namespace,pod) (\n 1,\n max by (cluster,namespace,pod) (kube_pod_info{host_network=\"false\",cluster=\"$cluster\"})\n )\n)\n","legendFormat":"__auto"}],"title":"Rate of Transmitted Packets","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"showPoints":"never"},"unit":"pps"}},"gridPos":{"h":9,"w":12,"x":0,"y":45},"id":10,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum by (namespace) (\n rate(container_network_receive_packets_dropped_total{cluster=\"$cluster\",namespace!=\"\"}[$__rate_interval])\n * on (cluster,namespace,pod) group_left ()\n topk by (cluster,namespace,pod) (\n 1,\n max by (cluster,namespace,pod) (kube_pod_info{host_network=\"false\",cluster=\"$cluster\"})\n )\n)\n","legendFormat":"__auto"}],"title":"Rate of Received Packets Dropped","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"showPoints":"never"},"unit":"pps"}},"gridPos":{"h":9,"w":12,"x":12,"y":45},"id":11,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum by (namespace) (\n rate(container_network_transmit_packets_dropped_total{cluster=\"$cluster\",namespace!=\"\"}[$__rate_interval])\n * on (cluster,namespace,pod) group_left ()\n topk by (cluster,namespace,pod) (\n 1,\n max by (cluster,namespace,pod) (kube_pod_info{host_network=\"false\",cluster=\"$cluster\"})\n )\n)\n","legendFormat":"__auto"}],"title":"Rate of Transmitted Packets Dropped","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"showPoints":"never"},"unit":"percentunit"}},"gridPos":{"h":9,"w":12,"x":0,"y":54},"id":12,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum by (instance) (\n rate(node_netstat_Tcp_RetransSegs{cluster=\"$cluster\"}[$__rate_interval]) / rate(node_netstat_Tcp_OutSegs{cluster=\"$cluster\"}[$__rate_interval])\n)\n","legendFormat":"__auto"}],"title":"Rate of TCP Retransmits out of all sent segments","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"showPoints":"never"},"unit":"percentunit"}},"gridPos":{"h":9,"w":12,"x":12,"y":54},"id":13,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum by (instance) (\n rate(node_netstat_TcpExt_TCPSynRetrans{cluster=\"$cluster\"}[$__rate_interval]) / rate(node_netstat_Tcp_RetransSegs{cluster=\"$cluster\"}[$__rate_interval])\n)\n","legendFormat":"__auto"}],"title":"Rate of TCP SYN Retransmits out of all retransmits","type":"timeseries"}],"refresh":"10s","schemaVersion":39,"tags":["kubernetes-mixin"],"templating":{"list":[{"current":{"selected":true,"text":"default","value":"default"},"hide":0,"label":"Data source","name":"datasource","query":"prometheus","regex":"","type":"datasource"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"hide":`}}{{ if .Values.grafana.sidecar.dashboards.multicluster.global.enabled }}0{{ else }}2{{ end }}{{`,"label":"cluster","name":"cluster","query":"label_values(up{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\"}, cluster)","refresh":2,"sort":1,"type":"query","allValue":".*"}]},"time":{"from":"now-1h","to":"now"},"timezone": "`}}{{ .Values.grafana.defaultDashboardsTimezone }}{{`","title":"Kubernetes / Networking / Cluster","uid":"ff635a025bcfea7bc3dd4f508990a3e9"}`}} + {{`{"editable":`}}{{ .Values.grafana.defaultDashboardsEditable }}{{`,"links":[{"asDropdown":true,"includeVars":true,"keepTime":true,"tags":["kubernetes-mixin"],"targetBlank":false,"title":"Kubernetes","type":"dashboards"}],"panels":[{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"showPoints":"never"},"unit":"bps"}},"gridPos":{"h":9,"w":12,"x":0,"y":0},"id":1,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum by (namespace) (\n (8 * rate(container_network_receive_bytes_total{cluster=\"$cluster\",namespace!=\"\"}[$__rate_interval]))\n * on (cluster,namespace,pod) group_left ()\n topk by (cluster,namespace,pod) (\n 1,\n max by (cluster,namespace,pod) (kube_pod_info{host_network=\"false\",cluster=\"$cluster\"})\n )\n)\n","legendFormat":"__auto"}],"title":"Current Rate of Bits Received","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"showPoints":"never"},"unit":"bps"}},"gridPos":{"h":9,"w":12,"x":12,"y":0},"id":2,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum by (namespace) (\n (8 * rate(container_network_transmit_bytes_total{cluster=\"$cluster\",namespace!=\"\"}[$__rate_interval]))\n * on (cluster,namespace,pod) group_left ()\n topk by (cluster,namespace,pod) (\n 1,\n max by (cluster,namespace,pod) (kube_pod_info{host_network=\"false\",cluster=\"$cluster\"})\n )\n)\n","legendFormat":"__auto"}],"title":"Current Rate of Bits Transmitted","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"overrides":[{"matcher":{"id":"byRegexp","options":"/Bits/"},"properties":[{"id":"unit","value":"bps"}]},{"matcher":{"id":"byRegexp","options":"/Packets/"},"properties":[{"id":"unit","value":"pps"}]},{"matcher":{"id":"byName","options":"Namespace"},"properties":[{"id":"links","value":[{"title":"Drill down","url":"/d/8b7a8b326d7a6f1f04244066368c67af?${datasource:queryparam}&var-cluster=${cluster}&var-namespace=${__data.fields.Namespace}"}]}]}]},"gridPos":{"h":9,"w":24,"x":0,"y":9},"id":3,"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum by (namespace) (\n (8 * rate(container_network_receive_bytes_total{cluster=\"$cluster\",namespace!=\"\"}[$__rate_interval]))\n * on (cluster,namespace,pod) group_left ()\n topk by (cluster,namespace,pod) (\n 1,\n max by (cluster,namespace,pod) (kube_pod_info{host_network=\"false\",cluster=\"$cluster\"})\n )\n)\n","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum by (namespace) (\n (8 * rate(container_network_transmit_bytes_total{cluster=\"$cluster\",namespace!=\"\"}[$__rate_interval]))\n * on (cluster,namespace,pod) group_left ()\n topk by (cluster,namespace,pod) (\n 1,\n max by (cluster,namespace,pod) (kube_pod_info{host_network=\"false\",cluster=\"$cluster\"})\n )\n)\n","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"avg by (namespace) (\n (8 * rate(container_network_receive_bytes_total{cluster=\"$cluster\",namespace!=\"\"}[$__rate_interval]))\n * on (cluster,namespace,pod) group_left ()\n topk by (cluster,namespace,pod) (\n 1,\n max by (cluster,namespace,pod) (kube_pod_info{host_network=\"false\",cluster=\"$cluster\"})\n )\n)\n","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"avg by (namespace) (\n (8 * rate(container_network_transmit_bytes_total{cluster=\"$cluster\",namespace!=\"\"}[$__rate_interval]))\n * on (cluster,namespace,pod) group_left ()\n topk by (cluster,namespace,pod) (\n 1,\n max by (cluster,namespace,pod) (kube_pod_info{host_network=\"false\",cluster=\"$cluster\"})\n )\n)\n","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum by (namespace) (\n rate(container_network_receive_packets_total{cluster=\"$cluster\",namespace!=\"\"}[$__rate_interval])\n * on (cluster,namespace,pod) group_left ()\n topk by (cluster,namespace,pod) (\n 1,\n max by (cluster,namespace,pod) (kube_pod_info{host_network=\"false\",cluster=\"$cluster\"})\n )\n)\n","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum by (namespace) (\n rate(container_network_transmit_packets_total{cluster=\"$cluster\",namespace!=\"\"}[$__rate_interval])\n * on (cluster,namespace,pod) group_left ()\n topk by (cluster,namespace,pod) (\n 1,\n max by (cluster,namespace,pod) (kube_pod_info{host_network=\"false\",cluster=\"$cluster\"})\n )\n)\n","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum by (namespace) (\n rate(container_network_receive_packets_dropped_total{cluster=\"$cluster\",namespace!=\"\"}[$__rate_interval])\n * on (cluster,namespace,pod) group_left ()\n topk by (cluster,namespace,pod) (\n 1,\n max by (cluster,namespace,pod) (kube_pod_info{host_network=\"false\",cluster=\"$cluster\"})\n )\n)\n","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum by (namespace) (\n rate(container_network_transmit_packets_dropped_total{cluster=\"$cluster\",namespace!=\"\"}[$__rate_interval])\n * on (cluster,namespace,pod) group_left ()\n topk by (cluster,namespace,pod) (\n 1,\n max by (cluster,namespace,pod) (kube_pod_info{host_network=\"false\",cluster=\"$cluster\"})\n )\n)\n","format":"table","instant":true}],"title":"Current Status","transformations":[{"id":"joinByField","options":{"byField":"namespace","mode":"outer"}},{"id":"organize","options":{"excludeByName":{"Time":true,"Time 1":true,"Time 2":true,"Time 3":true,"Time 4":true,"Time 5":true,"Time 6":true,"Time 7":true,"Time 8":true},"indexByName":{"Time 1":0,"Time 2":1,"Time 3":2,"Time 4":3,"Time 5":4,"Time 6":5,"Time 7":6,"Time 8":7,"Value #A":9,"Value #B":10,"Value #C":11,"Value #D":12,"Value #E":13,"Value #F":14,"Value #G":15,"Value #H":16,"namespace":8},"renameByName":{"Value #A":"Rx Bits","Value #B":"Tx Bits","Value #C":"Rx Bits (Avg)","Value #D":"Tx Bits (Avg)","Value #E":"Rx Packets","Value #F":"Tx Packets","Value #G":"Rx Packets Dropped","Value #H":"Tx Packets Dropped","namespace":"Namespace"}}}],"type":"table"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"showPoints":"never"},"unit":"bps"}},"gridPos":{"h":9,"w":12,"x":0,"y":18},"id":4,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"avg by (namespace) (\n (8 * rate(container_network_receive_bytes_total{cluster=\"$cluster\",namespace!=\"\"}[$__rate_interval]))\n * on (cluster,namespace,pod) group_left ()\n topk by (cluster,namespace,pod) (\n 1,\n max by (cluster,namespace,pod) (kube_pod_info{host_network=\"false\",cluster=\"$cluster\"})\n )\n)\n","legendFormat":"__auto"}],"title":"Average Rate of Bits Received","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"showPoints":"never"},"unit":"bps"}},"gridPos":{"h":9,"w":12,"x":12,"y":18},"id":5,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"avg by (namespace) (\n (8 * rate(container_network_transmit_bytes_total{cluster=\"$cluster\",namespace!=\"\"}[$__rate_interval]))\n * on (cluster,namespace,pod) group_left ()\n topk by (cluster,namespace,pod) (\n 1,\n max by (cluster,namespace,pod) (kube_pod_info{host_network=\"false\",cluster=\"$cluster\"})\n )\n)\n","legendFormat":"__auto"}],"title":"Average Rate of Bits Transmitted","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"showPoints":"never"},"unit":"bps"}},"gridPos":{"h":9,"w":12,"x":0,"y":27},"id":6,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum by (namespace) (\n (8 * rate(container_network_receive_bytes_total{cluster=\"$cluster\",namespace!=\"\"}[$__rate_interval]))\n * on (cluster,namespace,pod) group_left ()\n topk by (cluster,namespace,pod) (\n 1,\n max by (cluster,namespace,pod) (kube_pod_info{host_network=\"false\",cluster=\"$cluster\"})\n )\n)\n","legendFormat":"__auto"}],"title":"Receive Bandwidth","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"showPoints":"never"},"unit":"bps"}},"gridPos":{"h":9,"w":12,"x":12,"y":27},"id":7,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum by (namespace) (\n (8 * rate(container_network_transmit_bytes_total{cluster=\"$cluster\",namespace!=\"\"}[$__rate_interval]))\n * on (cluster,namespace,pod) group_left ()\n topk by (cluster,namespace,pod) (\n 1,\n max by (cluster,namespace,pod) (kube_pod_info{host_network=\"false\",cluster=\"$cluster\"})\n )\n)\n","legendFormat":"__auto"}],"title":"Transmit Bandwidth","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"showPoints":"never"},"unit":"pps"}},"gridPos":{"h":9,"w":12,"x":0,"y":36},"id":8,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum by (namespace) (\n rate(container_network_receive_packets_total{cluster=\"$cluster\",namespace!=\"\"}[$__rate_interval])\n * on (cluster,namespace,pod) group_left ()\n topk by (cluster,namespace,pod) (\n 1,\n max by (cluster,namespace,pod) (kube_pod_info{host_network=\"false\",cluster=\"$cluster\"})\n )\n)\n","legendFormat":"__auto"}],"title":"Rate of Received Packets","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"showPoints":"never"},"unit":"pps"}},"gridPos":{"h":9,"w":12,"x":12,"y":36},"id":9,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum by (namespace) (\n rate(container_network_transmit_packets_total{cluster=\"$cluster\",namespace!=\"\"}[$__rate_interval])\n * on (cluster,namespace,pod) group_left ()\n topk by (cluster,namespace,pod) (\n 1,\n max by (cluster,namespace,pod) (kube_pod_info{host_network=\"false\",cluster=\"$cluster\"})\n )\n)\n","legendFormat":"__auto"}],"title":"Rate of Transmitted Packets","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"showPoints":"never"},"unit":"pps"}},"gridPos":{"h":9,"w":12,"x":0,"y":45},"id":10,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum by (namespace) (\n rate(container_network_receive_packets_dropped_total{cluster=\"$cluster\",namespace!=\"\"}[$__rate_interval])\n * on (cluster,namespace,pod) group_left ()\n topk by (cluster,namespace,pod) (\n 1,\n max by (cluster,namespace,pod) (kube_pod_info{host_network=\"false\",cluster=\"$cluster\"})\n )\n)\n","legendFormat":"__auto"}],"title":"Rate of Received Packets Dropped","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"showPoints":"never"},"unit":"pps"}},"gridPos":{"h":9,"w":12,"x":12,"y":45},"id":11,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum by (namespace) (\n rate(container_network_transmit_packets_dropped_total{cluster=\"$cluster\",namespace!=\"\"}[$__rate_interval])\n * on (cluster,namespace,pod) group_left ()\n topk by (cluster,namespace,pod) (\n 1,\n max by (cluster,namespace,pod) (kube_pod_info{host_network=\"false\",cluster=\"$cluster\"})\n )\n)\n","legendFormat":"__auto"}],"title":"Rate of Transmitted Packets Dropped","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"showPoints":"never"},"unit":"percentunit"}},"gridPos":{"h":9,"w":12,"x":0,"y":54},"id":12,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum by (instance) (\n rate(node_netstat_Tcp_RetransSegs{cluster=\"$cluster\"}[$__rate_interval]) / rate(node_netstat_Tcp_OutSegs{cluster=\"$cluster\"}[$__rate_interval])\n)\n","legendFormat":"__auto"}],"title":"Rate of TCP Retransmits out of all sent segments","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"showPoints":"never"},"unit":"percentunit"}},"gridPos":{"h":9,"w":12,"x":12,"y":54},"id":13,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum by (instance) (\n rate(node_netstat_TcpExt_TCPSynRetrans{cluster=\"$cluster\"}[$__rate_interval]) / rate(node_netstat_Tcp_RetransSegs{cluster=\"$cluster\"}[$__rate_interval])\n)\n","legendFormat":"__auto"}],"title":"Rate of TCP SYN Retransmits out of all retransmits","type":"timeseries"}],"refresh":"10s","schemaVersion":39,"tags":["kubernetes-mixin"],"templating":{"list":[{"current":{"selected":true,"text":"default","value":"default"},"hide":0,"label":"Data source","name":"datasource","query":"prometheus","regex":"","type":"datasource"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"hide":`}}{{ if .Values.grafana.sidecar.dashboards.multicluster.global.enabled }}0{{ else }}2{{ end }}{{`,"label":"cluster","name":"cluster","query":"label_values(up{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\"}, cluster)","refresh":2,"sort":1,"type":"query","allValue":".*"}]},"time":{"from":"now-1h","to":"now"},"timezone": "`}}{{ .Values.grafana.defaultDashboardsTimezone }}{{`","title":"Kubernetes / Networking / Cluster","uid":"ff635a025bcfea7bc3dd4f508990a3e9"}`}} {{- end }} --- {{- if and .Values.grafana.operator.dashboardsConfigMapRefEnabled (or .Values.grafana.enabled .Values.grafana.forceDeployDashboards) (semverCompare ">=1.14.0-0" $kubeTargetVersion) (semverCompare "<9.9.9-9" $kubeTargetVersion) .Values.grafana.defaultDashboardsEnabled }} diff --git a/charts/kube-prometheus-stack/templates/grafana/dashboards-1.14/controller-manager.yaml b/charts/kube-prometheus-stack/templates/grafana/dashboards-1.14/controller-manager.yaml index 0788ccfd02..f98c78d346 100644 --- a/charts/kube-prometheus-stack/templates/grafana/dashboards-1.14/controller-manager.yaml +++ b/charts/kube-prometheus-stack/templates/grafana/dashboards-1.14/controller-manager.yaml @@ -1,5 +1,5 @@ {{- /* -Generated from 'controller-manager' from https://raw.githubusercontent.com/prometheus-operator/kube-prometheus/eaca1a5fd76b356974054906af46810fec1cd7f8/manifests/grafana-dashboardDefinitions.yaml +Generated from 'controller-manager' from https://raw.githubusercontent.com/prometheus-operator/kube-prometheus/4eafa8b5395ef839bb02a55e3b5fbdfa03280cf9/manifests/grafana-dashboardDefinitions.yaml Do not change in-place! In order to change this file first read following link: https://github.com/prometheus-community/helm-charts/tree/main/charts/kube-prometheus-stack/hack */ -}} @@ -21,7 +21,7 @@ metadata: {{- include "kube-prometheus-stack.labels" $ | nindent 4 }} data: controller-manager.json: |- - {{`{"editable":`}}{{ .Values.grafana.defaultDashboardsEditable }}{{`,"links":[{"asDropdown":true,"includeVars":true,"keepTime":true,"tags":["kubernetes-mixin"],"targetBlank":false,"title":"Kubernetes","type":"dashboards"}],"panels":[{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"unit":"none"}},"gridPos":{"h":7,"w":4,"x":0,"y":0},"id":1,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"colorMode":"none"},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(up{cluster=\"$cluster\", job=\"`}}{{ $kubeControllerManagerJob }}{{`\"})","instant":true}],"title":"Up","type":"stat"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"ops"}},"gridPos":{"h":7,"w":20,"x":4,"y":0},"id":2,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(rate(workqueue_adds_total{cluster=\"$cluster\", job=\"`}}{{ $kubeControllerManagerJob }}{{`\", instance=~\"$instance\"}[$__rate_interval])) by (cluster, instance, name)","legendFormat":"{{cluster}} {{instance}} {{name}}"}],"title":"Work Queue Add Rate","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"short"}},"gridPos":{"h":7,"w":24,"x":0,"y":7},"id":3,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(rate(workqueue_depth{cluster=\"$cluster\", job=\"`}}{{ $kubeControllerManagerJob }}{{`\", instance=~\"$instance\"}[$__rate_interval])) by (cluster, instance, name)","legendFormat":"{{cluster}} {{instance}} {{name}}"}],"title":"Work Queue Depth","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"s"}},"gridPos":{"h":7,"w":24,"x":0,"y":14},"id":4,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"histogram_quantile(0.99, sum(rate(workqueue_queue_duration_seconds_bucket{cluster=\"$cluster\", job=\"`}}{{ $kubeControllerManagerJob }}{{`\", instance=~\"$instance\"}[$__rate_interval])) by (cluster, instance, name, le))","legendFormat":"{{cluster}} {{instance}} {{name}}"}],"title":"Work Queue Latency","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"ops"}},"gridPos":{"h":7,"w":8,"x":0,"y":21},"id":5,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(rate(rest_client_requests_total{job=\"`}}{{ $kubeControllerManagerJob }}{{`\", instance=~\"$instance\",code=~\"2..\"}[$__rate_interval]))","legendFormat":"2xx"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(rate(rest_client_requests_total{job=\"`}}{{ $kubeControllerManagerJob }}{{`\", instance=~\"$instance\",code=~\"3..\"}[$__rate_interval]))","legendFormat":"3xx"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(rate(rest_client_requests_total{job=\"`}}{{ $kubeControllerManagerJob }}{{`\", instance=~\"$instance\",code=~\"4..\"}[$__rate_interval]))","legendFormat":"4xx"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(rate(rest_client_requests_total{job=\"`}}{{ $kubeControllerManagerJob }}{{`\", instance=~\"$instance\",code=~\"5..\"}[$__rate_interval]))","legendFormat":"5xx"}],"title":"Kube API Request Rate","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"s"}},"gridPos":{"h":7,"w":16,"x":8,"y":21},"id":6,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"histogram_quantile(0.99, sum(rate(rest_client_request_duration_seconds_bucket{cluster=\"$cluster\", job=\"`}}{{ $kubeControllerManagerJob }}{{`\", instance=~\"$instance\", verb=\"POST\"}[$__rate_interval])) by (verb, le))","legendFormat":"{{verb}}"}],"title":"Post Request Latency 99th Quantile","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"s"}},"gridPos":{"h":7,"w":24,"x":0,"y":28},"id":7,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"histogram_quantile(0.99, sum(rate(rest_client_request_duration_seconds_bucket{cluster=\"$cluster\", job=\"`}}{{ $kubeControllerManagerJob }}{{`\", instance=~\"$instance\", verb=\"GET\"}[$__rate_interval])) by (verb, le))","legendFormat":"{{verb}}"}],"title":"Get Request Latency 99th Quantile","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"bytes"}},"gridPos":{"h":7,"w":8,"x":0,"y":35},"id":8,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"process_resident_memory_bytes{cluster=\"$cluster\", job=\"`}}{{ $kubeControllerManagerJob }}{{`\",instance=~\"$instance\"}","legendFormat":"{{instance}}"}],"title":"Memory","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"short"}},"gridPos":{"h":7,"w":8,"x":8,"y":35},"id":9,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"rate(process_cpu_seconds_total{cluster=\"$cluster\", job=\"`}}{{ $kubeControllerManagerJob }}{{`\",instance=~\"$instance\"}[$__rate_interval])","legendFormat":"{{instance}}"}],"title":"CPU usage","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"short"}},"gridPos":{"h":7,"w":8,"x":16,"y":35},"id":10,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"go_goroutines{cluster=\"$cluster\", job=\"`}}{{ $kubeControllerManagerJob }}{{`\",instance=~\"$instance\"}","legendFormat":"{{instance}}"}],"title":"Goroutines","type":"timeseries"}],"refresh":"10s","schemaVersion":39,"tags":["kubernetes-mixin"],"templating":{"list":[{"current":{"selected":true,"text":"default","value":"default"},"hide":0,"label":"Data source","name":"datasource","query":"prometheus","regex":"","type":"datasource"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"hide":`}}{{ if .Values.grafana.sidecar.dashboards.multicluster.global.enabled }}0{{ else }}2{{ end }}{{`,"label":"cluster","name":"cluster","query":"label_values(up{job=\"`}}{{ $kubeControllerManagerJob }}{{`\"}, cluster)","refresh":2,"sort":1,"type":"query","allValue":".*"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"hide":0,"includeAll":true,"label":"instance","name":"instance","query":"label_values(up{cluster=\"$cluster\", job=\"`}}{{ $kubeControllerManagerJob }}{{`\"}, instance)","refresh":2,"sort":1,"type":"query"}]},"time":{"from":"now-1h","to":"now"},"timezone": "`}}{{ .Values.grafana.defaultDashboardsTimezone }}{{`","title":"Kubernetes / Controller Manager","uid":"72e0e05bef5099e5f049b05fdc429ed4"}`}} + {{`{"editable":`}}{{ .Values.grafana.defaultDashboardsEditable }}{{`,"links":[{"asDropdown":true,"includeVars":true,"keepTime":true,"tags":["kubernetes-mixin"],"targetBlank":false,"title":"Kubernetes","type":"dashboards"}],"panels":[{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"unit":"none"}},"gridPos":{"h":7,"w":4,"x":0,"y":0},"id":1,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"colorMode":"none"},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(up{cluster=\"$cluster\", job=\"`}}{{ $kubeControllerManagerJob }}{{`\"})","instant":true}],"title":"Up","type":"stat"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"ops"}},"gridPos":{"h":7,"w":20,"x":4,"y":0},"id":2,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(rate(workqueue_adds_total{cluster=\"$cluster\", job=\"`}}{{ $kubeControllerManagerJob }}{{`\", instance=~\"$instance\"}[$__rate_interval])) by (cluster, instance, name)","legendFormat":"{{cluster}} {{instance}} {{name}}"}],"title":"Work Queue Add Rate","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"short"}},"gridPos":{"h":7,"w":24,"x":0,"y":7},"id":3,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(rate(workqueue_depth{cluster=\"$cluster\", job=\"`}}{{ $kubeControllerManagerJob }}{{`\", instance=~\"$instance\"}[$__rate_interval])) by (cluster, instance, name)","legendFormat":"{{cluster}} {{instance}} {{name}}"}],"title":"Work Queue Depth","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"s"}},"gridPos":{"h":7,"w":24,"x":0,"y":14},"id":4,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"histogram_quantile(0.99, sum(rate(workqueue_queue_duration_seconds_bucket{cluster=\"$cluster\", job=\"`}}{{ $kubeControllerManagerJob }}{{`\", instance=~\"$instance\"}[$__rate_interval])) by (cluster, instance, name, le))","legendFormat":"{{cluster}} {{instance}} {{name}}"}],"title":"Work Queue Latency","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"ops"}},"gridPos":{"h":7,"w":8,"x":0,"y":21},"id":5,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(rate(rest_client_requests_total{job=\"`}}{{ $kubeControllerManagerJob }}{{`\", instance=~\"$instance\",code=~\"2..\"}[$__rate_interval]))","legendFormat":"2xx"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(rate(rest_client_requests_total{job=\"`}}{{ $kubeControllerManagerJob }}{{`\", instance=~\"$instance\",code=~\"3..\"}[$__rate_interval]))","legendFormat":"3xx"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(rate(rest_client_requests_total{job=\"`}}{{ $kubeControllerManagerJob }}{{`\", instance=~\"$instance\",code=~\"4..\"}[$__rate_interval]))","legendFormat":"4xx"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(rate(rest_client_requests_total{job=\"`}}{{ $kubeControllerManagerJob }}{{`\", instance=~\"$instance\",code=~\"5..\"}[$__rate_interval]))","legendFormat":"5xx"}],"title":"Kube API Request Rate","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"s"}},"gridPos":{"h":7,"w":16,"x":8,"y":21},"id":6,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"histogram_quantile(0.99, sum(rate(rest_client_request_duration_seconds_bucket{cluster=\"$cluster\", job=\"`}}{{ $kubeControllerManagerJob }}{{`\", instance=~\"$instance\", verb=\"POST\"}[$__rate_interval])) by (verb, le))","legendFormat":"{{verb}}"}],"title":"Post Request Latency 99th Quantile","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"s"}},"gridPos":{"h":7,"w":24,"x":0,"y":28},"id":7,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"histogram_quantile(0.99, sum(rate(rest_client_request_duration_seconds_bucket{cluster=\"$cluster\", job=\"`}}{{ $kubeControllerManagerJob }}{{`\", instance=~\"$instance\", verb=\"GET\"}[$__rate_interval])) by (verb, le))","legendFormat":"{{verb}}"}],"title":"Get Request Latency 99th Quantile","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"bytes"}},"gridPos":{"h":7,"w":8,"x":0,"y":35},"id":8,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"process_resident_memory_bytes{cluster=\"$cluster\", job=\"`}}{{ $kubeControllerManagerJob }}{{`\",instance=~\"$instance\"}","legendFormat":"{{instance}}"}],"title":"Memory","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"short"}},"gridPos":{"h":7,"w":8,"x":8,"y":35},"id":9,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"rate(process_cpu_seconds_total{cluster=\"$cluster\", job=\"`}}{{ $kubeControllerManagerJob }}{{`\",instance=~\"$instance\"}[$__rate_interval])","legendFormat":"{{instance}}"}],"title":"CPU usage","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"short"}},"gridPos":{"h":7,"w":8,"x":16,"y":35},"id":10,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"go_goroutines{cluster=\"$cluster\", job=\"`}}{{ $kubeControllerManagerJob }}{{`\",instance=~\"$instance\"}","legendFormat":"{{instance}}"}],"title":"Goroutines","type":"timeseries"}],"refresh":"10s","schemaVersion":39,"tags":["kubernetes-mixin"],"templating":{"list":[{"current":{"selected":true,"text":"default","value":"default"},"hide":0,"label":"Data source","name":"datasource","query":"prometheus","regex":"","type":"datasource"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"hide":`}}{{ if .Values.grafana.sidecar.dashboards.multicluster.global.enabled }}0{{ else }}2{{ end }}{{`,"label":"cluster","name":"cluster","query":"label_values(up{job=\"`}}{{ $kubeControllerManagerJob }}{{`\"}, cluster)","refresh":2,"sort":1,"type":"query","allValue":".*"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"hide":0,"includeAll":true,"label":"instance","name":"instance","query":"label_values(up{cluster=\"$cluster\", job=\"`}}{{ $kubeControllerManagerJob }}{{`\"}, instance)","refresh":2,"sort":1,"type":"query"}]},"time":{"from":"now-1h","to":"now"},"timezone": "`}}{{ .Values.grafana.defaultDashboardsTimezone }}{{`","title":"Kubernetes / Controller Manager","uid":"72e0e05bef5099e5f049b05fdc429ed4"}`}} {{- end }} --- {{- if and .Values.grafana.operator.dashboardsConfigMapRefEnabled (or .Values.grafana.enabled .Values.grafana.forceDeployDashboards) (semverCompare ">=1.14.0-0" $kubeTargetVersion) (semverCompare "<9.9.9-9" $kubeTargetVersion) .Values.grafana.defaultDashboardsEnabled .Values.kubeControllerManager.enabled }} diff --git a/charts/kube-prometheus-stack/templates/grafana/dashboards-1.14/grafana-overview.yaml b/charts/kube-prometheus-stack/templates/grafana/dashboards-1.14/grafana-overview.yaml index 78f5162ec1..78f58e7a4c 100644 --- a/charts/kube-prometheus-stack/templates/grafana/dashboards-1.14/grafana-overview.yaml +++ b/charts/kube-prometheus-stack/templates/grafana/dashboards-1.14/grafana-overview.yaml @@ -1,5 +1,5 @@ {{- /* -Generated from 'grafana-overview' from https://raw.githubusercontent.com/prometheus-operator/kube-prometheus/eaca1a5fd76b356974054906af46810fec1cd7f8/manifests/grafana-dashboardDefinitions.yaml +Generated from 'grafana-overview' from https://raw.githubusercontent.com/prometheus-operator/kube-prometheus/4eafa8b5395ef839bb02a55e3b5fbdfa03280cf9/manifests/grafana-dashboardDefinitions.yaml Do not change in-place! In order to change this file first read following link: https://github.com/prometheus-community/helm-charts/tree/main/charts/kube-prometheus-stack/hack */ -}} diff --git a/charts/kube-prometheus-stack/templates/grafana/dashboards-1.14/k8s-resources-cluster.yaml b/charts/kube-prometheus-stack/templates/grafana/dashboards-1.14/k8s-resources-cluster.yaml index 8687469d65..43479cbfa3 100644 --- a/charts/kube-prometheus-stack/templates/grafana/dashboards-1.14/k8s-resources-cluster.yaml +++ b/charts/kube-prometheus-stack/templates/grafana/dashboards-1.14/k8s-resources-cluster.yaml @@ -1,5 +1,5 @@ {{- /* -Generated from 'k8s-resources-cluster' from https://raw.githubusercontent.com/prometheus-operator/kube-prometheus/eaca1a5fd76b356974054906af46810fec1cd7f8/manifests/grafana-dashboardDefinitions.yaml +Generated from 'k8s-resources-cluster' from https://raw.githubusercontent.com/prometheus-operator/kube-prometheus/4eafa8b5395ef839bb02a55e3b5fbdfa03280cf9/manifests/grafana-dashboardDefinitions.yaml Do not change in-place! In order to change this file first read following link: https://github.com/prometheus-community/helm-charts/tree/main/charts/kube-prometheus-stack/hack */ -}} @@ -21,7 +21,7 @@ metadata: {{- include "kube-prometheus-stack.labels" $ | nindent 4 }} data: k8s-resources-cluster.json: |- - {{`{"editable":`}}{{ .Values.grafana.defaultDashboardsEditable }}{{`,"links":[{"asDropdown":true,"includeVars":true,"keepTime":true,"tags":["kubernetes-mixin"],"targetBlank":false,"title":"Kubernetes","type":"dashboards"}],"panels":[{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"unit":"percentunit"}},"gridPos":{"h":3,"w":4,"x":0,"y":0},"id":1,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"colorMode":"none"},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"cluster:node_cpu:ratio_rate5m{cluster=\"$cluster\"}","instant":true}],"title":"CPU Utilisation","type":"stat"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"unit":"percentunit"}},"gridPos":{"h":3,"w":4,"x":4,"y":0},"id":2,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"colorMode":"none"},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(namespace_cpu:kube_pod_container_resource_requests:sum{cluster=\"$cluster\"}) / sum(kube_node_status_allocatable{job=\"kube-state-metrics\",resource=\"cpu\",cluster=\"$cluster\"})","instant":true}],"title":"CPU Requests Commitment","type":"stat"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"unit":"percentunit"}},"gridPos":{"h":3,"w":4,"x":8,"y":0},"id":3,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"colorMode":"none"},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(namespace_cpu:kube_pod_container_resource_limits:sum{cluster=\"$cluster\"}) / sum(kube_node_status_allocatable{job=\"kube-state-metrics\",resource=\"cpu\",cluster=\"$cluster\"})","instant":true}],"title":"CPU Limits Commitment","type":"stat"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"unit":"percentunit"}},"gridPos":{"h":3,"w":4,"x":12,"y":0},"id":4,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"colorMode":"none"},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"1 - sum(:node_memory_MemAvailable_bytes:sum{cluster=\"$cluster\"}) / sum(node_memory_MemTotal_bytes{job=\"node-exporter\",cluster=\"$cluster\"})","instant":true}],"title":"Memory Utilisation","type":"stat"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"unit":"percentunit"}},"gridPos":{"h":3,"w":4,"x":16,"y":0},"id":5,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"colorMode":"none"},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(namespace_memory:kube_pod_container_resource_requests:sum{cluster=\"$cluster\"}) / sum(kube_node_status_allocatable{job=\"kube-state-metrics\",resource=\"memory\",cluster=\"$cluster\"})","instant":true}],"title":"Memory Requests Commitment","type":"stat"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"unit":"percentunit"}},"gridPos":{"h":3,"w":4,"x":20,"y":0},"id":6,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"colorMode":"none"},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(namespace_memory:kube_pod_container_resource_limits:sum{cluster=\"$cluster\"}) / sum(kube_node_status_allocatable{job=\"kube-state-metrics\",resource=\"memory\",cluster=\"$cluster\"})","instant":true}],"title":"Memory Limits Commitment","type":"stat"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true}}},"gridPos":{"h":6,"w":24,"x":0,"y":6},"id":7,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(max by (cluster, namespace, pod, container)(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_rate5m{cluster=\"$cluster\"})) by (namespace)","legendFormat":"__auto"}],"title":"CPU Usage","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"overrides":[{"matcher":{"id":"byRegexp","options":"/%/"},"properties":[{"id":"unit","value":"percentunit"}]},{"matcher":{"id":"byName","options":"Namespace"},"properties":[{"id":"links","value":[{"title":"Drill down to pods","url":"/d/85a562078cdf77779eaa1add43ccec1e?${datasource:queryparam}&var-cluster=$cluster&var-namespace=${__data.fields.Namespace}"}]}]}]},"gridPos":{"h":6,"w":24,"x":0,"y":12},"id":8,"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(kube_pod_owner{job=\"kube-state-metrics\", cluster=\"$cluster\"}) by (namespace)","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"count(avg(namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\"}) by (workload, namespace)) by (namespace)","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(max by (cluster, namespace, pod, container)(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_rate5m{cluster=\"$cluster\"})) by (namespace)","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(namespace_cpu:kube_pod_container_resource_requests:sum{cluster=\"$cluster\"}) by (namespace)","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(max by (cluster, namespace, pod, container)(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_rate5m{cluster=\"$cluster\"})) by (namespace) / sum(namespace_cpu:kube_pod_container_resource_requests:sum{cluster=\"$cluster\"}) by (namespace)","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(namespace_cpu:kube_pod_container_resource_limits:sum{cluster=\"$cluster\"}) by (namespace)","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(max by (cluster, namespace, pod, container)(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_rate5m{cluster=\"$cluster\"})) by (namespace) / sum(namespace_cpu:kube_pod_container_resource_limits:sum{cluster=\"$cluster\"}) by (namespace)","format":"table","instant":true}],"title":"CPU Quota","transformations":[{"id":"joinByField","options":{"byField":"namespace","mode":"outer"}},{"id":"organize","options":{"excludeByName":{"Time":true,"Time 1":true,"Time 2":true,"Time 3":true,"Time 4":true,"Time 5":true,"Time 6":true,"Time 7":true},"indexByName":{"Time 1":0,"Time 2":1,"Time 3":2,"Time 4":3,"Time 5":4,"Time 6":5,"Time 7":6,"Value #A":8,"Value #B":9,"Value #C":10,"Value #D":11,"Value #E":12,"Value #F":13,"Value #G":14,"namespace":7},"renameByName":{"Value #A":"Pods","Value #B":"Workloads","Value #C":"CPU Usage","Value #D":"CPU Requests","Value #E":"CPU Requests %","Value #F":"CPU Limits","Value #G":"CPU Limits %","namespace":"Namespace"}}}],"type":"table"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"bytes"}},"gridPos":{"h":6,"w":24,"x":0,"y":18},"id":9,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(max by (cluster, namespace, pod, container)(container_memory_rss{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", container!=\"\"})) by (namespace)","legendFormat":"__auto"}],"title":"Memory","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"overrides":[{"matcher":{"id":"byRegexp","options":"/%/"},"properties":[{"id":"unit","value":"percentunit"}]},{"matcher":{"id":"byName","options":"Memory Usage"},"properties":[{"id":"unit","value":"bytes"}]},{"matcher":{"id":"byName","options":"Memory Requests"},"properties":[{"id":"unit","value":"bytes"}]},{"matcher":{"id":"byName","options":"Memory Limits"},"properties":[{"id":"unit","value":"bytes"}]},{"matcher":{"id":"byName","options":"Namespace"},"properties":[{"id":"links","value":[{"title":"Drill down to pods","url":"/d/85a562078cdf77779eaa1add43ccec1e?${datasource:queryparam}&var-cluster=$cluster&var-namespace=${__data.fields.Namespace}"}]}]}]},"gridPos":{"h":6,"w":24,"x":0,"y":24},"id":10,"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(kube_pod_owner{job=\"kube-state-metrics\", cluster=\"$cluster\"}) by (namespace)","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"count(avg(namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\"}) by (workload, namespace)) by (namespace)","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(max by (cluster, namespace, pod, container)(container_memory_rss{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", container!=\"\"})) by (namespace)","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(namespace_memory:kube_pod_container_resource_requests:sum{cluster=\"$cluster\"}) by (namespace)","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(max by (cluster, namespace, pod, container)(container_memory_rss{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", container!=\"\"})) by (namespace) / sum(namespace_memory:kube_pod_container_resource_requests:sum{cluster=\"$cluster\"}) by (namespace)","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(namespace_memory:kube_pod_container_resource_limits:sum{cluster=\"$cluster\"}) by (namespace)","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(max by (cluster, namespace, pod, container)(container_memory_rss{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", container!=\"\"})) by (namespace) / sum(namespace_memory:kube_pod_container_resource_limits:sum{cluster=\"$cluster\"}) by (namespace)","format":"table","instant":true}],"title":"Memory Requests by Namespace","transformations":[{"id":"joinByField","options":{"byField":"namespace","mode":"outer"}},{"id":"organize","options":{"excludeByName":{"Time":true,"Time 1":true,"Time 2":true,"Time 3":true,"Time 4":true,"Time 5":true,"Time 6":true,"Time 7":true},"indexByName":{"Time 1":0,"Time 2":1,"Time 3":2,"Time 4":3,"Time 5":4,"Time 6":5,"Time 7":6,"Value #A":8,"Value #B":9,"Value #C":10,"Value #D":11,"Value #E":12,"Value #F":13,"Value #G":14,"namespace":7},"renameByName":{"Value #A":"Pods","Value #B":"Workloads","Value #C":"Memory Usage","Value #D":"Memory Requests","Value #E":"Memory Requests %","Value #F":"Memory Limits","Value #G":"Memory Limits %","namespace":"Namespace"}}}],"type":"table"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"overrides":[{"matcher":{"id":"byRegexp","options":"/Bandwidth/"},"properties":[{"id":"unit","value":"bps"}]},{"matcher":{"id":"byRegexp","options":"/Packets/"},"properties":[{"id":"unit","value":"pps"}]},{"matcher":{"id":"byName","options":"Namespace"},"properties":[{"id":"links","value":[{"title":"Drill down to pods","url":"/d/85a562078cdf77779eaa1add43ccec1e?${datasource:queryparam}&var-cluster=$cluster&var-namespace=${__data.fields.Namespace}"}]}]}]},"gridPos":{"h":6,"w":24,"x":0,"y":30},"id":11,"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum((8 * rate(container_network_receive_bytes_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=~\".+\"}[$__rate_interval]))) by (namespace)","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum((8 * rate(container_network_transmit_bytes_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=~\".+\"}[$__rate_interval]))) by (namespace)","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(rate(container_network_receive_packets_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=~\".+\"}[$__rate_interval])) by (namespace)","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(rate(container_network_transmit_packets_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=~\".+\"}[$__rate_interval])) by (namespace)","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(rate(container_network_receive_packets_dropped_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=~\".+\"}[$__rate_interval])) by (namespace)","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(rate(container_network_transmit_packets_dropped_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=~\".+\"}[$__rate_interval])) by (namespace)","format":"table","instant":true}],"title":"Current Network Usage","transformations":[{"id":"joinByField","options":{"byField":"namespace","mode":"outer"}},{"id":"organize","options":{"excludeByName":{"Time":true,"Time 1":true,"Time 2":true,"Time 3":true,"Time 4":true,"Time 5":true,"Time 6":true},"indexByName":{"Time 1":0,"Time 2":1,"Time 3":2,"Time 4":3,"Time 5":4,"Time 6":5,"Value #A":7,"Value #B":8,"Value #C":9,"Value #D":10,"Value #E":11,"Value #F":12,"namespace":6},"renameByName":{"Value #A":"Current Receive Bandwidth","Value #B":"Current Transmit Bandwidth","Value #C":"Rate of Received Packets","Value #D":"Rate of Transmitted Packets","Value #E":"Rate of Received Packets Dropped","Value #F":"Rate of Transmitted Packets Dropped","namespace":"Namespace"}}}],"type":"table"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"bps"}},"gridPos":{"h":6,"w":24,"x":0,"y":36},"id":12,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum((8 * rate(container_network_receive_bytes_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=~\".+\"}[$__rate_interval]))) by (namespace)","legendFormat":"__auto"}],"title":"Receive Bandwidth","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"bps"}},"gridPos":{"h":6,"w":24,"x":0,"y":42},"id":13,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum((8 * rate(container_network_transmit_bytes_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=~\".+\"}[$__rate_interval]))) by (namespace)","legendFormat":"__auto"}],"title":"Transmit Bandwidth","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"bps"}},"gridPos":{"h":6,"w":24,"x":0,"y":48},"id":14,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"avg((8 * rate(container_network_receive_bytes_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=~\".+\"}[$__rate_interval]))) by (namespace)","legendFormat":"__auto"}],"title":"Average Container Bandwidth by Namespace: Received","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"bps"}},"gridPos":{"h":6,"w":24,"x":0,"y":54},"id":15,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"avg((8 * rate(container_network_transmit_bytes_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=~\".+\"}[$__rate_interval]))) by (namespace)","legendFormat":"__auto"}],"title":"Average Container Bandwidth by Namespace: Transmitted","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"pps"}},"gridPos":{"h":6,"w":24,"x":0,"y":60},"id":16,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(rate(container_network_receive_packets_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=~\".+\"}[$__rate_interval])) by (namespace)","legendFormat":"__auto"}],"title":"Rate of Received Packets","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"pps"}},"gridPos":{"h":6,"w":24,"x":0,"y":66},"id":17,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(rate(container_network_transmit_packets_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=~\".+\"}[$__rate_interval])) by (namespace)","legendFormat":"__auto"}],"title":"Rate of Transmitted Packets","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"pps"}},"gridPos":{"h":6,"w":24,"x":0,"y":72},"id":18,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(rate(container_network_receive_packets_dropped_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=~\".+\"}[$__rate_interval])) by (namespace)","legendFormat":"__auto"}],"title":"Rate of Received Packets Dropped","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"pps"}},"gridPos":{"h":6,"w":24,"x":0,"y":78},"id":19,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(rate(container_network_transmit_packets_dropped_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=~\".+\"}[$__rate_interval])) by (namespace)","legendFormat":"__auto"}],"title":"Rate of Transmitted Packets Dropped","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"iops"}},"gridPos":{"h":6,"w":24,"x":0,"y":84},"id":20,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"ceil(sum by(namespace) (rate(container_fs_reads_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", container!=\"\", device=~\"(/dev/)?(mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|md.+|dasd.+)\", cluster=\"$cluster\", namespace!=\"\"}[$__rate_interval]) + rate(container_fs_writes_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", container!=\"\", cluster=\"$cluster\", namespace!=\"\"}[$__rate_interval])))","legendFormat":"__auto"}],"title":"IOPS(Reads+Writes)","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"Bps"}},"gridPos":{"h":6,"w":24,"x":0,"y":90},"id":21,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum by(namespace) (rate(container_fs_reads_bytes_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", container!=\"\", device=~\"(/dev/)?(mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|md.+|dasd.+)\", cluster=\"$cluster\", namespace!=\"\"}[$__rate_interval]) + rate(container_fs_writes_bytes_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", container!=\"\", cluster=\"$cluster\", namespace!=\"\"}[$__rate_interval]))","legendFormat":"__auto"}],"title":"ThroughPut(Read+Write)","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"overrides":[{"matcher":{"id":"byRegexp","options":"/IOPS/"},"properties":[{"id":"unit","value":"iops"}]},{"matcher":{"id":"byRegexp","options":"/Throughput/"},"properties":[{"id":"unit","value":"bps"}]},{"matcher":{"id":"byName","options":"Namespace"},"properties":[{"id":"links","value":[{"title":"Drill down to pods","url":"/d/85a562078cdf77779eaa1add43ccec1e?${datasource:queryparam}&var-cluster=$cluster&var-namespace=${__data.fields.Namespace}"}]}]}]},"gridPos":{"h":6,"w":24,"x":0,"y":96},"id":22,"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum by(namespace) (rate(container_fs_reads_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", device=~\"(/dev/)?(mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|md.+|dasd.+)\", container!=\"\", cluster=\"$cluster\", namespace!=\"\"}[$__rate_interval]))","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum by(namespace) (rate(container_fs_writes_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", device=~\"(/dev/)?(mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|md.+|dasd.+)\", container!=\"\", cluster=\"$cluster\", namespace!=\"\"}[$__rate_interval]))","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum by(namespace) (rate(container_fs_reads_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", device=~\"(/dev/)?(mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|md.+|dasd.+)\", container!=\"\", cluster=\"$cluster\", namespace!=\"\"}[$__rate_interval]) + rate(container_fs_writes_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", device=~\"(/dev/)?(mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|md.+|dasd.+)\", container!=\"\", cluster=\"$cluster\", namespace!=\"\"}[$__rate_interval]))","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum by(namespace) (rate(container_fs_reads_bytes_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", device=~\"(/dev/)?(mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|md.+|dasd.+)\", container!=\"\", cluster=\"$cluster\", namespace!=\"\"}[$__rate_interval]))","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum by(namespace) (rate(container_fs_writes_bytes_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", device=~\"(/dev/)?(mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|md.+|dasd.+)\", container!=\"\", cluster=\"$cluster\", namespace!=\"\"}[$__rate_interval]))","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum by(namespace) (rate(container_fs_reads_bytes_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", device=~\"(/dev/)?(mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|md.+|dasd.+)\", container!=\"\", cluster=\"$cluster\", namespace!=\"\"}[$__rate_interval]) + rate(container_fs_writes_bytes_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", device=~\"(/dev/)?(mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|md.+|dasd.+)\", container!=\"\", cluster=\"$cluster\", namespace!=\"\"}[$__rate_interval]))","format":"table","instant":true}],"title":"Current Storage IO","transformations":[{"id":"joinByField","options":{"byField":"namespace","mode":"outer"}},{"id":"organize","options":{"excludeByName":{"Time":true,"Time 1":true,"Time 2":true,"Time 3":true,"Time 4":true,"Time 5":true,"Time 6":true},"indexByName":{"Time 1":0,"Time 2":1,"Time 3":2,"Time 4":3,"Time 5":4,"Time 6":5,"Value #A":7,"Value #B":8,"Value #C":9,"Value #D":10,"Value #E":11,"Value #F":12,"namespace":6},"renameByName":{"Value #A":"IOPS(Reads)","Value #B":"IOPS(Writes)","Value #C":"IOPS(Reads + Writes)","Value #D":"Throughput(Read)","Value #E":"Throughput(Write)","Value #F":"Throughput(Read + Write)","namespace":"Namespace"}}}],"type":"table"}],"refresh":"10s","schemaVersion":39,"tags":["kubernetes-mixin"],"templating":{"list":[{"current":{"selected":true,"text":"default","value":"default"},"hide":0,"label":"Data source","name":"datasource","query":"prometheus","regex":"","type":"datasource"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"hide":`}}{{ if .Values.grafana.sidecar.dashboards.multicluster.global.enabled }}0{{ else }}2{{ end }}{{`,"label":"cluster","name":"cluster","query":"label_values(up{job=\"kube-state-metrics\"}, cluster)","refresh":2,"sort":1,"type":"query","allValue":".*"}]},"time":{"from":"now-1h","to":"now"},"timezone": "`}}{{ .Values.grafana.defaultDashboardsTimezone }}{{`","title":"Kubernetes / Compute Resources / Cluster","uid":"efa86fd1d0c121a26444b636a3f509a8"}`}} + {{`{"editable":`}}{{ .Values.grafana.defaultDashboardsEditable }}{{`,"links":[{"asDropdown":true,"includeVars":true,"keepTime":true,"tags":["kubernetes-mixin"],"targetBlank":false,"title":"Kubernetes","type":"dashboards"}],"panels":[{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"unit":"percentunit"}},"gridPos":{"h":3,"w":4,"x":0,"y":0},"id":1,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"colorMode":"none"},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"cluster:node_cpu:ratio_rate5m{cluster=\"$cluster\"}","instant":true}],"title":"CPU Utilisation","type":"stat"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"unit":"percentunit"}},"gridPos":{"h":3,"w":4,"x":4,"y":0},"id":2,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"colorMode":"none"},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(namespace_cpu:kube_pod_container_resource_requests:sum{cluster=\"$cluster\"}) / sum(kube_node_status_allocatable{job=\"kube-state-metrics\",resource=\"cpu\",cluster=\"$cluster\"})","instant":true}],"title":"CPU Requests Commitment","type":"stat"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"unit":"percentunit"}},"gridPos":{"h":3,"w":4,"x":8,"y":0},"id":3,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"colorMode":"none"},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(namespace_cpu:kube_pod_container_resource_limits:sum{cluster=\"$cluster\"}) / sum(kube_node_status_allocatable{job=\"kube-state-metrics\",resource=\"cpu\",cluster=\"$cluster\"})","instant":true}],"title":"CPU Limits Commitment","type":"stat"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"unit":"percentunit"}},"gridPos":{"h":3,"w":4,"x":12,"y":0},"id":4,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"colorMode":"none"},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"1 - sum(:node_memory_MemAvailable_bytes:sum{cluster=\"$cluster\"}) / sum(node_memory_MemTotal_bytes{job=\"node-exporter\",cluster=\"$cluster\"})","instant":true}],"title":"Memory Utilisation","type":"stat"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"unit":"percentunit"}},"gridPos":{"h":3,"w":4,"x":16,"y":0},"id":5,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"colorMode":"none"},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(namespace_memory:kube_pod_container_resource_requests:sum{cluster=\"$cluster\"}) / sum(kube_node_status_allocatable{job=\"kube-state-metrics\",resource=\"memory\",cluster=\"$cluster\"})","instant":true}],"title":"Memory Requests Commitment","type":"stat"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"unit":"percentunit"}},"gridPos":{"h":3,"w":4,"x":20,"y":0},"id":6,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"colorMode":"none"},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(namespace_memory:kube_pod_container_resource_limits:sum{cluster=\"$cluster\"}) / sum(kube_node_status_allocatable{job=\"kube-state-metrics\",resource=\"memory\",cluster=\"$cluster\"})","instant":true}],"title":"Memory Limits Commitment","type":"stat"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true}}},"gridPos":{"h":6,"w":24,"x":0,"y":6},"id":7,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(max by (cluster, namespace, pod, container)(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_rate5m{cluster=\"$cluster\"})) by (namespace)","legendFormat":"__auto"}],"title":"CPU Usage","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"overrides":[{"matcher":{"id":"byRegexp","options":"/%/"},"properties":[{"id":"unit","value":"percentunit"}]},{"matcher":{"id":"byName","options":"Namespace"},"properties":[{"id":"links","value":[{"title":"Drill down to pods","url":"/d/85a562078cdf77779eaa1add43ccec1e?${datasource:queryparam}&var-cluster=$cluster&var-namespace=${__data.fields.Namespace}"}]}]}]},"gridPos":{"h":6,"w":24,"x":0,"y":12},"id":8,"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(kube_pod_owner{job=\"kube-state-metrics\", cluster=\"$cluster\"}) by (namespace)","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"count(avg(namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\"}) by (workload, namespace)) by (namespace)","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(max by (cluster, namespace, pod, container)(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_rate5m{cluster=\"$cluster\"})) by (namespace)","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(namespace_cpu:kube_pod_container_resource_requests:sum{cluster=\"$cluster\"}) by (namespace)","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(max by (cluster, namespace, pod, container)(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_rate5m{cluster=\"$cluster\"})) by (namespace) / sum(namespace_cpu:kube_pod_container_resource_requests:sum{cluster=\"$cluster\"}) by (namespace)","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(namespace_cpu:kube_pod_container_resource_limits:sum{cluster=\"$cluster\"}) by (namespace)","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(max by (cluster, namespace, pod, container)(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_rate5m{cluster=\"$cluster\"})) by (namespace) / sum(namespace_cpu:kube_pod_container_resource_limits:sum{cluster=\"$cluster\"}) by (namespace)","format":"table","instant":true}],"title":"CPU Quota","transformations":[{"id":"joinByField","options":{"byField":"namespace","mode":"outer"}},{"id":"organize","options":{"excludeByName":{"Time":true,"Time 1":true,"Time 2":true,"Time 3":true,"Time 4":true,"Time 5":true,"Time 6":true,"Time 7":true},"indexByName":{"Time 1":0,"Time 2":1,"Time 3":2,"Time 4":3,"Time 5":4,"Time 6":5,"Time 7":6,"Value #A":8,"Value #B":9,"Value #C":10,"Value #D":11,"Value #E":12,"Value #F":13,"Value #G":14,"namespace":7},"renameByName":{"Value #A":"Pods","Value #B":"Workloads","Value #C":"CPU Usage","Value #D":"CPU Requests","Value #E":"CPU Requests %","Value #F":"CPU Limits","Value #G":"CPU Limits %","namespace":"Namespace"}}}],"type":"table"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"bytes"}},"gridPos":{"h":6,"w":24,"x":0,"y":18},"id":9,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(max by (cluster, namespace, pod, container)(container_memory_rss{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", container!=\"\"})) by (namespace)","legendFormat":"__auto"}],"title":"Memory","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"overrides":[{"matcher":{"id":"byRegexp","options":"/%/"},"properties":[{"id":"unit","value":"percentunit"}]},{"matcher":{"id":"byName","options":"Memory Usage"},"properties":[{"id":"unit","value":"bytes"}]},{"matcher":{"id":"byName","options":"Memory Requests"},"properties":[{"id":"unit","value":"bytes"}]},{"matcher":{"id":"byName","options":"Memory Limits"},"properties":[{"id":"unit","value":"bytes"}]},{"matcher":{"id":"byName","options":"Namespace"},"properties":[{"id":"links","value":[{"title":"Drill down to pods","url":"/d/85a562078cdf77779eaa1add43ccec1e?${datasource:queryparam}&var-cluster=$cluster&var-namespace=${__data.fields.Namespace}"}]}]}]},"gridPos":{"h":6,"w":24,"x":0,"y":24},"id":10,"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(kube_pod_owner{job=\"kube-state-metrics\", cluster=\"$cluster\"}) by (namespace)","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"count(avg(namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\"}) by (workload, namespace)) by (namespace)","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(max by (cluster, namespace, pod, container)(container_memory_rss{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", container!=\"\"})) by (namespace)","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(namespace_memory:kube_pod_container_resource_requests:sum{cluster=\"$cluster\"}) by (namespace)","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(max by (cluster, namespace, pod, container)(container_memory_rss{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", container!=\"\"})) by (namespace) / sum(namespace_memory:kube_pod_container_resource_requests:sum{cluster=\"$cluster\"}) by (namespace)","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(namespace_memory:kube_pod_container_resource_limits:sum{cluster=\"$cluster\"}) by (namespace)","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(max by (cluster, namespace, pod, container)(container_memory_rss{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", container!=\"\"})) by (namespace) / sum(namespace_memory:kube_pod_container_resource_limits:sum{cluster=\"$cluster\"}) by (namespace)","format":"table","instant":true}],"title":"Memory Requests by Namespace","transformations":[{"id":"joinByField","options":{"byField":"namespace","mode":"outer"}},{"id":"organize","options":{"excludeByName":{"Time":true,"Time 1":true,"Time 2":true,"Time 3":true,"Time 4":true,"Time 5":true,"Time 6":true,"Time 7":true},"indexByName":{"Time 1":0,"Time 2":1,"Time 3":2,"Time 4":3,"Time 5":4,"Time 6":5,"Time 7":6,"Value #A":8,"Value #B":9,"Value #C":10,"Value #D":11,"Value #E":12,"Value #F":13,"Value #G":14,"namespace":7},"renameByName":{"Value #A":"Pods","Value #B":"Workloads","Value #C":"Memory Usage","Value #D":"Memory Requests","Value #E":"Memory Requests %","Value #F":"Memory Limits","Value #G":"Memory Limits %","namespace":"Namespace"}}}],"type":"table"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"overrides":[{"matcher":{"id":"byRegexp","options":"/Bandwidth/"},"properties":[{"id":"unit","value":"bps"}]},{"matcher":{"id":"byRegexp","options":"/Packets/"},"properties":[{"id":"unit","value":"pps"}]},{"matcher":{"id":"byName","options":"Namespace"},"properties":[{"id":"links","value":[{"title":"Drill down to pods","url":"/d/85a562078cdf77779eaa1add43ccec1e?${datasource:queryparam}&var-cluster=$cluster&var-namespace=${__data.fields.Namespace}"}]}]}]},"gridPos":{"h":6,"w":24,"x":0,"y":30},"id":11,"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum((8 * rate(container_network_receive_bytes_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=~\".+\"}[$__rate_interval]))) by (namespace)","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum((8 * rate(container_network_transmit_bytes_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=~\".+\"}[$__rate_interval]))) by (namespace)","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(rate(container_network_receive_packets_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=~\".+\"}[$__rate_interval])) by (namespace)","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(rate(container_network_transmit_packets_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=~\".+\"}[$__rate_interval])) by (namespace)","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(rate(container_network_receive_packets_dropped_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=~\".+\"}[$__rate_interval])) by (namespace)","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(rate(container_network_transmit_packets_dropped_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=~\".+\"}[$__rate_interval])) by (namespace)","format":"table","instant":true}],"title":"Current Network Usage","transformations":[{"id":"joinByField","options":{"byField":"namespace","mode":"outer"}},{"id":"organize","options":{"excludeByName":{"Time":true,"Time 1":true,"Time 2":true,"Time 3":true,"Time 4":true,"Time 5":true,"Time 6":true},"indexByName":{"Time 1":0,"Time 2":1,"Time 3":2,"Time 4":3,"Time 5":4,"Time 6":5,"Value #A":7,"Value #B":8,"Value #C":9,"Value #D":10,"Value #E":11,"Value #F":12,"namespace":6},"renameByName":{"Value #A":"Current Receive Bandwidth","Value #B":"Current Transmit Bandwidth","Value #C":"Rate of Received Packets","Value #D":"Rate of Transmitted Packets","Value #E":"Rate of Received Packets Dropped","Value #F":"Rate of Transmitted Packets Dropped","namespace":"Namespace"}}}],"type":"table"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"bps"}},"gridPos":{"h":6,"w":24,"x":0,"y":36},"id":12,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum((8 * rate(container_network_receive_bytes_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=~\".+\"}[$__rate_interval]))) by (namespace)","legendFormat":"__auto"}],"title":"Receive Bandwidth","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"bps"}},"gridPos":{"h":6,"w":24,"x":0,"y":42},"id":13,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum((8 * rate(container_network_transmit_bytes_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=~\".+\"}[$__rate_interval]))) by (namespace)","legendFormat":"__auto"}],"title":"Transmit Bandwidth","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"bps"}},"gridPos":{"h":6,"w":24,"x":0,"y":48},"id":14,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"avg((8 * rate(container_network_receive_bytes_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=~\".+\"}[$__rate_interval]))) by (namespace)","legendFormat":"__auto"}],"title":"Average Container Bandwidth by Namespace: Received","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"bps"}},"gridPos":{"h":6,"w":24,"x":0,"y":54},"id":15,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"avg((8 * rate(container_network_transmit_bytes_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=~\".+\"}[$__rate_interval]))) by (namespace)","legendFormat":"__auto"}],"title":"Average Container Bandwidth by Namespace: Transmitted","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"pps"}},"gridPos":{"h":6,"w":24,"x":0,"y":60},"id":16,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(rate(container_network_receive_packets_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=~\".+\"}[$__rate_interval])) by (namespace)","legendFormat":"__auto"}],"title":"Rate of Received Packets","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"pps"}},"gridPos":{"h":6,"w":24,"x":0,"y":66},"id":17,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(rate(container_network_transmit_packets_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=~\".+\"}[$__rate_interval])) by (namespace)","legendFormat":"__auto"}],"title":"Rate of Transmitted Packets","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"pps"}},"gridPos":{"h":6,"w":24,"x":0,"y":72},"id":18,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(rate(container_network_receive_packets_dropped_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=~\".+\"}[$__rate_interval])) by (namespace)","legendFormat":"__auto"}],"title":"Rate of Received Packets Dropped","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"pps"}},"gridPos":{"h":6,"w":24,"x":0,"y":78},"id":19,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(rate(container_network_transmit_packets_dropped_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=~\".+\"}[$__rate_interval])) by (namespace)","legendFormat":"__auto"}],"title":"Rate of Transmitted Packets Dropped","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"iops"}},"gridPos":{"h":6,"w":24,"x":0,"y":84},"id":20,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"ceil(sum by(namespace) (rate(container_fs_reads_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", container!=\"\", device=~\"(/dev/)?(mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|md.+|dasd.+)\", cluster=\"$cluster\", namespace!=\"\"}[$__rate_interval]) + rate(container_fs_writes_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", container!=\"\", cluster=\"$cluster\", namespace!=\"\"}[$__rate_interval])))","legendFormat":"__auto"}],"title":"IOPS(Reads+Writes)","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"Bps"}},"gridPos":{"h":6,"w":24,"x":0,"y":90},"id":21,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum by(namespace) (rate(container_fs_reads_bytes_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", container!=\"\", device=~\"(/dev/)?(mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|md.+|dasd.+)\", cluster=\"$cluster\", namespace!=\"\"}[$__rate_interval]) + rate(container_fs_writes_bytes_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", container!=\"\", cluster=\"$cluster\", namespace!=\"\"}[$__rate_interval]))","legendFormat":"__auto"}],"title":"ThroughPut(Read+Write)","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"overrides":[{"matcher":{"id":"byRegexp","options":"/IOPS/"},"properties":[{"id":"unit","value":"iops"}]},{"matcher":{"id":"byRegexp","options":"/Throughput/"},"properties":[{"id":"unit","value":"bps"}]},{"matcher":{"id":"byName","options":"Namespace"},"properties":[{"id":"links","value":[{"title":"Drill down to pods","url":"/d/85a562078cdf77779eaa1add43ccec1e?${datasource:queryparam}&var-cluster=$cluster&var-namespace=${__data.fields.Namespace}"}]}]}]},"gridPos":{"h":6,"w":24,"x":0,"y":96},"id":22,"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum by(namespace) (rate(container_fs_reads_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", device=~\"(/dev/)?(mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|md.+|dasd.+)\", container!=\"\", cluster=\"$cluster\", namespace!=\"\"}[$__rate_interval]))","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum by(namespace) (rate(container_fs_writes_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", device=~\"(/dev/)?(mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|md.+|dasd.+)\", container!=\"\", cluster=\"$cluster\", namespace!=\"\"}[$__rate_interval]))","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum by(namespace) (rate(container_fs_reads_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", device=~\"(/dev/)?(mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|md.+|dasd.+)\", container!=\"\", cluster=\"$cluster\", namespace!=\"\"}[$__rate_interval]) + rate(container_fs_writes_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", device=~\"(/dev/)?(mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|md.+|dasd.+)\", container!=\"\", cluster=\"$cluster\", namespace!=\"\"}[$__rate_interval]))","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum by(namespace) (rate(container_fs_reads_bytes_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", device=~\"(/dev/)?(mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|md.+|dasd.+)\", container!=\"\", cluster=\"$cluster\", namespace!=\"\"}[$__rate_interval]))","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum by(namespace) (rate(container_fs_writes_bytes_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", device=~\"(/dev/)?(mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|md.+|dasd.+)\", container!=\"\", cluster=\"$cluster\", namespace!=\"\"}[$__rate_interval]))","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum by(namespace) (rate(container_fs_reads_bytes_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", device=~\"(/dev/)?(mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|md.+|dasd.+)\", container!=\"\", cluster=\"$cluster\", namespace!=\"\"}[$__rate_interval]) + rate(container_fs_writes_bytes_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", device=~\"(/dev/)?(mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|md.+|dasd.+)\", container!=\"\", cluster=\"$cluster\", namespace!=\"\"}[$__rate_interval]))","format":"table","instant":true}],"title":"Current Storage IO","transformations":[{"id":"joinByField","options":{"byField":"namespace","mode":"outer"}},{"id":"organize","options":{"excludeByName":{"Time":true,"Time 1":true,"Time 2":true,"Time 3":true,"Time 4":true,"Time 5":true,"Time 6":true},"indexByName":{"Time 1":0,"Time 2":1,"Time 3":2,"Time 4":3,"Time 5":4,"Time 6":5,"Value #A":7,"Value #B":8,"Value #C":9,"Value #D":10,"Value #E":11,"Value #F":12,"namespace":6},"renameByName":{"Value #A":"IOPS(Reads)","Value #B":"IOPS(Writes)","Value #C":"IOPS(Reads + Writes)","Value #D":"Throughput(Read)","Value #E":"Throughput(Write)","Value #F":"Throughput(Read + Write)","namespace":"Namespace"}}}],"type":"table"}],"refresh":"10s","schemaVersion":39,"tags":["kubernetes-mixin"],"templating":{"list":[{"current":{"selected":true,"text":"default","value":"default"},"hide":0,"label":"Data source","name":"datasource","query":"prometheus","regex":"","type":"datasource"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"hide":`}}{{ if .Values.grafana.sidecar.dashboards.multicluster.global.enabled }}0{{ else }}2{{ end }}{{`,"label":"cluster","name":"cluster","query":"label_values(up{job=\"kube-state-metrics\"}, cluster)","refresh":2,"sort":1,"type":"query","allValue":".*"}]},"time":{"from":"now-1h","to":"now"},"timezone": "`}}{{ .Values.grafana.defaultDashboardsTimezone }}{{`","title":"Kubernetes / Compute Resources / Cluster","uid":"efa86fd1d0c121a26444b636a3f509a8"}`}} {{- end }} --- {{- if and .Values.grafana.operator.dashboardsConfigMapRefEnabled (or .Values.grafana.enabled .Values.grafana.forceDeployDashboards) (semverCompare ">=1.14.0-0" $kubeTargetVersion) (semverCompare "<9.9.9-9" $kubeTargetVersion) .Values.grafana.defaultDashboardsEnabled }} diff --git a/charts/kube-prometheus-stack/templates/grafana/dashboards-1.14/k8s-resources-multicluster.yaml b/charts/kube-prometheus-stack/templates/grafana/dashboards-1.14/k8s-resources-multicluster.yaml index 8dfc230044..ad50d0df64 100644 --- a/charts/kube-prometheus-stack/templates/grafana/dashboards-1.14/k8s-resources-multicluster.yaml +++ b/charts/kube-prometheus-stack/templates/grafana/dashboards-1.14/k8s-resources-multicluster.yaml @@ -1,5 +1,5 @@ {{- /* -Generated from 'k8s-resources-multicluster' from https://raw.githubusercontent.com/prometheus-operator/kube-prometheus/eaca1a5fd76b356974054906af46810fec1cd7f8/manifests/grafana-dashboardDefinitions.yaml +Generated from 'k8s-resources-multicluster' from https://raw.githubusercontent.com/prometheus-operator/kube-prometheus/4eafa8b5395ef839bb02a55e3b5fbdfa03280cf9/manifests/grafana-dashboardDefinitions.yaml Do not change in-place! In order to change this file first read following link: https://github.com/prometheus-community/helm-charts/tree/main/charts/kube-prometheus-stack/hack */ -}} @@ -21,7 +21,7 @@ metadata: {{- include "kube-prometheus-stack.labels" $ | nindent 4 }} data: k8s-resources-multicluster.json: |- - {{`{"editable":`}}{{ .Values.grafana.defaultDashboardsEditable }}{{`,"links":[{"asDropdown":true,"includeVars":true,"keepTime":true,"tags":["kubernetes-mixin"],"targetBlank":false,"title":"Kubernetes","type":"dashboards"}],"panels":[{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"unit":"none"}},"gridPos":{"h":3,"w":4,"x":0,"y":0},"id":1,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"colorMode":"none"},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(cluster:node_cpu:ratio_rate5m) / count(cluster:node_cpu:ratio_rate5m)","instant":true}],"title":"CPU Utilisation","type":"stat"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"unit":"percentunit"}},"gridPos":{"h":3,"w":4,"x":4,"y":0},"id":2,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"colorMode":"none"},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(kube_pod_container_resource_requests{job=\"kube-state-metrics\", resource=\"cpu\"}) / sum(kube_node_status_allocatable{job=\"kube-state-metrics\", resource=\"cpu\"})","instant":true}],"title":"CPU Requests Commitment","type":"stat"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"unit":"percentunit"}},"gridPos":{"h":3,"w":4,"x":8,"y":0},"id":3,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"colorMode":"none"},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(kube_pod_container_resource_limits{job=\"kube-state-metrics\", resource=\"cpu\"}) / sum(kube_node_status_allocatable{job=\"kube-state-metrics\", resource=\"cpu\"})","instant":true}],"title":"CPU Limits Commitment","type":"stat"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"unit":"percentunit"}},"gridPos":{"h":3,"w":4,"x":12,"y":0},"id":4,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"colorMode":"none"},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"1 - sum(:node_memory_MemAvailable_bytes:sum) / sum(node_memory_MemTotal_bytes{job=\"node-exporter\"})","instant":true}],"title":"Memory Utilisation","type":"stat"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"unit":"percentunit"}},"gridPos":{"h":3,"w":4,"x":16,"y":0},"id":5,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"colorMode":"none"},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(kube_pod_container_resource_requests{job=\"kube-state-metrics\", resource=\"memory\"}) / sum(kube_node_status_allocatable{job=\"kube-state-metrics\", resource=\"memory\"})","instant":true}],"title":"Memory Requests Commitment","type":"stat"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"unit":"percentunit"}},"gridPos":{"h":3,"w":4,"x":20,"y":0},"id":6,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"colorMode":"none"},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(kube_pod_container_resource_limits{job=\"kube-state-metrics\", resource=\"memory\"}) / sum(kube_node_status_allocatable{job=\"kube-state-metrics\", resource=\"memory\"})","instant":true}],"title":"Memory Limits Commitment","type":"stat"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"showPoints":"never"}}},"gridPos":{"h":7,"w":24,"x":0,"y":1},"id":7,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(max by (cluster, namespace, pod, container)(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_rate5m)) by (cluster)","legendFormat":"__auto"}],"title":"CPU Usage","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"overrides":[{"matcher":{"id":"byRegexp","options":"/%/"},"properties":[{"id":"unit","value":"percentunit"}]},{"matcher":{"id":"byName","options":"Cluster"},"properties":[{"id":"links","value":[{"title":"Drill down","url":"/d/efa86fd1d0c121a26444b636a3f509a8?${datasource:queryparam}&var-cluster=${__data.fields.Cluster}"}]}]}]},"gridPos":{"h":7,"w":24,"x":0,"y":2},"id":8,"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(max by (cluster, namespace, pod, container)(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_rate5m)) by (cluster)","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(kube_pod_container_resource_requests{job=\"kube-state-metrics\", resource=\"cpu\"}) by (cluster)","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(max by (cluster, namespace, pod, container)(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_rate5m)) by (cluster) / sum(kube_pod_container_resource_requests{job=\"kube-state-metrics\", resource=\"cpu\"}) by (cluster)","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(kube_pod_container_resource_limits{job=\"kube-state-metrics\", resource=\"cpu\"}) by (cluster)","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(max by (cluster, namespace, pod, container)(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_rate5m)) by (cluster) / sum(kube_pod_container_resource_limits{job=\"kube-state-metrics\", resource=\"cpu\"}) by (cluster)","format":"table","instant":true}],"title":"CPU Quota","transformations":[{"id":"joinByField","options":{"byField":"cluster","mode":"outer"}},{"id":"organize","options":{"excludeByName":{"Time":true,"Time 1":true,"Time 2":true,"Time 3":true,"Time 4":true,"Time 5":true},"indexByName":{"Time 1":0,"Time 2":1,"Time 3":2,"Time 4":3,"Time 5":4,"Value #A":6,"Value #B":7,"Value #C":8,"Value #D":9,"Value #E":10,"cluster":5},"renameByName":{"Value #A":"CPU Usage","Value #B":"CPU Requests","Value #C":"CPU Requests %","Value #D":"CPU Limits","Value #E":"CPU Limits %","cluster":"Cluster"}}}],"type":"table"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"showPoints":"never"},"unit":"bytes"}},"gridPos":{"h":7,"w":24,"x":0,"y":3},"id":9,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(max by (cluster, namespace, pod, container)(container_memory_rss{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", container!=\"\"})) by (cluster)","legendFormat":"__auto"}],"title":"Memory Usage (w/o cache)","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"unit":"bytes"},"overrides":[{"matcher":{"id":"byRegexp","options":"/%/"},"properties":[{"id":"unit","value":"percentunit"}]},{"matcher":{"id":"byName","options":"Cluster"},"properties":[{"id":"links","value":[{"title":"Drill down","url":"/d/efa86fd1d0c121a26444b636a3f509a8?${datasource:queryparam}&var-cluster=${__data.fields.Cluster}"}]}]}]},"gridPos":{"h":7,"w":24,"x":0,"y":4},"id":10,"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(max by (cluster, namespace, pod, container)(container_memory_rss{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", container!=\"\"})) by (cluster)","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(kube_pod_container_resource_requests{job=\"kube-state-metrics\", resource=\"memory\"}) by (cluster)","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(max by (cluster, namespace, pod, container)(container_memory_rss{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", container!=\"\"})) by (cluster) / sum(kube_pod_container_resource_requests{job=\"kube-state-metrics\", resource=\"memory\"}) by (cluster)","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(kube_pod_container_resource_limits{job=\"kube-state-metrics\", resource=\"memory\"}) by (cluster)","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(max by (cluster, namespace, pod, container)(container_memory_rss{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", container!=\"\"})) by (cluster) / sum(kube_pod_container_resource_limits{job=\"kube-state-metrics\", resource=\"memory\"}) by (cluster)","format":"table","instant":true}],"title":"Memory Requests by Cluster","transformations":[{"id":"joinByField","options":{"byField":"cluster","mode":"outer"}},{"id":"organize","options":{"excludeByName":{"Time":true,"Time 1":true,"Time 2":true,"Time 3":true,"Time 4":true,"Time 5":true},"indexByName":{"Time 1":0,"Time 2":1,"Time 3":2,"Time 4":3,"Time 5":4,"Value #A":6,"Value #B":7,"Value #C":8,"Value #D":9,"Value #E":10,"cluster":5},"renameByName":{"Value #A":"Memory Usage","Value #B":"Memory Requests","Value #C":"Memory Requests %","Value #D":"Memory Limits","Value #E":"Memory Limits %","cluster":"Cluster"}}}],"type":"table"}],"refresh":"10s","schemaVersion":39,"tags":["kubernetes-mixin"],"templating":{"list":[{"current":{"selected":true,"text":"default","value":"default"},"hide":0,"label":"Data source","name":"datasource","query":"prometheus","regex":"","type":"datasource"}]},"time":{"from":"now-1h","to":"now"},"timezone": "`}}{{ .Values.grafana.defaultDashboardsTimezone }}{{`","title":"Kubernetes / Compute Resources / Multi-Cluster","uid":"b59e6c9f2fcbe2e16d77fc492374cc4f"}`}} + {{`{"editable":`}}{{ .Values.grafana.defaultDashboardsEditable }}{{`,"links":[{"asDropdown":true,"includeVars":true,"keepTime":true,"tags":["kubernetes-mixin"],"targetBlank":false,"title":"Kubernetes","type":"dashboards"}],"panels":[{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"unit":"none"}},"gridPos":{"h":3,"w":4,"x":0,"y":0},"id":1,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"colorMode":"none"},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(cluster:node_cpu:ratio_rate5m) / count(cluster:node_cpu:ratio_rate5m)","instant":true}],"title":"CPU Utilisation","type":"stat"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"unit":"percentunit"}},"gridPos":{"h":3,"w":4,"x":4,"y":0},"id":2,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"colorMode":"none"},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(kube_pod_container_resource_requests{job=\"kube-state-metrics\", resource=\"cpu\"}) / sum(kube_node_status_allocatable{job=\"kube-state-metrics\", resource=\"cpu\"})","instant":true}],"title":"CPU Requests Commitment","type":"stat"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"unit":"percentunit"}},"gridPos":{"h":3,"w":4,"x":8,"y":0},"id":3,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"colorMode":"none"},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(kube_pod_container_resource_limits{job=\"kube-state-metrics\", resource=\"cpu\"}) / sum(kube_node_status_allocatable{job=\"kube-state-metrics\", resource=\"cpu\"})","instant":true}],"title":"CPU Limits Commitment","type":"stat"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"unit":"percentunit"}},"gridPos":{"h":3,"w":4,"x":12,"y":0},"id":4,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"colorMode":"none"},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"1 - sum(:node_memory_MemAvailable_bytes:sum) / sum(node_memory_MemTotal_bytes{job=\"node-exporter\"})","instant":true}],"title":"Memory Utilisation","type":"stat"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"unit":"percentunit"}},"gridPos":{"h":3,"w":4,"x":16,"y":0},"id":5,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"colorMode":"none"},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(kube_pod_container_resource_requests{job=\"kube-state-metrics\", resource=\"memory\"}) / sum(kube_node_status_allocatable{job=\"kube-state-metrics\", resource=\"memory\"})","instant":true}],"title":"Memory Requests Commitment","type":"stat"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"unit":"percentunit"}},"gridPos":{"h":3,"w":4,"x":20,"y":0},"id":6,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"colorMode":"none"},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(kube_pod_container_resource_limits{job=\"kube-state-metrics\", resource=\"memory\"}) / sum(kube_node_status_allocatable{job=\"kube-state-metrics\", resource=\"memory\"})","instant":true}],"title":"Memory Limits Commitment","type":"stat"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"showPoints":"never"}}},"gridPos":{"h":7,"w":24,"x":0,"y":1},"id":7,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(max by (cluster, namespace, pod, container)(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_rate5m)) by (cluster)","legendFormat":"__auto"}],"title":"CPU Usage","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"overrides":[{"matcher":{"id":"byRegexp","options":"/%/"},"properties":[{"id":"unit","value":"percentunit"}]},{"matcher":{"id":"byName","options":"Cluster"},"properties":[{"id":"links","value":[{"title":"Drill down","url":"/d/efa86fd1d0c121a26444b636a3f509a8?${datasource:queryparam}&var-cluster=${__data.fields.Cluster}"}]}]}]},"gridPos":{"h":7,"w":24,"x":0,"y":2},"id":8,"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(max by (cluster, namespace, pod, container)(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_rate5m)) by (cluster)","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(kube_pod_container_resource_requests{job=\"kube-state-metrics\", resource=\"cpu\"}) by (cluster)","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(max by (cluster, namespace, pod, container)(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_rate5m)) by (cluster) / sum(kube_pod_container_resource_requests{job=\"kube-state-metrics\", resource=\"cpu\"}) by (cluster)","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(kube_pod_container_resource_limits{job=\"kube-state-metrics\", resource=\"cpu\"}) by (cluster)","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(max by (cluster, namespace, pod, container)(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_rate5m)) by (cluster) / sum(kube_pod_container_resource_limits{job=\"kube-state-metrics\", resource=\"cpu\"}) by (cluster)","format":"table","instant":true}],"title":"CPU Quota","transformations":[{"id":"joinByField","options":{"byField":"cluster","mode":"outer"}},{"id":"organize","options":{"excludeByName":{"Time":true,"Time 1":true,"Time 2":true,"Time 3":true,"Time 4":true,"Time 5":true},"indexByName":{"Time 1":0,"Time 2":1,"Time 3":2,"Time 4":3,"Time 5":4,"Value #A":6,"Value #B":7,"Value #C":8,"Value #D":9,"Value #E":10,"cluster":5},"renameByName":{"Value #A":"CPU Usage","Value #B":"CPU Requests","Value #C":"CPU Requests %","Value #D":"CPU Limits","Value #E":"CPU Limits %","cluster":"Cluster"}}}],"type":"table"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"showPoints":"never"},"unit":"bytes"}},"gridPos":{"h":7,"w":24,"x":0,"y":3},"id":9,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(max by (cluster, namespace, pod, container)(container_memory_rss{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", container!=\"\"})) by (cluster)","legendFormat":"__auto"}],"title":"Memory Usage (w/o cache)","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"unit":"bytes"},"overrides":[{"matcher":{"id":"byRegexp","options":"/%/"},"properties":[{"id":"unit","value":"percentunit"}]},{"matcher":{"id":"byName","options":"Cluster"},"properties":[{"id":"links","value":[{"title":"Drill down","url":"/d/efa86fd1d0c121a26444b636a3f509a8?${datasource:queryparam}&var-cluster=${__data.fields.Cluster}"}]}]}]},"gridPos":{"h":7,"w":24,"x":0,"y":4},"id":10,"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(max by (cluster, namespace, pod, container)(container_memory_rss{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", container!=\"\"})) by (cluster)","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(kube_pod_container_resource_requests{job=\"kube-state-metrics\", resource=\"memory\"}) by (cluster)","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(max by (cluster, namespace, pod, container)(container_memory_rss{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", container!=\"\"})) by (cluster) / sum(kube_pod_container_resource_requests{job=\"kube-state-metrics\", resource=\"memory\"}) by (cluster)","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(kube_pod_container_resource_limits{job=\"kube-state-metrics\", resource=\"memory\"}) by (cluster)","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(max by (cluster, namespace, pod, container)(container_memory_rss{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", container!=\"\"})) by (cluster) / sum(kube_pod_container_resource_limits{job=\"kube-state-metrics\", resource=\"memory\"}) by (cluster)","format":"table","instant":true}],"title":"Memory Requests by Cluster","transformations":[{"id":"joinByField","options":{"byField":"cluster","mode":"outer"}},{"id":"organize","options":{"excludeByName":{"Time":true,"Time 1":true,"Time 2":true,"Time 3":true,"Time 4":true,"Time 5":true},"indexByName":{"Time 1":0,"Time 2":1,"Time 3":2,"Time 4":3,"Time 5":4,"Value #A":6,"Value #B":7,"Value #C":8,"Value #D":9,"Value #E":10,"cluster":5},"renameByName":{"Value #A":"Memory Usage","Value #B":"Memory Requests","Value #C":"Memory Requests %","Value #D":"Memory Limits","Value #E":"Memory Limits %","cluster":"Cluster"}}}],"type":"table"}],"refresh":"10s","schemaVersion":39,"tags":["kubernetes-mixin"],"templating":{"list":[{"current":{"selected":true,"text":"default","value":"default"},"hide":0,"label":"Data source","name":"datasource","query":"prometheus","regex":"","type":"datasource"}]},"time":{"from":"now-1h","to":"now"},"timezone": "`}}{{ .Values.grafana.defaultDashboardsTimezone }}{{`","title":"Kubernetes / Compute Resources / Multi-Cluster","uid":"b59e6c9f2fcbe2e16d77fc492374cc4f"}`}} {{- end }} --- {{- if and .Values.grafana.operator.dashboardsConfigMapRefEnabled (or .Values.grafana.enabled .Values.grafana.forceDeployDashboards) (semverCompare ">=1.14.0-0" $kubeTargetVersion) (semverCompare "<9.9.9-9" $kubeTargetVersion) .Values.grafana.defaultDashboardsEnabled }} diff --git a/charts/kube-prometheus-stack/templates/grafana/dashboards-1.14/k8s-resources-namespace.yaml b/charts/kube-prometheus-stack/templates/grafana/dashboards-1.14/k8s-resources-namespace.yaml index 4ee4bdec97..68125be846 100644 --- a/charts/kube-prometheus-stack/templates/grafana/dashboards-1.14/k8s-resources-namespace.yaml +++ b/charts/kube-prometheus-stack/templates/grafana/dashboards-1.14/k8s-resources-namespace.yaml @@ -1,5 +1,5 @@ {{- /* -Generated from 'k8s-resources-namespace' from https://raw.githubusercontent.com/prometheus-operator/kube-prometheus/eaca1a5fd76b356974054906af46810fec1cd7f8/manifests/grafana-dashboardDefinitions.yaml +Generated from 'k8s-resources-namespace' from https://raw.githubusercontent.com/prometheus-operator/kube-prometheus/4eafa8b5395ef839bb02a55e3b5fbdfa03280cf9/manifests/grafana-dashboardDefinitions.yaml Do not change in-place! In order to change this file first read following link: https://github.com/prometheus-community/helm-charts/tree/main/charts/kube-prometheus-stack/hack */ -}} @@ -21,7 +21,7 @@ metadata: {{- include "kube-prometheus-stack.labels" $ | nindent 4 }} data: k8s-resources-namespace.json: |- - {{`{"editable":`}}{{ .Values.grafana.defaultDashboardsEditable }}{{`,"links":[{"asDropdown":true,"includeVars":true,"keepTime":true,"tags":["kubernetes-mixin"],"targetBlank":false,"title":"Kubernetes","type":"dashboards"}],"panels":[{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"unit":"percentunit"}},"gridPos":{"h":3,"w":6,"x":0,"y":0},"id":1,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"colorMode":"none"},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(max by (cluster, namespace, pod, container)(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_rate5m{cluster=\"$cluster\", namespace=\"$namespace\"})) / sum(kube_pod_container_resource_requests{job=\"kube-state-metrics\", cluster=\"$cluster\", namespace=\"$namespace\", resource=\"cpu\"})","instant":true}],"title":"CPU Utilisation (from requests)","type":"stat"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"unit":"percentunit"}},"gridPos":{"h":3,"w":6,"x":6,"y":0},"id":2,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"colorMode":"none"},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(max by (cluster, namespace, pod, container)(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_rate5m{cluster=\"$cluster\", namespace=\"$namespace\"})) / sum(kube_pod_container_resource_limits{job=\"kube-state-metrics\", cluster=\"$cluster\", namespace=\"$namespace\", resource=\"cpu\"})","instant":true}],"title":"CPU Utilisation (from limits)","type":"stat"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"unit":"percentunit"}},"gridPos":{"h":3,"w":6,"x":12,"y":0},"id":3,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"colorMode":"none"},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(max by (cluster, namespace, pod, container)(container_memory_working_set_bytes{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=\"$namespace\",container!=\"\", image!=\"\"})) / sum(kube_pod_container_resource_requests{job=\"kube-state-metrics\", cluster=\"$cluster\", namespace=\"$namespace\", resource=\"memory\"})","instant":true}],"title":"Memory Utilisation (from requests)","type":"stat"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"unit":"percentunit"}},"gridPos":{"h":3,"w":6,"x":18,"y":0},"id":4,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"colorMode":"none"},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(max by (cluster, namespace, pod, container)(container_memory_working_set_bytes{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=\"$namespace\",container!=\"\", image!=\"\"})) / sum(kube_pod_container_resource_limits{job=\"kube-state-metrics\", cluster=\"$cluster\", namespace=\"$namespace\", resource=\"memory\"})","instant":true}],"title":"Memory Utilisation (from limits)","type":"stat"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true}},"overrides":[{"matcher":{"id":"byFrameRefID","options":"B"},"properties":[{"id":"custom.lineStyle","value":{"fill":"dash"}},{"id":"custom.lineWidth","value":2},{"id":"color","value":{"fixedColor":"red","mode":"fixed"}}]},{"matcher":{"id":"byFrameRefID","options":"C"},"properties":[{"id":"custom.lineStyle","value":{"fill":"dash"}},{"id":"custom.lineWidth","value":2},{"id":"color","value":{"fixedColor":"orange","mode":"fixed"}}]}]},"gridPos":{"h":7,"w":24,"x":0,"y":7},"id":5,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(max by (cluster, namespace, pod, container)(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_rate5m{cluster=\"$cluster\", namespace=\"$namespace\"})) by (pod)","legendFormat":"__auto"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"scalar(max(kube_resourcequota{cluster=\"$cluster\", namespace=\"$namespace\", type=\"hard\",resource=\"requests.cpu\"}))","legendFormat":"quota - requests"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"scalar(max(kube_resourcequota{cluster=\"$cluster\", namespace=\"$namespace\", type=\"hard\",resource=\"limits.cpu\"}))","legendFormat":"quota - limits"}],"title":"CPU Usage","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"overrides":[{"matcher":{"id":"byRegexp","options":"/%/"},"properties":[{"id":"unit","value":"percentunit"}]},{"matcher":{"id":"byName","options":"Pod"},"properties":[{"id":"links","value":[{"title":"Drill down to pods","url":"/d/6581e46e4e5c7ba40a07646395ef7b23?${datasource:queryparam}&var-cluster=$cluster&var-namespace=$namespace&var-pod=${__data.fields.Pod}"}]}]}]},"gridPos":{"h":7,"w":24,"x":0,"y":14},"id":6,"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(max by (cluster, namespace, pod, container)(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_rate5m{cluster=\"$cluster\", namespace=\"$namespace\"})) by (pod)","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(max by (cluster, namespace, pod, container)(cluster:namespace:pod_cpu:active:kube_pod_container_resource_requests{cluster=\"$cluster\", namespace=\"$namespace\"})) by (pod)","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(max by (cluster, namespace, pod, container)(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_rate5m{cluster=\"$cluster\", namespace=\"$namespace\"})) by (pod) / sum(max by (cluster, namespace, pod, container)(cluster:namespace:pod_cpu:active:kube_pod_container_resource_requests{cluster=\"$cluster\", namespace=\"$namespace\"})) by (pod)","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(max by (cluster, namespace, pod, container)(cluster:namespace:pod_cpu:active:kube_pod_container_resource_limits{cluster=\"$cluster\", namespace=\"$namespace\"})) by (pod)","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(max by (cluster, namespace, pod, container)(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_rate5m{cluster=\"$cluster\", namespace=\"$namespace\"})) by (pod) / sum(max by (cluster, namespace, pod, container)(cluster:namespace:pod_cpu:active:kube_pod_container_resource_limits{cluster=\"$cluster\", namespace=\"$namespace\"})) by (pod)","format":"table","instant":true}],"title":"CPU Quota","transformations":[{"id":"joinByField","options":{"byField":"pod","mode":"outer"}},{"id":"organize","options":{"excludeByName":{"Time":true,"Time 1":true,"Time 2":true,"Time 3":true,"Time 4":true,"Time 5":true},"indexByName":{"Time 1":0,"Time 2":1,"Time 3":2,"Time 4":3,"Time 5":4,"Value #A":6,"Value #B":7,"Value #C":8,"Value #D":9,"Value #E":10,"pod":5},"renameByName":{"Value #A":"CPU Usage","Value #B":"CPU Requests","Value #C":"CPU Requests %","Value #D":"CPU Limits","Value #E":"CPU Limits %","pod":"Pod"}}}],"type":"table"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"bytes"},"overrides":[{"matcher":{"id":"byFrameRefID","options":"B"},"properties":[{"id":"custom.lineStyle","value":{"fill":"dash"}},{"id":"custom.lineWidth","value":2},{"id":"color","value":{"fixedColor":"red","mode":"fixed"}}]},{"matcher":{"id":"byFrameRefID","options":"C"},"properties":[{"id":"custom.lineStyle","value":{"fill":"dash"}},{"id":"custom.lineWidth","value":2},{"id":"color","value":{"fixedColor":"orange","mode":"fixed"}}]}]},"gridPos":{"h":7,"w":24,"x":0,"y":21},"id":7,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(max by (cluster, namespace, pod, container)(container_memory_working_set_bytes{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=\"$namespace\", container!=\"\", image!=\"\"})) by (pod)","legendFormat":"__auto"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"scalar(max(kube_resourcequota{cluster=\"$cluster\", namespace=\"$namespace\", type=\"hard\",resource=\"requests.memory\"}))","legendFormat":"quota - requests"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"scalar(max(kube_resourcequota{cluster=\"$cluster\", namespace=\"$namespace\", type=\"hard\",resource=\"limits.memory\"}))","legendFormat":"quota - limits"}],"title":"Memory Usage (w/o cache)","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"unit":"bytes"},"overrides":[{"matcher":{"id":"byRegexp","options":"/%/"},"properties":[{"id":"unit","value":"percentunit"}]},{"matcher":{"id":"byName","options":"Pod"},"properties":[{"id":"links","value":[{"title":"Drill down to pods","url":"/d/6581e46e4e5c7ba40a07646395ef7b23?${datasource:queryparam}&var-cluster=$cluster&var-namespace=$namespace&var-pod=${__data.fields.Pod}"}]}]}]},"gridPos":{"h":7,"w":24,"x":0,"y":28},"id":8,"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(max by (cluster, namespace, pod, container)(container_memory_working_set_bytes{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=\"$namespace\", container!=\"\", image!=\"\"})) by (pod)","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(max by (cluster, namespace, pod, container)(cluster:namespace:pod_memory:active:kube_pod_container_resource_requests{cluster=\"$cluster\", namespace=\"$namespace\"})) by (pod)","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(max by (cluster, namespace, pod, container)(container_memory_working_set_bytes{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=\"$namespace\",container!=\"\", image!=\"\"})) by (pod) / sum(max by (cluster, namespace, pod, container)(cluster:namespace:pod_memory:active:kube_pod_container_resource_requests{cluster=\"$cluster\", namespace=\"$namespace\"})) by (pod)","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(max by (cluster, namespace, pod, container)(cluster:namespace:pod_memory:active:kube_pod_container_resource_limits{cluster=\"$cluster\", namespace=\"$namespace\"})) by (pod)","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(max by (cluster, namespace, pod, container)(container_memory_working_set_bytes{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=\"$namespace\",container!=\"\", image!=\"\"})) by (pod) / sum(max by (cluster, namespace, pod, container)(cluster:namespace:pod_memory:active:kube_pod_container_resource_limits{cluster=\"$cluster\", namespace=\"$namespace\"})) by (pod)","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(max by (cluster, namespace, pod, container)(container_memory_rss{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=\"$namespace\",container!=\"\"})) by (pod)","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(max by (cluster, namespace, pod, container)(container_memory_cache{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=\"$namespace\",container!=\"\"})) by (pod)","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(max by (cluster, namespace, pod, container)(container_memory_swap{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=\"$namespace\",container!=\"\"})) by (pod)","format":"table","instant":true}],"title":"Memory Quota","transformations":[{"id":"joinByField","options":{"byField":"pod","mode":"outer"}},{"id":"organize","options":{"excludeByName":{"Time":true,"Time 1":true,"Time 2":true,"Time 3":true,"Time 4":true,"Time 5":true,"Time 6":true,"Time 7":true,"Time 8":true},"indexByName":{"Time 1":0,"Time 2":1,"Time 3":2,"Time 4":3,"Time 5":4,"Time 6":5,"Time 7":6,"Time 8":7,"Value #A":9,"Value #B":10,"Value #C":11,"Value #D":12,"Value #E":13,"Value #F":14,"Value #G":15,"Value #H":16,"pod":8},"renameByName":{"Value #A":"Memory Usage","Value #B":"Memory Requests","Value #C":"Memory Requests %","Value #D":"Memory Limits","Value #E":"Memory Limits %","Value #F":"Memory Usage (RSS)","Value #G":"Memory Usage (Cache)","Value #H":"Memory Usage (Swap)","pod":"Pod"}}}],"type":"table"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"overrides":[{"matcher":{"id":"byRegexp","options":"/Bandwidth/"},"properties":[{"id":"unit","value":"bps"}]},{"matcher":{"id":"byRegexp","options":"/Packets/"},"properties":[{"id":"unit","value":"pps"}]},{"matcher":{"id":"byName","options":"Pod"},"properties":[{"id":"links","value":[{"title":"Drill down to pods","url":"/d/6581e46e4e5c7ba40a07646395ef7b23?${datasource:queryparam}&var-cluster=$cluster&var-namespace=$namespace&var-pod=${__data.fields.Pod}"}]}]}]},"gridPos":{"h":7,"w":24,"x":0,"y":35},"id":9,"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum((8 * rate(container_network_receive_bytes_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval]))) by (pod)","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum((8 * rate(container_network_transmit_bytes_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval]))) by (pod)","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(rate(container_network_receive_packets_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval])) by (pod)","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(rate(container_network_transmit_packets_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval])) by (pod)","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(rate(container_network_receive_packets_dropped_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval])) by (pod)","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(rate(container_network_transmit_packets_dropped_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval])) by (pod)","format":"table","instant":true}],"title":"Current Network Usage","transformations":[{"id":"joinByField","options":{"byField":"pod","mode":"outer"}},{"id":"organize","options":{"excludeByName":{"Time":true,"Time 1":true,"Time 2":true,"Time 3":true,"Time 4":true,"Time 5":true,"Time 6":true},"indexByName":{"Time 1":0,"Time 2":1,"Time 3":2,"Time 4":3,"Time 5":4,"Time 6":5,"Value #A":7,"Value #B":8,"Value #C":9,"Value #D":10,"Value #E":11,"Value #F":12,"pod":6},"renameByName":{"Value #A":"Current Receive Bandwidth","Value #B":"Current Transmit Bandwidth","Value #C":"Rate of Received Packets","Value #D":"Rate of Transmitted Packets","Value #E":"Rate of Received Packets Dropped","Value #F":"Rate of Transmitted Packets Dropped","pod":"Pod"}}}],"type":"table"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"bps"}},"gridPos":{"h":7,"w":12,"x":0,"y":42},"id":10,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum((8 * rate(container_network_receive_bytes_total{cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval]))) by (pod)","legendFormat":"__auto"}],"title":"Receive Bandwidth","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"bps"}},"gridPos":{"h":7,"w":12,"x":12,"y":42},"id":11,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum((8 * rate(container_network_transmit_bytes_total{cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval]))) by (pod)","legendFormat":"__auto"}],"title":"Transmit Bandwidth","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"pps"}},"gridPos":{"h":7,"w":12,"x":0,"y":49},"id":12,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(rate(container_network_receive_packets_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval])) by (pod)","legendFormat":"__auto"}],"title":"Rate of Received Packets","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"pps"}},"gridPos":{"h":7,"w":12,"x":12,"y":49},"id":13,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(rate(container_network_transmit_packets_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval])) by (pod)","legendFormat":"__auto"}],"title":"Rate of Transmitted Packets","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"pps"}},"gridPos":{"h":7,"w":12,"x":0,"y":56},"id":14,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(rate(container_network_receive_packets_dropped_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval])) by (pod)","legendFormat":"__auto"}],"title":"Rate of Received Packets Dropped","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"pps"}},"gridPos":{"h":7,"w":12,"x":12,"y":56},"id":15,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(rate(container_network_transmit_packets_dropped_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval])) by (pod)","legendFormat":"__auto"}],"title":"Rate of Transmitted Packets Dropped","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"iops"}},"gridPos":{"h":7,"w":12,"x":0,"y":63},"id":16,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"ceil(sum by(pod) (rate(container_fs_reads_total{container!=\"\", device=~\"(/dev/)?(mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|md.+|dasd.+)\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval]) + rate(container_fs_writes_total{container!=\"\", device=~\"(/dev/)?(mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|md.+|dasd.+)\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval])))","legendFormat":"__auto"}],"title":"IOPS(Reads+Writes)","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"Bps"}},"gridPos":{"h":7,"w":12,"x":12,"y":63},"id":17,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum by(pod) (rate(container_fs_reads_bytes_total{container!=\"\", device=~\"(/dev/)?(mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|md.+|dasd.+)\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval]) + rate(container_fs_writes_bytes_total{container!=\"\", device=~\"(/dev/)?(mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|md.+|dasd.+)\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval]))","legendFormat":"__auto"}],"title":"ThroughPut(Read+Write)","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"overrides":[{"matcher":{"id":"byRegexp","options":"/IOPS/"},"properties":[{"id":"unit","value":"iops"}]},{"matcher":{"id":"byRegexp","options":"/Throughput/"},"properties":[{"id":"unit","value":"bps"}]},{"matcher":{"id":"byName","options":"Pod"},"properties":[{"id":"links","value":[{"title":"Drill down to pods","url":"/d/6581e46e4e5c7ba40a07646395ef7b23?${datasource:queryparam}&var-cluster=$cluster&var-namespace=$namespace&var-pod=${__data.fields.Pod}"}]}]}]},"gridPos":{"h":7,"w":24,"x":0,"y":70},"id":18,"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum by(pod) (rate(container_fs_reads_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", device=~\"(/dev/)?(mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|md.+|dasd.+)\", container!=\"\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval]))","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum by(pod) (rate(container_fs_writes_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", device=~\"(/dev/)?(mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|md.+|dasd.+)\", container!=\"\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval]))","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum by(pod) (rate(container_fs_reads_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", device=~\"(/dev/)?(mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|md.+|dasd.+)\", container!=\"\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval]) + rate(container_fs_writes_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", device=~\"(/dev/)?(mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|md.+|dasd.+)\", container!=\"\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval]))","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum by(pod) (rate(container_fs_reads_bytes_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", device=~\"(/dev/)?(mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|md.+|dasd.+)\", container!=\"\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval]))","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum by(pod) (rate(container_fs_writes_bytes_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", device=~\"(/dev/)?(mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|md.+|dasd.+)\", container!=\"\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval]))","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum by(pod) (rate(container_fs_reads_bytes_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", device=~\"(/dev/)?(mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|md.+|dasd.+)\", container!=\"\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval]) + rate(container_fs_writes_bytes_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", device=~\"(/dev/)?(mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|md.+|dasd.+)\", container!=\"\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval]))","format":"table","instant":true}],"title":"Current Storage IO","transformations":[{"id":"joinByField","options":{"byField":"pod","mode":"outer"}},{"id":"organize","options":{"excludeByName":{"Time":true,"Time 1":true,"Time 2":true,"Time 3":true,"Time 4":true,"Time 5":true,"Time 6":true},"indexByName":{"Time 1":0,"Time 2":1,"Time 3":2,"Time 4":3,"Time 5":4,"Time 6":5,"Value #A":7,"Value #B":8,"Value #C":9,"Value #D":10,"Value #E":11,"Value #F":12,"pod":6},"renameByName":{"Value #A":"IOPS(Reads)","Value #B":"IOPS(Writes)","Value #C":"IOPS(Reads + Writes)","Value #D":"Throughput(Read)","Value #E":"Throughput(Write)","Value #F":"Throughput(Read + Write)","pod":"Pod"}}}],"type":"table"}],"refresh":"10s","schemaVersion":39,"tags":["kubernetes-mixin"],"templating":{"list":[{"current":{"selected":true,"text":"default","value":"default"},"hide":0,"label":"Data source","name":"datasource","query":"prometheus","regex":"","type":"datasource"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"hide":`}}{{ if .Values.grafana.sidecar.dashboards.multicluster.global.enabled }}0{{ else }}2{{ end }}{{`,"label":"cluster","name":"cluster","query":"label_values(up{job=\"kube-state-metrics\"}, cluster)","refresh":2,"sort":1,"type":"query","allValue":".*"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"hide":0,"label":"namespace","name":"namespace","query":"label_values(kube_namespace_status_phase{job=\"kube-state-metrics\", cluster=\"$cluster\"}, namespace)","refresh":2,"sort":1,"type":"query"}]},"time":{"from":"now-1h","to":"now"},"timezone": "`}}{{ .Values.grafana.defaultDashboardsTimezone }}{{`","title":"Kubernetes / Compute Resources / Namespace (Pods)","uid":"85a562078cdf77779eaa1add43ccec1e"}`}} + {{`{"editable":`}}{{ .Values.grafana.defaultDashboardsEditable }}{{`,"links":[{"asDropdown":true,"includeVars":true,"keepTime":true,"tags":["kubernetes-mixin"],"targetBlank":false,"title":"Kubernetes","type":"dashboards"}],"panels":[{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"unit":"percentunit"}},"gridPos":{"h":3,"w":6,"x":0,"y":0},"id":1,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"colorMode":"none"},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(max by (cluster, namespace, pod, container)(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_rate5m{cluster=\"$cluster\", namespace=\"$namespace\"})) / sum(kube_pod_container_resource_requests{job=\"kube-state-metrics\", cluster=\"$cluster\", namespace=\"$namespace\", resource=\"cpu\"})","instant":true}],"title":"CPU Utilisation (from requests)","type":"stat"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"unit":"percentunit"}},"gridPos":{"h":3,"w":6,"x":6,"y":0},"id":2,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"colorMode":"none"},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(max by (cluster, namespace, pod, container)(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_rate5m{cluster=\"$cluster\", namespace=\"$namespace\"})) / sum(kube_pod_container_resource_limits{job=\"kube-state-metrics\", cluster=\"$cluster\", namespace=\"$namespace\", resource=\"cpu\"})","instant":true}],"title":"CPU Utilisation (from limits)","type":"stat"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"unit":"percentunit"}},"gridPos":{"h":3,"w":6,"x":12,"y":0},"id":3,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"colorMode":"none"},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(max by (cluster, namespace, pod, container)(container_memory_working_set_bytes{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=\"$namespace\",container!=\"\", image!=\"\"})) / sum(kube_pod_container_resource_requests{job=\"kube-state-metrics\", cluster=\"$cluster\", namespace=\"$namespace\", resource=\"memory\"})","instant":true}],"title":"Memory Utilisation (from requests)","type":"stat"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"unit":"percentunit"}},"gridPos":{"h":3,"w":6,"x":18,"y":0},"id":4,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"colorMode":"none"},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(max by (cluster, namespace, pod, container)(container_memory_working_set_bytes{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=\"$namespace\",container!=\"\", image!=\"\"})) / sum(kube_pod_container_resource_limits{job=\"kube-state-metrics\", cluster=\"$cluster\", namespace=\"$namespace\", resource=\"memory\"})","instant":true}],"title":"Memory Utilisation (from limits)","type":"stat"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true}},"overrides":[{"matcher":{"id":"byFrameRefID","options":"B"},"properties":[{"id":"custom.lineStyle","value":{"fill":"dash"}},{"id":"custom.lineWidth","value":2},{"id":"color","value":{"fixedColor":"red","mode":"fixed"}}]},{"matcher":{"id":"byFrameRefID","options":"C"},"properties":[{"id":"custom.lineStyle","value":{"fill":"dash"}},{"id":"custom.lineWidth","value":2},{"id":"color","value":{"fixedColor":"orange","mode":"fixed"}}]}]},"gridPos":{"h":7,"w":24,"x":0,"y":7},"id":5,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(max by (cluster, namespace, pod, container)(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_rate5m{cluster=\"$cluster\", namespace=\"$namespace\"})) by (pod)","legendFormat":"__auto"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"scalar(max(kube_resourcequota{cluster=\"$cluster\", namespace=\"$namespace\", type=\"hard\",resource=\"requests.cpu\"}))","legendFormat":"quota - requests"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"scalar(max(kube_resourcequota{cluster=\"$cluster\", namespace=\"$namespace\", type=\"hard\",resource=\"limits.cpu\"}))","legendFormat":"quota - limits"}],"title":"CPU Usage","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"overrides":[{"matcher":{"id":"byRegexp","options":"/%/"},"properties":[{"id":"unit","value":"percentunit"}]},{"matcher":{"id":"byName","options":"Pod"},"properties":[{"id":"links","value":[{"title":"Drill down to pods","url":"/d/6581e46e4e5c7ba40a07646395ef7b23?${datasource:queryparam}&var-cluster=$cluster&var-namespace=$namespace&var-pod=${__data.fields.Pod}"}]}]}]},"gridPos":{"h":7,"w":24,"x":0,"y":14},"id":6,"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(max by (cluster, namespace, pod, container)(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_rate5m{cluster=\"$cluster\", namespace=\"$namespace\"})) by (pod)","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(max by (cluster, namespace, pod, container)(cluster:namespace:pod_cpu:active:kube_pod_container_resource_requests{cluster=\"$cluster\", namespace=\"$namespace\"})) by (pod)","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(max by (cluster, namespace, pod, container)(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_rate5m{cluster=\"$cluster\", namespace=\"$namespace\"})) by (pod) / sum(max by (cluster, namespace, pod, container)(cluster:namespace:pod_cpu:active:kube_pod_container_resource_requests{cluster=\"$cluster\", namespace=\"$namespace\"})) by (pod)","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(max by (cluster, namespace, pod, container)(cluster:namespace:pod_cpu:active:kube_pod_container_resource_limits{cluster=\"$cluster\", namespace=\"$namespace\"})) by (pod)","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(max by (cluster, namespace, pod, container)(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_rate5m{cluster=\"$cluster\", namespace=\"$namespace\"})) by (pod) / sum(max by (cluster, namespace, pod, container)(cluster:namespace:pod_cpu:active:kube_pod_container_resource_limits{cluster=\"$cluster\", namespace=\"$namespace\"})) by (pod)","format":"table","instant":true}],"title":"CPU Quota","transformations":[{"id":"joinByField","options":{"byField":"pod","mode":"outer"}},{"id":"organize","options":{"excludeByName":{"Time":true,"Time 1":true,"Time 2":true,"Time 3":true,"Time 4":true,"Time 5":true},"indexByName":{"Time 1":0,"Time 2":1,"Time 3":2,"Time 4":3,"Time 5":4,"Value #A":6,"Value #B":7,"Value #C":8,"Value #D":9,"Value #E":10,"pod":5},"renameByName":{"Value #A":"CPU Usage","Value #B":"CPU Requests","Value #C":"CPU Requests %","Value #D":"CPU Limits","Value #E":"CPU Limits %","pod":"Pod"}}}],"type":"table"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"bytes"},"overrides":[{"matcher":{"id":"byFrameRefID","options":"B"},"properties":[{"id":"custom.lineStyle","value":{"fill":"dash"}},{"id":"custom.lineWidth","value":2},{"id":"color","value":{"fixedColor":"red","mode":"fixed"}}]},{"matcher":{"id":"byFrameRefID","options":"C"},"properties":[{"id":"custom.lineStyle","value":{"fill":"dash"}},{"id":"custom.lineWidth","value":2},{"id":"color","value":{"fixedColor":"orange","mode":"fixed"}}]}]},"gridPos":{"h":7,"w":24,"x":0,"y":21},"id":7,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(max by (cluster, namespace, pod, container)(container_memory_working_set_bytes{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=\"$namespace\", container!=\"\", image!=\"\"})) by (pod)","legendFormat":"__auto"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"scalar(max(kube_resourcequota{cluster=\"$cluster\", namespace=\"$namespace\", type=\"hard\",resource=\"requests.memory\"}))","legendFormat":"quota - requests"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"scalar(max(kube_resourcequota{cluster=\"$cluster\", namespace=\"$namespace\", type=\"hard\",resource=\"limits.memory\"}))","legendFormat":"quota - limits"}],"title":"Memory Usage (w/o cache)","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"unit":"bytes"},"overrides":[{"matcher":{"id":"byRegexp","options":"/%/"},"properties":[{"id":"unit","value":"percentunit"}]},{"matcher":{"id":"byName","options":"Pod"},"properties":[{"id":"links","value":[{"title":"Drill down to pods","url":"/d/6581e46e4e5c7ba40a07646395ef7b23?${datasource:queryparam}&var-cluster=$cluster&var-namespace=$namespace&var-pod=${__data.fields.Pod}"}]}]}]},"gridPos":{"h":7,"w":24,"x":0,"y":28},"id":8,"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(max by (cluster, namespace, pod, container)(container_memory_working_set_bytes{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=\"$namespace\", container!=\"\", image!=\"\"})) by (pod)","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(max by (cluster, namespace, pod, container)(cluster:namespace:pod_memory:active:kube_pod_container_resource_requests{cluster=\"$cluster\", namespace=\"$namespace\"})) by (pod)","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(max by (cluster, namespace, pod, container)(container_memory_working_set_bytes{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=\"$namespace\",container!=\"\", image!=\"\"})) by (pod) / sum(max by (cluster, namespace, pod, container)(cluster:namespace:pod_memory:active:kube_pod_container_resource_requests{cluster=\"$cluster\", namespace=\"$namespace\"})) by (pod)","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(max by (cluster, namespace, pod, container)(cluster:namespace:pod_memory:active:kube_pod_container_resource_limits{cluster=\"$cluster\", namespace=\"$namespace\"})) by (pod)","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(max by (cluster, namespace, pod, container)(container_memory_working_set_bytes{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=\"$namespace\",container!=\"\", image!=\"\"})) by (pod) / sum(max by (cluster, namespace, pod, container)(cluster:namespace:pod_memory:active:kube_pod_container_resource_limits{cluster=\"$cluster\", namespace=\"$namespace\"})) by (pod)","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(max by (cluster, namespace, pod, container)(container_memory_rss{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=\"$namespace\",container!=\"\"})) by (pod)","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(max by (cluster, namespace, pod, container)(container_memory_cache{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=\"$namespace\",container!=\"\"})) by (pod)","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(max by (cluster, namespace, pod, container)(container_memory_swap{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=\"$namespace\",container!=\"\"})) by (pod)","format":"table","instant":true}],"title":"Memory Quota","transformations":[{"id":"joinByField","options":{"byField":"pod","mode":"outer"}},{"id":"organize","options":{"excludeByName":{"Time":true,"Time 1":true,"Time 2":true,"Time 3":true,"Time 4":true,"Time 5":true,"Time 6":true,"Time 7":true,"Time 8":true},"indexByName":{"Time 1":0,"Time 2":1,"Time 3":2,"Time 4":3,"Time 5":4,"Time 6":5,"Time 7":6,"Time 8":7,"Value #A":9,"Value #B":10,"Value #C":11,"Value #D":12,"Value #E":13,"Value #F":14,"Value #G":15,"Value #H":16,"pod":8},"renameByName":{"Value #A":"Memory Usage","Value #B":"Memory Requests","Value #C":"Memory Requests %","Value #D":"Memory Limits","Value #E":"Memory Limits %","Value #F":"Memory Usage (RSS)","Value #G":"Memory Usage (Cache)","Value #H":"Memory Usage (Swap)","pod":"Pod"}}}],"type":"table"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"overrides":[{"matcher":{"id":"byRegexp","options":"/Bandwidth/"},"properties":[{"id":"unit","value":"bps"}]},{"matcher":{"id":"byRegexp","options":"/Packets/"},"properties":[{"id":"unit","value":"pps"}]},{"matcher":{"id":"byName","options":"Pod"},"properties":[{"id":"links","value":[{"title":"Drill down to pods","url":"/d/6581e46e4e5c7ba40a07646395ef7b23?${datasource:queryparam}&var-cluster=$cluster&var-namespace=$namespace&var-pod=${__data.fields.Pod}"}]}]}]},"gridPos":{"h":7,"w":24,"x":0,"y":35},"id":9,"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum((8 * rate(container_network_receive_bytes_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval]))) by (pod)","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum((8 * rate(container_network_transmit_bytes_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval]))) by (pod)","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(rate(container_network_receive_packets_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval])) by (pod)","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(rate(container_network_transmit_packets_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval])) by (pod)","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(rate(container_network_receive_packets_dropped_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval])) by (pod)","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(rate(container_network_transmit_packets_dropped_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval])) by (pod)","format":"table","instant":true}],"title":"Current Network Usage","transformations":[{"id":"joinByField","options":{"byField":"pod","mode":"outer"}},{"id":"organize","options":{"excludeByName":{"Time":true,"Time 1":true,"Time 2":true,"Time 3":true,"Time 4":true,"Time 5":true,"Time 6":true},"indexByName":{"Time 1":0,"Time 2":1,"Time 3":2,"Time 4":3,"Time 5":4,"Time 6":5,"Value #A":7,"Value #B":8,"Value #C":9,"Value #D":10,"Value #E":11,"Value #F":12,"pod":6},"renameByName":{"Value #A":"Current Receive Bandwidth","Value #B":"Current Transmit Bandwidth","Value #C":"Rate of Received Packets","Value #D":"Rate of Transmitted Packets","Value #E":"Rate of Received Packets Dropped","Value #F":"Rate of Transmitted Packets Dropped","pod":"Pod"}}}],"type":"table"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"bps"}},"gridPos":{"h":7,"w":12,"x":0,"y":42},"id":10,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum((8 * rate(container_network_receive_bytes_total{cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval]))) by (pod)","legendFormat":"__auto"}],"title":"Receive Bandwidth","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"bps"}},"gridPos":{"h":7,"w":12,"x":12,"y":42},"id":11,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum((8 * rate(container_network_transmit_bytes_total{cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval]))) by (pod)","legendFormat":"__auto"}],"title":"Transmit Bandwidth","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"pps"}},"gridPos":{"h":7,"w":12,"x":0,"y":49},"id":12,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(rate(container_network_receive_packets_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval])) by (pod)","legendFormat":"__auto"}],"title":"Rate of Received Packets","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"pps"}},"gridPos":{"h":7,"w":12,"x":12,"y":49},"id":13,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(rate(container_network_transmit_packets_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval])) by (pod)","legendFormat":"__auto"}],"title":"Rate of Transmitted Packets","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"pps"}},"gridPos":{"h":7,"w":12,"x":0,"y":56},"id":14,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(rate(container_network_receive_packets_dropped_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval])) by (pod)","legendFormat":"__auto"}],"title":"Rate of Received Packets Dropped","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"pps"}},"gridPos":{"h":7,"w":12,"x":12,"y":56},"id":15,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(rate(container_network_transmit_packets_dropped_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval])) by (pod)","legendFormat":"__auto"}],"title":"Rate of Transmitted Packets Dropped","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"iops"}},"gridPos":{"h":7,"w":12,"x":0,"y":63},"id":16,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"ceil(sum by(pod) (rate(container_fs_reads_total{container!=\"\", device=~\"(/dev/)?(mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|md.+|dasd.+)\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval]) + rate(container_fs_writes_total{container!=\"\", device=~\"(/dev/)?(mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|md.+|dasd.+)\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval])))","legendFormat":"__auto"}],"title":"IOPS(Reads+Writes)","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"Bps"}},"gridPos":{"h":7,"w":12,"x":12,"y":63},"id":17,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum by(pod) (rate(container_fs_reads_bytes_total{container!=\"\", device=~\"(/dev/)?(mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|md.+|dasd.+)\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval]) + rate(container_fs_writes_bytes_total{container!=\"\", device=~\"(/dev/)?(mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|md.+|dasd.+)\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval]))","legendFormat":"__auto"}],"title":"ThroughPut(Read+Write)","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"overrides":[{"matcher":{"id":"byRegexp","options":"/IOPS/"},"properties":[{"id":"unit","value":"iops"}]},{"matcher":{"id":"byRegexp","options":"/Throughput/"},"properties":[{"id":"unit","value":"bps"}]},{"matcher":{"id":"byName","options":"Pod"},"properties":[{"id":"links","value":[{"title":"Drill down to pods","url":"/d/6581e46e4e5c7ba40a07646395ef7b23?${datasource:queryparam}&var-cluster=$cluster&var-namespace=$namespace&var-pod=${__data.fields.Pod}"}]}]}]},"gridPos":{"h":7,"w":24,"x":0,"y":70},"id":18,"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum by(pod) (rate(container_fs_reads_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", device=~\"(/dev/)?(mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|md.+|dasd.+)\", container!=\"\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval]))","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum by(pod) (rate(container_fs_writes_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", device=~\"(/dev/)?(mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|md.+|dasd.+)\", container!=\"\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval]))","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum by(pod) (rate(container_fs_reads_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", device=~\"(/dev/)?(mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|md.+|dasd.+)\", container!=\"\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval]) + rate(container_fs_writes_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", device=~\"(/dev/)?(mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|md.+|dasd.+)\", container!=\"\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval]))","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum by(pod) (rate(container_fs_reads_bytes_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", device=~\"(/dev/)?(mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|md.+|dasd.+)\", container!=\"\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval]))","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum by(pod) (rate(container_fs_writes_bytes_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", device=~\"(/dev/)?(mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|md.+|dasd.+)\", container!=\"\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval]))","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum by(pod) (rate(container_fs_reads_bytes_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", device=~\"(/dev/)?(mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|md.+|dasd.+)\", container!=\"\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval]) + rate(container_fs_writes_bytes_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", device=~\"(/dev/)?(mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|md.+|dasd.+)\", container!=\"\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval]))","format":"table","instant":true}],"title":"Current Storage IO","transformations":[{"id":"joinByField","options":{"byField":"pod","mode":"outer"}},{"id":"organize","options":{"excludeByName":{"Time":true,"Time 1":true,"Time 2":true,"Time 3":true,"Time 4":true,"Time 5":true,"Time 6":true},"indexByName":{"Time 1":0,"Time 2":1,"Time 3":2,"Time 4":3,"Time 5":4,"Time 6":5,"Value #A":7,"Value #B":8,"Value #C":9,"Value #D":10,"Value #E":11,"Value #F":12,"pod":6},"renameByName":{"Value #A":"IOPS(Reads)","Value #B":"IOPS(Writes)","Value #C":"IOPS(Reads + Writes)","Value #D":"Throughput(Read)","Value #E":"Throughput(Write)","Value #F":"Throughput(Read + Write)","pod":"Pod"}}}],"type":"table"}],"refresh":"10s","schemaVersion":39,"tags":["kubernetes-mixin"],"templating":{"list":[{"current":{"selected":true,"text":"default","value":"default"},"hide":0,"label":"Data source","name":"datasource","query":"prometheus","regex":"","type":"datasource"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"hide":`}}{{ if .Values.grafana.sidecar.dashboards.multicluster.global.enabled }}0{{ else }}2{{ end }}{{`,"label":"cluster","name":"cluster","query":"label_values(up{job=\"kube-state-metrics\"}, cluster)","refresh":2,"sort":1,"type":"query","allValue":".*"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"hide":0,"label":"namespace","name":"namespace","query":"label_values(kube_namespace_status_phase{job=\"kube-state-metrics\", cluster=\"$cluster\"}, namespace)","refresh":2,"sort":1,"type":"query"}]},"time":{"from":"now-1h","to":"now"},"timezone": "`}}{{ .Values.grafana.defaultDashboardsTimezone }}{{`","title":"Kubernetes / Compute Resources / Namespace (Pods)","uid":"85a562078cdf77779eaa1add43ccec1e"}`}} {{- end }} --- {{- if and .Values.grafana.operator.dashboardsConfigMapRefEnabled (or .Values.grafana.enabled .Values.grafana.forceDeployDashboards) (semverCompare ">=1.14.0-0" $kubeTargetVersion) (semverCompare "<9.9.9-9" $kubeTargetVersion) .Values.grafana.defaultDashboardsEnabled }} diff --git a/charts/kube-prometheus-stack/templates/grafana/dashboards-1.14/k8s-resources-node.yaml b/charts/kube-prometheus-stack/templates/grafana/dashboards-1.14/k8s-resources-node.yaml index e82407806b..0ca956807c 100644 --- a/charts/kube-prometheus-stack/templates/grafana/dashboards-1.14/k8s-resources-node.yaml +++ b/charts/kube-prometheus-stack/templates/grafana/dashboards-1.14/k8s-resources-node.yaml @@ -1,5 +1,5 @@ {{- /* -Generated from 'k8s-resources-node' from https://raw.githubusercontent.com/prometheus-operator/kube-prometheus/eaca1a5fd76b356974054906af46810fec1cd7f8/manifests/grafana-dashboardDefinitions.yaml +Generated from 'k8s-resources-node' from https://raw.githubusercontent.com/prometheus-operator/kube-prometheus/4eafa8b5395ef839bb02a55e3b5fbdfa03280cf9/manifests/grafana-dashboardDefinitions.yaml Do not change in-place! In order to change this file first read following link: https://github.com/prometheus-community/helm-charts/tree/main/charts/kube-prometheus-stack/hack */ -}} @@ -20,7 +20,7 @@ metadata: {{- include "kube-prometheus-stack.labels" $ | nindent 4 }} data: k8s-resources-node.json: |- - {{`{"editable":`}}{{ .Values.grafana.defaultDashboardsEditable }}{{`,"links":[{"asDropdown":true,"includeVars":true,"keepTime":true,"tags":["kubernetes-mixin"],"targetBlank":false,"title":"Kubernetes","type":"dashboards"}],"panels":[{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true,"stacking":{"mode":"normal"}}},"overrides":[{"matcher":{"id":"byName","options":"max capacity"},"properties":[{"id":"color","value":{"fixedColor":"red","mode":"fixed"}},{"id":"custom.stacking","value":{"mode":"none"}},{"id":"custom.hideFrom","value":{"legend":false,"tooltip":true,"viz":false}},{"id":"custom.lineStyle","value":{"dash":[10,10],"fill":"dash"}}]},{"matcher":{"id":"byName","options":"max allocatable"},"properties":[{"id":"color","value":{"fixedColor":"super-light-red","mode":"fixed"}},{"id":"custom.stacking","value":{"mode":"none"}},{"id":"custom.hideFrom","value":{"legend":false,"tooltip":true,"viz":false}},{"id":"custom.lineStyle","value":{"dash":[10,10],"fill":"dash"}},{"id":"custom.fillOpacity","value":0}]}]},"gridPos":{"h":6,"w":24,"x":0,"y":0},"id":1,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(kube_node_status_capacity{cluster=\"$cluster\", job=\"kube-state-metrics\", node=~\"$node\", resource=\"cpu\"})","legendFormat":"max capacity"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(kube_node_status_allocatable{cluster=\"$cluster\", job=\"kube-state-metrics\", node=~\"$node\", resource=\"cpu\"})","legendFormat":"max allocatable"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(max by (cluster, namespace, pod, container)(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_rate5m{cluster=\"$cluster\", node=~\"$node\"})) by (pod)","legendFormat":"{{pod}}"}],"title":"CPU Usage","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"overrides":[{"matcher":{"id":"byRegexp","options":"/%/"},"properties":[{"id":"unit","value":"percentunit"}]},{"matcher":{"id":"byName","options":"Pod"},"properties":[{"id":"links","value":[{"title":"Drill down to pods","url":"/d/6581e46e4e5c7ba40a07646395ef7b23?${datasource:queryparam}&var-cluster=$cluster&var-namespace=$namespace&var-pod=${__data.fields.Pod}"}]}]}]},"gridPos":{"h":6,"w":24,"x":0,"y":6},"id":2,"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(max by (cluster, namespace, pod, container)(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_rate5m{cluster=\"$cluster\", node=~\"$node\"})) by (pod)","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(max by (cluster, namespace, pod, container)(cluster:namespace:pod_cpu:active:kube_pod_container_resource_requests{cluster=\"$cluster\", node=~\"$node\"})) by (pod)","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(max by (cluster, namespace, pod, container)(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_rate5m{cluster=\"$cluster\", node=~\"$node\"})) by (pod) / sum(max by (cluster, namespace, pod, container)(cluster:namespace:pod_cpu:active:kube_pod_container_resource_requests{cluster=\"$cluster\", node=~\"$node\"})) by (pod)","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(max by (cluster, namespace, pod, container)(cluster:namespace:pod_cpu:active:kube_pod_container_resource_limits{cluster=\"$cluster\", node=~\"$node\"})) by (pod)","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(max by (cluster, namespace, pod, container)(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_rate5m{cluster=\"$cluster\", node=~\"$node\"})) by (pod) / sum(max by (cluster, namespace, pod, container)(cluster:namespace:pod_cpu:active:kube_pod_container_resource_limits{cluster=\"$cluster\", node=~\"$node\"})) by (pod)","format":"table","instant":true}],"title":"CPU Quota","transformations":[{"id":"joinByField","options":{"byField":"pod","mode":"outer"}},{"id":"organize","options":{"excludeByName":{"Time":true,"Time 1":true,"Time 2":true,"Time 3":true,"Time 4":true,"Time 5":true},"renameByName":{"Value #A":"CPU Usage","Value #B":"CPU Requests","Value #C":"CPU Requests %","Value #D":"CPU Limits","Value #E":"CPU Limits %","pod":"Pod"}}}],"type":"table"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true,"stacking":{"mode":"normal"}},"unit":"bytes"},"overrides":[{"matcher":{"id":"byName","options":"max capacity"},"properties":[{"id":"color","value":{"fixedColor":"red","mode":"fixed"}},{"id":"custom.stacking","value":{"mode":"none"}},{"id":"custom.hideFrom","value":{"legend":false,"tooltip":true,"viz":false}},{"id":"custom.lineStyle","value":{"dash":[10,10],"fill":"dash"}}]},{"matcher":{"id":"byName","options":"max allocatable"},"properties":[{"id":"color","value":{"fixedColor":"super-light-red","mode":"fixed"}},{"id":"custom.stacking","value":{"mode":"none"}},{"id":"custom.hideFrom","value":{"legend":false,"tooltip":true,"viz":false}},{"id":"custom.lineStyle","value":{"dash":[10,10],"fill":"dash"}},{"id":"custom.fillOpacity","value":0}]}]},"gridPos":{"h":6,"w":24,"x":0,"y":12},"id":3,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(kube_node_status_capacity{cluster=\"$cluster\", job=\"kube-state-metrics\", node=~\"$node\", resource=\"memory\"})","legendFormat":"max capacity"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(kube_node_status_allocatable{cluster=\"$cluster\", job=\"kube-state-metrics\", node=~\"$node\", resource=\"memory\"})","legendFormat":"max allocatable"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(max by (cluster, namespace, pod, container)(node_namespace_pod_container:container_memory_working_set_bytes{cluster=\"$cluster\", node=~\"$node\", container!=\"\"})) by (pod)","legendFormat":"{{pod}}"}],"title":"Memory Usage (w/cache)","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true,"stacking":{"mode":"normal"}},"unit":"bytes"},"overrides":[{"matcher":{"id":"byName","options":"max capacity"},"properties":[{"id":"color","value":{"fixedColor":"red","mode":"fixed"}},{"id":"custom.stacking","value":{"mode":"none"}},{"id":"custom.hideFrom","value":{"legend":false,"tooltip":true,"viz":false}},{"id":"custom.lineStyle","value":{"dash":[10,10],"fill":"dash"}}]},{"matcher":{"id":"byName","options":"max allocatable"},"properties":[{"id":"color","value":{"fixedColor":"super-light-red","mode":"fixed"}},{"id":"custom.stacking","value":{"mode":"none"}},{"id":"custom.hideFrom","value":{"legend":false,"tooltip":true,"viz":false}},{"id":"custom.lineStyle","value":{"dash":[10,10],"fill":"dash"}},{"id":"custom.fillOpacity","value":0}]}]},"gridPos":{"h":6,"w":24,"x":0,"y":18},"id":4,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(kube_node_status_capacity{cluster=\"$cluster\", job=\"kube-state-metrics\", node=~\"$node\", resource=\"memory\"})","legendFormat":"max capacity"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(kube_node_status_allocatable{cluster=\"$cluster\", job=\"kube-state-metrics\", node=~\"$node\", resource=\"memory\"})","legendFormat":"max allocatable"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(max by (cluster, namespace, pod, container)(node_namespace_pod_container:container_memory_rss{cluster=\"$cluster\", node=~\"$node\", container!=\"\"})) by (pod)","legendFormat":"{{pod}}"}],"title":"Memory Usage (w/o cache)","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"unit":"bytes"},"overrides":[{"matcher":{"id":"byRegexp","options":"/%/"},"properties":[{"id":"unit","value":"percentunit"}]},{"matcher":{"id":"byName","options":"Pod"},"properties":[{"id":"links","value":[{"title":"Drill down to pods","url":"/d/6581e46e4e5c7ba40a07646395ef7b23?${datasource:queryparam}&var-cluster=$cluster&var-namespace=$namespace&var-pod=${__data.fields.Pod}"}]}]}]},"gridPos":{"h":6,"w":24,"x":0,"y":24},"id":5,"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(max by (cluster, namespace, pod, container)(node_namespace_pod_container:container_memory_working_set_bytes{cluster=\"$cluster\", node=~\"$node\",container!=\"\"})) by (pod)","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(max by (cluster, namespace, pod, container)(cluster:namespace:pod_memory:active:kube_pod_container_resource_requests{cluster=\"$cluster\", node=~\"$node\"})) by (pod)","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(max by (cluster, namespace, pod, container)(node_namespace_pod_container:container_memory_working_set_bytes{cluster=\"$cluster\", node=~\"$node\",container!=\"\"})) by (pod) / sum(max by (cluster, namespace, pod, container)(cluster:namespace:pod_memory:active:kube_pod_container_resource_requests{cluster=\"$cluster\", node=~\"$node\"})) by (pod)","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(max by (cluster, namespace, pod, container)(cluster:namespace:pod_memory:active:kube_pod_container_resource_limits{cluster=\"$cluster\", node=~\"$node\"})) by (pod)","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(max by (cluster, namespace, pod, container)(node_namespace_pod_container:container_memory_working_set_bytes{cluster=\"$cluster\", node=~\"$node\",container!=\"\"})) by (pod) / sum(max by (cluster, namespace, pod, container)(cluster:namespace:pod_memory:active:kube_pod_container_resource_limits{cluster=\"$cluster\", node=~\"$node\"})) by (pod)","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(max by (cluster, namespace, pod, container)(node_namespace_pod_container:container_memory_rss{cluster=\"$cluster\", node=~\"$node\",container!=\"\"})) by (pod)","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(max by (cluster, namespace, pod, container)(node_namespace_pod_container:container_memory_cache{cluster=\"$cluster\", node=~\"$node\",container!=\"\"})) by (pod)","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(max by (cluster, namespace, pod, container)(node_namespace_pod_container:container_memory_swap{cluster=\"$cluster\", node=~\"$node\",container!=\"\"})) by (pod)","format":"table","instant":true}],"title":"Memory Quota","transformations":[{"id":"joinByField","options":{"byField":"pod","mode":"outer"}},{"id":"organize","options":{"excludeByName":{"Time":true,"Time 1":true,"Time 2":true,"Time 3":true,"Time 4":true,"Time 5":true,"Time 6":true,"Time 7":true,"Time 8":true},"renameByName":{"Value #A":"Memory Usage","Value #B":"Memory Requests","Value #C":"Memory Requests %","Value #D":"Memory Limits","Value #E":"Memory Limits %","Value #F":"Memory Usage (RSS)","Value #G":"Memory Usage (Cache)","Value #H":"Memory Usage (Swap)","pod":"Pod"}}}],"type":"table"}],"refresh":"10s","schemaVersion":39,"tags":["kubernetes-mixin"],"templating":{"list":[{"current":{"selected":true,"text":"default","value":"default"},"hide":0,"label":"Data source","name":"datasource","query":"prometheus","regex":"","type":"datasource"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"hide":`}}{{ if .Values.grafana.sidecar.dashboards.multicluster.global.enabled }}0{{ else }}2{{ end }}{{`,"label":"cluster","name":"cluster","query":"label_values(up{job=\"kube-state-metrics\"}, cluster)","refresh":2,"sort":1,"type":"query","allValue":".*"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"hide":0,"label":"node","multi":true,"name":"node","query":"label_values(kube_node_info{cluster=\"$cluster\"}, node)","refresh":2,"type":"query"}]},"time":{"from":"now-1h","to":"now"},"timezone": "`}}{{ .Values.grafana.defaultDashboardsTimezone }}{{`","title":"Kubernetes / Compute Resources / Node (Pods)","uid":"200ac8fdbfbb74b39aff88118e4d1c2c"}`}} + {{`{"editable":`}}{{ .Values.grafana.defaultDashboardsEditable }}{{`,"links":[{"asDropdown":true,"includeVars":true,"keepTime":true,"tags":["kubernetes-mixin"],"targetBlank":false,"title":"Kubernetes","type":"dashboards"}],"panels":[{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true,"stacking":{"mode":"normal"}}},"overrides":[{"matcher":{"id":"byName","options":"max capacity"},"properties":[{"id":"color","value":{"fixedColor":"red","mode":"fixed"}},{"id":"custom.stacking","value":{"mode":"none"}},{"id":"custom.hideFrom","value":{"legend":false,"tooltip":true,"viz":false}},{"id":"custom.lineStyle","value":{"dash":[10,10],"fill":"dash"}}]},{"matcher":{"id":"byName","options":"max allocatable"},"properties":[{"id":"color","value":{"fixedColor":"super-light-red","mode":"fixed"}},{"id":"custom.stacking","value":{"mode":"none"}},{"id":"custom.hideFrom","value":{"legend":false,"tooltip":true,"viz":false}},{"id":"custom.lineStyle","value":{"dash":[10,10],"fill":"dash"}},{"id":"custom.fillOpacity","value":0}]}]},"gridPos":{"h":6,"w":24,"x":0,"y":0},"id":1,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(kube_node_status_capacity{cluster=\"$cluster\", job=\"kube-state-metrics\", node=~\"$node\", resource=\"cpu\"})","legendFormat":"max capacity"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(kube_node_status_allocatable{cluster=\"$cluster\", job=\"kube-state-metrics\", node=~\"$node\", resource=\"cpu\"})","legendFormat":"max allocatable"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(max by (cluster, namespace, pod, container)(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_rate5m{cluster=\"$cluster\", node=~\"$node\"})) by (pod)","legendFormat":"{{pod}}"}],"title":"CPU Usage","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"overrides":[{"matcher":{"id":"byRegexp","options":"/%/"},"properties":[{"id":"unit","value":"percentunit"}]},{"matcher":{"id":"byName","options":"Pod"},"properties":[{"id":"links","value":[{"title":"Drill down to pods","url":"/d/6581e46e4e5c7ba40a07646395ef7b23?${datasource:queryparam}&var-cluster=$cluster&var-namespace=$namespace&var-pod=${__data.fields.Pod}"}]}]}]},"gridPos":{"h":6,"w":24,"x":0,"y":6},"id":2,"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(max by (cluster, namespace, pod, container)(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_rate5m{cluster=\"$cluster\", node=~\"$node\"})) by (pod)","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(max by (cluster, namespace, pod, container)(cluster:namespace:pod_cpu:active:kube_pod_container_resource_requests{cluster=\"$cluster\", node=~\"$node\"})) by (pod)","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(max by (cluster, namespace, pod, container)(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_rate5m{cluster=\"$cluster\", node=~\"$node\"})) by (pod) / sum(max by (cluster, namespace, pod, container)(cluster:namespace:pod_cpu:active:kube_pod_container_resource_requests{cluster=\"$cluster\", node=~\"$node\"})) by (pod)","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(max by (cluster, namespace, pod, container)(cluster:namespace:pod_cpu:active:kube_pod_container_resource_limits{cluster=\"$cluster\", node=~\"$node\"})) by (pod)","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(max by (cluster, namespace, pod, container)(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_rate5m{cluster=\"$cluster\", node=~\"$node\"})) by (pod) / sum(max by (cluster, namespace, pod, container)(cluster:namespace:pod_cpu:active:kube_pod_container_resource_limits{cluster=\"$cluster\", node=~\"$node\"})) by (pod)","format":"table","instant":true}],"title":"CPU Quota","transformations":[{"id":"joinByField","options":{"byField":"pod","mode":"outer"}},{"id":"organize","options":{"excludeByName":{"Time":true,"Time 1":true,"Time 2":true,"Time 3":true,"Time 4":true,"Time 5":true},"renameByName":{"Value #A":"CPU Usage","Value #B":"CPU Requests","Value #C":"CPU Requests %","Value #D":"CPU Limits","Value #E":"CPU Limits %","pod":"Pod"}}}],"type":"table"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true,"stacking":{"mode":"normal"}},"unit":"bytes"},"overrides":[{"matcher":{"id":"byName","options":"max capacity"},"properties":[{"id":"color","value":{"fixedColor":"red","mode":"fixed"}},{"id":"custom.stacking","value":{"mode":"none"}},{"id":"custom.hideFrom","value":{"legend":false,"tooltip":true,"viz":false}},{"id":"custom.lineStyle","value":{"dash":[10,10],"fill":"dash"}}]},{"matcher":{"id":"byName","options":"max allocatable"},"properties":[{"id":"color","value":{"fixedColor":"super-light-red","mode":"fixed"}},{"id":"custom.stacking","value":{"mode":"none"}},{"id":"custom.hideFrom","value":{"legend":false,"tooltip":true,"viz":false}},{"id":"custom.lineStyle","value":{"dash":[10,10],"fill":"dash"}},{"id":"custom.fillOpacity","value":0}]}]},"gridPos":{"h":6,"w":24,"x":0,"y":12},"id":3,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(kube_node_status_capacity{cluster=\"$cluster\", job=\"kube-state-metrics\", node=~\"$node\", resource=\"memory\"})","legendFormat":"max capacity"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(kube_node_status_allocatable{cluster=\"$cluster\", job=\"kube-state-metrics\", node=~\"$node\", resource=\"memory\"})","legendFormat":"max allocatable"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(max by (cluster, namespace, pod, container)(node_namespace_pod_container:container_memory_working_set_bytes{cluster=\"$cluster\", node=~\"$node\", container!=\"\"})) by (pod)","legendFormat":"{{pod}}"}],"title":"Memory Usage (w/cache)","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true,"stacking":{"mode":"normal"}},"unit":"bytes"},"overrides":[{"matcher":{"id":"byName","options":"max capacity"},"properties":[{"id":"color","value":{"fixedColor":"red","mode":"fixed"}},{"id":"custom.stacking","value":{"mode":"none"}},{"id":"custom.hideFrom","value":{"legend":false,"tooltip":true,"viz":false}},{"id":"custom.lineStyle","value":{"dash":[10,10],"fill":"dash"}}]},{"matcher":{"id":"byName","options":"max allocatable"},"properties":[{"id":"color","value":{"fixedColor":"super-light-red","mode":"fixed"}},{"id":"custom.stacking","value":{"mode":"none"}},{"id":"custom.hideFrom","value":{"legend":false,"tooltip":true,"viz":false}},{"id":"custom.lineStyle","value":{"dash":[10,10],"fill":"dash"}},{"id":"custom.fillOpacity","value":0}]}]},"gridPos":{"h":6,"w":24,"x":0,"y":18},"id":4,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(kube_node_status_capacity{cluster=\"$cluster\", job=\"kube-state-metrics\", node=~\"$node\", resource=\"memory\"})","legendFormat":"max capacity"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(kube_node_status_allocatable{cluster=\"$cluster\", job=\"kube-state-metrics\", node=~\"$node\", resource=\"memory\"})","legendFormat":"max allocatable"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(max by (cluster, namespace, pod, container)(node_namespace_pod_container:container_memory_rss{cluster=\"$cluster\", node=~\"$node\", container!=\"\"})) by (pod)","legendFormat":"{{pod}}"}],"title":"Memory Usage (w/o cache)","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"unit":"bytes"},"overrides":[{"matcher":{"id":"byRegexp","options":"/%/"},"properties":[{"id":"unit","value":"percentunit"}]},{"matcher":{"id":"byName","options":"Pod"},"properties":[{"id":"links","value":[{"title":"Drill down to pods","url":"/d/6581e46e4e5c7ba40a07646395ef7b23?${datasource:queryparam}&var-cluster=$cluster&var-namespace=$namespace&var-pod=${__data.fields.Pod}"}]}]}]},"gridPos":{"h":6,"w":24,"x":0,"y":24},"id":5,"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(max by (cluster, namespace, pod, container)(node_namespace_pod_container:container_memory_working_set_bytes{cluster=\"$cluster\", node=~\"$node\",container!=\"\"})) by (pod)","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(max by (cluster, namespace, pod, container)(cluster:namespace:pod_memory:active:kube_pod_container_resource_requests{cluster=\"$cluster\", node=~\"$node\"})) by (pod)","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(max by (cluster, namespace, pod, container)(node_namespace_pod_container:container_memory_working_set_bytes{cluster=\"$cluster\", node=~\"$node\",container!=\"\"})) by (pod) / sum(max by (cluster, namespace, pod, container)(cluster:namespace:pod_memory:active:kube_pod_container_resource_requests{cluster=\"$cluster\", node=~\"$node\"})) by (pod)","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(max by (cluster, namespace, pod, container)(cluster:namespace:pod_memory:active:kube_pod_container_resource_limits{cluster=\"$cluster\", node=~\"$node\"})) by (pod)","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(max by (cluster, namespace, pod, container)(node_namespace_pod_container:container_memory_working_set_bytes{cluster=\"$cluster\", node=~\"$node\",container!=\"\"})) by (pod) / sum(max by (cluster, namespace, pod, container)(cluster:namespace:pod_memory:active:kube_pod_container_resource_limits{cluster=\"$cluster\", node=~\"$node\"})) by (pod)","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(max by (cluster, namespace, pod, container)(node_namespace_pod_container:container_memory_rss{cluster=\"$cluster\", node=~\"$node\",container!=\"\"})) by (pod)","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(max by (cluster, namespace, pod, container)(node_namespace_pod_container:container_memory_cache{cluster=\"$cluster\", node=~\"$node\",container!=\"\"})) by (pod)","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(max by (cluster, namespace, pod, container)(node_namespace_pod_container:container_memory_swap{cluster=\"$cluster\", node=~\"$node\",container!=\"\"})) by (pod)","format":"table","instant":true}],"title":"Memory Quota","transformations":[{"id":"joinByField","options":{"byField":"pod","mode":"outer"}},{"id":"organize","options":{"excludeByName":{"Time":true,"Time 1":true,"Time 2":true,"Time 3":true,"Time 4":true,"Time 5":true,"Time 6":true,"Time 7":true,"Time 8":true},"renameByName":{"Value #A":"Memory Usage","Value #B":"Memory Requests","Value #C":"Memory Requests %","Value #D":"Memory Limits","Value #E":"Memory Limits %","Value #F":"Memory Usage (RSS)","Value #G":"Memory Usage (Cache)","Value #H":"Memory Usage (Swap)","pod":"Pod"}}}],"type":"table"}],"refresh":"10s","schemaVersion":39,"tags":["kubernetes-mixin"],"templating":{"list":[{"current":{"selected":true,"text":"default","value":"default"},"hide":0,"label":"Data source","name":"datasource","query":"prometheus","regex":"","type":"datasource"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"hide":`}}{{ if .Values.grafana.sidecar.dashboards.multicluster.global.enabled }}0{{ else }}2{{ end }}{{`,"label":"cluster","name":"cluster","query":"label_values(up{job=\"kube-state-metrics\"}, cluster)","refresh":2,"sort":1,"type":"query","allValue":".*"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"hide":0,"label":"node","multi":true,"name":"node","query":"label_values(kube_node_info{cluster=\"$cluster\"}, node)","refresh":2,"type":"query"}]},"time":{"from":"now-1h","to":"now"},"timezone": "`}}{{ .Values.grafana.defaultDashboardsTimezone }}{{`","title":"Kubernetes / Compute Resources / Node (Pods)","uid":"200ac8fdbfbb74b39aff88118e4d1c2c"}`}} {{- end }} --- {{- if and .Values.grafana.operator.dashboardsConfigMapRefEnabled (or .Values.grafana.enabled .Values.grafana.forceDeployDashboards) (semverCompare ">=1.14.0-0" $kubeTargetVersion) (semverCompare "<9.9.9-9" $kubeTargetVersion) .Values.grafana.defaultDashboardsEnabled }} diff --git a/charts/kube-prometheus-stack/templates/grafana/dashboards-1.14/k8s-resources-nodes-overview.yaml b/charts/kube-prometheus-stack/templates/grafana/dashboards-1.14/k8s-resources-nodes-overview.yaml new file mode 100644 index 0000000000..741e18653a --- /dev/null +++ b/charts/kube-prometheus-stack/templates/grafana/dashboards-1.14/k8s-resources-nodes-overview.yaml @@ -0,0 +1,57 @@ +{{- /* +Generated from 'k8s-resources-nodes-overview' from https://raw.githubusercontent.com/prometheus-operator/kube-prometheus/4eafa8b5395ef839bb02a55e3b5fbdfa03280cf9/manifests/grafana-dashboardDefinitions.yaml +Do not change in-place! In order to change this file first read following link: +https://github.com/prometheus-community/helm-charts/tree/main/charts/kube-prometheus-stack/hack +*/ -}} +{{- $kubeTargetVersion := default .Capabilities.KubeVersion.GitVersion .Values.kubeTargetVersionOverride }} +{{- if and (or .Values.grafana.enabled .Values.grafana.forceDeployDashboards) (semverCompare ">=1.14.0-0" $kubeTargetVersion) (semverCompare "<9.9.9-9" $kubeTargetVersion) .Values.grafana.defaultDashboardsEnabled }} +{{- $kubeletJob := include "kube-prometheus-stack-kubelet.name" . }} +apiVersion: v1 +kind: ConfigMap +metadata: + namespace: {{ template "kube-prometheus-stack-grafana.namespace" . }} + name: {{ printf "%s-%s" (include "kube-prometheus-stack.fullname" $) "k8s-resources-nodes-overview" | trunc 63 | trimSuffix "-" }} + annotations: +{{ toYaml .Values.grafana.sidecar.dashboards.annotations | indent 4 }} + labels: + {{- if $.Values.grafana.sidecar.dashboards.label }} + {{ tpl $.Values.grafana.sidecar.dashboards.label $ }}: {{ ((tpl $.Values.grafana.sidecar.dashboards.labelValue $) | default 1) | quote }} + {{- end }} + app: {{ template "kube-prometheus-stack.name" $ }}-grafana + {{- include "kube-prometheus-stack.labels" $ | nindent 4 }} +data: + k8s-resources-nodes-overview.json: |- + {{`{"editable":`}}{{ .Values.grafana.defaultDashboardsEditable }}{{`,"links":[{"asDropdown":true,"includeVars":true,"keepTime":true,"tags":["kubernetes-mixin"],"targetBlank":false,"title":"Kubernetes","type":"dashboards"}],"panels":[{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":0,"showPoints":"never","spanNulls":true},"decimals":0,"unit":"short"},"overrides":[{"matcher":{"id":"byName","options":"pods"},"properties":[{"id":"custom.axisPlacement","value":"right"},{"id":"custom.axisSoftMin","value":0}]}]},"gridPos":{"h":8,"w":24,"x":0,"y":0},"id":1,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"count(kube_node_info{cluster=\"$cluster\", job=\"kube-state-metrics\"})","legendFormat":"nodes"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(kubelet_running_pods{cluster=\"$cluster\", job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics\"})","legendFormat":"pods"}],"title":"Node & Pod Count","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"short"}},"gridPos":{"h":8,"w":24,"x":0,"y":8},"id":2,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(kube_node_status_allocatable{cluster=\"$cluster\", job=\"kube-state-metrics\", resource=\"cpu\"})","legendFormat":"allocatable"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(cluster:namespace:pod_cpu:active:kube_pod_container_resource_requests{cluster=\"$cluster\"})","legendFormat":"requests"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_rate5m{cluster=\"$cluster\"})","legendFormat":"usage"}],"title":"CPU Usage","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"bytes"}},"gridPos":{"h":8,"w":24,"x":0,"y":16},"id":3,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(kube_node_status_allocatable{cluster=\"$cluster\", job=\"kube-state-metrics\", resource=\"memory\"})","legendFormat":"allocatable"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(cluster:namespace:pod_memory:active:kube_pod_container_resource_requests{cluster=\"$cluster\"})","legendFormat":"requests"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(node_namespace_pod_container:container_memory_working_set_bytes{cluster=\"$cluster\", container!=\"\"})","legendFormat":"usage"}],"title":"Memory Usage","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"percentunit"}},"gridPos":{"h":8,"w":24,"x":0,"y":24},"id":4,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum by (node) (node_namespace_pod_container:container_cpu_usage_seconds_total:sum_rate5m{cluster=\"$cluster\"})\n/\nsum by (node) (kube_node_status_allocatable{cluster=\"$cluster\", job=\"kube-state-metrics\", resource=\"cpu\"})\n","legendFormat":"{{node}}"}],"title":"CPU Utilization per Node","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"percentunit"}},"gridPos":{"h":8,"w":24,"x":0,"y":32},"id":5,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum by (node) (node_namespace_pod_container:container_memory_working_set_bytes{cluster=\"$cluster\", container!=\"\"})\n/\nsum by (node) (kube_node_status_allocatable{cluster=\"$cluster\", job=\"kube-state-metrics\", resource=\"memory\"})\n","legendFormat":"{{node}}"}],"title":"Memory Utilization per Node","type":"timeseries"}],"refresh":"10s","schemaVersion":39,"tags":["kubernetes-mixin"],"templating":{"list":[{"current":{"selected":true,"text":"default","value":"default"},"hide":0,"label":"Data source","name":"datasource","query":"prometheus","regex":"","type":"datasource"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"hide":`}}{{ if .Values.grafana.sidecar.dashboards.multicluster.global.enabled }}0{{ else }}2{{ end }}{{`,"label":"cluster","name":"cluster","query":"label_values(up{job=\"kube-state-metrics\"}, cluster)","refresh":2,"sort":1,"type":"query","allValue":".*"}]},"time":{"from":"now-6h","to":"now"},"timezone": "`}}{{ .Values.grafana.defaultDashboardsTimezone }}{{`","title":"Kubernetes / Compute Resources / Nodes Overview","uid":"058020e04168bfdea0c52269cb699df2"}`}} +{{- end }} +--- +{{- if and .Values.grafana.operator.dashboardsConfigMapRefEnabled (or .Values.grafana.enabled .Values.grafana.forceDeployDashboards) (semverCompare ">=1.14.0-0" $kubeTargetVersion) (semverCompare "<9.9.9-9" $kubeTargetVersion) .Values.grafana.defaultDashboardsEnabled }} +apiVersion: grafana.integreatly.org/v1beta1 +kind: GrafanaDashboard +metadata: + name: {{ printf "%s-%s" (include "kube-prometheus-stack.fullname" $) "k8s-resources-nodes-overview" | trunc 63 | trimSuffix "-" }} + namespace: {{ template "kube-prometheus-stack-grafana.namespace" . }} + {{ with .Values.grafana.operator.annotations }} + annotations: + {{- toYaml . | nindent 4 }} + {{ end }} + labels: + {{- if $.Values.grafana.sidecar.dashboards.label }} + {{ tpl $.Values.grafana.sidecar.dashboards.label $ }}: {{ ((tpl $.Values.grafana.sidecar.dashboards.labelValue $) | default 1) | quote }} + {{- end }} + app: {{ template "kube-prometheus-stack.name" $ }}-grafana + {{- include "kube-prometheus-stack.labels" $ | nindent 4 }} +spec: + allowCrossNamespaceImport: true + resyncPeriod: {{ .Values.grafana.operator.resyncPeriod | quote | default "10m" }} + {{- include "kube-prometheus-stack.grafana.operator.folder" . | nindent 2 }} + instanceSelector: + matchLabels: + {{- if .Values.grafana.operator.matchLabels }} + {{- toYaml .Values.grafana.operator.matchLabels | nindent 6 }} + {{- else }} + {{- fail "grafana.operator.matchLabels must be specified when grafana.operator.dashboardsConfigMapRefEnabled is true" }} + {{- end }} + configMapRef: + name: {{ printf "%s-%s" (include "kube-prometheus-stack.fullname" $) "k8s-resources-nodes-overview" | trunc 63 | trimSuffix "-" }} + key: k8s-resources-nodes-overview.json +{{- end }} diff --git a/charts/kube-prometheus-stack/templates/grafana/dashboards-1.14/k8s-resources-pod.yaml b/charts/kube-prometheus-stack/templates/grafana/dashboards-1.14/k8s-resources-pod.yaml index 4963cf40db..d9ea5ecbab 100644 --- a/charts/kube-prometheus-stack/templates/grafana/dashboards-1.14/k8s-resources-pod.yaml +++ b/charts/kube-prometheus-stack/templates/grafana/dashboards-1.14/k8s-resources-pod.yaml @@ -1,5 +1,5 @@ {{- /* -Generated from 'k8s-resources-pod' from https://raw.githubusercontent.com/prometheus-operator/kube-prometheus/eaca1a5fd76b356974054906af46810fec1cd7f8/manifests/grafana-dashboardDefinitions.yaml +Generated from 'k8s-resources-pod' from https://raw.githubusercontent.com/prometheus-operator/kube-prometheus/4eafa8b5395ef839bb02a55e3b5fbdfa03280cf9/manifests/grafana-dashboardDefinitions.yaml Do not change in-place! In order to change this file first read following link: https://github.com/prometheus-community/helm-charts/tree/main/charts/kube-prometheus-stack/hack */ -}} @@ -21,7 +21,7 @@ metadata: {{- include "kube-prometheus-stack.labels" $ | nindent 4 }} data: k8s-resources-pod.json: |- - {{`{"editable":`}}{{ .Values.grafana.defaultDashboardsEditable }}{{`,"links":[{"asDropdown":true,"includeVars":true,"keepTime":true,"tags":["kubernetes-mixin"],"targetBlank":false,"title":"Kubernetes","type":"dashboards"}],"panels":[{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true}},"overrides":[{"matcher":{"id":"byFrameRefID","options":"B"},"properties":[{"id":"custom.lineStyle","value":{"fill":"dash"}},{"id":"custom.lineWidth","value":2},{"id":"color","value":{"fixedColor":"red","mode":"fixed"}}]},{"matcher":{"id":"byFrameRefID","options":"C"},"properties":[{"id":"custom.lineStyle","value":{"fill":"dash"}},{"id":"custom.lineWidth","value":2},{"id":"color","value":{"fixedColor":"orange","mode":"fixed"}}]}]},"gridPos":{"h":7,"w":24,"x":0,"y":0},"id":1,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(max by (cluster, namespace, pod, container)(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_rate5m{namespace=\"$namespace\", pod=\"$pod\", cluster=\"$cluster\", container!=\"\"})) by (container)","legendFormat":"__auto"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(\n kube_pod_container_resource_requests{job=\"kube-state-metrics\", cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\", resource=\"cpu\"}\n)\n","legendFormat":"requests"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(\n kube_pod_container_resource_limits{job=\"kube-state-metrics\", cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\", resource=\"cpu\"}\n)\n","legendFormat":"limits"}],"title":"CPU Usage","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"axisColorMode":"thresholds","axisSoftMax":1,"axisSoftMin":0,"fillOpacity":10,"showPoints":"never","spanNulls":true,"thresholdsStyle":{"mode":"dashed+area"}},"unit":"percentunit"},"overrides":[{"matcher":{"id":"byFrameRefID","options":"A"},"properties":[{"id":"thresholds","value":{"mode":"absolute","steps":[{"color":"green","value":null},{"color":"red","value":0.25}]}},{"id":"color","value":{"mode":"thresholds","seriesBy":"lastNotNull"}}]}]},"gridPos":{"h":7,"w":24,"x":0,"y":7},"id":2,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(increase(container_cpu_cfs_throttled_periods_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", namespace=\"$namespace\", pod=\"$pod\", container!=\"\", cluster=\"$cluster\"}[$__rate_interval])) by (container) /sum(increase(container_cpu_cfs_periods_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", namespace=\"$namespace\", pod=\"$pod\", container!=\"\", cluster=\"$cluster\"}[$__rate_interval])) by (container)","legendFormat":"__auto"}],"title":"CPU Throttling","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"overrides":[{"matcher":{"id":"byRegexp","options":"/%/"},"properties":[{"id":"unit","value":"percentunit"}]}]},"gridPos":{"h":7,"w":24,"x":0,"y":14},"id":3,"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(max by (cluster, namespace, pod, container)(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_rate5m{namespace=\"$namespace\", pod=\"$pod\", cluster=\"$cluster\", container!=\"\"})) by (container)","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(max by (cluster, namespace, pod, container)(cluster:namespace:pod_cpu:active:kube_pod_container_resource_requests{cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\", container!=\"\"})) by (container)","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(max by (cluster, namespace, pod, container)(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_rate5m{cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\", container!=\"\"})) by (container) / sum(max by (cluster, namespace, pod, container)(cluster:namespace:pod_cpu:active:kube_pod_container_resource_requests{cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\", container!=\"\"})) by (container)","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(max by (cluster, namespace, pod, container)(cluster:namespace:pod_cpu:active:kube_pod_container_resource_limits{cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\", container!=\"\"})) by (container)","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(max by (cluster, namespace, pod, container)(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_rate5m{cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\", container!=\"\"})) by (container) / sum(max by (cluster, namespace, pod, container)(cluster:namespace:pod_cpu:active:kube_pod_container_resource_limits{cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\", container!=\"\"})) by (container)","format":"table","instant":true}],"title":"CPU Quota","transformations":[{"id":"joinByField","options":{"byField":"container","mode":"outer"}},{"id":"organize","options":{"excludeByName":{"Time":true,"Time 1":true,"Time 2":true,"Time 3":true,"Time 4":true,"Time 5":true},"indexByName":{"Time 1":0,"Time 2":1,"Time 3":2,"Time 4":3,"Time 5":4,"Value #A":6,"Value #B":7,"Value #C":8,"Value #D":9,"Value #E":10,"container":5},"renameByName":{"Value #A":"CPU Usage","Value #B":"CPU Requests","Value #C":"CPU Requests %","Value #D":"CPU Limits","Value #E":"CPU Limits %","container":"Container"}}}],"type":"table"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"bytes"},"overrides":[{"matcher":{"id":"byFrameRefID","options":"B"},"properties":[{"id":"custom.lineStyle","value":{"fill":"dash"}},{"id":"custom.lineWidth","value":2},{"id":"color","value":{"fixedColor":"red","mode":"fixed"}}]},{"matcher":{"id":"byFrameRefID","options":"C"},"properties":[{"id":"custom.lineStyle","value":{"fill":"dash"}},{"id":"custom.lineWidth","value":2},{"id":"color","value":{"fixedColor":"orange","mode":"fixed"}}]}]},"gridPos":{"h":7,"w":24,"x":0,"y":21},"id":4,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(max by (cluster, namespace, pod, container)(container_memory_working_set_bytes{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\", container!=\"\", image!=\"\"})) by (container)","legendFormat":"__auto"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(\n kube_pod_container_resource_requests{job=\"kube-state-metrics\", cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\", resource=\"memory\"}\n)\n","legendFormat":"requests"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(\n kube_pod_container_resource_limits{job=\"kube-state-metrics\", cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\", resource=\"memory\"}\n)\n","legendFormat":"limits"}],"title":"Memory Usage (WSS)","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"unit":"bytes"},"overrides":[{"matcher":{"id":"byRegexp","options":"/%/"},"properties":[{"id":"unit","value":"percentunit"}]}]},"gridPos":{"h":7,"w":24,"x":0,"y":28},"id":5,"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(max by (cluster, namespace, pod, container)(container_memory_working_set_bytes{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\", container!=\"\", image!=\"\"})) by (container)","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(max by (cluster, namespace, pod, container)(cluster:namespace:pod_memory:active:kube_pod_container_resource_requests{cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\"})) by (container)","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(max by (cluster, namespace, pod, container)(container_memory_working_set_bytes{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\", image!=\"\"})) by (container) / sum(max by (cluster, namespace, pod, container)(cluster:namespace:pod_memory:active:kube_pod_container_resource_requests{cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\"})) by (container)","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(max by (cluster, namespace, pod, container)(cluster:namespace:pod_memory:active:kube_pod_container_resource_limits{cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\"})) by (container)","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(max by (cluster, namespace, pod, container)(container_memory_working_set_bytes{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\", container!=\"\", image!=\"\"})) by (container) / sum(max by (cluster, namespace, pod, container)(cluster:namespace:pod_memory:active:kube_pod_container_resource_limits{cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\"})) by (container)","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(max by (cluster, namespace, pod, container)(container_memory_rss{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\", container != \"\", container != \"POD\"})) by (container)","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(max by (cluster, namespace, pod, container)(container_memory_cache{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\", container != \"\", container != \"POD\"})) by (container)","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(max by (cluster, namespace, pod, container)(container_memory_swap{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\", container != \"\", container != \"POD\"})) by (container)","format":"table","instant":true}],"title":"Memory Quota","transformations":[{"id":"joinByField","options":{"byField":"container","mode":"outer"}},{"id":"organize","options":{"excludeByName":{"Time":true,"Time 1":true,"Time 2":true,"Time 3":true,"Time 4":true,"Time 5":true,"Time 6":true,"Time 7":true,"Time 8":true},"indexByName":{"Time 1":0,"Time 2":1,"Time 3":2,"Time 4":3,"Time 5":4,"Time 6":5,"Time 7":6,"Time 8":7,"Value #A":9,"Value #B":10,"Value #C":11,"Value #D":12,"Value #E":13,"Value #F":14,"Value #G":15,"Value #H":16,"container":8},"renameByName":{"Value #A":"Memory Usage","Value #B":"Memory Requests","Value #C":"Memory Requests %","Value #D":"Memory Limits","Value #E":"Memory Limits %","Value #F":"Memory Usage (RSS)","Value #G":"Memory Usage (Cache)","Value #H":"Memory Usage (Swap)","container":"Container"}}}],"type":"table"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"bps"}},"gridPos":{"h":7,"w":12,"x":0,"y":35},"id":6,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum((8 * irate(container_network_receive_bytes_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=\"$namespace\", pod=~\"$pod\"}[$__rate_interval]))) by (pod)","legendFormat":"__auto"}],"title":"Receive Bandwidth","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"bps"}},"gridPos":{"h":7,"w":12,"x":12,"y":35},"id":7,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum((8 * rate(container_network_transmit_bytes_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=\"$namespace\", pod=~\"$pod\"}[$__rate_interval]))) by (pod)","legendFormat":"__auto"}],"title":"Transmit Bandwidth","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"pps"}},"gridPos":{"h":7,"w":12,"x":0,"y":42},"id":8,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(rate(container_network_receive_packets_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=\"$namespace\", pod=~\"$pod\"}[$__rate_interval])) by (pod)","legendFormat":"__auto"}],"title":"Rate of Received Packets","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"pps"}},"gridPos":{"h":7,"w":12,"x":12,"y":42},"id":9,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(rate(container_network_transmit_packets_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=\"$namespace\", pod=~\"$pod\"}[$__rate_interval])) by (pod)","legendFormat":"__auto"}],"title":"Rate of Transmitted Packets","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"pps"}},"gridPos":{"h":7,"w":12,"x":0,"y":49},"id":10,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(rate(container_network_receive_packets_dropped_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=\"$namespace\", pod=~\"$pod\"}[$__rate_interval])) by (pod)","legendFormat":"__auto"}],"title":"Rate of Received Packets Dropped","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"pps"}},"gridPos":{"h":7,"w":12,"x":12,"y":49},"id":11,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(rate(container_network_transmit_packets_dropped_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=\"$namespace\", pod=~\"$pod\"}[$__rate_interval])) by (pod)","legendFormat":"__auto"}],"title":"Rate of Transmitted Packets Dropped","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"iops"}},"gridPos":{"h":7,"w":12,"x":0,"y":56},"id":12,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"ceil(sum by(pod) (rate(container_fs_reads_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", device=~\"(/dev/)?(mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|md.+|dasd.+)\", container!=\"\", cluster=\"$cluster\", namespace=\"$namespace\", pod=~\"$pod\"}[$__rate_interval])))","legendFormat":"Reads"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"ceil(sum by(pod) (rate(container_fs_writes_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", device=~\"(/dev/)?(mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|md.+|dasd.+)\", container!=\"\", cluster=\"$cluster\",namespace=\"$namespace\", pod=~\"$pod\"}[$__rate_interval])))","legendFormat":"Writes"}],"title":"IOPS (Pod)","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"Bps"}},"gridPos":{"h":7,"w":12,"x":12,"y":56},"id":13,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum by(pod) (rate(container_fs_reads_bytes_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", device=~\"(/dev/)?(mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|md.+|dasd.+)\", container!=\"\", cluster=\"$cluster\", namespace=\"$namespace\", pod=~\"$pod\"}[$__rate_interval]))","legendFormat":"Reads"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum by(pod) (rate(container_fs_writes_bytes_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", device=~\"(/dev/)?(mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|md.+|dasd.+)\", container!=\"\", cluster=\"$cluster\", namespace=\"$namespace\", pod=~\"$pod\"}[$__rate_interval]))","legendFormat":"Writes"}],"title":"ThroughPut (Pod)","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"iops"}},"gridPos":{"h":7,"w":12,"x":0,"y":63},"id":14,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"ceil(sum by(container) (rate(container_fs_reads_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", container!=\"\", cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\"}[$__rate_interval]) + rate(container_fs_writes_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", container!=\"\", cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\"}[$__rate_interval])))","legendFormat":"__auto"}],"title":"IOPS (Containers)","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"Bps"}},"gridPos":{"h":7,"w":12,"x":12,"y":63},"id":15,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum by(container) (rate(container_fs_reads_bytes_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", container!=\"\", cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\"}[$__rate_interval]) + rate(container_fs_writes_bytes_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", container!=\"\", cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\"}[$__rate_interval]))","legendFormat":"__auto"}],"title":"ThroughPut (Containers)","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"overrides":[{"matcher":{"id":"byRegexp","options":"/IOPS/"},"properties":[{"id":"unit","value":"iops"}]},{"matcher":{"id":"byRegexp","options":"/Throughput/"},"properties":[{"id":"unit","value":"Bps"}]}]},"gridPos":{"h":7,"w":24,"x":0,"y":70},"id":16,"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum by(container) (rate(container_fs_reads_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", device=~\"(/dev/)?(mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|md.+|dasd.+)\", container!=\"\", cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\"}[$__rate_interval]))","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum by(container) (rate(container_fs_writes_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\",device=~\"(/dev/)?(mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|md.+|dasd.+)\", container!=\"\", cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\"}[$__rate_interval]))","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum by(container) (rate(container_fs_reads_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", device=~\"(/dev/)?(mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|md.+|dasd.+)\", container!=\"\", cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\"}[$__rate_interval]) + rate(container_fs_writes_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", device=~\"(/dev/)?(mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|md.+|dasd.+)\", container!=\"\", cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\"}[$__rate_interval]))","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum by(container) (rate(container_fs_reads_bytes_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", device=~\"(/dev/)?(mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|md.+|dasd.+)\", container!=\"\", cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\"}[$__rate_interval]))","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum by(container) (rate(container_fs_writes_bytes_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", device=~\"(/dev/)?(mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|md.+|dasd.+)\", container!=\"\", cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\"}[$__rate_interval]))","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum by(container) (rate(container_fs_reads_bytes_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", device=~\"(/dev/)?(mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|md.+|dasd.+)\", container!=\"\", cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\"}[$__rate_interval]) + rate(container_fs_writes_bytes_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", device=~\"(/dev/)?(mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|md.+|dasd.+)\", container!=\"\", cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\"}[$__rate_interval]))","format":"table","instant":true}],"title":"Current Storage IO","transformations":[{"id":"joinByField","options":{"byField":"container","mode":"outer"}},{"id":"organize","options":{"excludeByName":{"Time":true,"Time 1":true,"Time 2":true,"Time 3":true,"Time 4":true,"Time 5":true,"Time 6":true},"indexByName":{"Time 1":0,"Time 2":1,"Time 3":2,"Time 4":3,"Time 5":4,"Time 6":5,"Value #A":7,"Value #B":8,"Value #C":9,"Value #D":10,"Value #E":11,"Value #F":12,"container":6},"renameByName":{"Value #A":"IOPS(Reads)","Value #B":"IOPS(Writes)","Value #C":"IOPS(Reads + Writes)","Value #D":"Throughput(Read)","Value #E":"Throughput(Write)","Value #F":"Throughput(Read + Write)","container":"Container"}}}],"type":"table"}],"refresh":"10s","schemaVersion":39,"tags":["kubernetes-mixin"],"templating":{"list":[{"current":{"selected":true,"text":"default","value":"default"},"hide":0,"label":"Data source","name":"datasource","query":"prometheus","regex":"","type":"datasource"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"hide":`}}{{ if .Values.grafana.sidecar.dashboards.multicluster.global.enabled }}0{{ else }}2{{ end }}{{`,"label":"cluster","name":"cluster","query":"label_values(up{job=\"kube-state-metrics\"}, cluster)","refresh":2,"sort":1,"type":"query","allValue":".*"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"hide":0,"label":"namespace","name":"namespace","query":"label_values(kube_namespace_status_phase{job=\"kube-state-metrics\", cluster=\"$cluster\"}, namespace)","refresh":2,"sort":1,"type":"query"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"hide":0,"label":"pod","name":"pod","query":"label_values(kube_pod_info{job=\"kube-state-metrics\", cluster=\"$cluster\", namespace=\"$namespace\"}, pod)","refresh":2,"sort":1,"type":"query"}]},"time":{"from":"now-1h","to":"now"},"timezone": "`}}{{ .Values.grafana.defaultDashboardsTimezone }}{{`","title":"Kubernetes / Compute Resources / Pod","uid":"6581e46e4e5c7ba40a07646395ef7b23"}`}} + {{`{"editable":`}}{{ .Values.grafana.defaultDashboardsEditable }}{{`,"links":[{"asDropdown":true,"includeVars":true,"keepTime":true,"tags":["kubernetes-mixin"],"targetBlank":false,"title":"Kubernetes","type":"dashboards"}],"panels":[{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true}},"overrides":[{"matcher":{"id":"byFrameRefID","options":"B"},"properties":[{"id":"custom.lineStyle","value":{"fill":"dash"}},{"id":"custom.lineWidth","value":2},{"id":"color","value":{"fixedColor":"red","mode":"fixed"}}]},{"matcher":{"id":"byFrameRefID","options":"C"},"properties":[{"id":"custom.lineStyle","value":{"fill":"dash"}},{"id":"custom.lineWidth","value":2},{"id":"color","value":{"fixedColor":"orange","mode":"fixed"}}]}]},"gridPos":{"h":7,"w":24,"x":0,"y":0},"id":1,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(max by (cluster, namespace, pod, container)(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_rate5m{namespace=\"$namespace\", pod=\"$pod\", cluster=\"$cluster\", container!=\"\"})) by (container)","legendFormat":"__auto"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(\n kube_pod_container_resource_requests{job=\"kube-state-metrics\", cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\", resource=\"cpu\"}\n)\n","legendFormat":"requests"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(\n kube_pod_container_resource_limits{job=\"kube-state-metrics\", cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\", resource=\"cpu\"}\n)\n","legendFormat":"limits"}],"title":"CPU Usage","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"axisColorMode":"thresholds","axisSoftMax":1,"axisSoftMin":0,"fillOpacity":10,"showPoints":"never","spanNulls":true,"thresholdsStyle":{"mode":"dashed+area"}},"unit":"percentunit"},"overrides":[{"matcher":{"id":"byFrameRefID","options":"A"},"properties":[{"id":"thresholds","value":{"mode":"absolute","steps":[{"color":"green","value":null},{"color":"red","value":0.25}]}},{"id":"color","value":{"mode":"thresholds","seriesBy":"lastNotNull"}}]}]},"gridPos":{"h":7,"w":24,"x":0,"y":7},"id":2,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(increase(container_cpu_cfs_throttled_periods_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", namespace=\"$namespace\", pod=\"$pod\", container!=\"\", cluster=\"$cluster\"}[$__rate_interval])) by (container) /sum(increase(container_cpu_cfs_periods_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", namespace=\"$namespace\", pod=\"$pod\", container!=\"\", cluster=\"$cluster\"}[$__rate_interval])) by (container)","legendFormat":"__auto"}],"title":"CPU Throttling","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"overrides":[{"matcher":{"id":"byRegexp","options":"/%/"},"properties":[{"id":"unit","value":"percentunit"}]}]},"gridPos":{"h":7,"w":24,"x":0,"y":14},"id":3,"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(max by (cluster, namespace, pod, container)(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_rate5m{namespace=\"$namespace\", pod=\"$pod\", cluster=\"$cluster\", container!=\"\"})) by (container)","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(max by (cluster, namespace, pod, container)(cluster:namespace:pod_cpu:active:kube_pod_container_resource_requests{cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\", container!=\"\"})) by (container)","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(max by (cluster, namespace, pod, container)(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_rate5m{cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\", container!=\"\"})) by (container) / sum(max by (cluster, namespace, pod, container)(cluster:namespace:pod_cpu:active:kube_pod_container_resource_requests{cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\", container!=\"\"})) by (container)","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(max by (cluster, namespace, pod, container)(cluster:namespace:pod_cpu:active:kube_pod_container_resource_limits{cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\", container!=\"\"})) by (container)","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(max by (cluster, namespace, pod, container)(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_rate5m{cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\", container!=\"\"})) by (container) / sum(max by (cluster, namespace, pod, container)(cluster:namespace:pod_cpu:active:kube_pod_container_resource_limits{cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\", container!=\"\"})) by (container)","format":"table","instant":true}],"title":"CPU Quota","transformations":[{"id":"joinByField","options":{"byField":"container","mode":"outer"}},{"id":"organize","options":{"excludeByName":{"Time":true,"Time 1":true,"Time 2":true,"Time 3":true,"Time 4":true,"Time 5":true},"indexByName":{"Time 1":0,"Time 2":1,"Time 3":2,"Time 4":3,"Time 5":4,"Value #A":6,"Value #B":7,"Value #C":8,"Value #D":9,"Value #E":10,"container":5},"renameByName":{"Value #A":"CPU Usage","Value #B":"CPU Requests","Value #C":"CPU Requests %","Value #D":"CPU Limits","Value #E":"CPU Limits %","container":"Container"}}}],"type":"table"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"bytes"},"overrides":[{"matcher":{"id":"byFrameRefID","options":"B"},"properties":[{"id":"custom.lineStyle","value":{"fill":"dash"}},{"id":"custom.lineWidth","value":2},{"id":"color","value":{"fixedColor":"red","mode":"fixed"}}]},{"matcher":{"id":"byFrameRefID","options":"C"},"properties":[{"id":"custom.lineStyle","value":{"fill":"dash"}},{"id":"custom.lineWidth","value":2},{"id":"color","value":{"fixedColor":"orange","mode":"fixed"}}]}]},"gridPos":{"h":7,"w":24,"x":0,"y":21},"id":4,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(max by (cluster, namespace, pod, container)(container_memory_working_set_bytes{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\", container!=\"\", image!=\"\"})) by (container)","legendFormat":"__auto"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(\n kube_pod_container_resource_requests{job=\"kube-state-metrics\", cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\", resource=\"memory\"}\n)\n","legendFormat":"requests"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(\n kube_pod_container_resource_limits{job=\"kube-state-metrics\", cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\", resource=\"memory\"}\n)\n","legendFormat":"limits"}],"title":"Memory Usage (WSS)","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"unit":"bytes"},"overrides":[{"matcher":{"id":"byRegexp","options":"/%/"},"properties":[{"id":"unit","value":"percentunit"}]}]},"gridPos":{"h":7,"w":24,"x":0,"y":28},"id":5,"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(max by (cluster, namespace, pod, container)(container_memory_working_set_bytes{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\", container!=\"\", image!=\"\"})) by (container)","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(max by (cluster, namespace, pod, container)(cluster:namespace:pod_memory:active:kube_pod_container_resource_requests{cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\"})) by (container)","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(max by (cluster, namespace, pod, container)(container_memory_working_set_bytes{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\", image!=\"\"})) by (container) / sum(max by (cluster, namespace, pod, container)(cluster:namespace:pod_memory:active:kube_pod_container_resource_requests{cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\"})) by (container)","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(max by (cluster, namespace, pod, container)(cluster:namespace:pod_memory:active:kube_pod_container_resource_limits{cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\"})) by (container)","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(max by (cluster, namespace, pod, container)(container_memory_working_set_bytes{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\", container!=\"\", image!=\"\"})) by (container) / sum(max by (cluster, namespace, pod, container)(cluster:namespace:pod_memory:active:kube_pod_container_resource_limits{cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\"})) by (container)","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(max by (cluster, namespace, pod, container)(container_memory_rss{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\", container != \"\", container != \"POD\"})) by (container)","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(max by (cluster, namespace, pod, container)(container_memory_cache{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\", container != \"\", container != \"POD\"})) by (container)","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(max by (cluster, namespace, pod, container)(container_memory_swap{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\", container != \"\", container != \"POD\"})) by (container)","format":"table","instant":true}],"title":"Memory Quota","transformations":[{"id":"joinByField","options":{"byField":"container","mode":"outer"}},{"id":"organize","options":{"excludeByName":{"Time":true,"Time 1":true,"Time 2":true,"Time 3":true,"Time 4":true,"Time 5":true,"Time 6":true,"Time 7":true,"Time 8":true},"indexByName":{"Time 1":0,"Time 2":1,"Time 3":2,"Time 4":3,"Time 5":4,"Time 6":5,"Time 7":6,"Time 8":7,"Value #A":9,"Value #B":10,"Value #C":11,"Value #D":12,"Value #E":13,"Value #F":14,"Value #G":15,"Value #H":16,"container":8},"renameByName":{"Value #A":"Memory Usage","Value #B":"Memory Requests","Value #C":"Memory Requests %","Value #D":"Memory Limits","Value #E":"Memory Limits %","Value #F":"Memory Usage (RSS)","Value #G":"Memory Usage (Cache)","Value #H":"Memory Usage (Swap)","container":"Container"}}}],"type":"table"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"bps"}},"gridPos":{"h":7,"w":12,"x":0,"y":35},"id":6,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum((8 * irate(container_network_receive_bytes_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=\"$namespace\", pod=~\"$pod\"}[$__rate_interval]))) by (pod)","legendFormat":"__auto"}],"title":"Receive Bandwidth","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"bps"}},"gridPos":{"h":7,"w":12,"x":12,"y":35},"id":7,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum((8 * rate(container_network_transmit_bytes_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=\"$namespace\", pod=~\"$pod\"}[$__rate_interval]))) by (pod)","legendFormat":"__auto"}],"title":"Transmit Bandwidth","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"pps"}},"gridPos":{"h":7,"w":12,"x":0,"y":42},"id":8,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(rate(container_network_receive_packets_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=\"$namespace\", pod=~\"$pod\"}[$__rate_interval])) by (pod)","legendFormat":"__auto"}],"title":"Rate of Received Packets","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"pps"}},"gridPos":{"h":7,"w":12,"x":12,"y":42},"id":9,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(rate(container_network_transmit_packets_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=\"$namespace\", pod=~\"$pod\"}[$__rate_interval])) by (pod)","legendFormat":"__auto"}],"title":"Rate of Transmitted Packets","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"pps"}},"gridPos":{"h":7,"w":12,"x":0,"y":49},"id":10,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(rate(container_network_receive_packets_dropped_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=\"$namespace\", pod=~\"$pod\"}[$__rate_interval])) by (pod)","legendFormat":"__auto"}],"title":"Rate of Received Packets Dropped","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"pps"}},"gridPos":{"h":7,"w":12,"x":12,"y":49},"id":11,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(rate(container_network_transmit_packets_dropped_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=\"$namespace\", pod=~\"$pod\"}[$__rate_interval])) by (pod)","legendFormat":"__auto"}],"title":"Rate of Transmitted Packets Dropped","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"iops"}},"gridPos":{"h":7,"w":12,"x":0,"y":56},"id":12,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"ceil(sum by(pod) (rate(container_fs_reads_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", device=~\"(/dev/)?(mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|md.+|dasd.+)\", container!=\"\", cluster=\"$cluster\", namespace=\"$namespace\", pod=~\"$pod\"}[$__rate_interval])))","legendFormat":"Reads"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"ceil(sum by(pod) (rate(container_fs_writes_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", device=~\"(/dev/)?(mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|md.+|dasd.+)\", container!=\"\", cluster=\"$cluster\",namespace=\"$namespace\", pod=~\"$pod\"}[$__rate_interval])))","legendFormat":"Writes"}],"title":"IOPS (Pod)","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"Bps"}},"gridPos":{"h":7,"w":12,"x":12,"y":56},"id":13,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum by(pod) (rate(container_fs_reads_bytes_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", device=~\"(/dev/)?(mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|md.+|dasd.+)\", container!=\"\", cluster=\"$cluster\", namespace=\"$namespace\", pod=~\"$pod\"}[$__rate_interval]))","legendFormat":"Reads"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum by(pod) (rate(container_fs_writes_bytes_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", device=~\"(/dev/)?(mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|md.+|dasd.+)\", container!=\"\", cluster=\"$cluster\", namespace=\"$namespace\", pod=~\"$pod\"}[$__rate_interval]))","legendFormat":"Writes"}],"title":"ThroughPut (Pod)","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"iops"}},"gridPos":{"h":7,"w":12,"x":0,"y":63},"id":14,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"ceil(sum by(container) (rate(container_fs_reads_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", container!=\"\", cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\"}[$__rate_interval]) + rate(container_fs_writes_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", container!=\"\", cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\"}[$__rate_interval])))","legendFormat":"__auto"}],"title":"IOPS (Containers)","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"Bps"}},"gridPos":{"h":7,"w":12,"x":12,"y":63},"id":15,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum by(container) (rate(container_fs_reads_bytes_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", container!=\"\", cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\"}[$__rate_interval]) + rate(container_fs_writes_bytes_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", container!=\"\", cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\"}[$__rate_interval]))","legendFormat":"__auto"}],"title":"ThroughPut (Containers)","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"overrides":[{"matcher":{"id":"byRegexp","options":"/IOPS/"},"properties":[{"id":"unit","value":"iops"}]},{"matcher":{"id":"byRegexp","options":"/Throughput/"},"properties":[{"id":"unit","value":"Bps"}]}]},"gridPos":{"h":7,"w":24,"x":0,"y":70},"id":16,"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum by(container) (rate(container_fs_reads_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", device=~\"(/dev/)?(mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|md.+|dasd.+)\", container!=\"\", cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\"}[$__rate_interval]))","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum by(container) (rate(container_fs_writes_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\",device=~\"(/dev/)?(mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|md.+|dasd.+)\", container!=\"\", cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\"}[$__rate_interval]))","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum by(container) (rate(container_fs_reads_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", device=~\"(/dev/)?(mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|md.+|dasd.+)\", container!=\"\", cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\"}[$__rate_interval]) + rate(container_fs_writes_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", device=~\"(/dev/)?(mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|md.+|dasd.+)\", container!=\"\", cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\"}[$__rate_interval]))","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum by(container) (rate(container_fs_reads_bytes_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", device=~\"(/dev/)?(mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|md.+|dasd.+)\", container!=\"\", cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\"}[$__rate_interval]))","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum by(container) (rate(container_fs_writes_bytes_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", device=~\"(/dev/)?(mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|md.+|dasd.+)\", container!=\"\", cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\"}[$__rate_interval]))","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum by(container) (rate(container_fs_reads_bytes_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", device=~\"(/dev/)?(mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|md.+|dasd.+)\", container!=\"\", cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\"}[$__rate_interval]) + rate(container_fs_writes_bytes_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", device=~\"(/dev/)?(mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|md.+|dasd.+)\", container!=\"\", cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\"}[$__rate_interval]))","format":"table","instant":true}],"title":"Current Storage IO","transformations":[{"id":"joinByField","options":{"byField":"container","mode":"outer"}},{"id":"organize","options":{"excludeByName":{"Time":true,"Time 1":true,"Time 2":true,"Time 3":true,"Time 4":true,"Time 5":true,"Time 6":true},"indexByName":{"Time 1":0,"Time 2":1,"Time 3":2,"Time 4":3,"Time 5":4,"Time 6":5,"Value #A":7,"Value #B":8,"Value #C":9,"Value #D":10,"Value #E":11,"Value #F":12,"container":6},"renameByName":{"Value #A":"IOPS(Reads)","Value #B":"IOPS(Writes)","Value #C":"IOPS(Reads + Writes)","Value #D":"Throughput(Read)","Value #E":"Throughput(Write)","Value #F":"Throughput(Read + Write)","container":"Container"}}}],"type":"table"}],"refresh":"10s","schemaVersion":39,"tags":["kubernetes-mixin"],"templating":{"list":[{"current":{"selected":true,"text":"default","value":"default"},"hide":0,"label":"Data source","name":"datasource","query":"prometheus","regex":"","type":"datasource"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"hide":`}}{{ if .Values.grafana.sidecar.dashboards.multicluster.global.enabled }}0{{ else }}2{{ end }}{{`,"label":"cluster","name":"cluster","query":"label_values(up{job=\"kube-state-metrics\"}, cluster)","refresh":2,"sort":1,"type":"query","allValue":".*"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"hide":0,"label":"namespace","name":"namespace","query":"label_values(kube_namespace_status_phase{job=\"kube-state-metrics\", cluster=\"$cluster\"}, namespace)","refresh":2,"sort":1,"type":"query"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"hide":0,"label":"pod","name":"pod","query":"label_values(kube_pod_info{job=\"kube-state-metrics\", cluster=\"$cluster\", namespace=\"$namespace\"}, pod)","refresh":2,"sort":1,"type":"query"}]},"time":{"from":"now-1h","to":"now"},"timezone": "`}}{{ .Values.grafana.defaultDashboardsTimezone }}{{`","title":"Kubernetes / Compute Resources / Pod","uid":"6581e46e4e5c7ba40a07646395ef7b23"}`}} {{- end }} --- {{- if and .Values.grafana.operator.dashboardsConfigMapRefEnabled (or .Values.grafana.enabled .Values.grafana.forceDeployDashboards) (semverCompare ">=1.14.0-0" $kubeTargetVersion) (semverCompare "<9.9.9-9" $kubeTargetVersion) .Values.grafana.defaultDashboardsEnabled }} diff --git a/charts/kube-prometheus-stack/templates/grafana/dashboards-1.14/k8s-resources-workload.yaml b/charts/kube-prometheus-stack/templates/grafana/dashboards-1.14/k8s-resources-workload.yaml index f9dae3b21f..0656eddf3c 100644 --- a/charts/kube-prometheus-stack/templates/grafana/dashboards-1.14/k8s-resources-workload.yaml +++ b/charts/kube-prometheus-stack/templates/grafana/dashboards-1.14/k8s-resources-workload.yaml @@ -1,5 +1,5 @@ {{- /* -Generated from 'k8s-resources-workload' from https://raw.githubusercontent.com/prometheus-operator/kube-prometheus/eaca1a5fd76b356974054906af46810fec1cd7f8/manifests/grafana-dashboardDefinitions.yaml +Generated from 'k8s-resources-workload' from https://raw.githubusercontent.com/prometheus-operator/kube-prometheus/4eafa8b5395ef839bb02a55e3b5fbdfa03280cf9/manifests/grafana-dashboardDefinitions.yaml Do not change in-place! In order to change this file first read following link: https://github.com/prometheus-community/helm-charts/tree/main/charts/kube-prometheus-stack/hack */ -}} @@ -21,7 +21,7 @@ metadata: {{- include "kube-prometheus-stack.labels" $ | nindent 4 }} data: k8s-resources-workload.json: |- - {{`{"editable":`}}{{ .Values.grafana.defaultDashboardsEditable }}{{`,"links":[{"asDropdown":true,"includeVars":true,"keepTime":true,"tags":["kubernetes-mixin"],"targetBlank":false,"title":"Kubernetes","type":"dashboards"}],"panels":[{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true}}},"gridPos":{"h":7,"w":24,"x":0,"y":0},"id":1,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(\n max by (cluster, namespace, pod, container)(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_rate5m{cluster=\"$cluster\", namespace=\"$namespace\"})\n * on(cluster, 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","legendFormat":"__auto"}],"title":"CPU Usage","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"overrides":[{"matcher":{"id":"byRegexp","options":"/%/"},"properties":[{"id":"unit","value":"percentunit"}]},{"matcher":{"id":"byName","options":"Pod"},"properties":[{"id":"links","value":[{"title":"Drill down to pods","url":"/d/6581e46e4e5c7ba40a07646395ef7b23?${datasource:queryparam}&var-cluster=$cluster&var-namespace=$namespace&var-pod=${__data.fields.Pod}"}]}]}]},"gridPos":{"h":7,"w":24,"x":0,"y":7},"id":2,"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(\n max by (cluster, namespace, pod, container)(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_rate5m{cluster=\"$cluster\", namespace=\"$namespace\"})\n * on(cluster, 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},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(\n max by (cluster, namespace, pod, container)(kube_pod_container_resource_requests{job=\"kube-state-metrics\", cluster=\"$cluster\", namespace=\"$namespace\", resource=\"cpu\"})\n * on(cluster, 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},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(\n max by (cluster, namespace, pod, container)(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_rate5m{cluster=\"$cluster\", namespace=\"$namespace\"})\n * on(cluster, 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 max by (cluster, namespace, pod, container)(kube_pod_container_resource_requests{job=\"kube-state-metrics\", cluster=\"$cluster\", namespace=\"$namespace\", resource=\"cpu\"})\n * on(cluster, 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},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(\n max by (cluster, namespace, pod, container)(kube_pod_container_resource_limits{job=\"kube-state-metrics\", cluster=\"$cluster\", namespace=\"$namespace\", resource=\"cpu\"})\n * on(cluster, 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},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(\n max by (cluster, namespace, pod, container)(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_rate5m{cluster=\"$cluster\", namespace=\"$namespace\"})\n * on(cluster, 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 max by (cluster, namespace, pod, container)(kube_pod_container_resource_limits{job=\"kube-state-metrics\", cluster=\"$cluster\", namespace=\"$namespace\", resource=\"cpu\"})\n * on(cluster, 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}],"title":"CPU Quota","transformations":[{"id":"joinByField","options":{"byField":"pod","mode":"outer"}},{"id":"organize","options":{"excludeByName":{"Time":true,"Time 1":true,"Time 2":true,"Time 3":true,"Time 4":true,"Time 5":true},"indexByName":{"Time 1":0,"Time 2":1,"Time 3":2,"Time 4":3,"Time 5":4,"Value #A":6,"Value #B":7,"Value #C":8,"Value #D":9,"Value #E":10,"pod":5},"renameByName":{"Value #A":"CPU Usage","Value #B":"CPU Requests","Value #C":"CPU Requests %","Value #D":"CPU Limits","Value #E":"CPU Limits %","pod":"Pod"}}}],"type":"table"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"bytes"}},"gridPos":{"h":7,"w":24,"x":0,"y":14},"id":3,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(\n max by (cluster, namespace, pod, container)(container_memory_working_set_bytes{cluster=\"$cluster\", namespace=\"$namespace\", container!=\"\", image!=\"\"})\n * on(cluster, 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","legendFormat":"__auto"}],"title":"Memory Usage","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"unit":"bytes"},"overrides":[{"matcher":{"id":"byRegexp","options":"/%/"},"properties":[{"id":"unit","value":"percentunit"}]},{"matcher":{"id":"byName","options":"Pod"},"properties":[{"id":"links","value":[{"title":"Drill down to pods","url":"/d/6581e46e4e5c7ba40a07646395ef7b23?${datasource:queryparam}&var-cluster=$cluster&var-namespace=$namespace&var-pod=${__data.fields.Pod}"}]}]}]},"gridPos":{"h":7,"w":24,"x":0,"y":21},"id":4,"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(\n max by (cluster, namespace, pod, container)(container_memory_working_set_bytes{cluster=\"$cluster\", namespace=\"$namespace\", container!=\"\", image!=\"\"})\n * on(cluster, 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},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(\n max by (cluster, namespace, pod, container)(kube_pod_container_resource_requests{job=\"kube-state-metrics\", cluster=\"$cluster\", namespace=\"$namespace\", resource=\"memory\"})\n * on(cluster, 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},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(\n max by (cluster, namespace, pod, container)(container_memory_working_set_bytes{cluster=\"$cluster\", namespace=\"$namespace\", container!=\"\", image!=\"\"})\n * on(cluster, 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 max by (cluster, namespace, pod, container)(kube_pod_container_resource_requests{job=\"kube-state-metrics\", cluster=\"$cluster\", namespace=\"$namespace\", resource=\"memory\"})\n * on(cluster, 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},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(\n max by (cluster, namespace, pod, container)(kube_pod_container_resource_limits{job=\"kube-state-metrics\", cluster=\"$cluster\", namespace=\"$namespace\", resource=\"memory\"})\n * on(cluster, 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},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(\n max by (cluster, namespace, pod, container)(container_memory_working_set_bytes{cluster=\"$cluster\", namespace=\"$namespace\", container!=\"\", image!=\"\"})\n * on(cluster, 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 max by (cluster, namespace, pod, container)(kube_pod_container_resource_limits{job=\"kube-state-metrics\", cluster=\"$cluster\", namespace=\"$namespace\", resource=\"memory\"})\n * on(cluster, 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}],"title":"Memory Quota","transformations":[{"id":"joinByField","options":{"byField":"pod","mode":"outer"}},{"id":"organize","options":{"excludeByName":{"Time":true,"Time 1":true,"Time 2":true,"Time 3":true,"Time 4":true,"Time 5":true},"indexByName":{"Time 1":0,"Time 2":1,"Time 3":2,"Time 4":3,"Time 5":4,"Value #A":9,"Value #B":10,"Value #C":11,"Value #D":12,"Value #E":13,"pod":8},"renameByName":{"Value #A":"Memory Usage","Value #B":"Memory Requests","Value #C":"Memory Requests %","Value #D":"Memory Limits","Value #E":"Memory Limits %","pod":"Pod"}}}],"type":"table"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"overrides":[{"matcher":{"id":"byRegexp","options":"/Bandwidth/"},"properties":[{"id":"unit","value":"bps"}]},{"matcher":{"id":"byRegexp","options":"/Packets/"},"properties":[{"id":"unit","value":"pps"}]},{"matcher":{"id":"byName","options":"Pod"},"properties":[{"id":"links","value":[{"title":"Drill down to pods","url":"/d/6581e46e4e5c7ba40a07646395ef7b23?${datasource:queryparam}&var-cluster=$cluster&var-namespace=$namespace&var-pod=${__data.fields.Pod}"}]}]}]},"gridPos":{"h":7,"w":24,"x":0,"y":28},"id":5,"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"(sum((8 * rate(container_network_receive_bytes_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval]))\n* on (cluster, 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},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"(sum((8 * rate(container_network_transmit_bytes_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval]))\n* on (cluster, 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},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"(sum(rate(container_network_receive_packets_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval])\n* on (cluster, 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},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"(sum(rate(container_network_transmit_packets_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval])\n* on (cluster, 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},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"(sum(rate(container_network_receive_packets_dropped_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval])\n* on (cluster, 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},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"(sum(rate(container_network_transmit_packets_dropped_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval])\n* on (cluster, 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}],"title":"Current Network Usage","transformations":[{"id":"joinByField","options":{"byField":"pod","mode":"outer"}},{"id":"organize","options":{"excludeByName":{"Time":true,"Time 1":true,"Time 2":true,"Time 3":true,"Time 4":true,"Time 5":true,"Time 6":true},"indexByName":{"Time 1":0,"Time 2":1,"Time 3":2,"Time 4":3,"Time 5":4,"Time 6":5,"Value #A":7,"Value #B":8,"Value #C":9,"Value #D":10,"Value #E":11,"Value #F":12,"pod":6},"renameByName":{"Value #A":"Current Receive Bandwidth","Value #B":"Current Transmit Bandwidth","Value #C":"Rate of Received Packets","Value #D":"Rate of Transmitted Packets","Value #E":"Rate of Received Packets Dropped","Value #F":"Rate of Transmitted Packets Dropped","pod":"Pod"}}}],"type":"table"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"bps"}},"gridPos":{"h":7,"w":12,"x":0,"y":35},"id":6,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"(sum((8 * rate(container_network_receive_bytes_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval]))\n* on (cluster, 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","legendFormat":"__auto"}],"title":"Receive Bandwidth","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"bps"}},"gridPos":{"h":7,"w":12,"x":12,"y":35},"id":7,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"(sum((8 * rate(container_network_transmit_bytes_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval]))\n* on (cluster, 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","legendFormat":"__auto"}],"title":"Transmit Bandwidth","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"bps"}},"gridPos":{"h":7,"w":12,"x":0,"y":42},"id":8,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"(avg((8 * rate(container_network_receive_bytes_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval]))\n* on (cluster, 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","legendFormat":"__auto"}],"title":"Average Container Bandwidth by Pod: Received","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"bps"}},"gridPos":{"h":7,"w":12,"x":12,"y":42},"id":9,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"(avg((8 * rate(container_network_transmit_bytes_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval]))\n* on (cluster, 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","legendFormat":"__auto"}],"title":"Average Container Bandwidth by Pod: Transmitted","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"pps"}},"gridPos":{"h":7,"w":12,"x":0,"y":49},"id":10,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"(sum(rate(container_network_receive_packets_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval])\n* on (cluster, 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","legendFormat":"__auto"}],"title":"Rate of Received Packets","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"pps"}},"gridPos":{"h":7,"w":12,"x":12,"y":49},"id":11,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"(sum(rate(container_network_transmit_packets_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval])\n* on (cluster, 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","legendFormat":"__auto"}],"title":"Rate of Transmitted Packets","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"pps"}},"gridPos":{"h":7,"w":12,"x":0,"y":56},"id":12,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"(sum(rate(container_network_receive_packets_dropped_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval])\n* on (cluster, 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","legendFormat":"__auto"}],"title":"Rate of Received Packets Dropped","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"pps"}},"gridPos":{"h":7,"w":12,"x":12,"y":56},"id":13,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"(sum(rate(container_network_transmit_packets_dropped_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval])\n* on (cluster, 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","legendFormat":"__auto"}],"title":"Rate of Transmitted Packets Dropped","type":"timeseries"}],"refresh":"10s","schemaVersion":39,"tags":["kubernetes-mixin"],"templating":{"list":[{"current":{"selected":true,"text":"default","value":"default"},"hide":0,"label":"Data source","name":"datasource","query":"prometheus","regex":"","type":"datasource"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"hide":`}}{{ if .Values.grafana.sidecar.dashboards.multicluster.global.enabled }}0{{ else }}2{{ end }}{{`,"label":"cluster","name":"cluster","query":"label_values(up{job=\"kube-state-metrics\"}, cluster)","refresh":2,"sort":1,"type":"query","allValue":".*"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"hide":0,"label":"namespace","name":"namespace","query":"label_values(kube_namespace_status_phase{job=\"kube-state-metrics\", cluster=\"$cluster\"}, namespace)","refresh":2,"sort":1,"type":"query"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"hide":0,"includeAll":true,"label":"workload_type","name":"type","query":"label_values(namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\"}, workload_type)","refresh":2,"sort":1,"type":"query"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"hide":0,"includeAll":true,"label":"workload","name":"workload","query":"label_values(namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload_type=~\"$type\"}, workload)","refresh":2,"sort":1,"type":"query"}]},"time":{"from":"now-1h","to":"now"},"timezone": "`}}{{ .Values.grafana.defaultDashboardsTimezone }}{{`","title":"Kubernetes / Compute Resources / Workload","uid":"a164a7f0339f99e89cea5cb47e9be617"}`}} + {{`{"editable":`}}{{ .Values.grafana.defaultDashboardsEditable }}{{`,"links":[{"asDropdown":true,"includeVars":true,"keepTime":true,"tags":["kubernetes-mixin"],"targetBlank":false,"title":"Kubernetes","type":"dashboards"}],"panels":[{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true}}},"gridPos":{"h":7,"w":24,"x":0,"y":0},"id":1,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(\n max by (cluster, namespace, pod, container)(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_rate5m{cluster=\"$cluster\", namespace=\"$namespace\"})\n * on(cluster, 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","legendFormat":"__auto"}],"title":"CPU Usage","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"overrides":[{"matcher":{"id":"byRegexp","options":"/%/"},"properties":[{"id":"unit","value":"percentunit"}]},{"matcher":{"id":"byName","options":"Pod"},"properties":[{"id":"links","value":[{"title":"Drill down to pods","url":"/d/6581e46e4e5c7ba40a07646395ef7b23?${datasource:queryparam}&var-cluster=$cluster&var-namespace=$namespace&var-pod=${__data.fields.Pod}"}]}]}]},"gridPos":{"h":7,"w":24,"x":0,"y":7},"id":2,"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(\n max by (cluster, namespace, pod, container)(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_rate5m{cluster=\"$cluster\", namespace=\"$namespace\"})\n * on(cluster, 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},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(\n max by (cluster, namespace, pod, container)(kube_pod_container_resource_requests{job=\"kube-state-metrics\", cluster=\"$cluster\", namespace=\"$namespace\", resource=\"cpu\"})\n * on(cluster, 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},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(\n max by (cluster, namespace, pod, container)(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_rate5m{cluster=\"$cluster\", namespace=\"$namespace\"})\n * on(cluster, 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 max by (cluster, namespace, pod, container)(kube_pod_container_resource_requests{job=\"kube-state-metrics\", cluster=\"$cluster\", namespace=\"$namespace\", resource=\"cpu\"})\n * on(cluster, 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},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(\n max by (cluster, namespace, pod, container)(kube_pod_container_resource_limits{job=\"kube-state-metrics\", cluster=\"$cluster\", namespace=\"$namespace\", resource=\"cpu\"})\n * on(cluster, 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},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(\n max by (cluster, namespace, pod, container)(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_rate5m{cluster=\"$cluster\", namespace=\"$namespace\"})\n * on(cluster, 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 max by (cluster, namespace, pod, container)(kube_pod_container_resource_limits{job=\"kube-state-metrics\", cluster=\"$cluster\", namespace=\"$namespace\", resource=\"cpu\"})\n * on(cluster, 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}],"title":"CPU Quota","transformations":[{"id":"joinByField","options":{"byField":"pod","mode":"outer"}},{"id":"organize","options":{"excludeByName":{"Time":true,"Time 1":true,"Time 2":true,"Time 3":true,"Time 4":true,"Time 5":true},"indexByName":{"Time 1":0,"Time 2":1,"Time 3":2,"Time 4":3,"Time 5":4,"Value #A":6,"Value #B":7,"Value #C":8,"Value #D":9,"Value #E":10,"pod":5},"renameByName":{"Value #A":"CPU Usage","Value #B":"CPU Requests","Value #C":"CPU Requests %","Value #D":"CPU Limits","Value #E":"CPU Limits %","pod":"Pod"}}}],"type":"table"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"bytes"}},"gridPos":{"h":7,"w":24,"x":0,"y":14},"id":3,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(\n max by (cluster, namespace, pod, container)(container_memory_working_set_bytes{cluster=\"$cluster\", namespace=\"$namespace\", container!=\"\", image!=\"\"})\n * on(cluster, 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","legendFormat":"__auto"}],"title":"Memory Usage","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"unit":"bytes"},"overrides":[{"matcher":{"id":"byRegexp","options":"/%/"},"properties":[{"id":"unit","value":"percentunit"}]},{"matcher":{"id":"byName","options":"Pod"},"properties":[{"id":"links","value":[{"title":"Drill down to pods","url":"/d/6581e46e4e5c7ba40a07646395ef7b23?${datasource:queryparam}&var-cluster=$cluster&var-namespace=$namespace&var-pod=${__data.fields.Pod}"}]}]}]},"gridPos":{"h":7,"w":24,"x":0,"y":21},"id":4,"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(\n max by (cluster, namespace, pod, container)(container_memory_working_set_bytes{cluster=\"$cluster\", namespace=\"$namespace\", container!=\"\", image!=\"\"})\n * on(cluster, 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},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(\n max by (cluster, namespace, pod, container)(kube_pod_container_resource_requests{job=\"kube-state-metrics\", cluster=\"$cluster\", namespace=\"$namespace\", resource=\"memory\"})\n * on(cluster, 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},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(\n max by (cluster, namespace, pod, container)(container_memory_working_set_bytes{cluster=\"$cluster\", namespace=\"$namespace\", container!=\"\", image!=\"\"})\n * on(cluster, 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 max by (cluster, namespace, pod, container)(kube_pod_container_resource_requests{job=\"kube-state-metrics\", cluster=\"$cluster\", namespace=\"$namespace\", resource=\"memory\"})\n * on(cluster, 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},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(\n max by (cluster, namespace, pod, container)(kube_pod_container_resource_limits{job=\"kube-state-metrics\", cluster=\"$cluster\", namespace=\"$namespace\", resource=\"memory\"})\n * on(cluster, 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},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(\n max by (cluster, namespace, pod, container)(container_memory_working_set_bytes{cluster=\"$cluster\", namespace=\"$namespace\", container!=\"\", image!=\"\"})\n * on(cluster, 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 max by (cluster, namespace, pod, container)(kube_pod_container_resource_limits{job=\"kube-state-metrics\", cluster=\"$cluster\", namespace=\"$namespace\", resource=\"memory\"})\n * on(cluster, 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}],"title":"Memory Quota","transformations":[{"id":"joinByField","options":{"byField":"pod","mode":"outer"}},{"id":"organize","options":{"excludeByName":{"Time":true,"Time 1":true,"Time 2":true,"Time 3":true,"Time 4":true,"Time 5":true},"indexByName":{"Time 1":0,"Time 2":1,"Time 3":2,"Time 4":3,"Time 5":4,"Value #A":9,"Value #B":10,"Value #C":11,"Value #D":12,"Value #E":13,"pod":8},"renameByName":{"Value #A":"Memory Usage","Value #B":"Memory Requests","Value #C":"Memory Requests %","Value #D":"Memory Limits","Value #E":"Memory Limits %","pod":"Pod"}}}],"type":"table"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"overrides":[{"matcher":{"id":"byRegexp","options":"/Bandwidth/"},"properties":[{"id":"unit","value":"bps"}]},{"matcher":{"id":"byRegexp","options":"/Packets/"},"properties":[{"id":"unit","value":"pps"}]},{"matcher":{"id":"byName","options":"Pod"},"properties":[{"id":"links","value":[{"title":"Drill down to pods","url":"/d/6581e46e4e5c7ba40a07646395ef7b23?${datasource:queryparam}&var-cluster=$cluster&var-namespace=$namespace&var-pod=${__data.fields.Pod}"}]}]}]},"gridPos":{"h":7,"w":24,"x":0,"y":28},"id":5,"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"(sum((8 * rate(container_network_receive_bytes_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval]))\n* on (cluster, 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},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"(sum((8 * rate(container_network_transmit_bytes_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval]))\n* on (cluster, 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},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"(sum(rate(container_network_receive_packets_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval])\n* on (cluster, 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},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"(sum(rate(container_network_transmit_packets_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval])\n* on (cluster, 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},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"(sum(rate(container_network_receive_packets_dropped_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval])\n* on (cluster, 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},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"(sum(rate(container_network_transmit_packets_dropped_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval])\n* on (cluster, 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}],"title":"Current Network Usage","transformations":[{"id":"joinByField","options":{"byField":"pod","mode":"outer"}},{"id":"organize","options":{"excludeByName":{"Time":true,"Time 1":true,"Time 2":true,"Time 3":true,"Time 4":true,"Time 5":true,"Time 6":true},"indexByName":{"Time 1":0,"Time 2":1,"Time 3":2,"Time 4":3,"Time 5":4,"Time 6":5,"Value #A":7,"Value #B":8,"Value #C":9,"Value #D":10,"Value #E":11,"Value #F":12,"pod":6},"renameByName":{"Value #A":"Current Receive Bandwidth","Value #B":"Current Transmit Bandwidth","Value #C":"Rate of Received Packets","Value #D":"Rate of Transmitted Packets","Value #E":"Rate of Received Packets Dropped","Value #F":"Rate of Transmitted Packets Dropped","pod":"Pod"}}}],"type":"table"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"bps"}},"gridPos":{"h":7,"w":12,"x":0,"y":35},"id":6,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"(sum((8 * rate(container_network_receive_bytes_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval]))\n* on (cluster, 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","legendFormat":"__auto"}],"title":"Receive Bandwidth","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"bps"}},"gridPos":{"h":7,"w":12,"x":12,"y":35},"id":7,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"(sum((8 * rate(container_network_transmit_bytes_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval]))\n* on (cluster, 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","legendFormat":"__auto"}],"title":"Transmit Bandwidth","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"bps"}},"gridPos":{"h":7,"w":12,"x":0,"y":42},"id":8,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"(avg((8 * rate(container_network_receive_bytes_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval]))\n* on (cluster, 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","legendFormat":"__auto"}],"title":"Average Container Bandwidth by Pod: Received","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"bps"}},"gridPos":{"h":7,"w":12,"x":12,"y":42},"id":9,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"(avg((8 * rate(container_network_transmit_bytes_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval]))\n* on (cluster, 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","legendFormat":"__auto"}],"title":"Average Container Bandwidth by Pod: Transmitted","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"pps"}},"gridPos":{"h":7,"w":12,"x":0,"y":49},"id":10,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"(sum(rate(container_network_receive_packets_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval])\n* on (cluster, 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","legendFormat":"__auto"}],"title":"Rate of Received Packets","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"pps"}},"gridPos":{"h":7,"w":12,"x":12,"y":49},"id":11,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"(sum(rate(container_network_transmit_packets_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval])\n* on (cluster, 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","legendFormat":"__auto"}],"title":"Rate of Transmitted Packets","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"pps"}},"gridPos":{"h":7,"w":12,"x":0,"y":56},"id":12,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"(sum(rate(container_network_receive_packets_dropped_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval])\n* on (cluster, 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","legendFormat":"__auto"}],"title":"Rate of Received Packets Dropped","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"pps"}},"gridPos":{"h":7,"w":12,"x":12,"y":56},"id":13,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"(sum(rate(container_network_transmit_packets_dropped_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval])\n* on (cluster, 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","legendFormat":"__auto"}],"title":"Rate of Transmitted Packets Dropped","type":"timeseries"}],"refresh":"10s","schemaVersion":39,"tags":["kubernetes-mixin"],"templating":{"list":[{"current":{"selected":true,"text":"default","value":"default"},"hide":0,"label":"Data source","name":"datasource","query":"prometheus","regex":"","type":"datasource"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"hide":`}}{{ if .Values.grafana.sidecar.dashboards.multicluster.global.enabled }}0{{ else }}2{{ end }}{{`,"label":"cluster","name":"cluster","query":"label_values(up{job=\"kube-state-metrics\"}, cluster)","refresh":2,"sort":1,"type":"query","allValue":".*"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"hide":0,"label":"namespace","name":"namespace","query":"label_values(kube_namespace_status_phase{job=\"kube-state-metrics\", cluster=\"$cluster\"}, namespace)","refresh":2,"sort":1,"type":"query"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"hide":0,"includeAll":true,"label":"workload_type","name":"type","query":"label_values(namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\"}, workload_type)","refresh":2,"sort":1,"type":"query"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"hide":0,"includeAll":true,"label":"workload","name":"workload","query":"label_values(namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload_type=~\"$type\"}, workload)","refresh":2,"sort":1,"type":"query"}]},"time":{"from":"now-1h","to":"now"},"timezone": "`}}{{ .Values.grafana.defaultDashboardsTimezone }}{{`","title":"Kubernetes / Compute Resources / Workload","uid":"a164a7f0339f99e89cea5cb47e9be617"}`}} {{- end }} --- {{- if and .Values.grafana.operator.dashboardsConfigMapRefEnabled (or .Values.grafana.enabled .Values.grafana.forceDeployDashboards) (semverCompare ">=1.14.0-0" $kubeTargetVersion) (semverCompare "<9.9.9-9" $kubeTargetVersion) .Values.grafana.defaultDashboardsEnabled }} diff --git a/charts/kube-prometheus-stack/templates/grafana/dashboards-1.14/k8s-resources-workloads-namespace.yaml b/charts/kube-prometheus-stack/templates/grafana/dashboards-1.14/k8s-resources-workloads-namespace.yaml index 08d5758eb9..689ae0cd23 100644 --- a/charts/kube-prometheus-stack/templates/grafana/dashboards-1.14/k8s-resources-workloads-namespace.yaml +++ b/charts/kube-prometheus-stack/templates/grafana/dashboards-1.14/k8s-resources-workloads-namespace.yaml @@ -1,5 +1,5 @@ {{- /* -Generated from 'k8s-resources-workloads-namespace' from https://raw.githubusercontent.com/prometheus-operator/kube-prometheus/eaca1a5fd76b356974054906af46810fec1cd7f8/manifests/grafana-dashboardDefinitions.yaml +Generated from 'k8s-resources-workloads-namespace' from https://raw.githubusercontent.com/prometheus-operator/kube-prometheus/4eafa8b5395ef839bb02a55e3b5fbdfa03280cf9/manifests/grafana-dashboardDefinitions.yaml Do not change in-place! In order to change this file first read following link: https://github.com/prometheus-community/helm-charts/tree/main/charts/kube-prometheus-stack/hack */ -}} @@ -21,7 +21,7 @@ metadata: {{- include "kube-prometheus-stack.labels" $ | nindent 4 }} data: k8s-resources-workloads-namespace.json: |- - {{`{"editable":`}}{{ .Values.grafana.defaultDashboardsEditable }}{{`,"links":[{"asDropdown":true,"includeVars":true,"keepTime":true,"tags":["kubernetes-mixin"],"targetBlank":false,"title":"Kubernetes","type":"dashboards"}],"panels":[{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true}},"overrides":[{"matcher":{"id":"byFrameRefID","options":"B"},"properties":[{"id":"custom.lineStyle","value":{"fill":"dash"}},{"id":"custom.lineWidth","value":2},{"id":"color","value":{"fixedColor":"red","mode":"fixed"}}]},{"matcher":{"id":"byFrameRefID","options":"C"},"properties":[{"id":"custom.lineStyle","value":{"fill":"dash"}},{"id":"custom.lineWidth","value":2},{"id":"color","value":{"fixedColor":"orange","mode":"fixed"}}]}]},"gridPos":{"h":7,"w":24,"x":0,"y":0},"id":1,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(\n max by (cluster, namespace, pod, container)(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_rate5m{cluster=\"$cluster\", namespace=\"$namespace\"})\n* on(cluster, 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","legendFormat":"{{workload}} - {{workload_type}}"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"scalar(max(kube_resourcequota{cluster=\"$cluster\", namespace=\"$namespace\", type=\"hard\",resource=~\"requests.cpu|cpu\"}))","legendFormat":"quota - requests"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"scalar(max(kube_resourcequota{cluster=\"$cluster\", namespace=\"$namespace\", type=\"hard\",resource=~\"limits.cpu\"}))","legendFormat":"quota - limits"}],"title":"CPU Usage","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"overrides":[{"matcher":{"id":"byRegexp","options":"/%/"},"properties":[{"id":"unit","value":"percentunit"}]},{"matcher":{"id":"byName","options":"Workload"},"properties":[{"id":"links","value":[{"title":"Drill down to workloads","url":"/d/a164a7f0339f99e89cea5cb47e9be617?${datasource:queryparam}&var-cluster=$cluster&var-namespace=$namespace&var-type=${__data.fields.Type}&var-workload=${__data.fields.Workload}"}]}]},{"matcher":{"id":"byName","options":"Running Pods"},"properties":[{"id":"unit","value":"none"}]}]},"gridPos":{"h":7,"w":24,"x":0,"y":7},"id":2,"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"count(namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload_type=~\"$type\"}) by (workload, workload_type)","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(\n max by (cluster, namespace, pod, container)(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_rate5m{cluster=\"$cluster\", namespace=\"$namespace\"})\n* on(cluster, 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},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(\n max by (cluster, namespace, pod, container)(kube_pod_container_resource_requests{job=\"kube-state-metrics\", cluster=\"$cluster\", namespace=\"$namespace\", resource=\"cpu\"})\n* on(cluster, 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},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(\n max by (cluster, namespace, pod, container)(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_rate5m{cluster=\"$cluster\", namespace=\"$namespace\"})\n* on(cluster, 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 max by (cluster, namespace, pod, container)(kube_pod_container_resource_requests{job=\"kube-state-metrics\", cluster=\"$cluster\", namespace=\"$namespace\", resource=\"cpu\"})\n* on(cluster, 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},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(\n max by (cluster, namespace, pod, container)(kube_pod_container_resource_limits{job=\"kube-state-metrics\", cluster=\"$cluster\", namespace=\"$namespace\", resource=\"cpu\"})\n* on(cluster, 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},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(\n max by (cluster, namespace, pod, container)(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_rate5m{cluster=\"$cluster\", namespace=\"$namespace\"})\n* on(cluster, 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 max by (cluster, namespace, pod, container)(kube_pod_container_resource_limits{job=\"kube-state-metrics\", cluster=\"$cluster\", namespace=\"$namespace\", resource=\"cpu\"})\n* on(cluster, 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}],"title":"CPU Quota","transformations":[{"id":"joinByField","options":{"byField":"workload","mode":"outer"}},{"id":"organize","options":{"excludeByName":{"Time":true,"Time 1":true,"Time 2":true,"Time 3":true,"Time 4":true,"Time 5":true,"Time 6":true,"workload_type 2":true,"workload_type 3":true,"workload_type 4":true,"workload_type 5":true,"workload_type 6":true},"indexByName":{"Time 1":0,"Time 2":1,"Time 3":2,"Time 4":3,"Time 5":4,"Time 6":5,"Value #A":8,"Value #B":9,"Value #C":10,"Value #D":11,"Value #E":12,"Value #F":13,"workload":6,"workload_type 1":7,"workload_type 2":14,"workload_type 3":15,"workload_type 4":16,"workload_type 5":17,"workload_type 6":18},"renameByName":{"Value #A":"Running Pods","Value #B":"CPU Usage","Value #C":"CPU Requests","Value #D":"CPU Requests %","Value #E":"CPU Limits","Value #F":"CPU Limits %","workload":"Workload","workload_type 1":"Type"}}}],"type":"table"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"bytes"},"overrides":[{"matcher":{"id":"byFrameRefID","options":"B"},"properties":[{"id":"custom.lineStyle","value":{"fill":"dash"}},{"id":"custom.lineWidth","value":2},{"id":"color","value":{"fixedColor":"red","mode":"fixed"}}]},{"matcher":{"id":"byFrameRefID","options":"C"},"properties":[{"id":"custom.lineStyle","value":{"fill":"dash"}},{"id":"custom.lineWidth","value":2},{"id":"color","value":{"fixedColor":"orange","mode":"fixed"}}]}]},"gridPos":{"h":7,"w":24,"x":0,"y":14},"id":3,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(\n max by (cluster, namespace, pod, container)(container_memory_working_set_bytes{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=\"$namespace\", container!=\"\", image!=\"\"})\n * on(cluster, 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","legendFormat":"{{workload}} - {{workload_type}}"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"scalar(max(kube_resourcequota{cluster=\"$cluster\", namespace=\"$namespace\", type=\"hard\",resource=~\"requests.memory|memory\"}))","legendFormat":"quota - requests"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"scalar(max(kube_resourcequota{cluster=\"$cluster\", namespace=\"$namespace\", type=\"hard\",resource=~\"limits.memory\"}))","legendFormat":"quota - limits"}],"title":"Memory Usage","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"unit":"bytes"},"overrides":[{"matcher":{"id":"byRegexp","options":"/%/"},"properties":[{"id":"unit","value":"percentunit"}]},{"matcher":{"id":"byName","options":"Workload"},"properties":[{"id":"links","value":[{"title":"Drill down to workloads","url":"/d/a164a7f0339f99e89cea5cb47e9be617?${datasource:queryparam}&var-cluster=$cluster&var-namespace=$namespace&var-type=${__data.fields.Type}&var-workload=${__data.fields.Workload}"}]}]},{"matcher":{"id":"byName","options":"Running Pods"},"properties":[{"id":"unit","value":"none"}]}]},"gridPos":{"h":7,"w":24,"x":0,"y":21},"id":4,"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"count(namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload_type=~\"$type\"}) by (workload, workload_type)","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(\n max by (cluster, namespace, pod, container)(container_memory_working_set_bytes{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=\"$namespace\", container!=\"\", image!=\"\"})\n * on(cluster, 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},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(\n max by (cluster, namespace, pod, container)(kube_pod_container_resource_requests{job=\"kube-state-metrics\", cluster=\"$cluster\", namespace=\"$namespace\", resource=\"memory\"})\n* on(cluster, 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},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(\n max by (cluster, namespace, pod, container)(container_memory_working_set_bytes{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=\"$namespace\", container!=\"\", image!=\"\"})\n * on(cluster, 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 max by (cluster, namespace, pod, container)(kube_pod_container_resource_requests{job=\"kube-state-metrics\", cluster=\"$cluster\", namespace=\"$namespace\", resource=\"memory\"})\n* on(cluster, 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},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(\n max by (cluster, namespace, pod, container)(kube_pod_container_resource_limits{job=\"kube-state-metrics\", cluster=\"$cluster\", namespace=\"$namespace\", resource=\"memory\"})\n* on(cluster, 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},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(\n max by (cluster, namespace, pod, container)(container_memory_working_set_bytes{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=\"$namespace\", container!=\"\", image!=\"\"})\n * on(cluster, 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 max by (cluster, namespace, pod, container)(kube_pod_container_resource_limits{job=\"kube-state-metrics\", cluster=\"$cluster\", namespace=\"$namespace\", resource=\"memory\"})\n* on(cluster, 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}],"title":"Memory Quota","transformations":[{"id":"joinByField","options":{"byField":"workload","mode":"outer"}},{"id":"organize","options":{"excludeByName":{"Time":true,"Time 1":true,"Time 2":true,"Time 3":true,"Time 4":true,"Time 5":true,"Time 6":true,"workload_type 2":true,"workload_type 3":true,"workload_type 4":true,"workload_type 5":true,"workload_type 6":true},"indexByName":{"Time 1":0,"Time 2":1,"Time 3":2,"Time 4":3,"Time 5":4,"Time 6":5,"Value #A":8,"Value #B":9,"Value #C":10,"Value #D":11,"Value #E":12,"Value #F":13,"workload":6,"workload_type 1":7,"workload_type 2":14,"workload_type 3":15,"workload_type 4":16,"workload_type 5":17,"workload_type 6":18},"renameByName":{"Value #A":"Running Pods","Value #B":"Memory Usage","Value #C":"Memory Requests","Value #D":"Memory Requests %","Value #E":"Memory Limits","Value #F":"Memory Limits %","workload":"Workload","workload_type 1":"Type"}}}],"type":"table"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"overrides":[{"matcher":{"id":"byRegexp","options":"/Bandwidth/"},"properties":[{"id":"unit","value":"bps"}]},{"matcher":{"id":"byRegexp","options":"/Packets/"},"properties":[{"id":"unit","value":"pps"}]},{"matcher":{"id":"byName","options":"Workload"},"properties":[{"id":"links","value":[{"title":"Drill down to workloads","url":"/d/a164a7f0339f99e89cea5cb47e9be617?${datasource:queryparam}&var-cluster=$cluster&var-namespace=$namespace&var-type=${__data.fields.Type}&var-workload=${__data.fields.Workload}"}]}]}]},"gridPos":{"h":7,"w":24,"x":0,"y":28},"id":5,"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"(sum((8 * rate(container_network_receive_bytes_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval]))\n* on (cluster, 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},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"(sum((8 * rate(container_network_transmit_bytes_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval]))\n* on (cluster, 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},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"(sum(rate(container_network_receive_packets_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval])\n* on (cluster, 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},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"(sum(rate(container_network_transmit_packets_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval])\n* on (cluster, 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},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"(sum(rate(container_network_receive_packets_dropped_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval])\n* on (cluster, 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},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"(sum(rate(container_network_transmit_packets_dropped_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval])\n* on (cluster, 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}],"title":"Current Network Usage","transformations":[{"id":"joinByField","options":{"byField":"workload","mode":"outer"}},{"id":"organize","options":{"excludeByName":{"Time":true,"Time 1":true,"Time 2":true,"Time 3":true,"Time 4":true,"Time 5":true,"Time 6":true},"indexByName":{"Time 1":0,"Time 2":1,"Time 3":2,"Time 4":3,"Time 5":4,"Time 6":5,"Value #A":7,"Value #B":8,"Value #C":9,"Value #D":10,"Value #E":11,"Value #F":12,"workload":6},"renameByName":{"Value #A":"Current Receive Bandwidth","Value #B":"Current Transmit Bandwidth","Value #C":"Rate of Received Packets","Value #D":"Rate of Transmitted Packets","Value #E":"Rate of Received Packets Dropped","Value #F":"Rate of Transmitted Packets Dropped","workload":"Workload"}}}],"type":"table"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"bps"}},"gridPos":{"h":7,"w":12,"x":0,"y":35},"id":6,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"(sum((8 * rate(container_network_receive_bytes_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval]))\n* on (cluster, 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","legendFormat":"__auto"}],"title":"Receive Bandwidth","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"bps"}},"gridPos":{"h":7,"w":12,"x":12,"y":35},"id":7,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"(sum((8 * rate(container_network_transmit_bytes_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval]))\n* on (cluster, 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","legendFormat":"__auto"}],"title":"Transmit Bandwidth","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"bps"}},"gridPos":{"h":7,"w":12,"x":0,"y":42},"id":8,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"(avg((8 * rate(container_network_receive_bytes_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval]))\n* on (cluster, 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","legendFormat":"__auto"}],"title":"Average Container Bandwidth by Workload: Received","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"bps"}},"gridPos":{"h":7,"w":12,"x":12,"y":42},"id":9,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"(avg((8 * rate(container_network_transmit_bytes_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval]))\n* on (cluster, 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","legendFormat":"__auto"}],"title":"Average Container Bandwidth by Workload: Transmitted","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"pps"}},"gridPos":{"h":7,"w":12,"x":0,"y":49},"id":10,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"(sum(rate(container_network_receive_packets_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval])\n* on (cluster, 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","legendFormat":"__auto"}],"title":"Rate of Received Packets","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"pps"}},"gridPos":{"h":7,"w":12,"x":12,"y":49},"id":11,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"(sum(rate(container_network_transmit_packets_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval])\n* on (cluster, 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","legendFormat":"__auto"}],"title":"Rate of Transmitted Packets","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"pps"}},"gridPos":{"h":7,"w":12,"x":0,"y":56},"id":12,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"(sum(rate(container_network_receive_packets_dropped_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval])\n* on (cluster, 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","legendFormat":"__auto"}],"title":"Rate of Received Packets Dropped","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"pps"}},"gridPos":{"h":7,"w":12,"x":12,"y":56},"id":13,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"(sum(rate(container_network_transmit_packets_dropped_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval])\n* on (cluster, 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","legendFormat":"__auto"}],"title":"Rate of Transmitted Packets Dropped","type":"timeseries"}],"refresh":"10s","schemaVersion":39,"tags":["kubernetes-mixin"],"templating":{"list":[{"current":{"selected":true,"text":"default","value":"default"},"hide":0,"label":"Data source","name":"datasource","query":"prometheus","regex":"","type":"datasource"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"hide":`}}{{ if .Values.grafana.sidecar.dashboards.multicluster.global.enabled }}0{{ else }}2{{ end }}{{`,"label":"cluster","name":"cluster","query":"label_values(up{job=\"kube-state-metrics\"}, cluster)","refresh":2,"sort":1,"type":"query","allValue":".*"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"hide":0,"label":"namespace","name":"namespace","query":"label_values(kube_namespace_status_phase{job=\"kube-state-metrics\", cluster=\"$cluster\"}, namespace)","refresh":2,"sort":1,"type":"query"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"hide":0,"includeAll":true,"label":"workload_type","name":"type","query":"label_values(namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload=~\".+\"}, workload_type)","refresh":2,"sort":1,"type":"query"}]},"time":{"from":"now-1h","to":"now"},"timezone": "`}}{{ .Values.grafana.defaultDashboardsTimezone }}{{`","title":"Kubernetes / Compute Resources / Namespace (Workloads)","uid":"a87fb0d919ec0ea5f6543124e16c42a5"}`}} + {{`{"editable":`}}{{ .Values.grafana.defaultDashboardsEditable }}{{`,"links":[{"asDropdown":true,"includeVars":true,"keepTime":true,"tags":["kubernetes-mixin"],"targetBlank":false,"title":"Kubernetes","type":"dashboards"}],"panels":[{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true}},"overrides":[{"matcher":{"id":"byFrameRefID","options":"B"},"properties":[{"id":"custom.lineStyle","value":{"fill":"dash"}},{"id":"custom.lineWidth","value":2},{"id":"color","value":{"fixedColor":"red","mode":"fixed"}}]},{"matcher":{"id":"byFrameRefID","options":"C"},"properties":[{"id":"custom.lineStyle","value":{"fill":"dash"}},{"id":"custom.lineWidth","value":2},{"id":"color","value":{"fixedColor":"orange","mode":"fixed"}}]}]},"gridPos":{"h":7,"w":24,"x":0,"y":0},"id":1,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(\n max by (cluster, namespace, pod, container)(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_rate5m{cluster=\"$cluster\", namespace=\"$namespace\"})\n* on(cluster, 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","legendFormat":"{{workload}} - {{workload_type}}"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"scalar(max(kube_resourcequota{cluster=\"$cluster\", namespace=\"$namespace\", type=\"hard\",resource=~\"requests.cpu|cpu\"}))","legendFormat":"quota - requests"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"scalar(max(kube_resourcequota{cluster=\"$cluster\", namespace=\"$namespace\", type=\"hard\",resource=~\"limits.cpu\"}))","legendFormat":"quota - limits"}],"title":"CPU Usage","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"overrides":[{"matcher":{"id":"byRegexp","options":"/%/"},"properties":[{"id":"unit","value":"percentunit"}]},{"matcher":{"id":"byName","options":"Workload"},"properties":[{"id":"links","value":[{"title":"Drill down to workloads","url":"/d/a164a7f0339f99e89cea5cb47e9be617?${datasource:queryparam}&var-cluster=$cluster&var-namespace=$namespace&var-type=${__data.fields.Type}&var-workload=${__data.fields.Workload}"}]}]},{"matcher":{"id":"byName","options":"Running Pods"},"properties":[{"id":"unit","value":"none"}]}]},"gridPos":{"h":7,"w":24,"x":0,"y":7},"id":2,"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"count(namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload_type=~\"$type\"}) by (workload, workload_type)","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(\n max by (cluster, namespace, pod, container)(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_rate5m{cluster=\"$cluster\", namespace=\"$namespace\"})\n* on(cluster, 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},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(\n max by (cluster, namespace, pod, container)(kube_pod_container_resource_requests{job=\"kube-state-metrics\", cluster=\"$cluster\", namespace=\"$namespace\", resource=\"cpu\"})\n* on(cluster, 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},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(\n max by (cluster, namespace, pod, container)(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_rate5m{cluster=\"$cluster\", namespace=\"$namespace\"})\n* on(cluster, 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 max by (cluster, namespace, pod, container)(kube_pod_container_resource_requests{job=\"kube-state-metrics\", cluster=\"$cluster\", namespace=\"$namespace\", resource=\"cpu\"})\n* on(cluster, 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},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(\n max by (cluster, namespace, pod, container)(kube_pod_container_resource_limits{job=\"kube-state-metrics\", cluster=\"$cluster\", namespace=\"$namespace\", resource=\"cpu\"})\n* on(cluster, 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},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(\n max by (cluster, namespace, pod, container)(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_rate5m{cluster=\"$cluster\", namespace=\"$namespace\"})\n* on(cluster, 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 max by (cluster, namespace, pod, container)(kube_pod_container_resource_limits{job=\"kube-state-metrics\", cluster=\"$cluster\", namespace=\"$namespace\", resource=\"cpu\"})\n* on(cluster, 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}],"title":"CPU Quota","transformations":[{"id":"joinByField","options":{"byField":"workload","mode":"outer"}},{"id":"organize","options":{"excludeByName":{"Time":true,"Time 1":true,"Time 2":true,"Time 3":true,"Time 4":true,"Time 5":true,"Time 6":true,"workload_type 2":true,"workload_type 3":true,"workload_type 4":true,"workload_type 5":true,"workload_type 6":true},"indexByName":{"Time 1":0,"Time 2":1,"Time 3":2,"Time 4":3,"Time 5":4,"Time 6":5,"Value #A":8,"Value #B":9,"Value #C":10,"Value #D":11,"Value #E":12,"Value #F":13,"workload":6,"workload_type 1":7,"workload_type 2":14,"workload_type 3":15,"workload_type 4":16,"workload_type 5":17,"workload_type 6":18},"renameByName":{"Value #A":"Running Pods","Value #B":"CPU Usage","Value #C":"CPU Requests","Value #D":"CPU Requests %","Value #E":"CPU Limits","Value #F":"CPU Limits %","workload":"Workload","workload_type 1":"Type"}}}],"type":"table"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"bytes"},"overrides":[{"matcher":{"id":"byFrameRefID","options":"B"},"properties":[{"id":"custom.lineStyle","value":{"fill":"dash"}},{"id":"custom.lineWidth","value":2},{"id":"color","value":{"fixedColor":"red","mode":"fixed"}}]},{"matcher":{"id":"byFrameRefID","options":"C"},"properties":[{"id":"custom.lineStyle","value":{"fill":"dash"}},{"id":"custom.lineWidth","value":2},{"id":"color","value":{"fixedColor":"orange","mode":"fixed"}}]}]},"gridPos":{"h":7,"w":24,"x":0,"y":14},"id":3,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(\n max by (cluster, namespace, pod, container)(container_memory_working_set_bytes{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=\"$namespace\", container!=\"\", image!=\"\"})\n * on(cluster, 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","legendFormat":"{{workload}} - {{workload_type}}"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"scalar(max(kube_resourcequota{cluster=\"$cluster\", namespace=\"$namespace\", type=\"hard\",resource=~\"requests.memory|memory\"}))","legendFormat":"quota - requests"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"scalar(max(kube_resourcequota{cluster=\"$cluster\", namespace=\"$namespace\", type=\"hard\",resource=~\"limits.memory\"}))","legendFormat":"quota - limits"}],"title":"Memory Usage","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"unit":"bytes"},"overrides":[{"matcher":{"id":"byRegexp","options":"/%/"},"properties":[{"id":"unit","value":"percentunit"}]},{"matcher":{"id":"byName","options":"Workload"},"properties":[{"id":"links","value":[{"title":"Drill down to workloads","url":"/d/a164a7f0339f99e89cea5cb47e9be617?${datasource:queryparam}&var-cluster=$cluster&var-namespace=$namespace&var-type=${__data.fields.Type}&var-workload=${__data.fields.Workload}"}]}]},{"matcher":{"id":"byName","options":"Running Pods"},"properties":[{"id":"unit","value":"none"}]}]},"gridPos":{"h":7,"w":24,"x":0,"y":21},"id":4,"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"count(namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload_type=~\"$type\"}) by (workload, workload_type)","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(\n max by (cluster, namespace, pod, container)(container_memory_working_set_bytes{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=\"$namespace\", container!=\"\", image!=\"\"})\n * on(cluster, 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},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(\n max by (cluster, namespace, pod, container)(kube_pod_container_resource_requests{job=\"kube-state-metrics\", cluster=\"$cluster\", namespace=\"$namespace\", resource=\"memory\"})\n* on(cluster, 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},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(\n max by (cluster, namespace, pod, container)(container_memory_working_set_bytes{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=\"$namespace\", container!=\"\", image!=\"\"})\n * on(cluster, 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 max by (cluster, namespace, pod, container)(kube_pod_container_resource_requests{job=\"kube-state-metrics\", cluster=\"$cluster\", namespace=\"$namespace\", resource=\"memory\"})\n* on(cluster, 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},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(\n max by (cluster, namespace, pod, container)(kube_pod_container_resource_limits{job=\"kube-state-metrics\", cluster=\"$cluster\", namespace=\"$namespace\", resource=\"memory\"})\n* on(cluster, 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},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(\n max by (cluster, namespace, pod, container)(container_memory_working_set_bytes{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=\"$namespace\", container!=\"\", image!=\"\"})\n * on(cluster, 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 max by (cluster, namespace, pod, container)(kube_pod_container_resource_limits{job=\"kube-state-metrics\", cluster=\"$cluster\", namespace=\"$namespace\", resource=\"memory\"})\n* on(cluster, 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}],"title":"Memory Quota","transformations":[{"id":"joinByField","options":{"byField":"workload","mode":"outer"}},{"id":"organize","options":{"excludeByName":{"Time":true,"Time 1":true,"Time 2":true,"Time 3":true,"Time 4":true,"Time 5":true,"Time 6":true,"workload_type 2":true,"workload_type 3":true,"workload_type 4":true,"workload_type 5":true,"workload_type 6":true},"indexByName":{"Time 1":0,"Time 2":1,"Time 3":2,"Time 4":3,"Time 5":4,"Time 6":5,"Value #A":8,"Value #B":9,"Value #C":10,"Value #D":11,"Value #E":12,"Value #F":13,"workload":6,"workload_type 1":7,"workload_type 2":14,"workload_type 3":15,"workload_type 4":16,"workload_type 5":17,"workload_type 6":18},"renameByName":{"Value #A":"Running Pods","Value #B":"Memory Usage","Value #C":"Memory Requests","Value #D":"Memory Requests %","Value #E":"Memory Limits","Value #F":"Memory Limits %","workload":"Workload","workload_type 1":"Type"}}}],"type":"table"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"overrides":[{"matcher":{"id":"byRegexp","options":"/Bandwidth/"},"properties":[{"id":"unit","value":"bps"}]},{"matcher":{"id":"byRegexp","options":"/Packets/"},"properties":[{"id":"unit","value":"pps"}]},{"matcher":{"id":"byName","options":"Workload"},"properties":[{"id":"links","value":[{"title":"Drill down to workloads","url":"/d/a164a7f0339f99e89cea5cb47e9be617?${datasource:queryparam}&var-cluster=$cluster&var-namespace=$namespace&var-type=${__data.fields.Type}&var-workload=${__data.fields.Workload}"}]}]}]},"gridPos":{"h":7,"w":24,"x":0,"y":28},"id":5,"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"(sum((8 * rate(container_network_receive_bytes_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval]))\n* on (cluster, 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},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"(sum((8 * rate(container_network_transmit_bytes_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval]))\n* on (cluster, 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},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"(sum(rate(container_network_receive_packets_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval])\n* on (cluster, 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},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"(sum(rate(container_network_transmit_packets_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval])\n* on (cluster, 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},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"(sum(rate(container_network_receive_packets_dropped_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval])\n* on (cluster, 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},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"(sum(rate(container_network_transmit_packets_dropped_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval])\n* on (cluster, 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}],"title":"Current Network Usage","transformations":[{"id":"joinByField","options":{"byField":"workload","mode":"outer"}},{"id":"organize","options":{"excludeByName":{"Time":true,"Time 1":true,"Time 2":true,"Time 3":true,"Time 4":true,"Time 5":true,"Time 6":true},"indexByName":{"Time 1":0,"Time 2":1,"Time 3":2,"Time 4":3,"Time 5":4,"Time 6":5,"Value #A":7,"Value #B":8,"Value #C":9,"Value #D":10,"Value #E":11,"Value #F":12,"workload":6},"renameByName":{"Value #A":"Current Receive Bandwidth","Value #B":"Current Transmit Bandwidth","Value #C":"Rate of Received Packets","Value #D":"Rate of Transmitted Packets","Value #E":"Rate of Received Packets Dropped","Value #F":"Rate of Transmitted Packets Dropped","workload":"Workload"}}}],"type":"table"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"bps"}},"gridPos":{"h":7,"w":12,"x":0,"y":35},"id":6,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"(sum((8 * rate(container_network_receive_bytes_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval]))\n* on (cluster, 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","legendFormat":"__auto"}],"title":"Receive Bandwidth","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"bps"}},"gridPos":{"h":7,"w":12,"x":12,"y":35},"id":7,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"(sum((8 * rate(container_network_transmit_bytes_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval]))\n* on (cluster, 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","legendFormat":"__auto"}],"title":"Transmit Bandwidth","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"bps"}},"gridPos":{"h":7,"w":12,"x":0,"y":42},"id":8,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"(avg((8 * rate(container_network_receive_bytes_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval]))\n* on (cluster, 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","legendFormat":"__auto"}],"title":"Average Container Bandwidth by Workload: Received","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"bps"}},"gridPos":{"h":7,"w":12,"x":12,"y":42},"id":9,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"(avg((8 * rate(container_network_transmit_bytes_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval]))\n* on (cluster, 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","legendFormat":"__auto"}],"title":"Average Container Bandwidth by Workload: Transmitted","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"pps"}},"gridPos":{"h":7,"w":12,"x":0,"y":49},"id":10,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"(sum(rate(container_network_receive_packets_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval])\n* on (cluster, 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","legendFormat":"__auto"}],"title":"Rate of Received Packets","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"pps"}},"gridPos":{"h":7,"w":12,"x":12,"y":49},"id":11,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"(sum(rate(container_network_transmit_packets_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval])\n* on (cluster, 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","legendFormat":"__auto"}],"title":"Rate of Transmitted Packets","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"pps"}},"gridPos":{"h":7,"w":12,"x":0,"y":56},"id":12,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"(sum(rate(container_network_receive_packets_dropped_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval])\n* on (cluster, 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","legendFormat":"__auto"}],"title":"Rate of Received Packets Dropped","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"pps"}},"gridPos":{"h":7,"w":12,"x":12,"y":56},"id":13,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"(sum(rate(container_network_transmit_packets_dropped_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=\"$namespace\"}[$__rate_interval])\n* on (cluster, 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","legendFormat":"__auto"}],"title":"Rate of Transmitted Packets Dropped","type":"timeseries"}],"refresh":"10s","schemaVersion":39,"tags":["kubernetes-mixin"],"templating":{"list":[{"current":{"selected":true,"text":"default","value":"default"},"hide":0,"label":"Data source","name":"datasource","query":"prometheus","regex":"","type":"datasource"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"hide":`}}{{ if .Values.grafana.sidecar.dashboards.multicluster.global.enabled }}0{{ else }}2{{ end }}{{`,"label":"cluster","name":"cluster","query":"label_values(up{job=\"kube-state-metrics\"}, cluster)","refresh":2,"sort":1,"type":"query","allValue":".*"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"hide":0,"label":"namespace","name":"namespace","query":"label_values(kube_namespace_status_phase{job=\"kube-state-metrics\", cluster=\"$cluster\"}, namespace)","refresh":2,"sort":1,"type":"query"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"hide":0,"includeAll":true,"label":"workload_type","name":"type","query":"label_values(namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload=~\".+\"}, workload_type)","refresh":2,"sort":1,"type":"query"}]},"time":{"from":"now-1h","to":"now"},"timezone": "`}}{{ .Values.grafana.defaultDashboardsTimezone }}{{`","title":"Kubernetes / Compute Resources / Namespace (Workloads)","uid":"a87fb0d919ec0ea5f6543124e16c42a5"}`}} {{- end }} --- {{- if and .Values.grafana.operator.dashboardsConfigMapRefEnabled (or .Values.grafana.enabled .Values.grafana.forceDeployDashboards) (semverCompare ">=1.14.0-0" $kubeTargetVersion) (semverCompare "<9.9.9-9" $kubeTargetVersion) .Values.grafana.defaultDashboardsEnabled }} diff --git a/charts/kube-prometheus-stack/templates/grafana/dashboards-1.14/kubelet.yaml b/charts/kube-prometheus-stack/templates/grafana/dashboards-1.14/kubelet.yaml index d997e34420..9a068951c5 100644 --- a/charts/kube-prometheus-stack/templates/grafana/dashboards-1.14/kubelet.yaml +++ b/charts/kube-prometheus-stack/templates/grafana/dashboards-1.14/kubelet.yaml @@ -1,5 +1,5 @@ {{- /* -Generated from 'kubelet' from https://raw.githubusercontent.com/prometheus-operator/kube-prometheus/eaca1a5fd76b356974054906af46810fec1cd7f8/manifests/grafana-dashboardDefinitions.yaml +Generated from 'kubelet' from https://raw.githubusercontent.com/prometheus-operator/kube-prometheus/4eafa8b5395ef839bb02a55e3b5fbdfa03280cf9/manifests/grafana-dashboardDefinitions.yaml Do not change in-place! In order to change this file first read following link: https://github.com/prometheus-community/helm-charts/tree/main/charts/kube-prometheus-stack/hack */ -}} @@ -21,7 +21,7 @@ metadata: {{- include "kube-prometheus-stack.labels" $ | nindent 4 }} data: kubelet.json: |- - {{`{"editable":`}}{{ .Values.grafana.defaultDashboardsEditable }}{{`,"links":[{"asDropdown":true,"includeVars":true,"keepTime":true,"tags":["kubernetes-mixin"],"targetBlank":false,"title":"Kubernetes","type":"dashboards"}],"panels":[{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"unit":"none"}},"gridPos":{"h":7,"w":4,"x":0,"y":0},"id":1,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"colorMode":"none"},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(kubelet_node_name{cluster=\"$cluster\", job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics\"})","instant":true}],"title":"Running Kubelets","type":"stat"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"unit":"none"}},"gridPos":{"h":7,"w":4,"x":4,"y":0},"id":2,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"colorMode":"none"},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(kubelet_running_pods{cluster=\"$cluster\", job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics\", instance=~\"$instance\"})","instant":true}],"title":"Running Pods","type":"stat"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"unit":"none"}},"gridPos":{"h":7,"w":4,"x":8,"y":0},"id":3,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"colorMode":"none"},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(kubelet_running_containers{cluster=\"$cluster\", job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics\", container_state=\"running\", instance=~\"$instance\"})","instant":true}],"title":"Running Containers","type":"stat"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"unit":"none"}},"gridPos":{"h":7,"w":4,"x":12,"y":0},"id":4,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"colorMode":"none"},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(volume_manager_total_volumes{cluster=\"$cluster\", job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics\", instance=~\"$instance\", state=\"actual_state_of_world\"})","instant":true}],"title":"Actual Volume Count","type":"stat"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"unit":"none"}},"gridPos":{"h":7,"w":4,"x":16,"y":0},"id":5,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"colorMode":"none"},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(volume_manager_total_volumes{cluster=\"$cluster\", job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics\", instance=~\"$instance\",state=\"desired_state_of_world\"})","instant":true}],"title":"Desired Volume Count","type":"stat"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"unit":"none"}},"gridPos":{"h":7,"w":4,"x":20,"y":0},"id":6,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"colorMode":"none"},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(rate(kubelet_node_config_error{cluster=\"$cluster\", job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics\", instance=~\"$instance\"}[$__rate_interval]))","instant":true}],"title":"Config Error Count","type":"stat"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"ops"}},"gridPos":{"h":7,"w":12,"x":0,"y":7},"id":7,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(rate(kubelet_runtime_operations_total{cluster=\"$cluster\",job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics\",instance=~\"$instance\"}[$__rate_interval])) by (operation_type, instance)","legendFormat":"{{instance}} {{operation_type}}"}],"title":"Operation Rate","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"ops"}},"gridPos":{"h":7,"w":12,"x":12,"y":7},"id":8,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(rate(kubelet_runtime_operations_errors_total{cluster=\"$cluster\",job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics\",instance=~\"$instance\"}[$__rate_interval])) by (instance, operation_type)","legendFormat":"{{instance}} {{operation_type}}"}],"title":"Operation Error Rate","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"s"}},"gridPos":{"h":7,"w":24,"x":0,"y":14},"id":9,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"histogram_quantile(0.99, sum(rate(kubelet_runtime_operations_duration_seconds_bucket{cluster=\"$cluster\",job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics\",instance=~\"$instance\"}[$__rate_interval])) by (instance, operation_type, le))","legendFormat":"{{instance}} {{operation_type}}"}],"title":"Operation Duration 99th quantile","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"ops"}},"gridPos":{"h":7,"w":12,"x":0,"y":21},"id":10,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(rate(kubelet_pod_start_duration_seconds_count{cluster=\"$cluster\",job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics\",instance=~\"$instance\"}[$__rate_interval])) by (instance)","legendFormat":"{{instance}} pod"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(rate(kubelet_pod_worker_duration_seconds_count{cluster=\"$cluster\",job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics\",instance=~\"$instance\"}[$__rate_interval])) by (instance)","legendFormat":"{{instance}} worker"}],"title":"Pod Start Rate","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"s"}},"gridPos":{"h":7,"w":12,"x":12,"y":21},"id":11,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"histogram_quantile(0.99, sum(rate(kubelet_pod_start_duration_seconds_bucket{cluster=\"$cluster\",job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics\",instance=~\"$instance\"}[$__rate_interval])) by (instance, le))","legendFormat":"{{instance}} pod"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"histogram_quantile(0.99, sum(rate(kubelet_pod_worker_duration_seconds_bucket{cluster=\"$cluster\",job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics\",instance=~\"$instance\"}[$__rate_interval])) by (instance, le))","legendFormat":"{{instance}} worker"}],"title":"Pod Start Duration","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"ops"}},"gridPos":{"h":7,"w":12,"x":0,"y":28},"id":12,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(rate(storage_operation_duration_seconds_count{cluster=\"$cluster\",job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics\",instance=~\"$instance\"}[$__rate_interval])) by (instance, operation_name, volume_plugin)","legendFormat":"{{instance}} {{operation_name}} {{volume_plugin}}"}],"title":"Storage Operation Rate","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"ops"}},"gridPos":{"h":7,"w":12,"x":12,"y":28},"id":13,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(rate(storage_operation_errors_total{cluster=\"$cluster\",job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics\",instance=~\"$instance\"}[$__rate_interval])) by (instance, operation_name, volume_plugin)","legendFormat":"{{instance}} {{operation_name}} {{volume_plugin}}"}],"title":"Storage Operation Error Rate","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"s"}},"gridPos":{"h":7,"w":24,"x":0,"y":35},"id":14,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"histogram_quantile(0.99, sum(rate(storage_operation_duration_seconds_bucket{cluster=\"$cluster\", job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics\", instance=~\"$instance\"}[$__rate_interval])) by (instance, operation_name, volume_plugin, le))","legendFormat":"{{instance}} {{operation_name}} {{volume_plugin}}"}],"title":"Storage Operation Duration 99th quantile","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"ops"}},"gridPos":{"h":7,"w":12,"x":0,"y":42},"id":15,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(rate(kubelet_cgroup_manager_duration_seconds_count{cluster=\"$cluster\", job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics\", instance=~\"$instance\"}[$__rate_interval])) by (instance, operation_type)","legendFormat":"{{operation_type}}"}],"title":"Cgroup manager operation rate","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"s"}},"gridPos":{"h":7,"w":12,"x":12,"y":42},"id":16,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"histogram_quantile(0.99, sum(rate(kubelet_cgroup_manager_duration_seconds_bucket{cluster=\"$cluster\", job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics\", instance=~\"$instance\"}[$__rate_interval])) by (instance, operation_type, le))","legendFormat":"{{instance}} {{operation_type}}"}],"title":"Cgroup manager 99th quantile","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"ops"}},"gridPos":{"h":7,"w":12,"x":0,"y":49},"id":17,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(rate(kubelet_pleg_relist_duration_seconds_count{cluster=\"$cluster\", job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics\", instance=~\"$instance\"}[$__rate_interval])) by (instance)","legendFormat":"{{instance}}"}],"title":"PLEG relist rate","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"s"}},"gridPos":{"h":7,"w":12,"x":12,"y":49},"id":18,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"histogram_quantile(0.99, sum(rate(kubelet_pleg_relist_interval_seconds_bucket{cluster=\"$cluster\",job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics\",instance=~\"$instance\"}[$__rate_interval])) by (instance, le))","legendFormat":"{{instance}}"}],"title":"PLEG relist interval","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"s"}},"gridPos":{"h":7,"w":24,"x":0,"y":56},"id":19,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"histogram_quantile(0.99, sum(rate(kubelet_pleg_relist_duration_seconds_bucket{cluster=\"$cluster\",job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics\",instance=~\"$instance\"}[$__rate_interval])) by (instance, le))","legendFormat":"{{instance}}"}],"title":"PLEG relist duration","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"ops"}},"gridPos":{"h":7,"w":24,"x":0,"y":63},"id":20,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(rate(rest_client_requests_total{cluster=\"$cluster\",job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics\", instance=~\"$instance\",code=~\"2..\"}[$__rate_interval]))","legendFormat":"2xx"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(rate(rest_client_requests_total{cluster=\"$cluster\",job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics\", instance=~\"$instance\",code=~\"3..\"}[$__rate_interval]))","legendFormat":"3xx"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(rate(rest_client_requests_total{cluster=\"$cluster\",job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics\", instance=~\"$instance\",code=~\"4..\"}[$__rate_interval]))","legendFormat":"4xx"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(rate(rest_client_requests_total{cluster=\"$cluster\",job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics\", instance=~\"$instance\",code=~\"5..\"}[$__rate_interval]))","legendFormat":"5xx"}],"title":"RPC rate","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"s"}},"gridPos":{"h":7,"w":24,"x":0,"y":70},"id":21,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"histogram_quantile(0.99, sum(rate(rest_client_request_duration_seconds_bucket{cluster=\"$cluster\",job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics\", instance=~\"$instance\"}[$__rate_interval])) by (instance, verb, le))","legendFormat":"{{instance}} {{verb}}"}],"title":"Request duration 99th quantile","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"bytes"}},"gridPos":{"h":7,"w":8,"x":0,"y":77},"id":22,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"process_resident_memory_bytes{cluster=\"$cluster\",job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics\",instance=~\"$instance\"}","legendFormat":"{{instance}}"}],"title":"Memory","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"short"}},"gridPos":{"h":7,"w":8,"x":8,"y":77},"id":23,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"rate(process_cpu_seconds_total{cluster=\"$cluster\",job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics\",instance=~\"$instance\"}[$__rate_interval])","legendFormat":"{{instance}}"}],"title":"CPU usage","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"short"}},"gridPos":{"h":7,"w":8,"x":16,"y":77},"id":24,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"go_goroutines{cluster=\"$cluster\",job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics\",instance=~\"$instance\"}","legendFormat":"{{instance}}"}],"title":"Goroutines","type":"timeseries"}],"refresh":"10s","schemaVersion":39,"tags":["kubernetes-mixin"],"templating":{"list":[{"current":{"selected":true,"text":"default","value":"default"},"hide":0,"label":"Data source","name":"datasource","query":"prometheus","regex":"","type":"datasource"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"hide":`}}{{ if .Values.grafana.sidecar.dashboards.multicluster.global.enabled }}0{{ else }}2{{ end }}{{`,"label":"cluster","name":"cluster","query":"label_values(up{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics\"}, cluster)","refresh":2,"sort":1,"type":"query","allValue":".*"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"hide":0,"includeAll":true,"label":"instance","name":"instance","query":"label_values(up{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics\",cluster=\"$cluster\"}, instance)","refresh":2,"type":"query"}]},"time":{"from":"now-1h","to":"now"},"timezone": "`}}{{ .Values.grafana.defaultDashboardsTimezone }}{{`","title":"Kubernetes / Kubelet","uid":"3138fa155d5915769fbded898ac09fd9"}`}} + {{`{"editable":`}}{{ .Values.grafana.defaultDashboardsEditable }}{{`,"links":[{"asDropdown":true,"includeVars":true,"keepTime":true,"tags":["kubernetes-mixin"],"targetBlank":false,"title":"Kubernetes","type":"dashboards"}],"panels":[{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"unit":"none"}},"gridPos":{"h":7,"w":4,"x":0,"y":0},"id":1,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"colorMode":"none"},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(kubelet_node_name{cluster=\"$cluster\", job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics\"})","instant":true}],"title":"Running Kubelets","type":"stat"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"unit":"none"}},"gridPos":{"h":7,"w":4,"x":4,"y":0},"id":2,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"colorMode":"none"},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(kubelet_running_pods{cluster=\"$cluster\", job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics\", instance=~\"$instance\"})","instant":true}],"title":"Running Pods","type":"stat"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"unit":"none"}},"gridPos":{"h":7,"w":4,"x":8,"y":0},"id":3,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"colorMode":"none"},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(kubelet_running_containers{cluster=\"$cluster\", job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics\", container_state=\"running\", instance=~\"$instance\"})","instant":true}],"title":"Running Containers","type":"stat"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"unit":"none"}},"gridPos":{"h":7,"w":4,"x":12,"y":0},"id":4,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"colorMode":"none"},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(volume_manager_total_volumes{cluster=\"$cluster\", job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics\", instance=~\"$instance\", state=\"actual_state_of_world\"})","instant":true}],"title":"Actual Volume Count","type":"stat"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"unit":"none"}},"gridPos":{"h":7,"w":4,"x":16,"y":0},"id":5,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"colorMode":"none"},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(volume_manager_total_volumes{cluster=\"$cluster\", job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics\", instance=~\"$instance\",state=\"desired_state_of_world\"})","instant":true}],"title":"Desired Volume Count","type":"stat"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"unit":"none"}},"gridPos":{"h":7,"w":4,"x":20,"y":0},"id":6,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"colorMode":"none"},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(rate(kubelet_node_config_error{cluster=\"$cluster\", job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics\", instance=~\"$instance\"}[$__rate_interval]))","instant":true}],"title":"Config Error Count","type":"stat"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"ops"}},"gridPos":{"h":7,"w":12,"x":0,"y":7},"id":7,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(rate(kubelet_runtime_operations_total{cluster=\"$cluster\",job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics\",instance=~\"$instance\"}[$__rate_interval])) by (operation_type, instance)","legendFormat":"{{instance}} {{operation_type}}"}],"title":"Operation Rate","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"ops"}},"gridPos":{"h":7,"w":12,"x":12,"y":7},"id":8,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(rate(kubelet_runtime_operations_errors_total{cluster=\"$cluster\",job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics\",instance=~\"$instance\"}[$__rate_interval])) by (instance, operation_type)","legendFormat":"{{instance}} {{operation_type}}"}],"title":"Operation Error Rate","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"s"}},"gridPos":{"h":7,"w":24,"x":0,"y":14},"id":9,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"histogram_quantile(0.99, sum(rate(kubelet_runtime_operations_duration_seconds_bucket{cluster=\"$cluster\",job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics\",instance=~\"$instance\"}[$__rate_interval])) by (instance, operation_type, le))","legendFormat":"{{instance}} {{operation_type}}"}],"title":"Operation Duration 99th quantile","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"ops"}},"gridPos":{"h":7,"w":12,"x":0,"y":21},"id":10,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(rate(kubelet_pod_start_duration_seconds_count{cluster=\"$cluster\",job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics\",instance=~\"$instance\"}[$__rate_interval])) by (instance)","legendFormat":"{{instance}} pod"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(rate(kubelet_pod_worker_duration_seconds_count{cluster=\"$cluster\",job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics\",instance=~\"$instance\"}[$__rate_interval])) by (instance)","legendFormat":"{{instance}} worker"}],"title":"Pod Start Rate","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"s"}},"gridPos":{"h":7,"w":12,"x":12,"y":21},"id":11,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"histogram_quantile(0.99, sum(rate(kubelet_pod_start_duration_seconds_bucket{cluster=\"$cluster\",job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics\",instance=~\"$instance\"}[$__rate_interval])) by (instance, le))","legendFormat":"{{instance}} pod"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"histogram_quantile(0.99, sum(rate(kubelet_pod_worker_duration_seconds_bucket{cluster=\"$cluster\",job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics\",instance=~\"$instance\"}[$__rate_interval])) by (instance, le))","legendFormat":"{{instance}} worker"}],"title":"Pod Start Duration","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"ops"}},"gridPos":{"h":7,"w":12,"x":0,"y":28},"id":12,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(rate(storage_operation_duration_seconds_count{cluster=\"$cluster\",job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics\",instance=~\"$instance\"}[$__rate_interval])) by (instance, operation_name, volume_plugin)","legendFormat":"{{instance}} {{operation_name}} {{volume_plugin}}"}],"title":"Storage Operation Rate","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"ops"}},"gridPos":{"h":7,"w":12,"x":12,"y":28},"id":13,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(rate(storage_operation_errors_total{cluster=\"$cluster\",job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics\",instance=~\"$instance\"}[$__rate_interval])) by (instance, operation_name, volume_plugin)","legendFormat":"{{instance}} {{operation_name}} {{volume_plugin}}"}],"title":"Storage Operation Error Rate","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"s"}},"gridPos":{"h":7,"w":24,"x":0,"y":35},"id":14,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"histogram_quantile(0.99, sum(rate(storage_operation_duration_seconds_bucket{cluster=\"$cluster\", job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics\", instance=~\"$instance\"}[$__rate_interval])) by (instance, operation_name, volume_plugin, le))","legendFormat":"{{instance}} {{operation_name}} {{volume_plugin}}"}],"title":"Storage Operation Duration 99th quantile","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"ops"}},"gridPos":{"h":7,"w":12,"x":0,"y":42},"id":15,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(rate(kubelet_cgroup_manager_duration_seconds_count{cluster=\"$cluster\", job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics\", instance=~\"$instance\"}[$__rate_interval])) by (instance, operation_type)","legendFormat":"{{operation_type}}"}],"title":"Cgroup manager operation rate","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"s"}},"gridPos":{"h":7,"w":12,"x":12,"y":42},"id":16,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"histogram_quantile(0.99, sum(rate(kubelet_cgroup_manager_duration_seconds_bucket{cluster=\"$cluster\", job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics\", instance=~\"$instance\"}[$__rate_interval])) by (instance, operation_type, le))","legendFormat":"{{instance}} {{operation_type}}"}],"title":"Cgroup manager 99th quantile","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"ops"}},"gridPos":{"h":7,"w":12,"x":0,"y":49},"id":17,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(rate(kubelet_pleg_relist_duration_seconds_count{cluster=\"$cluster\", job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics\", instance=~\"$instance\"}[$__rate_interval])) by (instance)","legendFormat":"{{instance}}"}],"title":"PLEG relist rate","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"s"}},"gridPos":{"h":7,"w":12,"x":12,"y":49},"id":18,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"histogram_quantile(0.99, sum(rate(kubelet_pleg_relist_interval_seconds_bucket{cluster=\"$cluster\",job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics\",instance=~\"$instance\"}[$__rate_interval])) by (instance, le))","legendFormat":"{{instance}}"}],"title":"PLEG relist interval","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"s"}},"gridPos":{"h":7,"w":24,"x":0,"y":56},"id":19,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"histogram_quantile(0.99, sum(rate(kubelet_pleg_relist_duration_seconds_bucket{cluster=\"$cluster\",job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics\",instance=~\"$instance\"}[$__rate_interval])) by (instance, le))","legendFormat":"{{instance}}"}],"title":"PLEG relist duration","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"ops"}},"gridPos":{"h":7,"w":24,"x":0,"y":63},"id":20,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(rate(rest_client_requests_total{cluster=\"$cluster\",job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics\", instance=~\"$instance\",code=~\"2..\"}[$__rate_interval]))","legendFormat":"2xx"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(rate(rest_client_requests_total{cluster=\"$cluster\",job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics\", instance=~\"$instance\",code=~\"3..\"}[$__rate_interval]))","legendFormat":"3xx"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(rate(rest_client_requests_total{cluster=\"$cluster\",job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics\", instance=~\"$instance\",code=~\"4..\"}[$__rate_interval]))","legendFormat":"4xx"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(rate(rest_client_requests_total{cluster=\"$cluster\",job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics\", instance=~\"$instance\",code=~\"5..\"}[$__rate_interval]))","legendFormat":"5xx"}],"title":"RPC rate","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"s"}},"gridPos":{"h":7,"w":24,"x":0,"y":70},"id":21,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"histogram_quantile(0.99, sum(rate(rest_client_request_duration_seconds_bucket{cluster=\"$cluster\",job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics\", instance=~\"$instance\"}[$__rate_interval])) by (instance, verb, le))","legendFormat":"{{instance}} {{verb}}"}],"title":"Request duration 99th quantile","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"bytes"}},"gridPos":{"h":7,"w":8,"x":0,"y":77},"id":22,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"process_resident_memory_bytes{cluster=\"$cluster\",job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics\",instance=~\"$instance\"}","legendFormat":"{{instance}}"}],"title":"Memory","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"short"}},"gridPos":{"h":7,"w":8,"x":8,"y":77},"id":23,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"rate(process_cpu_seconds_total{cluster=\"$cluster\",job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics\",instance=~\"$instance\"}[$__rate_interval])","legendFormat":"{{instance}}"}],"title":"CPU usage","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"short"}},"gridPos":{"h":7,"w":8,"x":16,"y":77},"id":24,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"go_goroutines{cluster=\"$cluster\",job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics\",instance=~\"$instance\"}","legendFormat":"{{instance}}"}],"title":"Goroutines","type":"timeseries"}],"refresh":"10s","schemaVersion":39,"tags":["kubernetes-mixin"],"templating":{"list":[{"current":{"selected":true,"text":"default","value":"default"},"hide":0,"label":"Data source","name":"datasource","query":"prometheus","regex":"","type":"datasource"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"hide":`}}{{ if .Values.grafana.sidecar.dashboards.multicluster.global.enabled }}0{{ else }}2{{ end }}{{`,"label":"cluster","name":"cluster","query":"label_values(up{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics\"}, cluster)","refresh":2,"sort":1,"type":"query","allValue":".*"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"hide":0,"includeAll":true,"label":"instance","name":"instance","query":"label_values(up{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics\",cluster=\"$cluster\"}, instance)","refresh":2,"type":"query"}]},"time":{"from":"now-1h","to":"now"},"timezone": "`}}{{ .Values.grafana.defaultDashboardsTimezone }}{{`","title":"Kubernetes / Kubelet","uid":"3138fa155d5915769fbded898ac09fd9"}`}} {{- end }} --- {{- if and .Values.grafana.operator.dashboardsConfigMapRefEnabled (or .Values.grafana.enabled .Values.grafana.forceDeployDashboards) (semverCompare ">=1.14.0-0" $kubeTargetVersion) (semverCompare "<9.9.9-9" $kubeTargetVersion) .Values.grafana.defaultDashboardsEnabled .Values.kubelet.enabled }} diff --git a/charts/kube-prometheus-stack/templates/grafana/dashboards-1.14/namespace-by-pod.yaml b/charts/kube-prometheus-stack/templates/grafana/dashboards-1.14/namespace-by-pod.yaml index 9baaebbce6..748a3b1ed3 100644 --- a/charts/kube-prometheus-stack/templates/grafana/dashboards-1.14/namespace-by-pod.yaml +++ b/charts/kube-prometheus-stack/templates/grafana/dashboards-1.14/namespace-by-pod.yaml @@ -1,5 +1,5 @@ {{- /* -Generated from 'namespace-by-pod' from https://raw.githubusercontent.com/prometheus-operator/kube-prometheus/eaca1a5fd76b356974054906af46810fec1cd7f8/manifests/grafana-dashboardDefinitions.yaml +Generated from 'namespace-by-pod' from https://raw.githubusercontent.com/prometheus-operator/kube-prometheus/4eafa8b5395ef839bb02a55e3b5fbdfa03280cf9/manifests/grafana-dashboardDefinitions.yaml Do not change in-place! In order to change this file first read following link: https://github.com/prometheus-community/helm-charts/tree/main/charts/kube-prometheus-stack/hack */ -}} @@ -21,7 +21,7 @@ metadata: {{- include "kube-prometheus-stack.labels" $ | nindent 4 }} data: namespace-by-pod.json: |- - {{`{"editable":`}}{{ .Values.grafana.defaultDashboardsEditable }}{{`,"links":[{"asDropdown":true,"includeVars":true,"keepTime":true,"tags":["kubernetes-mixin"],"targetBlank":false,"title":"Kubernetes","type":"dashboards"}],"panels":[{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"displayName":"$namespace","max":10000000000,"min":0,"thresholds":{"steps":[{"color":"dark-green","index":0,"value":null},{"color":"dark-yellow","index":1,"value":5000000000},{"color":"dark-red","index":2,"value":7000000000}]},"unit":"bps"}},"gridPos":{"h":9,"w":12,"x":0,"y":0},"id":1,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum (\n (8 * rate(container_network_receive_bytes_total{cluster=\"$cluster\",namespace=~\"$namespace\"}[$__rate_interval]))\n * on (cluster,namespace,pod) group_left ()\n topk by (cluster,namespace,pod) (\n 1,\n max by (cluster,namespace,pod) (kube_pod_info{host_network=\"false\"})\n )\n)\n","legendFormat":"__auto"}],"title":"Current Rate of Bits Received","type":"gauge"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"displayName":"$namespace","max":10000000000,"min":0,"thresholds":{"steps":[{"color":"dark-green","index":0,"value":null},{"color":"dark-yellow","index":1,"value":5000000000},{"color":"dark-red","index":2,"value":7000000000}]},"unit":"bps"}},"gridPos":{"h":9,"w":12,"x":12,"y":0},"id":2,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum (\n (8 * rate(container_network_transmit_bytes_total{cluster=\"$cluster\",namespace=~\"$namespace\"}[$__rate_interval]))\n * on (cluster,namespace,pod) group_left ()\n topk by (cluster,namespace,pod) (\n 1,\n max by (cluster,namespace,pod) (kube_pod_info{host_network=\"false\"})\n )\n)\n","legendFormat":"__auto"}],"title":"Current Rate of Bits Transmitted","type":"gauge"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"overrides":[{"matcher":{"id":"byRegexp","options":"/Bandwidth/"},"properties":[{"id":"unit","value":"bps"}]},{"matcher":{"id":"byRegexp","options":"/Packets/"},"properties":[{"id":"unit","value":"pps"}]},{"matcher":{"id":"byName","options":"Pod"},"properties":[{"id":"links","value":[{"title":"Drill down","url":"/d/7a18067ce943a40ae25454675c19ff5c?${datasource:queryparam}&var-cluster=${cluster}&var-namespace=${namespace}&var-pod=${__data.fields.Pod}"}]}]}]},"gridPos":{"h":9,"w":24,"x":0,"y":9},"id":3,"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum by (pod) (\n (8 * rate(container_network_receive_bytes_total{cluster=\"$cluster\",namespace=~\"$namespace\"}[$__rate_interval]))\n * on (cluster,namespace,pod) group_left ()\n topk by (cluster,namespace,pod) (\n 1,\n max by (cluster,namespace,pod) (kube_pod_info{host_network=\"false\"})\n )\n)\n","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum by (pod) (\n (8 * rate(container_network_transmit_bytes_total{cluster=\"$cluster\",namespace=~\"$namespace\"}[$__rate_interval]))\n * on (cluster,namespace,pod) group_left ()\n topk by (cluster,namespace,pod) (\n 1,\n max by (cluster,namespace,pod) (kube_pod_info{host_network=\"false\"})\n )\n)\n","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum by (pod) (\n rate(container_network_receive_packets_total{cluster=\"$cluster\",namespace=~\"$namespace\"}[$__rate_interval])\n * on (cluster,namespace,pod) group_left ()\n topk by (cluster,namespace,pod) (\n 1,\n max by (cluster,namespace,pod) (kube_pod_info{host_network=\"false\"})\n )\n)\n","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum by (pod) (\n rate(container_network_transmit_packets_total{cluster=\"$cluster\",namespace=~\"$namespace\"}[$__rate_interval])\n * on (cluster,namespace,pod) group_left ()\n topk by (cluster,namespace,pod) (\n 1,\n max by (cluster,namespace,pod) (kube_pod_info{host_network=\"false\"})\n )\n)\n","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum by (pod) (\n rate(container_network_receive_packets_dropped_total{cluster=\"$cluster\",namespace=~\"$namespace\"}[$__rate_interval])\n * on (cluster,namespace,pod) group_left ()\n topk by (cluster,namespace,pod) (\n 1,\n max by (cluster,namespace,pod) (kube_pod_info{host_network=\"false\"})\n )\n)\n","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum by (pod) (\n rate(container_network_transmit_packets_dropped_total{cluster=\"$cluster\",namespace=~\"$namespace\"}[$__rate_interval])\n * on (cluster,namespace,pod) group_left ()\n topk by (cluster,namespace,pod) (\n 1,\n max by (cluster,namespace,pod) (kube_pod_info{host_network=\"false\"})\n )\n)\n","format":"table","instant":true}],"title":"Current Network Usage","transformations":[{"id":"joinByField","options":{"byField":"pod","mode":"outer"}},{"id":"organize","options":{"excludeByName":{"Time":true,"Time 1":true,"Time 2":true,"Time 3":true,"Time 4":true,"Time 5":true,"Time 6":true},"indexByName":{"Time 1":0,"Time 2":1,"Time 3":2,"Time 4":3,"Time 5":4,"Time 6":5,"Value #A":7,"Value #B":8,"Value #C":9,"Value #D":10,"Value #E":11,"Value #F":12,"pod":6},"renameByName":{"Value #A":"Current Receive Bandwidth","Value #B":"Current Transmit Bandwidth","Value #C":"Rate of Received Packets","Value #D":"Rate of Transmitted Packets","Value #E":"Rate of Received Packets Dropped","Value #F":"Rate of Transmitted Packets Dropped","pod":"Pod"}}}],"type":"table"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"showPoints":"never"},"unit":"bps"}},"gridPos":{"h":9,"w":12,"x":0,"y":18},"id":4,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum by (pod) (\n (8 * rate(container_network_receive_bytes_total{cluster=\"$cluster\",namespace=~\"$namespace\"}[$__rate_interval]))\n * on (cluster,namespace,pod) group_left ()\n topk by (cluster,namespace,pod) (\n 1,\n max by (cluster,namespace,pod) (kube_pod_info{host_network=\"false\"})\n )\n)\n","legendFormat":"__auto"}],"title":"Receive Bandwidth","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"showPoints":"never"},"unit":"bps"}},"gridPos":{"h":9,"w":12,"x":12,"y":18},"id":5,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum by (pod) (\n (8 * rate(container_network_transmit_bytes_total{cluster=\"$cluster\",namespace=~\"$namespace\"}[$__rate_interval]))\n * on (cluster,namespace,pod) group_left ()\n topk by (cluster,namespace,pod) (\n 1,\n max by (cluster,namespace,pod) (kube_pod_info{host_network=\"false\"})\n )\n)\n","legendFormat":"__auto"}],"title":"Transmit Bandwidth","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"showPoints":"never"},"unit":"pps"}},"gridPos":{"h":9,"w":12,"x":0,"y":27},"id":6,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum by (pod) (\n rate(container_network_receive_packets_total{cluster=\"$cluster\",namespace=~\"$namespace\"}[$__rate_interval])\n * on (cluster,namespace,pod) group_left ()\n topk by (cluster,namespace,pod) (\n 1,\n max by (cluster,namespace,pod) (kube_pod_info{host_network=\"false\"})\n )\n)\n","legendFormat":"__auto"}],"title":"Rate of Received Packets","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"showPoints":"never"},"unit":"pps"}},"gridPos":{"h":9,"w":12,"x":12,"y":27},"id":7,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum by (pod) (\n rate(container_network_transmit_packets_total{cluster=\"$cluster\",namespace=~\"$namespace\"}[$__rate_interval])\n * on (cluster,namespace,pod) group_left ()\n topk by (cluster,namespace,pod) (\n 1,\n max by (cluster,namespace,pod) (kube_pod_info{host_network=\"false\"})\n )\n)\n","legendFormat":"__auto"}],"title":"Rate of Transmitted Packets","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"showPoints":"never"},"unit":"pps"}},"gridPos":{"h":9,"w":12,"x":0,"y":36},"id":8,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum by (pod) (\n rate(container_network_receive_packets_dropped_total{cluster=\"$cluster\",namespace!=\"\"}[$__rate_interval])\n * on (cluster,namespace,pod) group_left ()\n topk by (cluster,namespace,pod) (\n 1,\n max by (cluster,namespace,pod) (kube_pod_info{host_network=\"false\"})\n )\n)\n","legendFormat":"__auto"}],"title":"Rate of Received Packets Dropped","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"showPoints":"never"},"unit":"pps"}},"gridPos":{"h":9,"w":12,"x":12,"y":36},"id":9,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum by (pod) (\n rate(container_network_transmit_packets_dropped_total{cluster=\"$cluster\",namespace=~\"$namespace\"}[$__rate_interval])\n * on (cluster,namespace,pod) group_left ()\n topk by (cluster,namespace,pod) (\n 1,\n max by (cluster,namespace,pod) (kube_pod_info{host_network=\"false\"})\n )\n)\n","legendFormat":"__auto"}],"title":"Rate of Transmitted Packets Dropped","type":"timeseries"}],"refresh":"10s","schemaVersion":39,"tags":["kubernetes-mixin"],"templating":{"list":[{"current":{"selected":true,"text":"default","value":"default"},"hide":0,"label":"Data source","name":"datasource","query":"prometheus","regex":"","type":"datasource"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"hide":`}}{{ if .Values.grafana.sidecar.dashboards.multicluster.global.enabled }}0{{ else }}2{{ end }}{{`,"label":"cluster","name":"cluster","query":"label_values(up{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\"}, cluster)","refresh":2,"sort":1,"type":"query","allValue":".*"},{"allValue":".+","current":{"selected":false,"text":"kube-system","value":"kube-system"},"datasource":{"type":"prometheus","uid":"${datasource}"},"hide":0,"includeAll":true,"label":"namespace","name":"namespace","query":"label_values(container_network_receive_packets_total{cluster=\"$cluster\"}, namespace)","refresh":2,"sort":1,"type":"query"}]},"time":{"from":"now-1h","to":"now"},"timezone": "`}}{{ .Values.grafana.defaultDashboardsTimezone }}{{`","title":"Kubernetes / Networking / Namespace (Pods)","uid":"8b7a8b326d7a6f1f04244066368c67af"}`}} + {{`{"editable":`}}{{ .Values.grafana.defaultDashboardsEditable }}{{`,"links":[{"asDropdown":true,"includeVars":true,"keepTime":true,"tags":["kubernetes-mixin"],"targetBlank":false,"title":"Kubernetes","type":"dashboards"}],"panels":[{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"displayName":"$namespace","max":10000000000,"min":0,"thresholds":{"steps":[{"color":"dark-green","index":0,"value":null},{"color":"dark-yellow","index":1,"value":5000000000},{"color":"dark-red","index":2,"value":7000000000}]},"unit":"bps"}},"gridPos":{"h":9,"w":12,"x":0,"y":0},"id":1,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum (\n (8 * rate(container_network_receive_bytes_total{cluster=\"$cluster\",namespace=~\"$namespace\"}[$__rate_interval]))\n * on (cluster,namespace,pod) group_left ()\n topk by (cluster,namespace,pod) (\n 1,\n max by (cluster,namespace,pod) (kube_pod_info{host_network=\"false\"})\n )\n)\n","legendFormat":"__auto"}],"title":"Current Rate of Bits Received","type":"gauge"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"displayName":"$namespace","max":10000000000,"min":0,"thresholds":{"steps":[{"color":"dark-green","index":0,"value":null},{"color":"dark-yellow","index":1,"value":5000000000},{"color":"dark-red","index":2,"value":7000000000}]},"unit":"bps"}},"gridPos":{"h":9,"w":12,"x":12,"y":0},"id":2,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum (\n (8 * rate(container_network_transmit_bytes_total{cluster=\"$cluster\",namespace=~\"$namespace\"}[$__rate_interval]))\n * on (cluster,namespace,pod) group_left ()\n topk by (cluster,namespace,pod) (\n 1,\n max by (cluster,namespace,pod) (kube_pod_info{host_network=\"false\"})\n )\n)\n","legendFormat":"__auto"}],"title":"Current Rate of Bits Transmitted","type":"gauge"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"overrides":[{"matcher":{"id":"byRegexp","options":"/Bandwidth/"},"properties":[{"id":"unit","value":"bps"}]},{"matcher":{"id":"byRegexp","options":"/Packets/"},"properties":[{"id":"unit","value":"pps"}]},{"matcher":{"id":"byName","options":"Pod"},"properties":[{"id":"links","value":[{"title":"Drill down","url":"/d/7a18067ce943a40ae25454675c19ff5c?${datasource:queryparam}&var-cluster=${cluster}&var-namespace=${namespace}&var-pod=${__data.fields.Pod}"}]}]}]},"gridPos":{"h":9,"w":24,"x":0,"y":9},"id":3,"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum by (pod) (\n (8 * rate(container_network_receive_bytes_total{cluster=\"$cluster\",namespace=~\"$namespace\"}[$__rate_interval]))\n * on (cluster,namespace,pod) group_left ()\n topk by (cluster,namespace,pod) (\n 1,\n max by (cluster,namespace,pod) (kube_pod_info{host_network=\"false\"})\n )\n)\n","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum by (pod) (\n (8 * rate(container_network_transmit_bytes_total{cluster=\"$cluster\",namespace=~\"$namespace\"}[$__rate_interval]))\n * on (cluster,namespace,pod) group_left ()\n topk by (cluster,namespace,pod) (\n 1,\n max by (cluster,namespace,pod) (kube_pod_info{host_network=\"false\"})\n )\n)\n","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum by (pod) (\n rate(container_network_receive_packets_total{cluster=\"$cluster\",namespace=~\"$namespace\"}[$__rate_interval])\n * on (cluster,namespace,pod) group_left ()\n topk by (cluster,namespace,pod) (\n 1,\n max by (cluster,namespace,pod) (kube_pod_info{host_network=\"false\"})\n )\n)\n","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum by (pod) (\n rate(container_network_transmit_packets_total{cluster=\"$cluster\",namespace=~\"$namespace\"}[$__rate_interval])\n * on (cluster,namespace,pod) group_left ()\n topk by (cluster,namespace,pod) (\n 1,\n max by (cluster,namespace,pod) (kube_pod_info{host_network=\"false\"})\n )\n)\n","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum by (pod) (\n rate(container_network_receive_packets_dropped_total{cluster=\"$cluster\",namespace=~\"$namespace\"}[$__rate_interval])\n * on (cluster,namespace,pod) group_left ()\n topk by (cluster,namespace,pod) (\n 1,\n max by (cluster,namespace,pod) (kube_pod_info{host_network=\"false\"})\n )\n)\n","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum by (pod) (\n rate(container_network_transmit_packets_dropped_total{cluster=\"$cluster\",namespace=~\"$namespace\"}[$__rate_interval])\n * on (cluster,namespace,pod) group_left ()\n topk by (cluster,namespace,pod) (\n 1,\n max by (cluster,namespace,pod) (kube_pod_info{host_network=\"false\"})\n )\n)\n","format":"table","instant":true}],"title":"Current Network Usage","transformations":[{"id":"joinByField","options":{"byField":"pod","mode":"outer"}},{"id":"organize","options":{"excludeByName":{"Time":true,"Time 1":true,"Time 2":true,"Time 3":true,"Time 4":true,"Time 5":true,"Time 6":true},"indexByName":{"Time 1":0,"Time 2":1,"Time 3":2,"Time 4":3,"Time 5":4,"Time 6":5,"Value #A":7,"Value #B":8,"Value #C":9,"Value #D":10,"Value #E":11,"Value #F":12,"pod":6},"renameByName":{"Value #A":"Current Receive Bandwidth","Value #B":"Current Transmit Bandwidth","Value #C":"Rate of Received Packets","Value #D":"Rate of Transmitted Packets","Value #E":"Rate of Received Packets Dropped","Value #F":"Rate of Transmitted Packets Dropped","pod":"Pod"}}}],"type":"table"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"showPoints":"never"},"unit":"bps"}},"gridPos":{"h":9,"w":12,"x":0,"y":18},"id":4,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum by (pod) (\n (8 * rate(container_network_receive_bytes_total{cluster=\"$cluster\",namespace=~\"$namespace\"}[$__rate_interval]))\n * on (cluster,namespace,pod) group_left ()\n topk by (cluster,namespace,pod) (\n 1,\n max by (cluster,namespace,pod) (kube_pod_info{host_network=\"false\"})\n )\n)\n","legendFormat":"__auto"}],"title":"Receive Bandwidth","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"showPoints":"never"},"unit":"bps"}},"gridPos":{"h":9,"w":12,"x":12,"y":18},"id":5,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum by (pod) (\n (8 * rate(container_network_transmit_bytes_total{cluster=\"$cluster\",namespace=~\"$namespace\"}[$__rate_interval]))\n * on (cluster,namespace,pod) group_left ()\n topk by (cluster,namespace,pod) (\n 1,\n max by (cluster,namespace,pod) (kube_pod_info{host_network=\"false\"})\n )\n)\n","legendFormat":"__auto"}],"title":"Transmit Bandwidth","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"showPoints":"never"},"unit":"pps"}},"gridPos":{"h":9,"w":12,"x":0,"y":27},"id":6,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum by (pod) (\n rate(container_network_receive_packets_total{cluster=\"$cluster\",namespace=~\"$namespace\"}[$__rate_interval])\n * on (cluster,namespace,pod) group_left ()\n topk by (cluster,namespace,pod) (\n 1,\n max by (cluster,namespace,pod) (kube_pod_info{host_network=\"false\"})\n )\n)\n","legendFormat":"__auto"}],"title":"Rate of Received Packets","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"showPoints":"never"},"unit":"pps"}},"gridPos":{"h":9,"w":12,"x":12,"y":27},"id":7,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum by (pod) (\n rate(container_network_transmit_packets_total{cluster=\"$cluster\",namespace=~\"$namespace\"}[$__rate_interval])\n * on (cluster,namespace,pod) group_left ()\n topk by (cluster,namespace,pod) (\n 1,\n max by (cluster,namespace,pod) (kube_pod_info{host_network=\"false\"})\n )\n)\n","legendFormat":"__auto"}],"title":"Rate of Transmitted Packets","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"showPoints":"never"},"unit":"pps"}},"gridPos":{"h":9,"w":12,"x":0,"y":36},"id":8,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum by (pod) (\n rate(container_network_receive_packets_dropped_total{cluster=\"$cluster\",namespace!=\"\"}[$__rate_interval])\n * on (cluster,namespace,pod) group_left ()\n topk by (cluster,namespace,pod) (\n 1,\n max by (cluster,namespace,pod) (kube_pod_info{host_network=\"false\"})\n )\n)\n","legendFormat":"__auto"}],"title":"Rate of Received Packets Dropped","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"showPoints":"never"},"unit":"pps"}},"gridPos":{"h":9,"w":12,"x":12,"y":36},"id":9,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum by (pod) (\n rate(container_network_transmit_packets_dropped_total{cluster=\"$cluster\",namespace=~\"$namespace\"}[$__rate_interval])\n * on (cluster,namespace,pod) group_left ()\n topk by (cluster,namespace,pod) (\n 1,\n max by (cluster,namespace,pod) (kube_pod_info{host_network=\"false\"})\n )\n)\n","legendFormat":"__auto"}],"title":"Rate of Transmitted Packets Dropped","type":"timeseries"}],"refresh":"10s","schemaVersion":39,"tags":["kubernetes-mixin"],"templating":{"list":[{"current":{"selected":true,"text":"default","value":"default"},"hide":0,"label":"Data source","name":"datasource","query":"prometheus","regex":"","type":"datasource"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"hide":`}}{{ if .Values.grafana.sidecar.dashboards.multicluster.global.enabled }}0{{ else }}2{{ end }}{{`,"label":"cluster","name":"cluster","query":"label_values(up{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\"}, cluster)","refresh":2,"sort":1,"type":"query","allValue":".*"},{"allValue":".+","current":{"selected":false,"text":"kube-system","value":"kube-system"},"datasource":{"type":"prometheus","uid":"${datasource}"},"hide":0,"includeAll":true,"label":"namespace","name":"namespace","query":"label_values(container_network_receive_packets_total{cluster=\"$cluster\"}, namespace)","refresh":2,"sort":1,"type":"query"}]},"time":{"from":"now-1h","to":"now"},"timezone": "`}}{{ .Values.grafana.defaultDashboardsTimezone }}{{`","title":"Kubernetes / Networking / Namespace (Pods)","uid":"8b7a8b326d7a6f1f04244066368c67af"}`}} {{- end }} --- {{- if and .Values.grafana.operator.dashboardsConfigMapRefEnabled (or .Values.grafana.enabled .Values.grafana.forceDeployDashboards) (semverCompare ">=1.14.0-0" $kubeTargetVersion) (semverCompare "<9.9.9-9" $kubeTargetVersion) .Values.grafana.defaultDashboardsEnabled }} diff --git a/charts/kube-prometheus-stack/templates/grafana/dashboards-1.14/namespace-by-workload.yaml b/charts/kube-prometheus-stack/templates/grafana/dashboards-1.14/namespace-by-workload.yaml index 7eb9728a23..65b94a1ab3 100644 --- a/charts/kube-prometheus-stack/templates/grafana/dashboards-1.14/namespace-by-workload.yaml +++ b/charts/kube-prometheus-stack/templates/grafana/dashboards-1.14/namespace-by-workload.yaml @@ -1,5 +1,5 @@ {{- /* -Generated from 'namespace-by-workload' from https://raw.githubusercontent.com/prometheus-operator/kube-prometheus/eaca1a5fd76b356974054906af46810fec1cd7f8/manifests/grafana-dashboardDefinitions.yaml +Generated from 'namespace-by-workload' from https://raw.githubusercontent.com/prometheus-operator/kube-prometheus/4eafa8b5395ef839bb02a55e3b5fbdfa03280cf9/manifests/grafana-dashboardDefinitions.yaml Do not change in-place! In order to change this file first read following link: https://github.com/prometheus-community/helm-charts/tree/main/charts/kube-prometheus-stack/hack */ -}} @@ -21,7 +21,7 @@ metadata: {{- include "kube-prometheus-stack.labels" $ | nindent 4 }} data: namespace-by-workload.json: |- - {{`{"editable":`}}{{ .Values.grafana.defaultDashboardsEditable }}{{`,"links":[{"asDropdown":true,"includeVars":true,"keepTime":true,"tags":["kubernetes-mixin"],"targetBlank":false,"title":"Kubernetes","type":"dashboards"}],"panels":[{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"color":{"fixedColor":"green","mode":"fixed"},"unit":"bps"}},"gridPos":{"h":9,"w":12,"x":0,"y":0},"id":1,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"displayMode":"basic","showUnfilled":false},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sort_desc(sum((8 * rate(container_network_receive_bytes_total{cluster=\"$cluster\",namespace=\"$namespace\"}[$__rate_interval]))\n* on (cluster,namespace,pod) group_left ()\n topk by (cluster,namespace,pod) (\n 1,\n max by (cluster,namespace,pod) (kube_pod_info{host_network=\"false\"})\n )\n* on (cluster,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","legendFormat":"__auto"}],"title":"Current Rate of Bits Received","type":"bargauge"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"color":{"fixedColor":"green","mode":"fixed"},"unit":"bps"}},"gridPos":{"h":9,"w":12,"x":12,"y":0},"id":2,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"displayMode":"basic","showUnfilled":false},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sort_desc(sum((8 * rate(container_network_transmit_bytes_total{cluster=\"$cluster\",namespace=\"$namespace\"}[$__rate_interval]))\n* on (cluster,namespace,pod) group_left ()\n topk by (cluster,namespace,pod) (\n 1,\n max by (cluster,namespace,pod) (kube_pod_info{host_network=\"false\"})\n )\n* on (cluster,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","legendFormat":"__auto"}],"title":"Current Rate of Bits Transmitted","type":"bargauge"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"overrides":[{"matcher":{"id":"byRegexp","options":"/Bits/"},"properties":[{"id":"unit","value":"bps"}]},{"matcher":{"id":"byRegexp","options":"/Packets/"},"properties":[{"id":"unit","value":"pps"}]},{"matcher":{"id":"byName","options":"Workload"},"properties":[{"id":"links","value":[{"title":"Drill down","url":"/d/728bf77cc1166d2f3133bf25846876cc?${datasource:queryparam}&var-cluster=${cluster}&var-namespace=${namespace}&var-type=${__data.fields.Type}&var-workload=${__data.fields.Workload}"}]}]}]},"gridPos":{"h":9,"w":24,"x":0,"y":9},"id":3,"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sort_desc(\n sum by (workload, workload_type) (\n sum by (cluster, namespace, pod) (8 * rate(container_network_receive_bytes_total{cluster=\"$cluster\",namespace=\"$namespace\"}[$__rate_interval]))\n * on (cluster, namespace, pod)\n topk by (cluster, namespace, pod) (\n 1,\n max by (cluster, namespace, pod) (kube_pod_info{cluster=\"$cluster\",namespace=\"$namespace\",host_network=\"false\"})\n )\n * on (cluster, namespace, pod) group_left (workload, workload_type)\n namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\",namespace=\"$namespace\", workload=~\".+\", workload_type=~\"$type\"}\n )\n)\n","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sort_desc(\n sum by (workload, workload_type) (\n sum by (cluster, namespace, pod) (8 * rate(container_network_transmit_bytes_total{cluster=\"$cluster\",namespace=\"$namespace\"}[$__rate_interval]))\n * on (cluster, namespace, pod)\n topk by (cluster, namespace, pod) (\n 1,\n max by (cluster, namespace, pod) (kube_pod_info{cluster=\"$cluster\",namespace=\"$namespace\",host_network=\"false\"})\n )\n * on (cluster, namespace, pod) group_left (workload, workload_type)\n namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\",namespace=\"$namespace\", workload=~\".+\", workload_type=~\"$type\"}\n )\n)\n","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sort_desc(\n avg by (workload, workload_type) (\n sum by (cluster, namespace, pod) (8 * rate(container_network_receive_bytes_total{cluster=\"$cluster\",namespace=\"$namespace\"}[$__rate_interval]))\n * on (cluster, namespace, pod)\n topk by (cluster, namespace, pod) (\n 1,\n max by (cluster, namespace, pod) (kube_pod_info{cluster=\"$cluster\",namespace=\"$namespace\",host_network=\"false\"})\n )\n * on (cluster, namespace, pod) group_left (workload, workload_type)\n namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\",namespace=\"$namespace\", workload=~\".+\", workload_type=~\"$type\"}\n )\n)\n","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sort_desc(\n avg by (workload, workload_type) (\n sum by (cluster, namespace, pod) (8 * rate(container_network_transmit_bytes_total{cluster=\"$cluster\",namespace=\"$namespace\"}[$__rate_interval]))\n * on (cluster, namespace, pod)\n topk by (cluster, namespace, pod) (\n 1,\n max by (cluster, namespace, pod) (kube_pod_info{cluster=\"$cluster\",namespace=\"$namespace\",host_network=\"false\"})\n )\n * on (cluster, namespace, pod) group_left (workload, workload_type)\n namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\",namespace=\"$namespace\", workload=~\".+\", workload_type=~\"$type\"}\n )\n)\n","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sort_desc(\n sum by (workload, workload_type) (\n sum by (cluster, namespace, pod) (1 * rate(container_network_receive_packets_total{cluster=\"$cluster\",namespace=\"$namespace\"}[$__rate_interval]))\n * on (cluster, namespace, pod)\n topk by (cluster, namespace, pod) (\n 1,\n max by (cluster, namespace, pod) (kube_pod_info{cluster=\"$cluster\",namespace=\"$namespace\",host_network=\"false\"})\n )\n * on (cluster, namespace, pod) group_left (workload, workload_type)\n namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\",namespace=\"$namespace\", workload=~\".+\", workload_type=~\"$type\"}\n )\n)\n","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sort_desc(\n sum by (workload, workload_type) (\n sum by (cluster, namespace, pod) (1 * rate(container_network_transmit_packets_total{cluster=\"$cluster\",namespace=\"$namespace\"}[$__rate_interval]))\n * on (cluster, namespace, pod)\n topk by (cluster, namespace, pod) (\n 1,\n max by (cluster, namespace, pod) (kube_pod_info{cluster=\"$cluster\",namespace=\"$namespace\",host_network=\"false\"})\n )\n * on (cluster, namespace, pod) group_left (workload, workload_type)\n namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\",namespace=\"$namespace\", workload=~\".+\", workload_type=~\"$type\"}\n )\n)\n","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sort_desc(\n sum by (workload, workload_type) (\n sum by (cluster, namespace, pod) (1 * rate(container_network_receive_packets_dropped_total{cluster=\"$cluster\",namespace=\"$namespace\"}[$__rate_interval]))\n * on (cluster, namespace, pod)\n topk by (cluster, namespace, pod) (\n 1,\n max by (cluster, namespace, pod) (kube_pod_info{cluster=\"$cluster\",namespace=\"$namespace\",host_network=\"false\"})\n )\n * on (cluster, namespace, pod) group_left (workload, workload_type)\n namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\",namespace=\"$namespace\", workload=~\".+\", workload_type=~\"$type\"}\n )\n)\n","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sort_desc(\n sum by (workload, workload_type) (\n sum by (cluster, namespace, pod) (1 * rate(container_network_transmit_packets_dropped_total{cluster=\"$cluster\",namespace=\"$namespace\"}[$__rate_interval]))\n * on (cluster, namespace, pod)\n topk by (cluster, namespace, pod) (\n 1,\n max by (cluster, namespace, pod) (kube_pod_info{cluster=\"$cluster\",namespace=\"$namespace\",host_network=\"false\"})\n )\n * on (cluster, namespace, pod) group_left (workload, workload_type)\n namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\",namespace=\"$namespace\", workload=~\".+\", workload_type=~\"$type\"}\n )\n)\n","format":"table","instant":true}],"title":"Current Status","transformations":[{"id":"joinByField","options":{"byField":"workload","mode":"outer"}},{"id":"organize","options":{"excludeByName":{"Time":true,"Time 1":true,"Time 2":true,"Time 3":true,"Time 4":true,"Time 5":true,"Time 6":true,"Time 7":true,"Time 8":true,"workload_type 2":true,"workload_type 3":true,"workload_type 4":true,"workload_type 5":true,"workload_type 6":true,"workload_type 7":true,"workload_type 8":true},"indexByName":{"Time 1":0,"Time 2":1,"Time 3":2,"Time 4":3,"Time 5":4,"Time 6":5,"Time 7":6,"Time 8":7,"Value #A":10,"Value #B":11,"Value #C":12,"Value #D":13,"Value #E":14,"Value #F":15,"Value #G":16,"Value #H":17,"workload":8,"workload_type 1":9,"workload_type 2":18,"workload_type 3":19,"workload_type 4":20,"workload_type 5":21,"workload_type 6":22,"workload_type 7":23,"workload_type 8":24},"renameByName":{"Value #A":"Rx Bits","Value #B":"Tx Bits","Value #C":"Rx Bits (Avg)","Value #D":"Tx Bits (Avg)","Value #E":"Rx Packets","Value #F":"Tx Packets","Value #G":"Rx Packets Dropped","Value #H":"Tx Packets Dropped","workload":"Workload","workload_type 1":"Type"}}}],"type":"table"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"bps"}},"gridPos":{"h":9,"w":12,"x":0,"y":18},"id":4,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sort_desc(sum((8 * rate(container_network_receive_bytes_total{cluster=\"$cluster\",namespace=\"$namespace\"}[$__rate_interval]))\n* on (cluster,namespace,pod) group_left ()\n topk by (cluster,namespace,pod) (\n 1,\n max by (cluster,namespace,pod) (kube_pod_info{host_network=\"false\"})\n )\n* on (cluster,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","legendFormat":"__auto"}],"title":"Receive Bandwidth","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"bps"}},"gridPos":{"h":9,"w":12,"x":12,"y":18},"id":5,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sort_desc(sum((8 * rate(container_network_transmit_bytes_total{cluster=\"$cluster\",namespace=\"$namespace\"}[$__rate_interval]))\n* on (cluster,namespace,pod) group_left ()\n topk by (cluster,namespace,pod) (\n 1,\n max by (cluster,namespace,pod) (kube_pod_info{host_network=\"false\"})\n )\n* on (cluster,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","legendFormat":"__auto"}],"title":"Transmit Bandwidth","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"bps"}},"gridPos":{"h":9,"w":12,"x":0,"y":27},"id":6,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sort_desc(avg((8 * rate(container_network_receive_bytes_total{cluster=\"$cluster\",namespace=\"$namespace\"}[$__rate_interval]))\n* on (cluster,namespace,pod) group_left ()\n topk by (cluster,namespace,pod) (\n 1,\n max by (cluster,namespace,pod) (kube_pod_info{host_network=\"false\"})\n )\n* on (cluster,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","legendFormat":"__auto"}],"title":"Average Container Bandwidth by Workload: Received","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"bps"}},"gridPos":{"h":9,"w":12,"x":12,"y":27},"id":7,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sort_desc(avg((8 * rate(container_network_transmit_bytes_total{cluster=\"$cluster\",namespace=\"$namespace\"}[$__rate_interval]))\n* on (cluster,namespace,pod) group_left ()\n topk by (cluster,namespace,pod) (\n 1,\n max by (cluster,namespace,pod) (kube_pod_info{host_network=\"false\"})\n )\n* on (cluster,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","legendFormat":"__auto"}],"title":"Average Container Bandwidth by Workload: Transmitted","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"pps"}},"gridPos":{"h":9,"w":12,"x":0,"y":36},"id":8,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sort_desc(sum(rate(container_network_receive_packets_total{cluster=\"$cluster\",namespace=\"$namespace\"}[$__rate_interval])\n* on (cluster,namespace,pod) group_left ()\n topk by (cluster,namespace,pod) (\n 1,\n max by (cluster,namespace,pod) (kube_pod_info{host_network=\"false\"})\n )\n* on (cluster,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","legendFormat":"__auto"}],"title":"Rate of Received Packets","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"pps"}},"gridPos":{"h":9,"w":12,"x":12,"y":36},"id":9,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sort_desc(sum(rate(container_network_transmit_packets_total{cluster=\"$cluster\",namespace=\"$namespace\"}[$__rate_interval])\n* on (cluster,namespace,pod) group_left ()\n topk by (cluster,namespace,pod) (\n 1,\n max by (cluster,namespace,pod) (kube_pod_info{host_network=\"false\"})\n )\n* on (cluster,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","legendFormat":"__auto"}],"title":"Rate of Transmitted Packets","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"pps"}},"gridPos":{"h":9,"w":12,"x":0,"y":45},"id":10,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sort_desc(sum(rate(container_network_receive_packets_dropped_total{cluster=\"$cluster\",namespace=\"$namespace\"}[$__rate_interval])\n* on (cluster,namespace,pod) group_left ()\n topk by (cluster,namespace,pod) (\n 1,\n max by (cluster,namespace,pod) (kube_pod_info{host_network=\"false\"})\n )\n* on (cluster,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","legendFormat":"__auto"}],"title":"Rate of Received Packets Dropped","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"pps"}},"gridPos":{"h":9,"w":12,"x":12,"y":45},"id":11,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sort_desc(sum(rate(container_network_transmit_packets_dropped_total{cluster=\"$cluster\",namespace=\"$namespace\"}[$__rate_interval])\n* on (cluster,namespace,pod) group_left ()\n topk by (cluster,namespace,pod) (\n 1,\n max by (cluster,namespace,pod) (kube_pod_info{host_network=\"false\"})\n )\n* on (cluster,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","legendFormat":"__auto"}],"title":"Rate of Transmitted Packets Dropped","type":"timeseries"}],"refresh":"10s","schemaVersion":39,"tags":["kubernetes-mixin"],"templating":{"list":[{"current":{"selected":true,"text":"default","value":"default"},"hide":0,"label":"Data source","name":"datasource","query":"prometheus","regex":"","type":"datasource"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"hide":`}}{{ if .Values.grafana.sidecar.dashboards.multicluster.global.enabled }}0{{ else }}2{{ end }}{{`,"label":"cluster","name":"cluster","query":"label_values(up{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\"}, cluster)","refresh":2,"sort":1,"type":"query","allValue":".*"},{"current":{"selected":false,"text":"kube-system","value":"kube-system"},"datasource":{"type":"prometheus","uid":"${datasource}"},"hide":0,"label":"namespace","name":"namespace","query":"label_values(container_network_receive_packets_total{cluster=\"$cluster\"}, namespace)","refresh":2,"sort":1,"type":"query"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"hide":0,"includeAll":true,"label":"workload_type","name":"type","query":"label_values(namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload=~\".+\"}, workload_type)","refresh":2,"sort":1,"type":"query"}]},"time":{"from":"now-1h","to":"now"},"timezone": "`}}{{ .Values.grafana.defaultDashboardsTimezone }}{{`","title":"Kubernetes / Networking / Namespace (Workload)","uid":"bbb2a765a623ae38130206c7d94a160f"}`}} + {{`{"editable":`}}{{ .Values.grafana.defaultDashboardsEditable }}{{`,"links":[{"asDropdown":true,"includeVars":true,"keepTime":true,"tags":["kubernetes-mixin"],"targetBlank":false,"title":"Kubernetes","type":"dashboards"}],"panels":[{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"color":{"fixedColor":"green","mode":"fixed"},"unit":"bps"}},"gridPos":{"h":9,"w":12,"x":0,"y":0},"id":1,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"displayMode":"basic","showUnfilled":false},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sort_desc(sum((8 * rate(container_network_receive_bytes_total{cluster=\"$cluster\",namespace=\"$namespace\"}[$__rate_interval]))\n* on (cluster,namespace,pod) group_left ()\n topk by (cluster,namespace,pod) (\n 1,\n max by (cluster,namespace,pod) (kube_pod_info{host_network=\"false\"})\n )\n* on (cluster,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","legendFormat":"__auto"}],"title":"Current Rate of Bits Received","type":"bargauge"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"color":{"fixedColor":"green","mode":"fixed"},"unit":"bps"}},"gridPos":{"h":9,"w":12,"x":12,"y":0},"id":2,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"displayMode":"basic","showUnfilled":false},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sort_desc(sum((8 * rate(container_network_transmit_bytes_total{cluster=\"$cluster\",namespace=\"$namespace\"}[$__rate_interval]))\n* on (cluster,namespace,pod) group_left ()\n topk by (cluster,namespace,pod) (\n 1,\n max by (cluster,namespace,pod) (kube_pod_info{host_network=\"false\"})\n )\n* on (cluster,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","legendFormat":"__auto"}],"title":"Current Rate of Bits Transmitted","type":"bargauge"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"overrides":[{"matcher":{"id":"byRegexp","options":"/Bits/"},"properties":[{"id":"unit","value":"bps"}]},{"matcher":{"id":"byRegexp","options":"/Packets/"},"properties":[{"id":"unit","value":"pps"}]},{"matcher":{"id":"byName","options":"Workload"},"properties":[{"id":"links","value":[{"title":"Drill down","url":"/d/728bf77cc1166d2f3133bf25846876cc?${datasource:queryparam}&var-cluster=${cluster}&var-namespace=${namespace}&var-type=${__data.fields.Type}&var-workload=${__data.fields.Workload}"}]}]}]},"gridPos":{"h":9,"w":24,"x":0,"y":9},"id":3,"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sort_desc(\n sum by (workload, workload_type) (\n sum by (cluster, namespace, pod) (8 * rate(container_network_receive_bytes_total{cluster=\"$cluster\",namespace=\"$namespace\"}[$__rate_interval]))\n * on (cluster, namespace, pod)\n topk by (cluster, namespace, pod) (\n 1,\n max by (cluster, namespace, pod) (kube_pod_info{cluster=\"$cluster\",namespace=\"$namespace\",host_network=\"false\"})\n )\n * on (cluster, namespace, pod) group_left (workload, workload_type)\n namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\",namespace=\"$namespace\", workload=~\".+\", workload_type=~\"$type\"}\n )\n)\n","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sort_desc(\n sum by (workload, workload_type) (\n sum by (cluster, namespace, pod) (8 * rate(container_network_transmit_bytes_total{cluster=\"$cluster\",namespace=\"$namespace\"}[$__rate_interval]))\n * on (cluster, namespace, pod)\n topk by (cluster, namespace, pod) (\n 1,\n max by (cluster, namespace, pod) (kube_pod_info{cluster=\"$cluster\",namespace=\"$namespace\",host_network=\"false\"})\n )\n * on (cluster, namespace, pod) group_left (workload, workload_type)\n namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\",namespace=\"$namespace\", workload=~\".+\", workload_type=~\"$type\"}\n )\n)\n","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sort_desc(\n avg by (workload, workload_type) (\n sum by (cluster, namespace, pod) (8 * rate(container_network_receive_bytes_total{cluster=\"$cluster\",namespace=\"$namespace\"}[$__rate_interval]))\n * on (cluster, namespace, pod)\n topk by (cluster, namespace, pod) (\n 1,\n max by (cluster, namespace, pod) (kube_pod_info{cluster=\"$cluster\",namespace=\"$namespace\",host_network=\"false\"})\n )\n * on (cluster, namespace, pod) group_left (workload, workload_type)\n namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\",namespace=\"$namespace\", workload=~\".+\", workload_type=~\"$type\"}\n )\n)\n","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sort_desc(\n avg by (workload, workload_type) (\n sum by (cluster, namespace, pod) (8 * rate(container_network_transmit_bytes_total{cluster=\"$cluster\",namespace=\"$namespace\"}[$__rate_interval]))\n * on (cluster, namespace, pod)\n topk by (cluster, namespace, pod) (\n 1,\n max by (cluster, namespace, pod) (kube_pod_info{cluster=\"$cluster\",namespace=\"$namespace\",host_network=\"false\"})\n )\n * on (cluster, namespace, pod) group_left (workload, workload_type)\n namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\",namespace=\"$namespace\", workload=~\".+\", workload_type=~\"$type\"}\n )\n)\n","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sort_desc(\n sum by (workload, workload_type) (\n sum by (cluster, namespace, pod) (1 * rate(container_network_receive_packets_total{cluster=\"$cluster\",namespace=\"$namespace\"}[$__rate_interval]))\n * on (cluster, namespace, pod)\n topk by (cluster, namespace, pod) (\n 1,\n max by (cluster, namespace, pod) (kube_pod_info{cluster=\"$cluster\",namespace=\"$namespace\",host_network=\"false\"})\n )\n * on (cluster, namespace, pod) group_left (workload, workload_type)\n namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\",namespace=\"$namespace\", workload=~\".+\", workload_type=~\"$type\"}\n )\n)\n","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sort_desc(\n sum by (workload, workload_type) (\n sum by (cluster, namespace, pod) (1 * rate(container_network_transmit_packets_total{cluster=\"$cluster\",namespace=\"$namespace\"}[$__rate_interval]))\n * on (cluster, namespace, pod)\n topk by (cluster, namespace, pod) (\n 1,\n max by (cluster, namespace, pod) (kube_pod_info{cluster=\"$cluster\",namespace=\"$namespace\",host_network=\"false\"})\n )\n * on (cluster, namespace, pod) group_left (workload, workload_type)\n namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\",namespace=\"$namespace\", workload=~\".+\", workload_type=~\"$type\"}\n )\n)\n","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sort_desc(\n sum by (workload, workload_type) (\n sum by (cluster, namespace, pod) (1 * rate(container_network_receive_packets_dropped_total{cluster=\"$cluster\",namespace=\"$namespace\"}[$__rate_interval]))\n * on (cluster, namespace, pod)\n topk by (cluster, namespace, pod) (\n 1,\n max by (cluster, namespace, pod) (kube_pod_info{cluster=\"$cluster\",namespace=\"$namespace\",host_network=\"false\"})\n )\n * on (cluster, namespace, pod) group_left (workload, workload_type)\n namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\",namespace=\"$namespace\", workload=~\".+\", workload_type=~\"$type\"}\n )\n)\n","format":"table","instant":true},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sort_desc(\n sum by (workload, workload_type) (\n sum by (cluster, namespace, pod) (1 * rate(container_network_transmit_packets_dropped_total{cluster=\"$cluster\",namespace=\"$namespace\"}[$__rate_interval]))\n * on (cluster, namespace, pod)\n topk by (cluster, namespace, pod) (\n 1,\n max by (cluster, namespace, pod) (kube_pod_info{cluster=\"$cluster\",namespace=\"$namespace\",host_network=\"false\"})\n )\n * on (cluster, namespace, pod) group_left (workload, workload_type)\n namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\",namespace=\"$namespace\", workload=~\".+\", workload_type=~\"$type\"}\n )\n)\n","format":"table","instant":true}],"title":"Current Status","transformations":[{"id":"joinByField","options":{"byField":"workload","mode":"outer"}},{"id":"organize","options":{"excludeByName":{"Time":true,"Time 1":true,"Time 2":true,"Time 3":true,"Time 4":true,"Time 5":true,"Time 6":true,"Time 7":true,"Time 8":true,"workload_type 2":true,"workload_type 3":true,"workload_type 4":true,"workload_type 5":true,"workload_type 6":true,"workload_type 7":true,"workload_type 8":true},"indexByName":{"Time 1":0,"Time 2":1,"Time 3":2,"Time 4":3,"Time 5":4,"Time 6":5,"Time 7":6,"Time 8":7,"Value #A":10,"Value #B":11,"Value #C":12,"Value #D":13,"Value #E":14,"Value #F":15,"Value #G":16,"Value #H":17,"workload":8,"workload_type 1":9,"workload_type 2":18,"workload_type 3":19,"workload_type 4":20,"workload_type 5":21,"workload_type 6":22,"workload_type 7":23,"workload_type 8":24},"renameByName":{"Value #A":"Rx Bits","Value #B":"Tx Bits","Value #C":"Rx Bits (Avg)","Value #D":"Tx Bits (Avg)","Value #E":"Rx Packets","Value #F":"Tx Packets","Value #G":"Rx Packets Dropped","Value #H":"Tx Packets Dropped","workload":"Workload","workload_type 1":"Type"}}}],"type":"table"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"bps"}},"gridPos":{"h":9,"w":12,"x":0,"y":18},"id":4,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sort_desc(sum((8 * rate(container_network_receive_bytes_total{cluster=\"$cluster\",namespace=\"$namespace\"}[$__rate_interval]))\n* on (cluster,namespace,pod) group_left ()\n topk by (cluster,namespace,pod) (\n 1,\n max by (cluster,namespace,pod) (kube_pod_info{host_network=\"false\"})\n )\n* on (cluster,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","legendFormat":"__auto"}],"title":"Receive Bandwidth","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"bps"}},"gridPos":{"h":9,"w":12,"x":12,"y":18},"id":5,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sort_desc(sum((8 * rate(container_network_transmit_bytes_total{cluster=\"$cluster\",namespace=\"$namespace\"}[$__rate_interval]))\n* on (cluster,namespace,pod) group_left ()\n topk by (cluster,namespace,pod) (\n 1,\n max by (cluster,namespace,pod) (kube_pod_info{host_network=\"false\"})\n )\n* on (cluster,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","legendFormat":"__auto"}],"title":"Transmit Bandwidth","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"bps"}},"gridPos":{"h":9,"w":12,"x":0,"y":27},"id":6,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sort_desc(avg((8 * rate(container_network_receive_bytes_total{cluster=\"$cluster\",namespace=\"$namespace\"}[$__rate_interval]))\n* on (cluster,namespace,pod) group_left ()\n topk by (cluster,namespace,pod) (\n 1,\n max by (cluster,namespace,pod) (kube_pod_info{host_network=\"false\"})\n )\n* on (cluster,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","legendFormat":"__auto"}],"title":"Average Container Bandwidth by Workload: Received","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"bps"}},"gridPos":{"h":9,"w":12,"x":12,"y":27},"id":7,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sort_desc(avg((8 * rate(container_network_transmit_bytes_total{cluster=\"$cluster\",namespace=\"$namespace\"}[$__rate_interval]))\n* on (cluster,namespace,pod) group_left ()\n topk by (cluster,namespace,pod) (\n 1,\n max by (cluster,namespace,pod) (kube_pod_info{host_network=\"false\"})\n )\n* on (cluster,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","legendFormat":"__auto"}],"title":"Average Container Bandwidth by Workload: Transmitted","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"pps"}},"gridPos":{"h":9,"w":12,"x":0,"y":36},"id":8,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sort_desc(sum(rate(container_network_receive_packets_total{cluster=\"$cluster\",namespace=\"$namespace\"}[$__rate_interval])\n* on (cluster,namespace,pod) group_left ()\n topk by (cluster,namespace,pod) (\n 1,\n max by (cluster,namespace,pod) (kube_pod_info{host_network=\"false\"})\n )\n* on (cluster,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","legendFormat":"__auto"}],"title":"Rate of Received Packets","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"pps"}},"gridPos":{"h":9,"w":12,"x":12,"y":36},"id":9,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sort_desc(sum(rate(container_network_transmit_packets_total{cluster=\"$cluster\",namespace=\"$namespace\"}[$__rate_interval])\n* on (cluster,namespace,pod) group_left ()\n topk by (cluster,namespace,pod) (\n 1,\n max by (cluster,namespace,pod) (kube_pod_info{host_network=\"false\"})\n )\n* on (cluster,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","legendFormat":"__auto"}],"title":"Rate of Transmitted Packets","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"pps"}},"gridPos":{"h":9,"w":12,"x":0,"y":45},"id":10,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sort_desc(sum(rate(container_network_receive_packets_dropped_total{cluster=\"$cluster\",namespace=\"$namespace\"}[$__rate_interval])\n* on (cluster,namespace,pod) group_left ()\n topk by (cluster,namespace,pod) (\n 1,\n max by (cluster,namespace,pod) (kube_pod_info{host_network=\"false\"})\n )\n* on (cluster,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","legendFormat":"__auto"}],"title":"Rate of Received Packets Dropped","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"pps"}},"gridPos":{"h":9,"w":12,"x":12,"y":45},"id":11,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sort_desc(sum(rate(container_network_transmit_packets_dropped_total{cluster=\"$cluster\",namespace=\"$namespace\"}[$__rate_interval])\n* on (cluster,namespace,pod) group_left ()\n topk by (cluster,namespace,pod) (\n 1,\n max by (cluster,namespace,pod) (kube_pod_info{host_network=\"false\"})\n )\n* on (cluster,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","legendFormat":"__auto"}],"title":"Rate of Transmitted Packets Dropped","type":"timeseries"}],"refresh":"10s","schemaVersion":39,"tags":["kubernetes-mixin"],"templating":{"list":[{"current":{"selected":true,"text":"default","value":"default"},"hide":0,"label":"Data source","name":"datasource","query":"prometheus","regex":"","type":"datasource"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"hide":`}}{{ if .Values.grafana.sidecar.dashboards.multicluster.global.enabled }}0{{ else }}2{{ end }}{{`,"label":"cluster","name":"cluster","query":"label_values(up{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\"}, cluster)","refresh":2,"sort":1,"type":"query","allValue":".*"},{"current":{"selected":false,"text":"kube-system","value":"kube-system"},"datasource":{"type":"prometheus","uid":"${datasource}"},"hide":0,"label":"namespace","name":"namespace","query":"label_values(container_network_receive_packets_total{cluster=\"$cluster\"}, namespace)","refresh":2,"sort":1,"type":"query"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"hide":0,"includeAll":true,"label":"workload_type","name":"type","query":"label_values(namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload=~\".+\"}, workload_type)","refresh":2,"sort":1,"type":"query"}]},"time":{"from":"now-1h","to":"now"},"timezone": "`}}{{ .Values.grafana.defaultDashboardsTimezone }}{{`","title":"Kubernetes / Networking / Namespace (Workload)","uid":"bbb2a765a623ae38130206c7d94a160f"}`}} {{- end }} --- {{- if and .Values.grafana.operator.dashboardsConfigMapRefEnabled (or .Values.grafana.enabled .Values.grafana.forceDeployDashboards) (semverCompare ">=1.14.0-0" $kubeTargetVersion) (semverCompare "<9.9.9-9" $kubeTargetVersion) .Values.grafana.defaultDashboardsEnabled }} diff --git a/charts/kube-prometheus-stack/templates/grafana/dashboards-1.14/node-cluster-rsrc-use.yaml b/charts/kube-prometheus-stack/templates/grafana/dashboards-1.14/node-cluster-rsrc-use.yaml index 20094b4e95..c56b3770f6 100644 --- a/charts/kube-prometheus-stack/templates/grafana/dashboards-1.14/node-cluster-rsrc-use.yaml +++ b/charts/kube-prometheus-stack/templates/grafana/dashboards-1.14/node-cluster-rsrc-use.yaml @@ -1,5 +1,5 @@ {{- /* -Generated from 'node-cluster-rsrc-use' from https://raw.githubusercontent.com/prometheus-operator/kube-prometheus/eaca1a5fd76b356974054906af46810fec1cd7f8/manifests/grafana-dashboardDefinitions.yaml +Generated from 'node-cluster-rsrc-use' from https://raw.githubusercontent.com/prometheus-operator/kube-prometheus/4eafa8b5395ef839bb02a55e3b5fbdfa03280cf9/manifests/grafana-dashboardDefinitions.yaml Do not change in-place! In order to change this file first read following link: https://github.com/prometheus-community/helm-charts/tree/main/charts/kube-prometheus-stack/hack */ -}} @@ -20,7 +20,7 @@ metadata: {{- include "kube-prometheus-stack.labels" $ | nindent 4 }} data: node-cluster-rsrc-use.json: |- - {{`{"graphTooltip":1,"panels":[{"collapsed":false,"gridPos":{"h":1,"w":24,"x":0,"y":0},"id":1,"panels":[],"title":"CPU","type":"row"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":100,"showPoints":"never","stacking":{"mode":"normal"}},"unit":"percentunit"}},"gridPos":{"h":7,"w":12,"x":0,"y":1},"id":2,"options":{"legend":{"showLegend":false},"tooltip":{"mode":"multi","sort":"desc"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"((\n instance:node_cpu_utilisation:rate5m{job=\"node-exporter\", cluster=~\"$cluster\"}\n *\n instance:node_num_cpu:sum{job=\"node-exporter\", cluster=~\"$cluster\"}\n) != 0 )\n/ scalar(sum(instance:node_num_cpu:sum{job=\"node-exporter\", cluster=~\"$cluster\"}))\n","legendFormat":"{{ instance }}"}],"title":"CPU Utilisation","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":100,"showPoints":"never","stacking":{"mode":"normal"}},"unit":"percentunit"}},"gridPos":{"h":7,"w":12,"x":12,"y":1},"id":3,"options":{"legend":{"showLegend":false},"tooltip":{"mode":"multi","sort":"desc"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"(\n instance:node_load1_per_cpu:ratio{job=\"node-exporter\", cluster=~\"$cluster\"}\n / scalar(count(instance:node_load1_per_cpu:ratio{job=\"node-exporter\", cluster=~\"$cluster\"}))\n) != 0\n","legendFormat":"{{ instance }}"}],"title":"CPU Saturation (Load1 per CPU)","type":"timeseries"},{"collapsed":false,"gridPos":{"h":1,"w":24,"x":0,"y":8},"id":4,"panels":[],"title":"Memory","type":"row"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":100,"showPoints":"never","stacking":{"mode":"normal"}},"unit":"percentunit"}},"gridPos":{"h":7,"w":12,"x":0,"y":9},"id":5,"options":{"legend":{"showLegend":false},"tooltip":{"mode":"multi","sort":"desc"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"(\n instance:node_memory_utilisation:ratio{job=\"node-exporter\", cluster=~\"$cluster\"}\n / scalar(count(instance:node_memory_utilisation:ratio{job=\"node-exporter\", cluster=~\"$cluster\"}))\n) != 0\n","legendFormat":"{{ instance }}"}],"title":"Memory Utilisation","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":100,"showPoints":"never","stacking":{"mode":"normal"}},"unit":"rds"}},"gridPos":{"h":7,"w":12,"x":12,"y":9},"id":6,"options":{"legend":{"showLegend":false},"tooltip":{"mode":"multi","sort":"desc"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"instance:node_vmstat_pgmajfault:rate5m{job=\"node-exporter\", cluster=~\"$cluster\"}","legendFormat":"{{ instance }}"}],"title":"Memory Saturation (Major Page Faults)","type":"timeseries"},{"collapsed":false,"gridPos":{"h":1,"w":24,"x":0,"y":16},"id":7,"panels":[],"title":"Network","type":"row"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":100,"showPoints":"never","stacking":{"mode":"normal"}},"unit":"Bps"},"overrides":[{"matcher":{"id":"byRegexp","options":"/Transmit/"},"properties":[{"id":"custom.transform","value":"negative-Y"}]}]},"gridPos":{"h":7,"w":12,"x":0,"y":17},"id":8,"options":{"legend":{"showLegend":false},"tooltip":{"mode":"multi","sort":"desc"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"instance:node_network_receive_bytes_excluding_lo:rate5m{job=\"node-exporter\", cluster=~\"$cluster\"} != 0","legendFormat":"{{ instance }} Receive"},{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"instance:node_network_transmit_bytes_excluding_lo:rate5m{job=\"node-exporter\", cluster=~\"$cluster\"} != 0","legendFormat":"{{ instance }} Transmit"}],"title":"Network Utilisation (Bytes Receive/Transmit)","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":100,"showPoints":"never","stacking":{"mode":"normal"}},"unit":"Bps"},"overrides":[{"matcher":{"id":"byRegexp","options":"/Transmit/"},"properties":[{"id":"custom.transform","value":"negative-Y"}]}]},"gridPos":{"h":7,"w":12,"x":12,"y":17},"id":9,"options":{"legend":{"showLegend":false},"tooltip":{"mode":"multi","sort":"desc"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"instance:node_network_receive_drop_excluding_lo:rate5m{job=\"node-exporter\", cluster=~\"$cluster\"} != 0","legendFormat":"{{ instance }} Receive"},{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"instance:node_network_transmit_drop_excluding_lo:rate5m{job=\"node-exporter\", cluster=~\"$cluster\"} != 0","legendFormat":"{{ instance }} Transmit"}],"title":"Network Saturation (Drops Receive/Transmit)","type":"timeseries"},{"collapsed":false,"gridPos":{"h":1,"w":24,"x":0,"y":24},"id":10,"panels":[],"title":"Disk IO","type":"row"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":100,"showPoints":"never","stacking":{"mode":"normal"}},"unit":"percentunit"}},"gridPos":{"h":7,"w":12,"x":0,"y":25},"id":11,"options":{"legend":{"showLegend":false},"tooltip":{"mode":"multi","sort":"desc"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"instance_device:node_disk_io_time_seconds:rate5m{job=\"node-exporter\", cluster=~\"$cluster\"}\n/ scalar(count(instance_device:node_disk_io_time_seconds:rate5m{job=\"node-exporter\", cluster=~\"$cluster\"}))\n","legendFormat":"{{ instance }} {{device}}"}],"title":"Disk IO Utilisation","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":100,"showPoints":"never","stacking":{"mode":"normal"}},"unit":"percentunit"}},"gridPos":{"h":7,"w":12,"x":12,"y":25},"id":12,"options":{"legend":{"showLegend":false},"tooltip":{"mode":"multi","sort":"desc"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"instance_device:node_disk_io_time_weighted_seconds:rate5m{job=\"node-exporter\", cluster=~\"$cluster\"}\n/ scalar(count(instance_device:node_disk_io_time_weighted_seconds:rate5m{job=\"node-exporter\", cluster=~\"$cluster\"}))\n","legendFormat":"{{ instance }} {{device}}"}],"title":"Disk IO Saturation","type":"timeseries"},{"collapsed":false,"gridPos":{"h":1,"w":24,"x":0,"y":34},"id":13,"panels":[],"title":"Disk Space","type":"row"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":100,"showPoints":"never","stacking":{"mode":"normal"}},"unit":"percentunit"}},"gridPos":{"h":7,"w":24,"x":0,"y":35},"id":14,"options":{"legend":{"showLegend":false},"tooltip":{"mode":"multi","sort":"desc"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"sum without (device) (\n max without (fstype, mountpoint) ((\n node_filesystem_size_bytes{job=\"node-exporter\", fstype!=\"\", mountpoint!=\"\", cluster=~\"$cluster\"}\n -\n node_filesystem_avail_bytes{job=\"node-exporter\", fstype!=\"\", mountpoint!=\"\", cluster=~\"$cluster\"}\n ) != 0)\n)\n/ scalar(sum(max without (fstype, mountpoint) (node_filesystem_size_bytes{job=\"node-exporter\", fstype!=\"\", mountpoint!=\"\", cluster=~\"$cluster\"})))\n","legendFormat":"{{ instance }}"}],"title":"Disk Space Utilisation","type":"timeseries"}],"refresh":"30s","schemaVersion":39,"tags":["node-exporter-mixin"],"templating":{"list":[{"name":"datasource","query":"prometheus","type":"datasource"},{"allValue":".*","datasource":{"type":"prometheus","uid":"${datasource}"},"hide":`}}{{ if .Values.grafana.sidecar.dashboards.multicluster.global.enabled }}0{{ else }}2{{ end }}{{`,"includeAll":true,"name":"cluster","query":"label_values(node_time_seconds, cluster)","refresh":2,"sort":1,"type":"query"}]},"time":{"from":"now-1h","to":"now"},"timezone": "`}}{{ .Values.grafana.defaultDashboardsTimezone }}{{`","title":"Node Exporter / USE Method / Cluster","uid":"3e97d1d02672cdd0861f4c97c64f89b2"}`}} + {{`{"graphTooltip":1,"panels":[{"collapsed":false,"gridPos":{"h":1,"w":24,"x":0,"y":0},"id":1,"panels":[],"title":"CPU","type":"row"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":100,"showPoints":"never","stacking":{"mode":"normal"}},"unit":"percentunit"}},"gridPos":{"h":7,"w":12,"x":0,"y":1},"id":2,"options":{"legend":{"showLegend":false},"tooltip":{"mode":"multi","sort":"desc"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"((\n instance:node_cpu_utilisation:rate5m{job=\"node-exporter\", cluster=~\"$cluster\"}\n *\n instance:node_num_cpu:sum{job=\"node-exporter\", cluster=~\"$cluster\"}\n) != 0 )\n/ scalar(sum(instance:node_num_cpu:sum{job=\"node-exporter\", cluster=~\"$cluster\"}))\n","legendFormat":"{{ instance }}"}],"title":"CPU Utilisation","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":100,"showPoints":"never","stacking":{"mode":"normal"}},"unit":"percentunit"}},"gridPos":{"h":7,"w":12,"x":12,"y":1},"id":3,"options":{"legend":{"showLegend":false},"tooltip":{"mode":"multi","sort":"desc"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"(\n instance:node_load1_per_cpu:ratio{job=\"node-exporter\", cluster=~\"$cluster\"}\n / scalar(count(instance:node_load1_per_cpu:ratio{job=\"node-exporter\", cluster=~\"$cluster\"}))\n) != 0\n","legendFormat":"{{ instance }}"}],"title":"CPU Saturation (Load1 per CPU)","type":"timeseries"},{"collapsed":false,"gridPos":{"h":1,"w":24,"x":0,"y":8},"id":4,"panels":[],"title":"Memory","type":"row"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":100,"showPoints":"never","stacking":{"mode":"normal"}},"unit":"percentunit"}},"gridPos":{"h":7,"w":12,"x":0,"y":9},"id":5,"options":{"legend":{"showLegend":false},"tooltip":{"mode":"multi","sort":"desc"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"(\n instance:node_memory_utilisation:ratio{job=\"node-exporter\", cluster=~\"$cluster\"}\n / scalar(count(instance:node_memory_utilisation:ratio{job=\"node-exporter\", cluster=~\"$cluster\"}))\n) != 0\n","legendFormat":"{{ instance }}"}],"title":"Memory Utilisation","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":100,"showPoints":"never","stacking":{"mode":"normal"}},"unit":"rds"}},"gridPos":{"h":7,"w":12,"x":12,"y":9},"id":6,"options":{"legend":{"showLegend":false},"tooltip":{"mode":"multi","sort":"desc"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"instance:node_vmstat_pgmajfault:rate5m{job=\"node-exporter\", cluster=~\"$cluster\"}","legendFormat":"{{ instance }}"}],"title":"Memory Saturation (Major Page Faults)","type":"timeseries"},{"collapsed":false,"gridPos":{"h":1,"w":24,"x":0,"y":16},"id":7,"panels":[],"title":"Network","type":"row"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":100,"showPoints":"never","stacking":{"mode":"normal"}},"unit":"Bps"},"overrides":[{"matcher":{"id":"byRegexp","options":"/Transmit/"},"properties":[{"id":"custom.transform","value":"negative-Y"}]}]},"gridPos":{"h":7,"w":12,"x":0,"y":17},"id":8,"options":{"legend":{"showLegend":false},"tooltip":{"mode":"multi","sort":"desc"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"instance:node_network_receive_bytes_excluding_lo:rate5m{job=\"node-exporter\", cluster=~\"$cluster\"} != 0","legendFormat":"{{ instance }} Receive"},{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"instance:node_network_transmit_bytes_excluding_lo:rate5m{job=\"node-exporter\", cluster=~\"$cluster\"} != 0","legendFormat":"{{ instance }} Transmit"}],"title":"Network Utilisation (Bytes Receive/Transmit)","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":100,"showPoints":"never","stacking":{"mode":"normal"}},"unit":"Bps"},"overrides":[{"matcher":{"id":"byRegexp","options":"/Transmit/"},"properties":[{"id":"custom.transform","value":"negative-Y"}]}]},"gridPos":{"h":7,"w":12,"x":12,"y":17},"id":9,"options":{"legend":{"showLegend":false},"tooltip":{"mode":"multi","sort":"desc"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"instance:node_network_receive_drop_excluding_lo:rate5m{job=\"node-exporter\", cluster=~\"$cluster\"} != 0","legendFormat":"{{ instance }} Receive"},{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"instance:node_network_transmit_drop_excluding_lo:rate5m{job=\"node-exporter\", cluster=~\"$cluster\"} != 0","legendFormat":"{{ instance }} Transmit"}],"title":"Network Saturation (Drops Receive/Transmit)","type":"timeseries"},{"collapsed":false,"gridPos":{"h":1,"w":24,"x":0,"y":24},"id":10,"panels":[],"title":"Disk IO","type":"row"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":100,"showPoints":"never","stacking":{"mode":"normal"}},"unit":"percentunit"}},"gridPos":{"h":7,"w":12,"x":0,"y":25},"id":11,"options":{"legend":{"showLegend":false},"tooltip":{"mode":"multi","sort":"desc"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"instance_device:node_disk_io_time_seconds:rate5m{job=\"node-exporter\", cluster=~\"$cluster\"}\n/ scalar(count(instance_device:node_disk_io_time_seconds:rate5m{job=\"node-exporter\", cluster=~\"$cluster\"}))\n","legendFormat":"{{ instance }} {{device}}"}],"title":"Disk IO Utilisation","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":100,"showPoints":"never","stacking":{"mode":"normal"}},"unit":"percentunit"}},"gridPos":{"h":7,"w":12,"x":12,"y":25},"id":12,"options":{"legend":{"showLegend":false},"tooltip":{"mode":"multi","sort":"desc"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"instance_device:node_disk_io_time_weighted_seconds:rate5m{job=\"node-exporter\", cluster=~\"$cluster\"}\n/ scalar(count(instance_device:node_disk_io_time_weighted_seconds:rate5m{job=\"node-exporter\", cluster=~\"$cluster\"}))\n","legendFormat":"{{ instance }} {{device}}"}],"title":"Disk IO Saturation","type":"timeseries"},{"collapsed":false,"gridPos":{"h":1,"w":24,"x":0,"y":34},"id":13,"panels":[],"title":"Disk Space","type":"row"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":100,"showPoints":"never","stacking":{"mode":"normal"}},"unit":"percentunit"}},"gridPos":{"h":7,"w":24,"x":0,"y":35},"id":14,"options":{"legend":{"showLegend":false},"tooltip":{"mode":"multi","sort":"desc"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"sum without (device) (\n max without (fstype, mountpoint) ((\n node_filesystem_size_bytes{job=\"node-exporter\", fstype!=\"\", mountpoint!=\"\", cluster=~\"$cluster\"}\n -\n node_filesystem_avail_bytes{job=\"node-exporter\", fstype!=\"\", mountpoint!=\"\", cluster=~\"$cluster\"}\n ) != 0)\n)\n/ scalar(sum(max without (fstype, mountpoint) (node_filesystem_size_bytes{job=\"node-exporter\", fstype!=\"\", mountpoint!=\"\", cluster=~\"$cluster\"})))\n","legendFormat":"{{ instance }}"}],"title":"Disk Space Utilisation","type":"timeseries"}],"refresh":"30s","schemaVersion":39,"tags":["node-exporter-mixin"],"templating":{"list":[{"name":"datasource","query":"prometheus","type":"datasource"},{"allValue":".*","datasource":{"type":"prometheus","uid":"${datasource}"},"hide":`}}{{ if .Values.grafana.sidecar.dashboards.multicluster.global.enabled }}0{{ else }}2{{ end }}{{`,"includeAll":true,"name":"cluster","query":"label_values(node_time_seconds, cluster)","refresh":2,"sort":1,"type":"query"}]},"time":{"from":"now-1h","to":"now"},"timezone": "`}}{{ .Values.grafana.defaultDashboardsTimezone }}{{`","title":"Node Exporter / USE Method / Cluster","uid":"3e97d1d02672cdd0861f4c97c64f89b2"}`}} {{- end }} --- {{- if and .Values.grafana.operator.dashboardsConfigMapRefEnabled (or .Values.grafana.enabled .Values.grafana.forceDeployDashboards) (semverCompare ">=1.14.0-0" $kubeTargetVersion) (semverCompare "<9.9.9-9" $kubeTargetVersion) .Values.grafana.defaultDashboardsEnabled (or .Values.nodeExporter.enabled .Values.nodeExporter.forceDeployDashboards) }} diff --git a/charts/kube-prometheus-stack/templates/grafana/dashboards-1.14/node-rsrc-use.yaml b/charts/kube-prometheus-stack/templates/grafana/dashboards-1.14/node-rsrc-use.yaml index 4a9757612b..bc6fe5180b 100644 --- a/charts/kube-prometheus-stack/templates/grafana/dashboards-1.14/node-rsrc-use.yaml +++ b/charts/kube-prometheus-stack/templates/grafana/dashboards-1.14/node-rsrc-use.yaml @@ -1,5 +1,5 @@ {{- /* -Generated from 'node-rsrc-use' from https://raw.githubusercontent.com/prometheus-operator/kube-prometheus/eaca1a5fd76b356974054906af46810fec1cd7f8/manifests/grafana-dashboardDefinitions.yaml +Generated from 'node-rsrc-use' from https://raw.githubusercontent.com/prometheus-operator/kube-prometheus/4eafa8b5395ef839bb02a55e3b5fbdfa03280cf9/manifests/grafana-dashboardDefinitions.yaml Do not change in-place! In order to change this file first read following link: https://github.com/prometheus-community/helm-charts/tree/main/charts/kube-prometheus-stack/hack */ -}} @@ -20,7 +20,7 @@ metadata: {{- include "kube-prometheus-stack.labels" $ | nindent 4 }} data: node-rsrc-use.json: |- - {{`{"graphTooltip":1,"panels":[{"collapsed":false,"gridPos":{"h":1,"w":24,"x":0,"y":0},"id":1,"panels":[],"title":"CPU","type":"row"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":100,"showPoints":"never","stacking":{"mode":"normal"}},"unit":"percentunit"}},"gridPos":{"h":7,"w":12,"x":0,"y":1},"id":2,"options":{"legend":{"showLegend":false},"tooltip":{"mode":"multi","sort":"desc"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"instance:node_cpu_utilisation:rate5m{job=\"node-exporter\", instance=\"$instance\", cluster=~\"$cluster\"} != 0","legendFormat":"Utilisation"}],"title":"CPU Utilisation","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":100,"showPoints":"never","stacking":{"mode":"normal"}},"unit":"percentunit"}},"gridPos":{"h":7,"w":12,"x":12,"y":1},"id":3,"options":{"legend":{"showLegend":false},"tooltip":{"mode":"multi","sort":"desc"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"instance:node_load1_per_cpu:ratio{job=\"node-exporter\", instance=\"$instance\", cluster=~\"$cluster\"} != 0","legendFormat":"Saturation"}],"title":"CPU Saturation (Load1 per CPU)","type":"timeseries"},{"collapsed":false,"gridPos":{"h":1,"w":24,"x":0,"y":8},"id":4,"panels":[],"title":"Memory","type":"row"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":100,"showPoints":"never","stacking":{"mode":"normal"}},"unit":"percentunit"}},"gridPos":{"h":7,"w":12,"x":0,"y":9},"id":5,"options":{"legend":{"showLegend":false},"tooltip":{"mode":"multi","sort":"desc"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"instance:node_memory_utilisation:ratio{job=\"node-exporter\", instance=\"$instance\", cluster=~\"$cluster\"} != 0","legendFormat":"Utilisation"}],"title":"Memory Utilisation","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":100,"showPoints":"never","stacking":{"mode":"normal"}},"unit":"rds"}},"gridPos":{"h":7,"w":12,"x":12,"y":9},"id":6,"options":{"legend":{"showLegend":false},"tooltip":{"mode":"multi","sort":"desc"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"instance:node_vmstat_pgmajfault:rate5m{job=\"node-exporter\", instance=\"$instance\", cluster=~\"$cluster\"} != 0","legendFormat":"Major page Faults"}],"title":"Memory Saturation (Major Page Faults)","type":"timeseries"},{"collapsed":false,"gridPos":{"h":1,"w":24,"x":0,"y":16},"id":7,"panels":[],"title":"Network","type":"row"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":100,"showPoints":"never","stacking":{"mode":"normal"}},"unit":"Bps"},"overrides":[{"matcher":{"id":"byRegexp","options":"/Transmit/"},"properties":[{"id":"custom.transform","value":"negative-Y"}]}]},"gridPos":{"h":7,"w":12,"x":0,"y":17},"id":8,"options":{"legend":{"showLegend":false},"tooltip":{"mode":"multi","sort":"desc"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"instance:node_network_receive_bytes_physical:rate5m{job=\"node-exporter\", instance=\"$instance\", cluster=~\"$cluster\"} != 0","legendFormat":"Receive"},{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"instance:node_network_transmit_bytes_physical:rate5m{job=\"node-exporter\", instance=\"$instance\", cluster=~\"$cluster\"} != 0","legendFormat":"Transmit"}],"title":"Network Utilisation (Bytes Receive/Transmit)","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":100,"showPoints":"never","stacking":{"mode":"normal"}},"unit":"Bps"},"overrides":[{"matcher":{"id":"byRegexp","options":"/Transmit/"},"properties":[{"id":"custom.transform","value":"negative-Y"}]}]},"gridPos":{"h":7,"w":12,"x":12,"y":17},"id":9,"options":{"legend":{"showLegend":false},"tooltip":{"mode":"multi","sort":"desc"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"instance:node_network_receive_drop_physical:rate5m{job=\"node-exporter\", instance=\"$instance\", cluster=~\"$cluster\"} != 0","legendFormat":"Receive"},{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"instance:node_network_transmit_drop_physical:rate5m{job=\"node-exporter\", instance=\"$instance\", cluster=~\"$cluster\"} != 0","legendFormat":"Transmit"}],"title":"Network Saturation (Drops Receive/Transmit)","type":"timeseries"},{"collapsed":false,"gridPos":{"h":1,"w":24,"x":0,"y":24},"id":10,"panels":[],"title":"Disk IO","type":"row"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":100,"showPoints":"never","stacking":{"mode":"normal"}},"unit":"percentunit"}},"gridPos":{"h":7,"w":12,"x":0,"y":25},"id":11,"options":{"legend":{"showLegend":false},"tooltip":{"mode":"multi","sort":"desc"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"instance_device:node_disk_io_time_seconds:rate5m{job=\"node-exporter\", instance=\"$instance\", cluster=~\"$cluster\"} != 0","legendFormat":"{{device}}"}],"title":"Disk IO Utilisation","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":100,"showPoints":"never","stacking":{"mode":"normal"}},"unit":"percentunit"}},"gridPos":{"h":7,"w":12,"x":12,"y":25},"id":12,"options":{"legend":{"showLegend":false},"tooltip":{"mode":"multi","sort":"desc"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"instance_device:node_disk_io_time_weighted_seconds:rate5m{job=\"node-exporter\", instance=\"$instance\", cluster=~\"$cluster\"} != 0","legendFormat":"{{device}}"}],"title":"Disk IO Saturation","type":"timeseries"},{"collapsed":false,"gridPos":{"h":1,"w":24,"x":0,"y":34},"id":13,"panels":[],"title":"Disk Space","type":"row"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":100,"showPoints":"never","stacking":{"mode":"normal"}},"unit":"percentunit"}},"gridPos":{"h":7,"w":24,"x":0,"y":35},"id":14,"options":{"legend":{"showLegend":false},"tooltip":{"mode":"multi","sort":"desc"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"sort_desc(1 -\n (\n max without (mountpoint, fstype) (node_filesystem_avail_bytes{job=\"node-exporter\", fstype!=\"\", instance=\"$instance\", cluster=~\"$cluster\"})\n /\n max without (mountpoint, fstype) (node_filesystem_size_bytes{job=\"node-exporter\", fstype!=\"\", instance=\"$instance\", cluster=~\"$cluster\"})\n ) != 0\n)\n","legendFormat":"{{device}}"}],"title":"Disk Space Utilisation","type":"timeseries"}],"refresh":"30s","schemaVersion":39,"tags":["node-exporter-mixin"],"templating":{"list":[{"name":"datasource","query":"prometheus","type":"datasource"},{"allValue":".*","datasource":{"type":"prometheus","uid":"${datasource}"},"hide":`}}{{ if .Values.grafana.sidecar.dashboards.multicluster.global.enabled }}0{{ else }}2{{ end }}{{`,"includeAll":true,"name":"cluster","query":"label_values(node_time_seconds, cluster)","refresh":2,"sort":1,"type":"query"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"name":"instance","query":"label_values(node_exporter_build_info{job=\"node-exporter\", cluster=~\"$cluster\"}, instance)","refresh":2,"sort":1,"type":"query"}]},"time":{"from":"now-1h","to":"now"},"timezone": "`}}{{ .Values.grafana.defaultDashboardsTimezone }}{{`","title":"Node Exporter / USE Method / Node","uid":"fac67cfbe174d3ef53eb473d73d9212f"}`}} + {{`{"graphTooltip":1,"panels":[{"collapsed":false,"gridPos":{"h":1,"w":24,"x":0,"y":0},"id":1,"panels":[],"title":"CPU","type":"row"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":100,"showPoints":"never","stacking":{"mode":"normal"}},"unit":"percentunit"}},"gridPos":{"h":7,"w":12,"x":0,"y":1},"id":2,"options":{"legend":{"showLegend":false},"tooltip":{"mode":"multi","sort":"desc"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"instance:node_cpu_utilisation:rate5m{job=\"node-exporter\", instance=\"$instance\", cluster=~\"$cluster\"} != 0","legendFormat":"Utilisation"}],"title":"CPU Utilisation","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":100,"showPoints":"never","stacking":{"mode":"normal"}},"unit":"percentunit"}},"gridPos":{"h":7,"w":12,"x":12,"y":1},"id":3,"options":{"legend":{"showLegend":false},"tooltip":{"mode":"multi","sort":"desc"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"instance:node_load1_per_cpu:ratio{job=\"node-exporter\", instance=\"$instance\", cluster=~\"$cluster\"} != 0","legendFormat":"Saturation"}],"title":"CPU Saturation (Load1 per CPU)","type":"timeseries"},{"collapsed":false,"gridPos":{"h":1,"w":24,"x":0,"y":8},"id":4,"panels":[],"title":"Memory","type":"row"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":100,"showPoints":"never","stacking":{"mode":"normal"}},"unit":"percentunit"}},"gridPos":{"h":7,"w":12,"x":0,"y":9},"id":5,"options":{"legend":{"showLegend":false},"tooltip":{"mode":"multi","sort":"desc"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"instance:node_memory_utilisation:ratio{job=\"node-exporter\", instance=\"$instance\", cluster=~\"$cluster\"} != 0","legendFormat":"Utilisation"}],"title":"Memory Utilisation","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":100,"showPoints":"never","stacking":{"mode":"normal"}},"unit":"rds"}},"gridPos":{"h":7,"w":12,"x":12,"y":9},"id":6,"options":{"legend":{"showLegend":false},"tooltip":{"mode":"multi","sort":"desc"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"instance:node_vmstat_pgmajfault:rate5m{job=\"node-exporter\", instance=\"$instance\", cluster=~\"$cluster\"} != 0","legendFormat":"Major page Faults"}],"title":"Memory Saturation (Major Page Faults)","type":"timeseries"},{"collapsed":false,"gridPos":{"h":1,"w":24,"x":0,"y":16},"id":7,"panels":[],"title":"Network","type":"row"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":100,"showPoints":"never","stacking":{"mode":"normal"}},"unit":"Bps"},"overrides":[{"matcher":{"id":"byRegexp","options":"/Transmit/"},"properties":[{"id":"custom.transform","value":"negative-Y"}]}]},"gridPos":{"h":7,"w":12,"x":0,"y":17},"id":8,"options":{"legend":{"showLegend":false},"tooltip":{"mode":"multi","sort":"desc"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"instance:node_network_receive_bytes_physical:rate5m{job=\"node-exporter\", instance=\"$instance\", cluster=~\"$cluster\"} != 0","legendFormat":"Receive"},{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"instance:node_network_transmit_bytes_physical:rate5m{job=\"node-exporter\", instance=\"$instance\", cluster=~\"$cluster\"} != 0","legendFormat":"Transmit"}],"title":"Network Utilisation (Bytes Receive/Transmit)","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":100,"showPoints":"never","stacking":{"mode":"normal"}},"unit":"Bps"},"overrides":[{"matcher":{"id":"byRegexp","options":"/Transmit/"},"properties":[{"id":"custom.transform","value":"negative-Y"}]}]},"gridPos":{"h":7,"w":12,"x":12,"y":17},"id":9,"options":{"legend":{"showLegend":false},"tooltip":{"mode":"multi","sort":"desc"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"instance:node_network_receive_drop_physical:rate5m{job=\"node-exporter\", instance=\"$instance\", cluster=~\"$cluster\"} != 0","legendFormat":"Receive"},{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"instance:node_network_transmit_drop_physical:rate5m{job=\"node-exporter\", instance=\"$instance\", cluster=~\"$cluster\"} != 0","legendFormat":"Transmit"}],"title":"Network Saturation (Drops Receive/Transmit)","type":"timeseries"},{"collapsed":false,"gridPos":{"h":1,"w":24,"x":0,"y":24},"id":10,"panels":[],"title":"Disk IO","type":"row"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":100,"showPoints":"never","stacking":{"mode":"normal"}},"unit":"percentunit"}},"gridPos":{"h":7,"w":12,"x":0,"y":25},"id":11,"options":{"legend":{"showLegend":false},"tooltip":{"mode":"multi","sort":"desc"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"instance_device:node_disk_io_time_seconds:rate5m{job=\"node-exporter\", instance=\"$instance\", cluster=~\"$cluster\"} != 0","legendFormat":"{{device}}"}],"title":"Disk IO Utilisation","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":100,"showPoints":"never","stacking":{"mode":"normal"}},"unit":"percentunit"}},"gridPos":{"h":7,"w":12,"x":12,"y":25},"id":12,"options":{"legend":{"showLegend":false},"tooltip":{"mode":"multi","sort":"desc"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"instance_device:node_disk_io_time_weighted_seconds:rate5m{job=\"node-exporter\", instance=\"$instance\", cluster=~\"$cluster\"} != 0","legendFormat":"{{device}}"}],"title":"Disk IO Saturation","type":"timeseries"},{"collapsed":false,"gridPos":{"h":1,"w":24,"x":0,"y":34},"id":13,"panels":[],"title":"Disk Space","type":"row"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":100,"showPoints":"never","stacking":{"mode":"normal"}},"unit":"percentunit"}},"gridPos":{"h":7,"w":24,"x":0,"y":35},"id":14,"options":{"legend":{"showLegend":false},"tooltip":{"mode":"multi","sort":"desc"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"sort_desc(1 -\n (\n max without (mountpoint, fstype) (node_filesystem_avail_bytes{job=\"node-exporter\", fstype!=\"\", instance=\"$instance\", cluster=~\"$cluster\"})\n /\n max without (mountpoint, fstype) (node_filesystem_size_bytes{job=\"node-exporter\", fstype!=\"\", instance=\"$instance\", cluster=~\"$cluster\"})\n ) != 0\n)\n","legendFormat":"{{device}}"}],"title":"Disk Space Utilisation","type":"timeseries"}],"refresh":"30s","schemaVersion":39,"tags":["node-exporter-mixin"],"templating":{"list":[{"name":"datasource","query":"prometheus","type":"datasource"},{"allValue":".*","datasource":{"type":"prometheus","uid":"${datasource}"},"hide":`}}{{ if .Values.grafana.sidecar.dashboards.multicluster.global.enabled }}0{{ else }}2{{ end }}{{`,"includeAll":true,"name":"cluster","query":"label_values(node_time_seconds, cluster)","refresh":2,"sort":1,"type":"query"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"name":"instance","query":"label_values(node_exporter_build_info{job=\"node-exporter\", cluster=~\"$cluster\"}, instance)","refresh":2,"sort":1,"type":"query"}]},"time":{"from":"now-1h","to":"now"},"timezone": "`}}{{ .Values.grafana.defaultDashboardsTimezone }}{{`","title":"Node Exporter / USE Method / Node","uid":"fac67cfbe174d3ef53eb473d73d9212f"}`}} {{- end }} --- {{- if and .Values.grafana.operator.dashboardsConfigMapRefEnabled (or .Values.grafana.enabled .Values.grafana.forceDeployDashboards) (semverCompare ">=1.14.0-0" $kubeTargetVersion) (semverCompare "<9.9.9-9" $kubeTargetVersion) .Values.grafana.defaultDashboardsEnabled (or .Values.nodeExporter.enabled .Values.nodeExporter.forceDeployDashboards) }} diff --git a/charts/kube-prometheus-stack/templates/grafana/dashboards-1.14/nodes-aix.yaml b/charts/kube-prometheus-stack/templates/grafana/dashboards-1.14/nodes-aix.yaml index 03d280d2b0..6c2e351cd5 100644 --- a/charts/kube-prometheus-stack/templates/grafana/dashboards-1.14/nodes-aix.yaml +++ b/charts/kube-prometheus-stack/templates/grafana/dashboards-1.14/nodes-aix.yaml @@ -1,5 +1,5 @@ {{- /* -Generated from 'nodes-aix' from https://raw.githubusercontent.com/prometheus-operator/kube-prometheus/eaca1a5fd76b356974054906af46810fec1cd7f8/manifests/grafana-dashboardDefinitions.yaml +Generated from 'nodes-aix' from https://raw.githubusercontent.com/prometheus-operator/kube-prometheus/4eafa8b5395ef839bb02a55e3b5fbdfa03280cf9/manifests/grafana-dashboardDefinitions.yaml Do not change in-place! In order to change this file first read following link: https://github.com/prometheus-community/helm-charts/tree/main/charts/kube-prometheus-stack/hack */ -}} @@ -20,7 +20,7 @@ metadata: {{- include "kube-prometheus-stack.labels" $ | nindent 4 }} data: nodes-aix.json: |- - {{`{"graphTooltip":1,"panels":[{"collapsed":false,"gridPos":{"h":1,"w":24,"x":0,"y":0},"id":1,"panels":[],"title":"CPU","type":"row"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","stacking":{"mode":"normal"}},"max":1,"min":0,"unit":"percentunit"}},"gridPos":{"h":7,"w":12,"x":0,"y":1},"id":2,"options":{"tooltip":{"mode":"multi"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"(\n (1 - sum without (mode) (rate(node_cpu_seconds_total{job=\"node-exporter\", mode=~\"idle|iowait|steal\", instance=\"$instance\", cluster=~\"$cluster\"}[$__rate_interval])))\n/ ignoring(cpu) group_left\n count without (cpu, mode) (node_cpu_seconds_total{job=\"node-exporter\", mode=\"idle\", instance=\"$instance\", cluster=~\"$cluster\"})\n)\n","intervalFactor":5,"legendFormat":"{{cpu}}"}],"title":"CPU Usage","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":0,"showPoints":"never"},"min":0,"unit":"short"}},"gridPos":{"h":7,"w":12,"x":12,"y":1},"id":3,"options":{"tooltip":{"mode":"multi"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"node_load1{job=\"node-exporter\", instance=\"$instance\", cluster=~\"$cluster\"}","legendFormat":"1m load average"},{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"node_load5{job=\"node-exporter\", instance=\"$instance\", cluster=~\"$cluster\"}","legendFormat":"5m load average"},{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"node_load15{job=\"node-exporter\", instance=\"$instance\", cluster=~\"$cluster\"}","legendFormat":"15m load average"},{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"count(node_cpu_seconds_total{job=\"node-exporter\", instance=\"$instance\", cluster=~\"$cluster\", mode=\"idle\"})","legendFormat":"logical cores"}],"title":"Load Average","type":"timeseries"},{"collapsed":false,"gridPos":{"h":1,"w":24,"x":0,"y":8},"id":4,"title":"Memory","type":"row"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","stacking":{"mode":"none"}},"min":0,"unit":"bytes"}},"gridPos":{"h":7,"w":18,"x":0,"y":9},"id":5,"options":{"tooltip":{"mode":"multi"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"node_memory_total_bytes{job=\"node-exporter\", instance=\"$instance\", cluster=~\"$cluster\"}","legendFormat":"Physical Memory"},{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"(\n node_memory_total_bytes{job=\"node-exporter\", instance=\"$instance\", cluster=~\"$cluster\"} -\n node_memory_available_bytes{job=\"node-exporter\", instance=\"$instance\", cluster=~\"$cluster\"}\n)\n","legendFormat":"Memory Used"}],"title":"Memory Usage","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"max":100,"min":0,"thresholds":{"steps":[{"color":"rgba(50, 172, 45, 0.97)"},{"color":"rgba(237, 129, 40, 0.89)","value":80},{"color":"rgba(245, 54, 54, 0.9)","value":90}]},"unit":"percent"}},"gridPos":{"h":7,"w":6,"x":18,"y":9},"id":6,"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"100 -\n(\n avg(node_memory_available_bytes{job=\"node-exporter\", instance=\"$instance\", cluster=~\"$cluster\"}) /\n avg(node_memory_total_bytes{job=\"node-exporter\", instance=\"$instance\", cluster=~\"$cluster\"})\n * 100\n)\n"}],"title":"Memory Usage","type":"gauge"},{"collapsed":false,"gridPos":{"h":1,"w":24,"x":0,"y":18},"id":7,"panels":[],"title":"Disk","type":"row"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":0,"showPoints":"never"},"min":0},"overrides":[{"matcher":{"id":"byRegexp","options":"/ read| written/"},"properties":[{"id":"unit","value":"Bps"}]},{"matcher":{"id":"byRegexp","options":"/ io time/"},"properties":[{"id":"unit","value":"percentunit"}]}]},"gridPos":{"h":7,"w":12,"x":0,"y":19},"id":8,"options":{"tooltip":{"mode":"multi"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"rate(node_disk_read_bytes_total{job=\"node-exporter\", instance=\"$instance\", cluster=~\"$cluster\", device=~\"(/dev/)?(mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|md.+|dasd.+)\"}[$__rate_interval])","intervalFactor":1,"legendFormat":"{{device}} read"},{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"rate(node_disk_written_bytes_total{job=\"node-exporter\", instance=\"$instance\", cluster=~\"$cluster\", device=~\"(/dev/)?(mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|md.+|dasd.+)\"}[$__rate_interval])","intervalFactor":1,"legendFormat":"{{device}} written"},{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"rate(node_disk_io_time_seconds_total{job=\"node-exporter\", instance=\"$instance\", cluster=~\"$cluster\", device=~\"(/dev/)?(mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|md.+|dasd.+)\"}[$__rate_interval])","intervalFactor":1,"legendFormat":"{{device}} io time"}],"title":"Disk I/O","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"thresholds":{"steps":[{"color":"green"},{"color":"yellow","value":0.8},{"color":"red","value":0.9}]},"unit":"decbytes"},"overrides":[{"matcher":{"id":"byName","options":"Mounted on"},"properties":[{"id":"custom.width","value":260}]},{"matcher":{"id":"byName","options":"Size"},"properties":[{"id":"custom.width","value":93}]},{"matcher":{"id":"byName","options":"Used"},"properties":[{"id":"custom.width","value":72}]},{"matcher":{"id":"byName","options":"Available"},"properties":[{"id":"custom.width","value":88}]},{"matcher":{"id":"byName","options":"Used, %"},"properties":[{"id":"unit","value":"percentunit"},{"id":"custom.cellOptions","value":{"type":"gauge"}},{"id":"max","value":1},{"id":"min","value":0}]}]},"gridPos":{"h":7,"w":12,"x":12,"y":19},"id":9,"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"max by (mountpoint) (node_filesystem_size_bytes{job=\"node-exporter\", instance=\"$instance\", cluster=~\"$cluster\", fstype!=\"\", mountpoint!=\"\"})\n","format":"table","instant":true,"legendFormat":""},{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"max by (mountpoint) (node_filesystem_avail_bytes{job=\"node-exporter\", instance=\"$instance\", cluster=~\"$cluster\", fstype!=\"\", mountpoint!=\"\"})\n","format":"table","instant":true,"legendFormat":""}],"title":"Disk Space Usage","transformations":[{"id":"groupBy","options":{"fields":{"Value #A":{"aggregations":["lastNotNull"],"operation":"aggregate"},"Value #B":{"aggregations":["lastNotNull"],"operation":"aggregate"},"mountpoint":{"aggregations":[],"operation":"groupby"}}}},{"id":"merge"},{"id":"calculateField","options":{"alias":"Used","binary":{"left":"Value #A (lastNotNull)","operator":"-","reducer":"sum","right":"Value #B (lastNotNull)"},"mode":"binary","reduce":{"reducer":"sum"}}},{"id":"calculateField","options":{"alias":"Used, %","binary":{"left":"Used","operator":"/","reducer":"sum","right":"Value #A (lastNotNull)"},"mode":"binary","reduce":{"reducer":"sum"}}},{"id":"organize","options":{"excludeByName":{},"indexByName":{},"renameByName":{"Value #A (lastNotNull)":"Size","Value #B (lastNotNull)":"Available","mountpoint":"Mounted on"}}},{"id":"sortBy","options":{"fields":{},"sort":[{"field":"Mounted on"}]}}],"type":"table"},{"collapsed":false,"gridPos":{"h":1,"w":24,"x":0,"y":26},"id":10,"panels":[],"title":"Network","type":"row"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"description":"Network received (bits/s)","fieldConfig":{"defaults":{"custom":{"fillOpacity":0,"showPoints":"never"},"min":0,"unit":"bps"}},"gridPos":{"h":7,"w":12,"x":0,"y":27},"id":11,"options":{"tooltip":{"mode":"multi"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"rate(node_network_receive_bytes_total{job=\"node-exporter\", instance=\"$instance\", cluster=~\"$cluster\", device!=\"lo\"}[$__rate_interval]) * 8","intervalFactor":1,"legendFormat":"{{device}}"}],"title":"Network Received","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"description":"Network transmitted (bits/s)","fieldConfig":{"defaults":{"custom":{"fillOpacity":0},"min":0,"unit":"bps"}},"gridPos":{"h":7,"w":12,"x":12,"y":27},"id":12,"options":{"tooltip":{"mode":"multi"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"rate(node_network_transmit_bytes_total{job=\"node-exporter\", instance=\"$instance\", cluster=~\"$cluster\", device!=\"lo\"}[$__rate_interval]) * 8","intervalFactor":1,"legendFormat":"{{device}}"}],"title":"Network Transmitted","type":"timeseries"}],"refresh":"30s","schemaVersion":39,"tags":["node-exporter-mixin"],"templating":{"list":[{"name":"datasource","query":"prometheus","type":"datasource"},{"allValue":".*","datasource":{"type":"prometheus","uid":"${datasource}"},"hide":`}}{{ if .Values.grafana.sidecar.dashboards.multicluster.global.enabled }}0{{ else }}2{{ end }}{{`,"includeAll":true,"label":"Cluster","name":"cluster","query":"label_values(node_uname_info{job=\"node-exporter\", sysname!=\"Darwin\"}, cluster)","refresh":2,"type":"query"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"label":"Instance","name":"instance","query":"label_values(node_uname_info{job=\"node-exporter\", cluster=~\"$cluster\", sysname!=\"Darwin\"}, instance)","refresh":2,"type":"query"}]},"time":{"from":"now-1h","to":"now"},"timezone": "`}}{{ .Values.grafana.defaultDashboardsTimezone }}{{`","title":"Node Exporter / AIX","uid":"7e0a61e486f727d763fb1d86fdd629c2"}`}} + {{`{"graphTooltip":1,"panels":[{"collapsed":false,"gridPos":{"h":1,"w":24,"x":0,"y":0},"id":1,"panels":[],"title":"CPU","type":"row"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","stacking":{"mode":"normal"}},"max":1,"min":0,"unit":"percentunit"}},"gridPos":{"h":7,"w":12,"x":0,"y":1},"id":2,"options":{"tooltip":{"mode":"multi"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"(\n (1 - sum without (mode) (rate(node_cpu_seconds_total{job=\"node-exporter\", mode=~\"idle|iowait|steal\", instance=\"$instance\", cluster=~\"$cluster\"}[$__rate_interval])))\n/ ignoring(cpu) group_left\n count without (cpu, mode) (node_cpu_seconds_total{job=\"node-exporter\", mode=\"idle\", instance=\"$instance\", cluster=~\"$cluster\"})\n)\n","intervalFactor":5,"legendFormat":"{{cpu}}"}],"title":"CPU Usage","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":0,"showPoints":"never"},"min":0,"unit":"short"}},"gridPos":{"h":7,"w":12,"x":12,"y":1},"id":3,"options":{"tooltip":{"mode":"multi"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"node_load1{job=\"node-exporter\", instance=\"$instance\", cluster=~\"$cluster\"}","legendFormat":"1m load average"},{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"node_load5{job=\"node-exporter\", instance=\"$instance\", cluster=~\"$cluster\"}","legendFormat":"5m load average"},{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"node_load15{job=\"node-exporter\", instance=\"$instance\", cluster=~\"$cluster\"}","legendFormat":"15m load average"},{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"count(node_cpu_seconds_total{job=\"node-exporter\", instance=\"$instance\", cluster=~\"$cluster\", mode=\"idle\"})","legendFormat":"logical cores"}],"title":"Load Average","type":"timeseries"},{"collapsed":false,"gridPos":{"h":1,"w":24,"x":0,"y":8},"id":4,"title":"Memory","type":"row"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","stacking":{"mode":"none"}},"min":0,"unit":"bytes"}},"gridPos":{"h":7,"w":18,"x":0,"y":9},"id":5,"options":{"tooltip":{"mode":"multi"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"node_memory_total_bytes{job=\"node-exporter\", instance=\"$instance\", cluster=~\"$cluster\"}","legendFormat":"Physical Memory"},{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"(\n node_memory_total_bytes{job=\"node-exporter\", instance=\"$instance\", cluster=~\"$cluster\"} -\n node_memory_available_bytes{job=\"node-exporter\", instance=\"$instance\", cluster=~\"$cluster\"}\n)\n","legendFormat":"Memory Used"}],"title":"Memory Usage","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"max":100,"min":0,"thresholds":{"steps":[{"color":"rgba(50, 172, 45, 0.97)"},{"color":"rgba(237, 129, 40, 0.89)","value":80},{"color":"rgba(245, 54, 54, 0.9)","value":90}]},"unit":"percent"}},"gridPos":{"h":7,"w":6,"x":18,"y":9},"id":6,"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"100 -\n(\n avg(node_memory_available_bytes{job=\"node-exporter\", instance=\"$instance\", cluster=~\"$cluster\"}) /\n avg(node_memory_total_bytes{job=\"node-exporter\", instance=\"$instance\", cluster=~\"$cluster\"})\n * 100\n)\n"}],"title":"Memory Usage","type":"gauge"},{"collapsed":false,"gridPos":{"h":1,"w":24,"x":0,"y":18},"id":7,"panels":[],"title":"Disk","type":"row"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":0,"showPoints":"never"},"min":0},"overrides":[{"matcher":{"id":"byRegexp","options":"/ read| written/"},"properties":[{"id":"unit","value":"Bps"}]},{"matcher":{"id":"byRegexp","options":"/ io time/"},"properties":[{"id":"unit","value":"percentunit"}]}]},"gridPos":{"h":7,"w":12,"x":0,"y":19},"id":8,"options":{"tooltip":{"mode":"multi"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"rate(node_disk_read_bytes_total{job=\"node-exporter\", instance=\"$instance\", cluster=~\"$cluster\", device=~\"(/dev/)?(mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|md.+|dasd.+)\"}[$__rate_interval])","intervalFactor":1,"legendFormat":"{{device}} read"},{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"rate(node_disk_written_bytes_total{job=\"node-exporter\", instance=\"$instance\", cluster=~\"$cluster\", device=~\"(/dev/)?(mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|md.+|dasd.+)\"}[$__rate_interval])","intervalFactor":1,"legendFormat":"{{device}} written"},{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"rate(node_disk_io_time_seconds_total{job=\"node-exporter\", instance=\"$instance\", cluster=~\"$cluster\", device=~\"(/dev/)?(mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|md.+|dasd.+)\"}[$__rate_interval])","intervalFactor":1,"legendFormat":"{{device}} io time"}],"title":"Disk I/O","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"thresholds":{"steps":[{"color":"green"},{"color":"yellow","value":0.8},{"color":"red","value":0.9}]},"unit":"decbytes"},"overrides":[{"matcher":{"id":"byName","options":"Mounted on"},"properties":[{"id":"custom.width","value":260}]},{"matcher":{"id":"byName","options":"Size"},"properties":[{"id":"custom.width","value":93}]},{"matcher":{"id":"byName","options":"Used"},"properties":[{"id":"custom.width","value":72}]},{"matcher":{"id":"byName","options":"Available"},"properties":[{"id":"custom.width","value":88}]},{"matcher":{"id":"byName","options":"Used, %"},"properties":[{"id":"unit","value":"percentunit"},{"id":"custom.cellOptions","value":{"type":"gauge"}},{"id":"max","value":1},{"id":"min","value":0}]}]},"gridPos":{"h":7,"w":12,"x":12,"y":19},"id":9,"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"max by (mountpoint) (node_filesystem_size_bytes{job=\"node-exporter\", instance=\"$instance\", cluster=~\"$cluster\", fstype!=\"\", mountpoint!=\"\"})\n","format":"table","instant":true,"legendFormat":""},{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"max by (mountpoint) (node_filesystem_avail_bytes{job=\"node-exporter\", instance=\"$instance\", cluster=~\"$cluster\", fstype!=\"\", mountpoint!=\"\"})\n","format":"table","instant":true,"legendFormat":""}],"title":"Disk Space Usage","transformations":[{"id":"groupBy","options":{"fields":{"Value #A":{"aggregations":["lastNotNull"],"operation":"aggregate"},"Value #B":{"aggregations":["lastNotNull"],"operation":"aggregate"},"mountpoint":{"aggregations":[],"operation":"groupby"}}}},{"id":"merge"},{"id":"calculateField","options":{"alias":"Used","binary":{"left":"Value #A (lastNotNull)","operator":"-","reducer":"sum","right":"Value #B (lastNotNull)"},"mode":"binary","reduce":{"reducer":"sum"}}},{"id":"calculateField","options":{"alias":"Used, %","binary":{"left":"Used","operator":"/","reducer":"sum","right":"Value #A (lastNotNull)"},"mode":"binary","reduce":{"reducer":"sum"}}},{"id":"organize","options":{"excludeByName":{},"indexByName":{},"renameByName":{"Value #A (lastNotNull)":"Size","Value #B (lastNotNull)":"Available","mountpoint":"Mounted on"}}},{"id":"sortBy","options":{"fields":{},"sort":[{"field":"Mounted on"}]}}],"type":"table"},{"collapsed":false,"gridPos":{"h":1,"w":24,"x":0,"y":26},"id":10,"panels":[],"title":"Network","type":"row"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"description":"Network received (bits/s)","fieldConfig":{"defaults":{"custom":{"fillOpacity":0,"showPoints":"never"},"min":0,"unit":"bps"}},"gridPos":{"h":7,"w":12,"x":0,"y":27},"id":11,"options":{"tooltip":{"mode":"multi"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"rate(node_network_receive_bytes_total{job=\"node-exporter\", instance=\"$instance\", cluster=~\"$cluster\", device!=\"lo\"}[$__rate_interval]) * 8","intervalFactor":1,"legendFormat":"{{device}}"}],"title":"Network Received","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"description":"Network transmitted (bits/s)","fieldConfig":{"defaults":{"custom":{"fillOpacity":0},"min":0,"unit":"bps"}},"gridPos":{"h":7,"w":12,"x":12,"y":27},"id":12,"options":{"tooltip":{"mode":"multi"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"rate(node_network_transmit_bytes_total{job=\"node-exporter\", instance=\"$instance\", cluster=~\"$cluster\", device!=\"lo\"}[$__rate_interval]) * 8","intervalFactor":1,"legendFormat":"{{device}}"}],"title":"Network Transmitted","type":"timeseries"}],"refresh":"30s","schemaVersion":39,"tags":["node-exporter-mixin"],"templating":{"list":[{"name":"datasource","query":"prometheus","type":"datasource"},{"allValue":".*","datasource":{"type":"prometheus","uid":"${datasource}"},"hide":`}}{{ if .Values.grafana.sidecar.dashboards.multicluster.global.enabled }}0{{ else }}2{{ end }}{{`,"includeAll":true,"label":"Cluster","name":"cluster","query":"label_values(node_uname_info{job=\"node-exporter\", sysname!=\"Darwin\"}, cluster)","refresh":2,"type":"query"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"label":"Instance","name":"instance","query":"label_values(node_uname_info{job=\"node-exporter\", cluster=~\"$cluster\", sysname!=\"Darwin\"}, instance)","refresh":2,"type":"query"}]},"time":{"from":"now-1h","to":"now"},"timezone": "`}}{{ .Values.grafana.defaultDashboardsTimezone }}{{`","title":"Node Exporter / AIX","uid":"7e0a61e486f727d763fb1d86fdd629c2"}`}} {{- end }} --- {{- if and .Values.grafana.operator.dashboardsConfigMapRefEnabled (or .Values.grafana.enabled .Values.grafana.forceDeployDashboards) (semverCompare ">=1.14.0-0" $kubeTargetVersion) (semverCompare "<9.9.9-9" $kubeTargetVersion) .Values.grafana.defaultDashboardsEnabled (and (or .Values.nodeExporter.enabled .Values.nodeExporter.forceDeployDashboards) .Values.nodeExporter.operatingSystems.aix.enabled) }} diff --git a/charts/kube-prometheus-stack/templates/grafana/dashboards-1.14/nodes-darwin.yaml b/charts/kube-prometheus-stack/templates/grafana/dashboards-1.14/nodes-darwin.yaml index 16fc23aa48..201707bccf 100644 --- a/charts/kube-prometheus-stack/templates/grafana/dashboards-1.14/nodes-darwin.yaml +++ b/charts/kube-prometheus-stack/templates/grafana/dashboards-1.14/nodes-darwin.yaml @@ -1,5 +1,5 @@ {{- /* -Generated from 'nodes-darwin' from https://raw.githubusercontent.com/prometheus-operator/kube-prometheus/eaca1a5fd76b356974054906af46810fec1cd7f8/manifests/grafana-dashboardDefinitions.yaml +Generated from 'nodes-darwin' from https://raw.githubusercontent.com/prometheus-operator/kube-prometheus/4eafa8b5395ef839bb02a55e3b5fbdfa03280cf9/manifests/grafana-dashboardDefinitions.yaml Do not change in-place! In order to change this file first read following link: https://github.com/prometheus-community/helm-charts/tree/main/charts/kube-prometheus-stack/hack */ -}} @@ -20,7 +20,7 @@ metadata: {{- include "kube-prometheus-stack.labels" $ | nindent 4 }} data: nodes-darwin.json: |- - {{`{"graphTooltip":1,"panels":[{"collapsed":false,"gridPos":{"h":1,"w":24,"x":0,"y":0},"id":1,"panels":[],"title":"CPU","type":"row"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","stacking":{"mode":"normal"}},"max":1,"min":0,"unit":"percentunit"}},"gridPos":{"h":7,"w":12,"x":0,"y":1},"id":2,"options":{"tooltip":{"mode":"multi"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"(\n (1 - sum without (mode) (rate(node_cpu_seconds_total{job=\"node-exporter\", mode=~\"idle|iowait|steal\", instance=\"$instance\", cluster=~\"$cluster\"}[$__rate_interval])))\n/ ignoring(cpu) group_left\n count without (cpu, mode) (node_cpu_seconds_total{job=\"node-exporter\", mode=\"idle\", instance=\"$instance\", cluster=~\"$cluster\"})\n)\n","intervalFactor":5,"legendFormat":"{{cpu}}"}],"title":"CPU Usage","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":0,"showPoints":"never"},"min":0,"unit":"short"}},"gridPos":{"h":7,"w":12,"x":12,"y":1},"id":3,"options":{"tooltip":{"mode":"multi"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"node_load1{job=\"node-exporter\", instance=\"$instance\", cluster=~\"$cluster\"}","legendFormat":"1m load average"},{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"node_load5{job=\"node-exporter\", instance=\"$instance\", cluster=~\"$cluster\"}","legendFormat":"5m load average"},{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"node_load15{job=\"node-exporter\", instance=\"$instance\", cluster=~\"$cluster\"}","legendFormat":"15m load average"},{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"count(node_cpu_seconds_total{job=\"node-exporter\", instance=\"$instance\", cluster=~\"$cluster\", mode=\"idle\"})","legendFormat":"logical cores"}],"title":"Load Average","type":"timeseries"},{"collapsed":false,"gridPos":{"h":1,"w":24,"x":0,"y":8},"id":4,"title":"Memory","type":"row"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","stacking":{"mode":"none"}},"min":0,"unit":"bytes"}},"gridPos":{"h":7,"w":18,"x":0,"y":9},"id":5,"options":{"tooltip":{"mode":"multi"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"node_memory_total_bytes{job=\"node-exporter\", instance=\"$instance\", cluster=~\"$cluster\"}","legendFormat":"Physical Memory"},{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"(\n node_memory_internal_bytes{job=\"node-exporter\", instance=\"$instance\", cluster=~\"$cluster\"} -\n node_memory_purgeable_bytes{job=\"node-exporter\", instance=\"$instance\", cluster=~\"$cluster\"} +\n node_memory_wired_bytes{job=\"node-exporter\", instance=\"$instance\", cluster=~\"$cluster\"} +\n node_memory_compressed_bytes{job=\"node-exporter\", instance=\"$instance\", cluster=~\"$cluster\"}\n)\n","legendFormat":"Memory Used"},{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"(\n node_memory_internal_bytes{job=\"node-exporter\", instance=\"$instance\", cluster=~\"$cluster\"} -\n node_memory_purgeable_bytes{job=\"node-exporter\", instance=\"$instance\", cluster=~\"$cluster\"}\n)\n","legendFormat":"App Memory"},{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"node_memory_wired_bytes{job=\"node-exporter\", instance=\"$instance\", cluster=~\"$cluster\"}","legendFormat":"Wired Memory"},{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"node_memory_compressed_bytes{job=\"node-exporter\", instance=\"$instance\", cluster=~\"$cluster\"}","legendFormat":"Compressed"}],"title":"Memory Usage","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"max":100,"min":0,"thresholds":{"steps":[{"color":"rgba(50, 172, 45, 0.97)"},{"color":"rgba(237, 129, 40, 0.89)","value":80},{"color":"rgba(245, 54, 54, 0.9)","value":90}]},"unit":"percent"}},"gridPos":{"h":7,"w":6,"x":18,"y":9},"id":6,"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"(\n (\n avg(node_memory_internal_bytes{job=\"node-exporter\", instance=\"$instance\", cluster=~\"$cluster\"}) -\n avg(node_memory_purgeable_bytes{job=\"node-exporter\", instance=\"$instance\", cluster=~\"$cluster\"}) +\n avg(node_memory_wired_bytes{job=\"node-exporter\", instance=\"$instance\", cluster=~\"$cluster\"}) +\n avg(node_memory_compressed_bytes{job=\"node-exporter\", instance=\"$instance\", cluster=~\"$cluster\"})\n ) /\n avg(node_memory_total_bytes{job=\"node-exporter\", instance=\"$instance\", cluster=~\"$cluster\"})\n)\n*\n100\n"}],"title":"Memory Usage","type":"gauge"},{"collapsed":false,"gridPos":{"h":1,"w":24,"x":0,"y":18},"id":7,"panels":[],"title":"Disk","type":"row"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":0,"showPoints":"never"},"min":0},"overrides":[{"matcher":{"id":"byRegexp","options":"/ read| written/"},"properties":[{"id":"unit","value":"Bps"}]},{"matcher":{"id":"byRegexp","options":"/ io time/"},"properties":[{"id":"unit","value":"percentunit"}]}]},"gridPos":{"h":7,"w":12,"x":0,"y":19},"id":8,"options":{"tooltip":{"mode":"multi"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"rate(node_disk_read_bytes_total{job=\"node-exporter\", instance=\"$instance\", cluster=~\"$cluster\", device=~\"(/dev/)?(mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|md.+|dasd.+)\"}[$__rate_interval])","intervalFactor":1,"legendFormat":"{{device}} read"},{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"rate(node_disk_written_bytes_total{job=\"node-exporter\", instance=\"$instance\", cluster=~\"$cluster\", device=~\"(/dev/)?(mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|md.+|dasd.+)\"}[$__rate_interval])","intervalFactor":1,"legendFormat":"{{device}} written"},{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"rate(node_disk_io_time_seconds_total{job=\"node-exporter\", instance=\"$instance\", cluster=~\"$cluster\", device=~\"(/dev/)?(mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|md.+|dasd.+)\"}[$__rate_interval])","intervalFactor":1,"legendFormat":"{{device}} io time"}],"title":"Disk I/O","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"thresholds":{"steps":[{"color":"green"},{"color":"yellow","value":0.8},{"color":"red","value":0.9}]},"unit":"decbytes"},"overrides":[{"matcher":{"id":"byName","options":"Mounted on"},"properties":[{"id":"custom.width","value":260}]},{"matcher":{"id":"byName","options":"Size"},"properties":[{"id":"custom.width","value":93}]},{"matcher":{"id":"byName","options":"Used"},"properties":[{"id":"custom.width","value":72}]},{"matcher":{"id":"byName","options":"Available"},"properties":[{"id":"custom.width","value":88}]},{"matcher":{"id":"byName","options":"Used, %"},"properties":[{"id":"unit","value":"percentunit"},{"id":"custom.cellOptions","value":{"type":"gauge"}},{"id":"max","value":1},{"id":"min","value":0}]}]},"gridPos":{"h":7,"w":12,"x":12,"y":19},"id":9,"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"max by (mountpoint) (node_filesystem_size_bytes{job=\"node-exporter\", instance=\"$instance\", cluster=~\"$cluster\", fstype!=\"\", mountpoint!=\"\"})\n","format":"table","instant":true,"legendFormat":""},{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"max by (mountpoint) (node_filesystem_avail_bytes{job=\"node-exporter\", instance=\"$instance\", cluster=~\"$cluster\", fstype!=\"\", mountpoint!=\"\"})\n","format":"table","instant":true,"legendFormat":""}],"title":"Disk Space Usage","transformations":[{"id":"groupBy","options":{"fields":{"Value #A":{"aggregations":["lastNotNull"],"operation":"aggregate"},"Value #B":{"aggregations":["lastNotNull"],"operation":"aggregate"},"mountpoint":{"aggregations":[],"operation":"groupby"}}}},{"id":"merge"},{"id":"calculateField","options":{"alias":"Used","binary":{"left":"Value #A (lastNotNull)","operator":"-","reducer":"sum","right":"Value #B (lastNotNull)"},"mode":"binary","reduce":{"reducer":"sum"}}},{"id":"calculateField","options":{"alias":"Used, %","binary":{"left":"Used","operator":"/","reducer":"sum","right":"Value #A (lastNotNull)"},"mode":"binary","reduce":{"reducer":"sum"}}},{"id":"organize","options":{"excludeByName":{},"indexByName":{},"renameByName":{"Value #A (lastNotNull)":"Size","Value #B (lastNotNull)":"Available","mountpoint":"Mounted on"}}},{"id":"sortBy","options":{"fields":{},"sort":[{"field":"Mounted on"}]}}],"type":"table"},{"collapsed":false,"gridPos":{"h":1,"w":24,"x":0,"y":26},"id":10,"panels":[],"title":"Network","type":"row"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"description":"Network received (bits/s)","fieldConfig":{"defaults":{"custom":{"fillOpacity":0,"showPoints":"never"},"min":0,"unit":"bps"}},"gridPos":{"h":7,"w":12,"x":0,"y":27},"id":11,"options":{"tooltip":{"mode":"multi"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"rate(node_network_receive_bytes_total{job=\"node-exporter\", instance=\"$instance\", cluster=~\"$cluster\", device!=\"lo\"}[$__rate_interval]) * 8","intervalFactor":1,"legendFormat":"{{device}}"}],"title":"Network Received","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"description":"Network transmitted (bits/s)","fieldConfig":{"defaults":{"custom":{"fillOpacity":0},"min":0,"unit":"bps"}},"gridPos":{"h":7,"w":12,"x":12,"y":27},"id":12,"options":{"tooltip":{"mode":"multi"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"rate(node_network_transmit_bytes_total{job=\"node-exporter\", instance=\"$instance\", cluster=~\"$cluster\", device!=\"lo\"}[$__rate_interval]) * 8","intervalFactor":1,"legendFormat":"{{device}}"}],"title":"Network Transmitted","type":"timeseries"}],"refresh":"30s","schemaVersion":39,"tags":["node-exporter-mixin"],"templating":{"list":[{"name":"datasource","query":"prometheus","type":"datasource"},{"allValue":".*","datasource":{"type":"prometheus","uid":"${datasource}"},"hide":`}}{{ if .Values.grafana.sidecar.dashboards.multicluster.global.enabled }}0{{ else }}2{{ end }}{{`,"includeAll":true,"label":"Cluster","name":"cluster","query":"label_values(node_uname_info{job=\"node-exporter\", sysname=\"Darwin\"}, cluster)","refresh":2,"type":"query"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"label":"Instance","name":"instance","query":"label_values(node_uname_info{job=\"node-exporter\", cluster=~\"$cluster\", sysname=\"Darwin\"}, instance)","refresh":2,"type":"query"}]},"time":{"from":"now-1h","to":"now"},"timezone": "`}}{{ .Values.grafana.defaultDashboardsTimezone }}{{`","title":"Node Exporter / MacOS","uid":"629701ea43bf69291922ea45f4a87d37"}`}} + {{`{"graphTooltip":1,"panels":[{"collapsed":false,"gridPos":{"h":1,"w":24,"x":0,"y":0},"id":1,"panels":[],"title":"CPU","type":"row"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","stacking":{"mode":"normal"}},"max":1,"min":0,"unit":"percentunit"}},"gridPos":{"h":7,"w":12,"x":0,"y":1},"id":2,"options":{"tooltip":{"mode":"multi"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"(\n (1 - sum without (mode) (rate(node_cpu_seconds_total{job=\"node-exporter\", mode=~\"idle|iowait|steal\", instance=\"$instance\", cluster=~\"$cluster\"}[$__rate_interval])))\n/ ignoring(cpu) group_left\n count without (cpu, mode) (node_cpu_seconds_total{job=\"node-exporter\", mode=\"idle\", instance=\"$instance\", cluster=~\"$cluster\"})\n)\n","intervalFactor":5,"legendFormat":"{{cpu}}"}],"title":"CPU Usage","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":0,"showPoints":"never"},"min":0,"unit":"short"}},"gridPos":{"h":7,"w":12,"x":12,"y":1},"id":3,"options":{"tooltip":{"mode":"multi"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"node_load1{job=\"node-exporter\", instance=\"$instance\", cluster=~\"$cluster\"}","legendFormat":"1m load average"},{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"node_load5{job=\"node-exporter\", instance=\"$instance\", cluster=~\"$cluster\"}","legendFormat":"5m load average"},{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"node_load15{job=\"node-exporter\", instance=\"$instance\", cluster=~\"$cluster\"}","legendFormat":"15m load average"},{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"count(node_cpu_seconds_total{job=\"node-exporter\", instance=\"$instance\", cluster=~\"$cluster\", mode=\"idle\"})","legendFormat":"logical cores"}],"title":"Load Average","type":"timeseries"},{"collapsed":false,"gridPos":{"h":1,"w":24,"x":0,"y":8},"id":4,"title":"Memory","type":"row"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","stacking":{"mode":"none"}},"min":0,"unit":"bytes"}},"gridPos":{"h":7,"w":18,"x":0,"y":9},"id":5,"options":{"tooltip":{"mode":"multi"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"node_memory_total_bytes{job=\"node-exporter\", instance=\"$instance\", cluster=~\"$cluster\"}","legendFormat":"Physical Memory"},{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"(\n node_memory_internal_bytes{job=\"node-exporter\", instance=\"$instance\", cluster=~\"$cluster\"} -\n node_memory_purgeable_bytes{job=\"node-exporter\", instance=\"$instance\", cluster=~\"$cluster\"} +\n node_memory_wired_bytes{job=\"node-exporter\", instance=\"$instance\", cluster=~\"$cluster\"} +\n node_memory_compressed_bytes{job=\"node-exporter\", instance=\"$instance\", cluster=~\"$cluster\"}\n)\n","legendFormat":"Memory Used"},{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"(\n node_memory_internal_bytes{job=\"node-exporter\", instance=\"$instance\", cluster=~\"$cluster\"} -\n node_memory_purgeable_bytes{job=\"node-exporter\", instance=\"$instance\", cluster=~\"$cluster\"}\n)\n","legendFormat":"App Memory"},{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"node_memory_wired_bytes{job=\"node-exporter\", instance=\"$instance\", cluster=~\"$cluster\"}","legendFormat":"Wired Memory"},{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"node_memory_compressed_bytes{job=\"node-exporter\", instance=\"$instance\", cluster=~\"$cluster\"}","legendFormat":"Compressed"}],"title":"Memory Usage","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"max":100,"min":0,"thresholds":{"steps":[{"color":"rgba(50, 172, 45, 0.97)"},{"color":"rgba(237, 129, 40, 0.89)","value":80},{"color":"rgba(245, 54, 54, 0.9)","value":90}]},"unit":"percent"}},"gridPos":{"h":7,"w":6,"x":18,"y":9},"id":6,"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"(\n (\n avg(node_memory_internal_bytes{job=\"node-exporter\", instance=\"$instance\", cluster=~\"$cluster\"}) -\n avg(node_memory_purgeable_bytes{job=\"node-exporter\", instance=\"$instance\", cluster=~\"$cluster\"}) +\n avg(node_memory_wired_bytes{job=\"node-exporter\", instance=\"$instance\", cluster=~\"$cluster\"}) +\n avg(node_memory_compressed_bytes{job=\"node-exporter\", instance=\"$instance\", cluster=~\"$cluster\"})\n ) /\n avg(node_memory_total_bytes{job=\"node-exporter\", instance=\"$instance\", cluster=~\"$cluster\"})\n)\n*\n100\n"}],"title":"Memory Usage","type":"gauge"},{"collapsed":false,"gridPos":{"h":1,"w":24,"x":0,"y":18},"id":7,"panels":[],"title":"Disk","type":"row"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":0,"showPoints":"never"},"min":0},"overrides":[{"matcher":{"id":"byRegexp","options":"/ read| written/"},"properties":[{"id":"unit","value":"Bps"}]},{"matcher":{"id":"byRegexp","options":"/ io time/"},"properties":[{"id":"unit","value":"percentunit"}]}]},"gridPos":{"h":7,"w":12,"x":0,"y":19},"id":8,"options":{"tooltip":{"mode":"multi"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"rate(node_disk_read_bytes_total{job=\"node-exporter\", instance=\"$instance\", cluster=~\"$cluster\", device=~\"(/dev/)?(mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|md.+|dasd.+)\"}[$__rate_interval])","intervalFactor":1,"legendFormat":"{{device}} read"},{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"rate(node_disk_written_bytes_total{job=\"node-exporter\", instance=\"$instance\", cluster=~\"$cluster\", device=~\"(/dev/)?(mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|md.+|dasd.+)\"}[$__rate_interval])","intervalFactor":1,"legendFormat":"{{device}} written"},{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"rate(node_disk_io_time_seconds_total{job=\"node-exporter\", instance=\"$instance\", cluster=~\"$cluster\", device=~\"(/dev/)?(mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|md.+|dasd.+)\"}[$__rate_interval])","intervalFactor":1,"legendFormat":"{{device}} io time"}],"title":"Disk I/O","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"thresholds":{"steps":[{"color":"green"},{"color":"yellow","value":0.8},{"color":"red","value":0.9}]},"unit":"decbytes"},"overrides":[{"matcher":{"id":"byName","options":"Mounted on"},"properties":[{"id":"custom.width","value":260}]},{"matcher":{"id":"byName","options":"Size"},"properties":[{"id":"custom.width","value":93}]},{"matcher":{"id":"byName","options":"Used"},"properties":[{"id":"custom.width","value":72}]},{"matcher":{"id":"byName","options":"Available"},"properties":[{"id":"custom.width","value":88}]},{"matcher":{"id":"byName","options":"Used, %"},"properties":[{"id":"unit","value":"percentunit"},{"id":"custom.cellOptions","value":{"type":"gauge"}},{"id":"max","value":1},{"id":"min","value":0}]}]},"gridPos":{"h":7,"w":12,"x":12,"y":19},"id":9,"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"max by (mountpoint) (node_filesystem_size_bytes{job=\"node-exporter\", instance=\"$instance\", cluster=~\"$cluster\", fstype!=\"\", mountpoint!=\"\"})\n","format":"table","instant":true,"legendFormat":""},{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"max by (mountpoint) (node_filesystem_avail_bytes{job=\"node-exporter\", instance=\"$instance\", cluster=~\"$cluster\", fstype!=\"\", mountpoint!=\"\"})\n","format":"table","instant":true,"legendFormat":""}],"title":"Disk Space Usage","transformations":[{"id":"groupBy","options":{"fields":{"Value #A":{"aggregations":["lastNotNull"],"operation":"aggregate"},"Value #B":{"aggregations":["lastNotNull"],"operation":"aggregate"},"mountpoint":{"aggregations":[],"operation":"groupby"}}}},{"id":"merge"},{"id":"calculateField","options":{"alias":"Used","binary":{"left":"Value #A (lastNotNull)","operator":"-","reducer":"sum","right":"Value #B (lastNotNull)"},"mode":"binary","reduce":{"reducer":"sum"}}},{"id":"calculateField","options":{"alias":"Used, %","binary":{"left":"Used","operator":"/","reducer":"sum","right":"Value #A (lastNotNull)"},"mode":"binary","reduce":{"reducer":"sum"}}},{"id":"organize","options":{"excludeByName":{},"indexByName":{},"renameByName":{"Value #A (lastNotNull)":"Size","Value #B (lastNotNull)":"Available","mountpoint":"Mounted on"}}},{"id":"sortBy","options":{"fields":{},"sort":[{"field":"Mounted on"}]}}],"type":"table"},{"collapsed":false,"gridPos":{"h":1,"w":24,"x":0,"y":26},"id":10,"panels":[],"title":"Network","type":"row"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"description":"Network received (bits/s)","fieldConfig":{"defaults":{"custom":{"fillOpacity":0,"showPoints":"never"},"min":0,"unit":"bps"}},"gridPos":{"h":7,"w":12,"x":0,"y":27},"id":11,"options":{"tooltip":{"mode":"multi"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"rate(node_network_receive_bytes_total{job=\"node-exporter\", instance=\"$instance\", cluster=~\"$cluster\", device!=\"lo\"}[$__rate_interval]) * 8","intervalFactor":1,"legendFormat":"{{device}}"}],"title":"Network Received","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"description":"Network transmitted (bits/s)","fieldConfig":{"defaults":{"custom":{"fillOpacity":0},"min":0,"unit":"bps"}},"gridPos":{"h":7,"w":12,"x":12,"y":27},"id":12,"options":{"tooltip":{"mode":"multi"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"rate(node_network_transmit_bytes_total{job=\"node-exporter\", instance=\"$instance\", cluster=~\"$cluster\", device!=\"lo\"}[$__rate_interval]) * 8","intervalFactor":1,"legendFormat":"{{device}}"}],"title":"Network Transmitted","type":"timeseries"}],"refresh":"30s","schemaVersion":39,"tags":["node-exporter-mixin"],"templating":{"list":[{"name":"datasource","query":"prometheus","type":"datasource"},{"allValue":".*","datasource":{"type":"prometheus","uid":"${datasource}"},"hide":`}}{{ if .Values.grafana.sidecar.dashboards.multicluster.global.enabled }}0{{ else }}2{{ end }}{{`,"includeAll":true,"label":"Cluster","name":"cluster","query":"label_values(node_uname_info{job=\"node-exporter\", sysname=\"Darwin\"}, cluster)","refresh":2,"type":"query"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"label":"Instance","name":"instance","query":"label_values(node_uname_info{job=\"node-exporter\", cluster=~\"$cluster\", sysname=\"Darwin\"}, instance)","refresh":2,"type":"query"}]},"time":{"from":"now-1h","to":"now"},"timezone": "`}}{{ .Values.grafana.defaultDashboardsTimezone }}{{`","title":"Node Exporter / MacOS","uid":"629701ea43bf69291922ea45f4a87d37"}`}} {{- end }} --- {{- if and .Values.grafana.operator.dashboardsConfigMapRefEnabled (or .Values.grafana.enabled .Values.grafana.forceDeployDashboards) (semverCompare ">=1.14.0-0" $kubeTargetVersion) (semverCompare "<9.9.9-9" $kubeTargetVersion) .Values.grafana.defaultDashboardsEnabled (and (or .Values.nodeExporter.enabled .Values.nodeExporter.forceDeployDashboards) .Values.nodeExporter.operatingSystems.darwin.enabled) }} diff --git a/charts/kube-prometheus-stack/templates/grafana/dashboards-1.14/nodes.yaml b/charts/kube-prometheus-stack/templates/grafana/dashboards-1.14/nodes.yaml index fa06c4199a..42c8e8d191 100644 --- a/charts/kube-prometheus-stack/templates/grafana/dashboards-1.14/nodes.yaml +++ b/charts/kube-prometheus-stack/templates/grafana/dashboards-1.14/nodes.yaml @@ -1,5 +1,5 @@ {{- /* -Generated from 'nodes' from https://raw.githubusercontent.com/prometheus-operator/kube-prometheus/eaca1a5fd76b356974054906af46810fec1cd7f8/manifests/grafana-dashboardDefinitions.yaml +Generated from 'nodes' from https://raw.githubusercontent.com/prometheus-operator/kube-prometheus/4eafa8b5395ef839bb02a55e3b5fbdfa03280cf9/manifests/grafana-dashboardDefinitions.yaml Do not change in-place! In order to change this file first read following link: https://github.com/prometheus-community/helm-charts/tree/main/charts/kube-prometheus-stack/hack */ -}} @@ -20,7 +20,7 @@ metadata: {{- include "kube-prometheus-stack.labels" $ | nindent 4 }} data: nodes.json: |- - {{`{"graphTooltip":1,"panels":[{"collapsed":false,"gridPos":{"h":1,"w":24,"x":0,"y":0},"id":1,"panels":[],"title":"CPU","type":"row"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","stacking":{"mode":"normal"}},"max":1,"min":0,"unit":"percentunit"}},"gridPos":{"h":7,"w":12,"x":0,"y":1},"id":2,"options":{"tooltip":{"mode":"multi"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"(\n (1 - sum without (mode) (rate(node_cpu_seconds_total{job=\"node-exporter\", mode=~\"idle|iowait|steal\", instance=\"$instance\", cluster=~\"$cluster\"}[$__rate_interval])))\n/ ignoring(cpu) group_left\n count without (cpu, mode) (node_cpu_seconds_total{job=\"node-exporter\", mode=\"idle\", instance=\"$instance\", cluster=~\"$cluster\"})\n)\n","intervalFactor":5,"legendFormat":"{{cpu}}"}],"title":"CPU Usage","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":0,"showPoints":"never"},"min":0,"unit":"short"}},"gridPos":{"h":7,"w":12,"x":12,"y":1},"id":3,"options":{"tooltip":{"mode":"multi"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"node_load1{job=\"node-exporter\", instance=\"$instance\", cluster=~\"$cluster\"}","legendFormat":"1m load average"},{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"node_load5{job=\"node-exporter\", instance=\"$instance\", cluster=~\"$cluster\"}","legendFormat":"5m load average"},{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"node_load15{job=\"node-exporter\", instance=\"$instance\", cluster=~\"$cluster\"}","legendFormat":"15m load average"},{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"count(node_cpu_seconds_total{job=\"node-exporter\", instance=\"$instance\", cluster=~\"$cluster\", mode=\"idle\"})","legendFormat":"logical cores"}],"title":"Load Average","type":"timeseries"},{"collapsed":false,"gridPos":{"h":1,"w":24,"x":0,"y":8},"id":4,"title":"Memory","type":"row"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","stacking":{"mode":"normal"}},"min":0,"unit":"bytes"}},"gridPos":{"h":7,"w":18,"x":0,"y":9},"id":5,"options":{"tooltip":{"mode":"multi"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"(\n node_memory_MemTotal_bytes{job=\"node-exporter\", instance=\"$instance\", cluster=~\"$cluster\"}\n-\n node_memory_MemFree_bytes{job=\"node-exporter\", instance=\"$instance\", cluster=~\"$cluster\"}\n-\n node_memory_Buffers_bytes{job=\"node-exporter\", instance=\"$instance\", cluster=~\"$cluster\"}\n-\n node_memory_Cached_bytes{job=\"node-exporter\", instance=\"$instance\", cluster=~\"$cluster\"}\n)\n","legendFormat":"memory used"},{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"node_memory_Buffers_bytes{job=\"node-exporter\", instance=\"$instance\", cluster=~\"$cluster\"}","legendFormat":"memory buffers"},{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"node_memory_Cached_bytes{job=\"node-exporter\", instance=\"$instance\", cluster=~\"$cluster\"}","legendFormat":"memory cached"},{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"node_memory_MemFree_bytes{job=\"node-exporter\", instance=\"$instance\", cluster=~\"$cluster\"}","legendFormat":"memory free"}],"title":"Memory Usage","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"max":100,"min":0,"thresholds":{"steps":[{"color":"rgba(50, 172, 45, 0.97)"},{"color":"rgba(237, 129, 40, 0.89)","value":80},{"color":"rgba(245, 54, 54, 0.9)","value":90}]},"unit":"percent"}},"gridPos":{"h":7,"w":6,"x":18,"y":9},"id":6,"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"100 -\n(\n avg(node_memory_MemAvailable_bytes{job=\"node-exporter\", instance=\"$instance\", cluster=~\"$cluster\"}) /\n avg(node_memory_MemTotal_bytes{job=\"node-exporter\", instance=\"$instance\", cluster=~\"$cluster\"})\n* 100\n)\n"}],"title":"Memory Usage","type":"gauge"},{"collapsed":false,"gridPos":{"h":1,"w":24,"x":0,"y":18},"id":7,"panels":[],"title":"Disk","type":"row"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":0,"showPoints":"never"},"min":0},"overrides":[{"matcher":{"id":"byRegexp","options":"/ read| written/"},"properties":[{"id":"unit","value":"Bps"}]},{"matcher":{"id":"byRegexp","options":"/ io time/"},"properties":[{"id":"unit","value":"percentunit"}]}]},"gridPos":{"h":7,"w":12,"x":0,"y":19},"id":8,"options":{"tooltip":{"mode":"multi"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"rate(node_disk_read_bytes_total{job=\"node-exporter\", instance=\"$instance\", cluster=~\"$cluster\", device=~\"(/dev/)?(mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|md.+|dasd.+)\"}[$__rate_interval])","intervalFactor":1,"legendFormat":"{{device}} read"},{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"rate(node_disk_written_bytes_total{job=\"node-exporter\", instance=\"$instance\", cluster=~\"$cluster\", device=~\"(/dev/)?(mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|md.+|dasd.+)\"}[$__rate_interval])","intervalFactor":1,"legendFormat":"{{device}} written"},{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"rate(node_disk_io_time_seconds_total{job=\"node-exporter\", instance=\"$instance\", cluster=~\"$cluster\", device=~\"(/dev/)?(mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|md.+|dasd.+)\"}[$__rate_interval])","intervalFactor":1,"legendFormat":"{{device}} io time"}],"title":"Disk I/O","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"thresholds":{"steps":[{"color":"green"},{"color":"yellow","value":0.8},{"color":"red","value":0.9}]},"unit":"decbytes"},"overrides":[{"matcher":{"id":"byName","options":"Mounted on"},"properties":[{"id":"custom.width","value":260}]},{"matcher":{"id":"byName","options":"Size"},"properties":[{"id":"custom.width","value":93}]},{"matcher":{"id":"byName","options":"Used"},"properties":[{"id":"custom.width","value":72}]},{"matcher":{"id":"byName","options":"Available"},"properties":[{"id":"custom.width","value":88}]},{"matcher":{"id":"byName","options":"Used, %"},"properties":[{"id":"unit","value":"percentunit"},{"id":"custom.cellOptions","value":{"type":"gauge"}},{"id":"max","value":1},{"id":"min","value":0}]}]},"gridPos":{"h":7,"w":12,"x":12,"y":19},"id":9,"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"max by (mountpoint) (node_filesystem_size_bytes{job=\"node-exporter\", instance=\"$instance\", cluster=~\"$cluster\", fstype!=\"\", mountpoint!=\"\"})\n","format":"table","instant":true,"legendFormat":""},{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"max by (mountpoint) (node_filesystem_avail_bytes{job=\"node-exporter\", instance=\"$instance\", cluster=~\"$cluster\", fstype!=\"\", mountpoint!=\"\"})\n","format":"table","instant":true,"legendFormat":""}],"title":"Disk Space Usage","transformations":[{"id":"groupBy","options":{"fields":{"Value #A":{"aggregations":["lastNotNull"],"operation":"aggregate"},"Value #B":{"aggregations":["lastNotNull"],"operation":"aggregate"},"mountpoint":{"aggregations":[],"operation":"groupby"}}}},{"id":"merge"},{"id":"calculateField","options":{"alias":"Used","binary":{"left":"Value #A (lastNotNull)","operator":"-","reducer":"sum","right":"Value #B (lastNotNull)"},"mode":"binary","reduce":{"reducer":"sum"}}},{"id":"calculateField","options":{"alias":"Used, %","binary":{"left":"Used","operator":"/","reducer":"sum","right":"Value #A (lastNotNull)"},"mode":"binary","reduce":{"reducer":"sum"}}},{"id":"organize","options":{"excludeByName":{},"indexByName":{},"renameByName":{"Value #A (lastNotNull)":"Size","Value #B (lastNotNull)":"Available","mountpoint":"Mounted on"}}},{"id":"sortBy","options":{"fields":{},"sort":[{"field":"Mounted on"}]}}],"type":"table"},{"collapsed":false,"gridPos":{"h":1,"w":24,"x":0,"y":26},"id":10,"panels":[],"title":"Network","type":"row"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"description":"Network received (bits/s)","fieldConfig":{"defaults":{"custom":{"fillOpacity":0,"showPoints":"never"},"min":0,"unit":"bps"}},"gridPos":{"h":7,"w":12,"x":0,"y":27},"id":11,"options":{"tooltip":{"mode":"multi"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"rate(node_network_receive_bytes_total{job=\"node-exporter\", instance=\"$instance\", cluster=~\"$cluster\", device!=\"lo\"}[$__rate_interval]) * 8","intervalFactor":1,"legendFormat":"{{device}}"}],"title":"Network Received","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"description":"Network transmitted (bits/s)","fieldConfig":{"defaults":{"custom":{"fillOpacity":0},"min":0,"unit":"bps"}},"gridPos":{"h":7,"w":12,"x":12,"y":27},"id":12,"options":{"tooltip":{"mode":"multi"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"rate(node_network_transmit_bytes_total{job=\"node-exporter\", instance=\"$instance\", cluster=~\"$cluster\", device!=\"lo\"}[$__rate_interval]) * 8","intervalFactor":1,"legendFormat":"{{device}}"}],"title":"Network Transmitted","type":"timeseries"}],"refresh":"30s","schemaVersion":39,"tags":["node-exporter-mixin"],"templating":{"list":[{"name":"datasource","query":"prometheus","type":"datasource"},{"allValue":".*","datasource":{"type":"prometheus","uid":"${datasource}"},"hide":`}}{{ if .Values.grafana.sidecar.dashboards.multicluster.global.enabled }}0{{ else }}2{{ end }}{{`,"includeAll":true,"label":"Cluster","name":"cluster","query":"label_values(node_uname_info{job=\"node-exporter\", sysname!=\"Darwin\"}, cluster)","refresh":2,"type":"query"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"label":"Instance","name":"instance","query":"label_values(node_uname_info{job=\"node-exporter\", cluster=~\"$cluster\", sysname!=\"Darwin\"}, instance)","refresh":2,"type":"query"}]},"time":{"from":"now-1h","to":"now"},"timezone": "`}}{{ .Values.grafana.defaultDashboardsTimezone }}{{`","title":"Node Exporter / Nodes","uid":"7d57716318ee0dddbac5a7f451fb7753"}`}} + {{`{"graphTooltip":1,"panels":[{"collapsed":false,"gridPos":{"h":1,"w":24,"x":0,"y":0},"id":1,"panels":[],"title":"CPU","type":"row"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","stacking":{"mode":"normal"}},"max":1,"min":0,"unit":"percentunit"}},"gridPos":{"h":7,"w":12,"x":0,"y":1},"id":2,"options":{"tooltip":{"mode":"multi"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"(\n (1 - sum without (mode) (rate(node_cpu_seconds_total{job=\"node-exporter\", mode=~\"idle|iowait|steal\", instance=\"$instance\", cluster=~\"$cluster\"}[$__rate_interval])))\n/ ignoring(cpu) group_left\n count without (cpu, mode) (node_cpu_seconds_total{job=\"node-exporter\", mode=\"idle\", instance=\"$instance\", cluster=~\"$cluster\"})\n)\n","intervalFactor":5,"legendFormat":"{{cpu}}"}],"title":"CPU Usage","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":0,"showPoints":"never"},"min":0,"unit":"short"}},"gridPos":{"h":7,"w":12,"x":12,"y":1},"id":3,"options":{"tooltip":{"mode":"multi"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"node_load1{job=\"node-exporter\", instance=\"$instance\", cluster=~\"$cluster\"}","legendFormat":"1m load average"},{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"node_load5{job=\"node-exporter\", instance=\"$instance\", cluster=~\"$cluster\"}","legendFormat":"5m load average"},{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"node_load15{job=\"node-exporter\", instance=\"$instance\", cluster=~\"$cluster\"}","legendFormat":"15m load average"},{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"count(node_cpu_seconds_total{job=\"node-exporter\", instance=\"$instance\", cluster=~\"$cluster\", mode=\"idle\"})","legendFormat":"logical cores"}],"title":"Load Average","type":"timeseries"},{"collapsed":false,"gridPos":{"h":1,"w":24,"x":0,"y":8},"id":4,"title":"Memory","type":"row"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","stacking":{"mode":"normal"}},"min":0,"unit":"bytes"}},"gridPos":{"h":7,"w":18,"x":0,"y":9},"id":5,"options":{"tooltip":{"mode":"multi"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"(\n node_memory_MemTotal_bytes{job=\"node-exporter\", instance=\"$instance\", cluster=~\"$cluster\"}\n-\n node_memory_MemFree_bytes{job=\"node-exporter\", instance=\"$instance\", cluster=~\"$cluster\"}\n-\n node_memory_Buffers_bytes{job=\"node-exporter\", instance=\"$instance\", cluster=~\"$cluster\"}\n-\n node_memory_Cached_bytes{job=\"node-exporter\", instance=\"$instance\", cluster=~\"$cluster\"}\n)\n","legendFormat":"memory used"},{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"node_memory_Buffers_bytes{job=\"node-exporter\", instance=\"$instance\", cluster=~\"$cluster\"}","legendFormat":"memory buffers"},{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"node_memory_Cached_bytes{job=\"node-exporter\", instance=\"$instance\", cluster=~\"$cluster\"}","legendFormat":"memory cached"},{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"node_memory_MemFree_bytes{job=\"node-exporter\", instance=\"$instance\", cluster=~\"$cluster\"}","legendFormat":"memory free"}],"title":"Memory Usage","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"max":100,"min":0,"thresholds":{"steps":[{"color":"rgba(50, 172, 45, 0.97)"},{"color":"rgba(237, 129, 40, 0.89)","value":80},{"color":"rgba(245, 54, 54, 0.9)","value":90}]},"unit":"percent"}},"gridPos":{"h":7,"w":6,"x":18,"y":9},"id":6,"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"100 -\n(\n avg(node_memory_MemAvailable_bytes{job=\"node-exporter\", instance=\"$instance\", cluster=~\"$cluster\"}) /\n avg(node_memory_MemTotal_bytes{job=\"node-exporter\", instance=\"$instance\", cluster=~\"$cluster\"})\n* 100\n)\n"}],"title":"Memory Usage","type":"gauge"},{"collapsed":false,"gridPos":{"h":1,"w":24,"x":0,"y":18},"id":7,"panels":[],"title":"Disk","type":"row"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":0,"showPoints":"never"},"min":0},"overrides":[{"matcher":{"id":"byRegexp","options":"/ read| written/"},"properties":[{"id":"unit","value":"Bps"}]},{"matcher":{"id":"byRegexp","options":"/ io time/"},"properties":[{"id":"unit","value":"percentunit"}]}]},"gridPos":{"h":7,"w":12,"x":0,"y":19},"id":8,"options":{"tooltip":{"mode":"multi"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"rate(node_disk_read_bytes_total{job=\"node-exporter\", instance=\"$instance\", cluster=~\"$cluster\", device=~\"(/dev/)?(mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|md.+|dasd.+)\"}[$__rate_interval])","intervalFactor":1,"legendFormat":"{{device}} read"},{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"rate(node_disk_written_bytes_total{job=\"node-exporter\", instance=\"$instance\", cluster=~\"$cluster\", device=~\"(/dev/)?(mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|md.+|dasd.+)\"}[$__rate_interval])","intervalFactor":1,"legendFormat":"{{device}} written"},{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"rate(node_disk_io_time_seconds_total{job=\"node-exporter\", instance=\"$instance\", cluster=~\"$cluster\", device=~\"(/dev/)?(mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|md.+|dasd.+)\"}[$__rate_interval])","intervalFactor":1,"legendFormat":"{{device}} io time"}],"title":"Disk I/O","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"thresholds":{"steps":[{"color":"green"},{"color":"yellow","value":0.8},{"color":"red","value":0.9}]},"unit":"decbytes"},"overrides":[{"matcher":{"id":"byName","options":"Mounted on"},"properties":[{"id":"custom.width","value":260}]},{"matcher":{"id":"byName","options":"Size"},"properties":[{"id":"custom.width","value":93}]},{"matcher":{"id":"byName","options":"Used"},"properties":[{"id":"custom.width","value":72}]},{"matcher":{"id":"byName","options":"Available"},"properties":[{"id":"custom.width","value":88}]},{"matcher":{"id":"byName","options":"Used, %"},"properties":[{"id":"unit","value":"percentunit"},{"id":"custom.cellOptions","value":{"type":"gauge"}},{"id":"max","value":1},{"id":"min","value":0}]}]},"gridPos":{"h":7,"w":12,"x":12,"y":19},"id":9,"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"max by (mountpoint) (node_filesystem_size_bytes{job=\"node-exporter\", instance=\"$instance\", cluster=~\"$cluster\", fstype!=\"\", mountpoint!=\"\"})\n","format":"table","instant":true,"legendFormat":""},{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"max by (mountpoint) (node_filesystem_avail_bytes{job=\"node-exporter\", instance=\"$instance\", cluster=~\"$cluster\", fstype!=\"\", mountpoint!=\"\"})\n","format":"table","instant":true,"legendFormat":""}],"title":"Disk Space Usage","transformations":[{"id":"groupBy","options":{"fields":{"Value #A":{"aggregations":["lastNotNull"],"operation":"aggregate"},"Value #B":{"aggregations":["lastNotNull"],"operation":"aggregate"},"mountpoint":{"aggregations":[],"operation":"groupby"}}}},{"id":"merge"},{"id":"calculateField","options":{"alias":"Used","binary":{"left":"Value #A (lastNotNull)","operator":"-","reducer":"sum","right":"Value #B (lastNotNull)"},"mode":"binary","reduce":{"reducer":"sum"}}},{"id":"calculateField","options":{"alias":"Used, %","binary":{"left":"Used","operator":"/","reducer":"sum","right":"Value #A (lastNotNull)"},"mode":"binary","reduce":{"reducer":"sum"}}},{"id":"organize","options":{"excludeByName":{},"indexByName":{},"renameByName":{"Value #A (lastNotNull)":"Size","Value #B (lastNotNull)":"Available","mountpoint":"Mounted on"}}},{"id":"sortBy","options":{"fields":{},"sort":[{"field":"Mounted on"}]}}],"type":"table"},{"collapsed":false,"gridPos":{"h":1,"w":24,"x":0,"y":26},"id":10,"panels":[],"title":"Network","type":"row"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"description":"Network received (bits/s)","fieldConfig":{"defaults":{"custom":{"fillOpacity":0,"showPoints":"never"},"min":0,"unit":"bps"}},"gridPos":{"h":7,"w":12,"x":0,"y":27},"id":11,"options":{"tooltip":{"mode":"multi"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"rate(node_network_receive_bytes_total{job=\"node-exporter\", instance=\"$instance\", cluster=~\"$cluster\", device!=\"lo\"}[$__rate_interval]) * 8","intervalFactor":1,"legendFormat":"{{device}}"}],"title":"Network Received","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"description":"Network transmitted (bits/s)","fieldConfig":{"defaults":{"custom":{"fillOpacity":0},"min":0,"unit":"bps"}},"gridPos":{"h":7,"w":12,"x":12,"y":27},"id":12,"options":{"tooltip":{"mode":"multi"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"rate(node_network_transmit_bytes_total{job=\"node-exporter\", instance=\"$instance\", cluster=~\"$cluster\", device!=\"lo\"}[$__rate_interval]) * 8","intervalFactor":1,"legendFormat":"{{device}}"}],"title":"Network Transmitted","type":"timeseries"}],"refresh":"30s","schemaVersion":39,"tags":["node-exporter-mixin"],"templating":{"list":[{"name":"datasource","query":"prometheus","type":"datasource"},{"allValue":".*","datasource":{"type":"prometheus","uid":"${datasource}"},"hide":`}}{{ if .Values.grafana.sidecar.dashboards.multicluster.global.enabled }}0{{ else }}2{{ end }}{{`,"includeAll":true,"label":"Cluster","name":"cluster","query":"label_values(node_uname_info{job=\"node-exporter\", sysname!=\"Darwin\"}, cluster)","refresh":2,"type":"query"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"label":"Instance","name":"instance","query":"label_values(node_uname_info{job=\"node-exporter\", cluster=~\"$cluster\", sysname!=\"Darwin\"}, instance)","refresh":2,"type":"query"}]},"time":{"from":"now-1h","to":"now"},"timezone": "`}}{{ .Values.grafana.defaultDashboardsTimezone }}{{`","title":"Node Exporter / Nodes","uid":"7d57716318ee0dddbac5a7f451fb7753"}`}} {{- end }} --- {{- if and .Values.grafana.operator.dashboardsConfigMapRefEnabled (or .Values.grafana.enabled .Values.grafana.forceDeployDashboards) (semverCompare ">=1.14.0-0" $kubeTargetVersion) (semverCompare "<9.9.9-9" $kubeTargetVersion) .Values.grafana.defaultDashboardsEnabled (and (or .Values.nodeExporter.enabled .Values.nodeExporter.forceDeployDashboards) .Values.nodeExporter.operatingSystems.linux.enabled) }} diff --git a/charts/kube-prometheus-stack/templates/grafana/dashboards-1.14/persistentvolumesusage.yaml b/charts/kube-prometheus-stack/templates/grafana/dashboards-1.14/persistentvolumesusage.yaml index a820e34dbc..16e553a063 100644 --- a/charts/kube-prometheus-stack/templates/grafana/dashboards-1.14/persistentvolumesusage.yaml +++ b/charts/kube-prometheus-stack/templates/grafana/dashboards-1.14/persistentvolumesusage.yaml @@ -1,5 +1,5 @@ {{- /* -Generated from 'persistentvolumesusage' from https://raw.githubusercontent.com/prometheus-operator/kube-prometheus/eaca1a5fd76b356974054906af46810fec1cd7f8/manifests/grafana-dashboardDefinitions.yaml +Generated from 'persistentvolumesusage' from https://raw.githubusercontent.com/prometheus-operator/kube-prometheus/4eafa8b5395ef839bb02a55e3b5fbdfa03280cf9/manifests/grafana-dashboardDefinitions.yaml Do not change in-place! In order to change this file first read following link: https://github.com/prometheus-community/helm-charts/tree/main/charts/kube-prometheus-stack/hack */ -}} @@ -21,7 +21,7 @@ metadata: {{- include "kube-prometheus-stack.labels" $ | nindent 4 }} data: persistentvolumesusage.json: |- - {{`{"editable":`}}{{ .Values.grafana.defaultDashboardsEditable }}{{`,"links":[{"asDropdown":true,"includeVars":true,"keepTime":true,"tags":["kubernetes-mixin"],"targetBlank":false,"title":"Kubernetes","type":"dashboards"}],"panels":[{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"bytes"}},"gridPos":{"h":7,"w":18,"y":0},"id":1,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"(\n sum without(instance, node) (topk(1, (kubelet_volume_stats_capacity_bytes{cluster=\"$cluster\", job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics\", namespace=\"$namespace\", persistentvolumeclaim=\"$volume\"})))\n -\n sum without(instance, node) (topk(1, (kubelet_volume_stats_available_bytes{cluster=\"$cluster\", job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics\", namespace=\"$namespace\", persistentvolumeclaim=\"$volume\"})))\n)\n","legendFormat":"Used Space"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum without(instance, node) (topk(1, (kubelet_volume_stats_available_bytes{cluster=\"$cluster\", job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics\", namespace=\"$namespace\", persistentvolumeclaim=\"$volume\"})))\n","legendFormat":"Free Space"}],"title":"Volume Space Usage","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"color":{"mode":"thresholds"},"max":100,"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green","value":0},{"color":"orange","value":80},{"color":"red","value":90}]},"unit":"percent"}},"gridPos":{"h":7,"w":6,"x":18,"y":0},"id":2,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"max without(instance,node) (\n(\n topk(1, kubelet_volume_stats_capacity_bytes{cluster=\"$cluster\", job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics\", namespace=\"$namespace\", persistentvolumeclaim=\"$volume\"})\n -\n topk(1, kubelet_volume_stats_available_bytes{cluster=\"$cluster\", job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics\", namespace=\"$namespace\", persistentvolumeclaim=\"$volume\"})\n)\n/\ntopk(1, kubelet_volume_stats_capacity_bytes{cluster=\"$cluster\", job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics\", namespace=\"$namespace\", persistentvolumeclaim=\"$volume\"})\n* 100)\n","instant":true}],"title":"Volume Space Usage","type":"gauge"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"none"}},"gridPos":{"h":7,"w":18,"y":7},"id":3,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum without(instance, node) (topk(1, (kubelet_volume_stats_inodes_used{cluster=\"$cluster\", job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics\", namespace=\"$namespace\", persistentvolumeclaim=\"$volume\"})))","legendFormat":"Used inodes"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"(\n sum without(instance, node) (topk(1, (kubelet_volume_stats_inodes{cluster=\"$cluster\", job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics\", namespace=\"$namespace\", persistentvolumeclaim=\"$volume\"})))\n -\n sum without(instance, node) (topk(1, (kubelet_volume_stats_inodes_used{cluster=\"$cluster\", job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics\", namespace=\"$namespace\", persistentvolumeclaim=\"$volume\"})))\n)\n","legendFormat":"Free inodes"}],"title":"Volume inodes Usage","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"color":{"mode":"thresholds"},"max":100,"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green","value":0},{"color":"orange","value":80},{"color":"red","value":90}]},"unit":"percent"}},"gridPos":{"h":7,"w":6,"x":18,"y":7},"id":4,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"max without(instance,node) (\ntopk(1, kubelet_volume_stats_inodes_used{cluster=\"$cluster\", job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics\", namespace=\"$namespace\", persistentvolumeclaim=\"$volume\"})\n/\ntopk(1, kubelet_volume_stats_inodes{cluster=\"$cluster\", job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics\", namespace=\"$namespace\", persistentvolumeclaim=\"$volume\"})\n* 100)\n","instant":true}],"title":"Volume inodes Usage","type":"gauge"}],"refresh":"10s","schemaVersion":39,"tags":["kubernetes-mixin"],"templating":{"list":[{"current":{"selected":true,"text":"default","value":"default"},"hide":0,"label":"Data source","name":"datasource","query":"prometheus","regex":"","type":"datasource"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"hide":`}}{{ if .Values.grafana.sidecar.dashboards.multicluster.global.enabled }}0{{ else }}2{{ end }}{{`,"label":"cluster","name":"cluster","query":"label_values(kubelet_volume_stats_capacity_bytes{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics\"}, cluster)","refresh":2,"sort":1,"type":"query","allValue":".*"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"hide":0,"label":"Namespace","name":"namespace","query":"label_values(kubelet_volume_stats_capacity_bytes{cluster=\"$cluster\", job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics\"}, namespace)","refresh":2,"sort":1,"type":"query"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"hide":0,"label":"PersistentVolumeClaim","name":"volume","query":"label_values(kubelet_volume_stats_capacity_bytes{cluster=\"$cluster\", job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics\", namespace=\"$namespace\"}, persistentvolumeclaim)","refresh":2,"sort":1,"type":"query"}]},"time":{"from":"now-1h","to":"now"},"timezone": "`}}{{ .Values.grafana.defaultDashboardsTimezone }}{{`","title":"Kubernetes / Persistent Volumes","uid":"919b92a8e8041bd567af9edab12c840c"}`}} + {{`{"editable":`}}{{ .Values.grafana.defaultDashboardsEditable }}{{`,"links":[{"asDropdown":true,"includeVars":true,"keepTime":true,"tags":["kubernetes-mixin"],"targetBlank":false,"title":"Kubernetes","type":"dashboards"}],"panels":[{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"bytes"}},"gridPos":{"h":7,"w":18,"y":0},"id":1,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"(\n sum without(instance, node) (topk(1, (kubelet_volume_stats_capacity_bytes{cluster=\"$cluster\", job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics\", namespace=\"$namespace\", persistentvolumeclaim=\"$volume\"})))\n -\n sum without(instance, node) (topk(1, (kubelet_volume_stats_available_bytes{cluster=\"$cluster\", job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics\", namespace=\"$namespace\", persistentvolumeclaim=\"$volume\"})))\n)\n","legendFormat":"Used Space"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum without(instance, node) (topk(1, (kubelet_volume_stats_available_bytes{cluster=\"$cluster\", job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics\", namespace=\"$namespace\", persistentvolumeclaim=\"$volume\"})))\n","legendFormat":"Free Space"}],"title":"Volume Space Usage","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"color":{"mode":"thresholds"},"max":100,"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green","value":0},{"color":"orange","value":80},{"color":"red","value":90}]},"unit":"percent"}},"gridPos":{"h":7,"w":6,"x":18,"y":0},"id":2,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"max without(instance,node) (\n(\n topk(1, kubelet_volume_stats_capacity_bytes{cluster=\"$cluster\", job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics\", namespace=\"$namespace\", persistentvolumeclaim=\"$volume\"})\n -\n topk(1, kubelet_volume_stats_available_bytes{cluster=\"$cluster\", job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics\", namespace=\"$namespace\", persistentvolumeclaim=\"$volume\"})\n)\n/\ntopk(1, kubelet_volume_stats_capacity_bytes{cluster=\"$cluster\", job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics\", namespace=\"$namespace\", persistentvolumeclaim=\"$volume\"})\n* 100)\n","instant":true}],"title":"Volume Space Usage","type":"gauge"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"none"}},"gridPos":{"h":7,"w":18,"y":7},"id":3,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum without(instance, node) (topk(1, (kubelet_volume_stats_inodes_used{cluster=\"$cluster\", job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics\", namespace=\"$namespace\", persistentvolumeclaim=\"$volume\"})))","legendFormat":"Used inodes"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"(\n sum without(instance, node) (topk(1, (kubelet_volume_stats_inodes{cluster=\"$cluster\", job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics\", namespace=\"$namespace\", persistentvolumeclaim=\"$volume\"})))\n -\n sum without(instance, node) (topk(1, (kubelet_volume_stats_inodes_used{cluster=\"$cluster\", job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics\", namespace=\"$namespace\", persistentvolumeclaim=\"$volume\"})))\n)\n","legendFormat":"Free inodes"}],"title":"Volume inodes Usage","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"color":{"mode":"thresholds"},"max":100,"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green","value":0},{"color":"orange","value":80},{"color":"red","value":90}]},"unit":"percent"}},"gridPos":{"h":7,"w":6,"x":18,"y":7},"id":4,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"max without(instance,node) (\ntopk(1, kubelet_volume_stats_inodes_used{cluster=\"$cluster\", job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics\", namespace=\"$namespace\", persistentvolumeclaim=\"$volume\"})\n/\ntopk(1, kubelet_volume_stats_inodes{cluster=\"$cluster\", job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics\", namespace=\"$namespace\", persistentvolumeclaim=\"$volume\"})\n* 100)\n","instant":true}],"title":"Volume inodes Usage","type":"gauge"}],"refresh":"10s","schemaVersion":39,"tags":["kubernetes-mixin"],"templating":{"list":[{"current":{"selected":true,"text":"default","value":"default"},"hide":0,"label":"Data source","name":"datasource","query":"prometheus","regex":"","type":"datasource"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"hide":`}}{{ if .Values.grafana.sidecar.dashboards.multicluster.global.enabled }}0{{ else }}2{{ end }}{{`,"label":"cluster","name":"cluster","query":"label_values(kubelet_volume_stats_capacity_bytes{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics\"}, cluster)","refresh":2,"sort":1,"type":"query","allValue":".*"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"hide":0,"label":"Namespace","name":"namespace","query":"label_values(kubelet_volume_stats_capacity_bytes{cluster=\"$cluster\", job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics\"}, namespace)","refresh":2,"sort":1,"type":"query"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"hide":0,"label":"PersistentVolumeClaim","name":"volume","query":"label_values(kubelet_volume_stats_capacity_bytes{cluster=\"$cluster\", job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics\", namespace=\"$namespace\"}, persistentvolumeclaim)","refresh":2,"sort":1,"type":"query"}]},"time":{"from":"now-1h","to":"now"},"timezone": "`}}{{ .Values.grafana.defaultDashboardsTimezone }}{{`","title":"Kubernetes / Persistent Volumes","uid":"919b92a8e8041bd567af9edab12c840c"}`}} {{- end }} --- {{- if and .Values.grafana.operator.dashboardsConfigMapRefEnabled (or .Values.grafana.enabled .Values.grafana.forceDeployDashboards) (semverCompare ">=1.14.0-0" $kubeTargetVersion) (semverCompare "<9.9.9-9" $kubeTargetVersion) .Values.grafana.defaultDashboardsEnabled }} diff --git a/charts/kube-prometheus-stack/templates/grafana/dashboards-1.14/pod-total.yaml b/charts/kube-prometheus-stack/templates/grafana/dashboards-1.14/pod-total.yaml index 48d49e62e5..a27bc9a3d9 100644 --- a/charts/kube-prometheus-stack/templates/grafana/dashboards-1.14/pod-total.yaml +++ b/charts/kube-prometheus-stack/templates/grafana/dashboards-1.14/pod-total.yaml @@ -1,5 +1,5 @@ {{- /* -Generated from 'pod-total' from https://raw.githubusercontent.com/prometheus-operator/kube-prometheus/eaca1a5fd76b356974054906af46810fec1cd7f8/manifests/grafana-dashboardDefinitions.yaml +Generated from 'pod-total' from https://raw.githubusercontent.com/prometheus-operator/kube-prometheus/4eafa8b5395ef839bb02a55e3b5fbdfa03280cf9/manifests/grafana-dashboardDefinitions.yaml Do not change in-place! In order to change this file first read following link: https://github.com/prometheus-community/helm-charts/tree/main/charts/kube-prometheus-stack/hack */ -}} @@ -21,7 +21,7 @@ metadata: {{- include "kube-prometheus-stack.labels" $ | nindent 4 }} data: pod-total.json: |- - {{`{"editable":`}}{{ .Values.grafana.defaultDashboardsEditable }}{{`,"links":[{"asDropdown":true,"includeVars":true,"keepTime":true,"tags":["kubernetes-mixin"],"targetBlank":false,"title":"Kubernetes","type":"dashboards"}],"panels":[{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"displayName":"$pod","max":10000000000,"min":0,"thresholds":{"steps":[{"color":"dark-green","index":0,"value":null},{"color":"dark-yellow","index":1,"value":5000000000},{"color":"dark-red","index":2,"value":7000000000}]},"unit":"bps"}},"gridPos":{"h":9,"w":12,"x":0,"y":0},"id":1,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum((8 * rate(container_network_receive_bytes_total{cluster=\"$cluster\",namespace=~\"$namespace\", pod=~\"$pod\"}[$__rate_interval])))","legendFormat":"__auto"}],"title":"Current Rate of Bits Received","type":"gauge"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"displayName":"$pod","max":10000000000,"min":0,"thresholds":{"steps":[{"color":"dark-green","index":0,"value":null},{"color":"dark-yellow","index":1,"value":5000000000},{"color":"dark-red","index":2,"value":7000000000}]},"unit":"bps"}},"gridPos":{"h":9,"w":12,"x":12,"y":0},"id":2,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum((8 * rate(container_network_transmit_bytes_total{cluster=\"$cluster\",namespace=~\"$namespace\", pod=~\"$pod\"}[$__rate_interval])))","legendFormat":"__auto"}],"title":"Current Rate of Bits Transmitted","type":"gauge"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"showPoints":"never"},"unit":"bps"}},"gridPos":{"h":9,"w":12,"x":0,"y":9},"id":3,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum((8 * rate(container_network_receive_bytes_total{cluster=\"$cluster\",namespace=~\"$namespace\", pod=~\"$pod\"}[$__rate_interval]))) by (pod)","legendFormat":"__auto"}],"title":"Receive Bandwidth","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"showPoints":"never"},"unit":"bps"}},"gridPos":{"h":9,"w":12,"x":12,"y":9},"id":4,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum((8 * rate(container_network_transmit_bytes_total{cluster=\"$cluster\",namespace=~\"$namespace\", pod=~\"$pod\"}[$__rate_interval]))) by (pod)","legendFormat":"__auto"}],"title":"Transmit Bandwidth","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"showPoints":"never"},"unit":"pps"}},"gridPos":{"h":9,"w":12,"x":0,"y":18},"id":5,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(rate(container_network_receive_packets_total{cluster=\"$cluster\",namespace=~\"$namespace\", pod=~\"$pod\"}[$__rate_interval])) by (pod)","legendFormat":"__auto"}],"title":"Rate of Received Packets","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"showPoints":"never"},"unit":"pps"}},"gridPos":{"h":9,"w":12,"x":12,"y":18},"id":6,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(rate(container_network_transmit_packets_total{cluster=\"$cluster\",namespace=~\"$namespace\", pod=~\"$pod\"}[$__rate_interval])) by (pod)","legendFormat":"__auto"}],"title":"Rate of Transmitted Packets","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"showPoints":"never"},"unit":"pps"}},"gridPos":{"h":9,"w":12,"x":0,"y":27},"id":7,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(rate(container_network_receive_packets_dropped_total{cluster=\"$cluster\",namespace=~\"$namespace\", pod=~\"$pod\"}[$__rate_interval])) by (pod)","legendFormat":"__auto"}],"title":"Rate of Received Packets Dropped","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"showPoints":"never"},"unit":"pps"}},"gridPos":{"h":9,"w":12,"x":12,"y":27},"id":8,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(rate(container_network_transmit_packets_dropped_total{cluster=\"$cluster\",namespace=~\"$namespace\", pod=~\"$pod\"}[$__rate_interval])) by (pod)","legendFormat":"__auto"}],"title":"Rate of Transmitted Packets Dropped","type":"timeseries"}],"refresh":"10s","schemaVersion":39,"tags":["kubernetes-mixin"],"templating":{"list":[{"current":{"selected":true,"text":"default","value":"default"},"hide":0,"label":"Data source","name":"datasource","query":"prometheus","regex":"","type":"datasource"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"hide":`}}{{ if .Values.grafana.sidecar.dashboards.multicluster.global.enabled }}0{{ else }}2{{ end }}{{`,"label":"cluster","name":"cluster","query":"label_values(up{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\"}, cluster)","refresh":2,"sort":1,"type":"query","allValue":".*"},{"allValue":".+","current":{"selected":false,"text":"kube-system","value":"kube-system"},"datasource":{"type":"prometheus","uid":"${datasource}"},"hide":0,"includeAll":true,"label":"namespace","name":"namespace","query":"label_values(container_network_receive_packets_total{cluster=\"$cluster\"}, namespace)","refresh":2,"sort":1,"type":"query"},{"current":{"selected":false,"text":"kube-system","value":"kube-system"},"datasource":{"type":"prometheus","uid":"${datasource}"},"hide":0,"label":"pod","name":"pod","query":"label_values(container_network_receive_packets_total{cluster=\"$cluster\",namespace=~\"$namespace\"}, pod)","refresh":2,"sort":1,"type":"query"}]},"time":{"from":"now-1h","to":"now"},"timezone": "`}}{{ .Values.grafana.defaultDashboardsTimezone }}{{`","title":"Kubernetes / Networking / Pod","uid":"7a18067ce943a40ae25454675c19ff5c"}`}} + {{`{"editable":`}}{{ .Values.grafana.defaultDashboardsEditable }}{{`,"links":[{"asDropdown":true,"includeVars":true,"keepTime":true,"tags":["kubernetes-mixin"],"targetBlank":false,"title":"Kubernetes","type":"dashboards"}],"panels":[{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"displayName":"$pod","max":10000000000,"min":0,"thresholds":{"steps":[{"color":"dark-green","index":0,"value":null},{"color":"dark-yellow","index":1,"value":5000000000},{"color":"dark-red","index":2,"value":7000000000}]},"unit":"bps"}},"gridPos":{"h":9,"w":12,"x":0,"y":0},"id":1,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum((8 * rate(container_network_receive_bytes_total{cluster=\"$cluster\",namespace=~\"$namespace\", pod=~\"$pod\"}[$__rate_interval])))","legendFormat":"__auto"}],"title":"Current Rate of Bits Received","type":"gauge"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"displayName":"$pod","max":10000000000,"min":0,"thresholds":{"steps":[{"color":"dark-green","index":0,"value":null},{"color":"dark-yellow","index":1,"value":5000000000},{"color":"dark-red","index":2,"value":7000000000}]},"unit":"bps"}},"gridPos":{"h":9,"w":12,"x":12,"y":0},"id":2,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum((8 * rate(container_network_transmit_bytes_total{cluster=\"$cluster\",namespace=~\"$namespace\", pod=~\"$pod\"}[$__rate_interval])))","legendFormat":"__auto"}],"title":"Current Rate of Bits Transmitted","type":"gauge"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"showPoints":"never"},"unit":"bps"}},"gridPos":{"h":9,"w":12,"x":0,"y":9},"id":3,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum((8 * rate(container_network_receive_bytes_total{cluster=\"$cluster\",namespace=~\"$namespace\", pod=~\"$pod\"}[$__rate_interval]))) by (pod)","legendFormat":"__auto"}],"title":"Receive Bandwidth","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"showPoints":"never"},"unit":"bps"}},"gridPos":{"h":9,"w":12,"x":12,"y":9},"id":4,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum((8 * rate(container_network_transmit_bytes_total{cluster=\"$cluster\",namespace=~\"$namespace\", pod=~\"$pod\"}[$__rate_interval]))) by (pod)","legendFormat":"__auto"}],"title":"Transmit Bandwidth","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"showPoints":"never"},"unit":"pps"}},"gridPos":{"h":9,"w":12,"x":0,"y":18},"id":5,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(rate(container_network_receive_packets_total{cluster=\"$cluster\",namespace=~\"$namespace\", pod=~\"$pod\"}[$__rate_interval])) by (pod)","legendFormat":"__auto"}],"title":"Rate of Received Packets","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"showPoints":"never"},"unit":"pps"}},"gridPos":{"h":9,"w":12,"x":12,"y":18},"id":6,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(rate(container_network_transmit_packets_total{cluster=\"$cluster\",namespace=~\"$namespace\", pod=~\"$pod\"}[$__rate_interval])) by (pod)","legendFormat":"__auto"}],"title":"Rate of Transmitted Packets","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"showPoints":"never"},"unit":"pps"}},"gridPos":{"h":9,"w":12,"x":0,"y":27},"id":7,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(rate(container_network_receive_packets_dropped_total{cluster=\"$cluster\",namespace=~\"$namespace\", pod=~\"$pod\"}[$__rate_interval])) by (pod)","legendFormat":"__auto"}],"title":"Rate of Received Packets Dropped","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"showPoints":"never"},"unit":"pps"}},"gridPos":{"h":9,"w":12,"x":12,"y":27},"id":8,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(rate(container_network_transmit_packets_dropped_total{cluster=\"$cluster\",namespace=~\"$namespace\", pod=~\"$pod\"}[$__rate_interval])) by (pod)","legendFormat":"__auto"}],"title":"Rate of Transmitted Packets Dropped","type":"timeseries"}],"refresh":"10s","schemaVersion":39,"tags":["kubernetes-mixin"],"templating":{"list":[{"current":{"selected":true,"text":"default","value":"default"},"hide":0,"label":"Data source","name":"datasource","query":"prometheus","regex":"","type":"datasource"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"hide":`}}{{ if .Values.grafana.sidecar.dashboards.multicluster.global.enabled }}0{{ else }}2{{ end }}{{`,"label":"cluster","name":"cluster","query":"label_values(up{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\"}, cluster)","refresh":2,"sort":1,"type":"query","allValue":".*"},{"allValue":".+","current":{"selected":false,"text":"kube-system","value":"kube-system"},"datasource":{"type":"prometheus","uid":"${datasource}"},"hide":0,"includeAll":true,"label":"namespace","name":"namespace","query":"label_values(container_network_receive_packets_total{cluster=\"$cluster\"}, namespace)","refresh":2,"sort":1,"type":"query"},{"current":{"selected":false,"text":"kube-system","value":"kube-system"},"datasource":{"type":"prometheus","uid":"${datasource}"},"hide":0,"label":"pod","name":"pod","query":"label_values(container_network_receive_packets_total{cluster=\"$cluster\",namespace=~\"$namespace\"}, pod)","refresh":2,"sort":1,"type":"query"}]},"time":{"from":"now-1h","to":"now"},"timezone": "`}}{{ .Values.grafana.defaultDashboardsTimezone }}{{`","title":"Kubernetes / Networking / Pod","uid":"7a18067ce943a40ae25454675c19ff5c"}`}} {{- end }} --- {{- if and .Values.grafana.operator.dashboardsConfigMapRefEnabled (or .Values.grafana.enabled .Values.grafana.forceDeployDashboards) (semverCompare ">=1.14.0-0" $kubeTargetVersion) (semverCompare "<9.9.9-9" $kubeTargetVersion) .Values.grafana.defaultDashboardsEnabled }} diff --git a/charts/kube-prometheus-stack/templates/grafana/dashboards-1.14/prometheus-remote-write.yaml b/charts/kube-prometheus-stack/templates/grafana/dashboards-1.14/prometheus-remote-write.yaml index 595eef944b..18da39786b 100644 --- a/charts/kube-prometheus-stack/templates/grafana/dashboards-1.14/prometheus-remote-write.yaml +++ b/charts/kube-prometheus-stack/templates/grafana/dashboards-1.14/prometheus-remote-write.yaml @@ -1,5 +1,5 @@ {{- /* -Generated from 'prometheus-remote-write' from https://raw.githubusercontent.com/prometheus-operator/kube-prometheus/eaca1a5fd76b356974054906af46810fec1cd7f8/manifests/grafana-dashboardDefinitions.yaml +Generated from 'prometheus-remote-write' from https://raw.githubusercontent.com/prometheus-operator/kube-prometheus/4eafa8b5395ef839bb02a55e3b5fbdfa03280cf9/manifests/grafana-dashboardDefinitions.yaml Do not change in-place! In order to change this file first read following link: https://github.com/prometheus-community/helm-charts/tree/main/charts/kube-prometheus-stack/hack */ -}} @@ -20,7 +20,7 @@ metadata: {{- include "kube-prometheus-stack.labels" $ | nindent 4 }} data: prometheus-remote-write.json: |- - {{`{"panels":[{"collapsed":false,"gridPos":{"h":1,"w":24,"x":0,"y":0},"id":1,"panels":[],"title":"Timestamps","type":"row"},{"datasource":{"type":"prometheus","uid":"$datasource"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never"},"unit":"short"}},"gridPos":{"h":7,"w":12,"x":0,"y":1},"id":2,"options":{"tooltip":{"mode":"multi"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"(\n prometheus_remote_storage_queue_highest_timestamp_seconds{cluster=~\"$cluster\", instance=~\"$instance\", url=~\"$url\"}\n-\n prometheus_remote_storage_queue_highest_sent_timestamp_seconds{cluster=~\"$cluster\", instance=~\"$instance\", url=~\"$url\"}\n)\n","format":"time_series","intervalFactor":2,"legendFormat":"{{cluster}}::{{instance}} {{remote_name}}:{{url}}"}],"title":"Highest Enqueued Timestamp vs. Highest Timestamp Sent","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"$datasource"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never"},"unit":"short"}},"gridPos":{"h":7,"w":12,"x":12,"y":1},"id":3,"options":{"tooltip":{"mode":"multi"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"clamp_min(\n rate(prometheus_remote_storage_queue_highest_timestamp_seconds{cluster=~\"$cluster\", instance=~\"$instance\", url=~\"$url\"}[5m])\n-\n rate(prometheus_remote_storage_queue_highest_sent_timestamp_seconds{cluster=~\"$cluster\", instance=~\"$instance\", url=~\"$url\"}[5m])\n, 0)\n","format":"time_series","intervalFactor":2,"legendFormat":"{{cluster}}:{{instance}} {{remote_name}}:{{url}}"}],"title":"Rate[5m]","type":"timeseries"},{"collapsed":false,"gridPos":{"h":1,"w":24,"x":0,"y":8},"id":4,"panels":[],"title":"Samples","type":"row"},{"datasource":{"type":"prometheus","uid":"$datasource"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never"},"unit":"short"}},"gridPos":{"h":7,"w":24,"x":0,"y":9},"id":5,"options":{"tooltip":{"mode":"multi"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"rate(\n prometheus_remote_storage_samples_in_total{cluster=~\"$cluster\", instance=~\"$instance\"}[5m])\n-\n ignoring(remote_name, url) group_right(instance) (rate(prometheus_remote_storage_succeeded_samples_total{cluster=~\"$cluster\", instance=~\"$instance\", url=~\"$url\"}[5m]) or rate(prometheus_remote_storage_samples_total{cluster=~\"$cluster\", instance=~\"$instance\", url=~\"$url\"}[5m]))\n-\n (rate(prometheus_remote_storage_dropped_samples_total{cluster=~\"$cluster\", instance=~\"$instance\", url=~\"$url\"}[5m]) or rate(prometheus_remote_storage_samples_dropped_total{cluster=~\"$cluster\", instance=~\"$instance\", url=~\"$url\"}[5m]))\n","format":"time_series","intervalFactor":2,"legendFormat":"{{cluster}}:{{instance}} {{remote_name}}:{{url}}"}],"title":"Rate, in vs. succeeded or dropped [5m]","type":"timeseries"},{"collapsed":false,"gridPos":{"h":1,"w":24,"x":0,"y":16},"id":6,"panels":[],"title":"Shards","type":"row"},{"datasource":{"type":"prometheus","uid":"$datasource"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never"},"unit":"short"}},"gridPos":{"h":7,"w":24,"x":0,"y":16},"id":7,"options":{"tooltip":{"mode":"multi"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"prometheus_remote_storage_shards{cluster=~\"$cluster\", instance=~\"$instance\", url=~\"$url\"}","format":"time_series","intervalFactor":2,"legendFormat":"{{cluster}}:{{instance}} {{remote_name}}:{{url}}"}],"title":"Current Shards","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"$datasource"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never"},"unit":"short"}},"gridPos":{"h":7,"w":8,"x":0,"y":23},"id":8,"options":{"tooltip":{"mode":"multi"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"prometheus_remote_storage_shards_max{cluster=~\"$cluster\", instance=~\"$instance\", url=~\"$url\"}","format":"time_series","intervalFactor":2,"legendFormat":"{{cluster}}:{{instance}} {{remote_name}}:{{url}}"}],"title":"Max Shards","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"$datasource"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never"},"unit":"short"}},"gridPos":{"h":7,"w":8,"x":8,"y":23},"id":9,"options":{"tooltip":{"mode":"multi"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"prometheus_remote_storage_shards_min{cluster=~\"$cluster\", instance=~\"$instance\", url=~\"$url\"}","format":"time_series","intervalFactor":2,"legendFormat":"{{cluster}}{{instance}} {{remote_name}}:{{url}}"}],"title":"Min Shards","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"$datasource"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never"},"unit":"short"}},"gridPos":{"h":7,"w":8,"x":16,"y":23},"id":10,"options":{"tooltip":{"mode":"multi"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"prometheus_remote_storage_shards_desired{cluster=~\"$cluster\", instance=~\"$instance\", url=~\"$url\"}","format":"time_series","intervalFactor":2,"legendFormat":"{{cluster}}:{{instance}} {{remote_name}}:{{url}}"}],"title":"Desired Shards","type":"timeseries"},{"collapsed":false,"gridPos":{"h":1,"w":24,"x":0,"y":24},"id":11,"panels":[],"title":"Shard Details","type":"row"},{"datasource":{"type":"prometheus","uid":"$datasource"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never"},"unit":"short"}},"gridPos":{"h":7,"w":12,"x":0,"y":25},"id":12,"options":{"tooltip":{"mode":"multi"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"prometheus_remote_storage_shard_capacity{cluster=~\"$cluster\", instance=~\"$instance\", url=~\"$url\"}","format":"time_series","intervalFactor":2,"legendFormat":"{{cluster}}:{{instance}} {{remote_name}}:{{url}}"}],"title":"Shard Capacity","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"$datasource"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never"},"unit":"short"}},"gridPos":{"h":7,"w":12,"x":12,"y":25},"id":13,"options":{"tooltip":{"mode":"multi"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"prometheus_remote_storage_pending_samples{cluster=~\"$cluster\", instance=~\"$instance\", url=~\"$url\"} or prometheus_remote_storage_samples_pending{cluster=~\"$cluster\", instance=~\"$instance\", url=~\"$url\"}","format":"time_series","intervalFactor":2,"legendFormat":"{{cluster}}:{{instance}} {{remote_name}}:{{url}}"}],"title":"Pending Samples","type":"timeseries"},{"collapsed":false,"gridPos":{"h":1,"w":24,"x":0,"y":32},"id":14,"panels":[],"title":"Segments","type":"row"},{"datasource":{"type":"prometheus","uid":"$datasource"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":0,"showPoints":"never"},"unit":"none"}},"gridPos":{"h":7,"w":12,"x":0,"y":33},"id":15,"options":{"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"prometheus_tsdb_wal_segment_current{cluster=~\"$cluster\", instance=~\"$instance\"}","format":"time_series","intervalFactor":2,"legendFormat":"{{cluster}}:{{instance}}"}],"title":"TSDB Current Segment","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"$datasource"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":0,"showPoints":"never"},"unit":"none"}},"gridPos":{"h":7,"w":12,"x":12,"y":33},"id":16,"options":{"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"prometheus_wal_watcher_current_segment{cluster=~\"$cluster\", instance=~\"$instance\"}","format":"time_series","intervalFactor":2,"legendFormat":"{{cluster}}:{{instance}} {{consumer}}"}],"title":"Remote Write Current Segment","type":"timeseries"},{"collapsed":false,"gridPos":{"h":1,"w":24,"x":0,"y":40},"id":17,"panels":[],"title":"Misc. Rates","type":"row"},{"datasource":{"type":"prometheus","uid":"$datasource"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":0,"showPoints":"never"}}},"gridPos":{"h":7,"w":6,"x":0,"y":41},"id":18,"options":{"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"rate(prometheus_remote_storage_dropped_samples_total{cluster=~\"$cluster\", instance=~\"$instance\", url=~\"$url\"}[5m]) or rate(prometheus_remote_storage_samples_dropped_total{cluster=~\"$cluster\", instance=~\"$instance\", url=~\"$url\"}[5m])","format":"time_series","intervalFactor":2,"legendFormat":"{{cluster}}:{{instance}} {{remote_name}}:{{url}}"}],"title":"Dropped Samples","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"$datasource"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":0,"showPoints":"never"}}},"gridPos":{"h":7,"w":6,"x":6,"y":41},"id":19,"options":{"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"rate(prometheus_remote_storage_failed_samples_total{cluster=~\"$cluster\", instance=~\"$instance\", url=~\"$url\"}[5m]) or rate(prometheus_remote_storage_samples_failed_total{cluster=~\"$cluster\", instance=~\"$instance\", url=~\"$url\"}[5m])","format":"time_series","intervalFactor":2,"legendFormat":"{{cluster}}:{{instance}} {{remote_name}}:{{url}}"}],"title":"Failed Samples","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"$datasource"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":0,"showPoints":"never"}}},"gridPos":{"h":7,"w":6,"x":12,"y":41},"id":20,"options":{"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"rate(prometheus_remote_storage_retried_samples_total{cluster=~\"$cluster\", instance=~\"$instance\", url=~\"$url\"}[5m]) or rate(prometheus_remote_storage_samples_retried_total{cluster=~\"$cluster\", instance=~\"$instance\", url=~\"$url\"}[5m])","format":"time_series","intervalFactor":2,"legendFormat":"{{cluster}}:{{instance}} {{remote_name}}:{{url}}"}],"title":"Retried Samples","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"$datasource"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":0,"showPoints":"never"}}},"gridPos":{"h":7,"w":6,"x":18,"y":41},"id":21,"options":{"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"rate(prometheus_remote_storage_enqueue_retries_total{cluster=~\"$cluster\", instance=~\"$instance\", url=~\"$url\"}[5m])","format":"time_series","intervalFactor":2,"legendFormat":"{{cluster}}:{{instance}} {{remote_name}}:{{url}}"}],"title":"Enqueue Retries","type":"timeseries"}],"schemaVersion":39,"tags":["prometheus-mixin"],"templating":{"list":[{"current":{"selected":false,"text":"default","value":"default"},"hide":0,"name":"datasource","query":"prometheus","type":"datasource"},{"current":{"selected":false,"text":"$__all","value":"$__all"},"datasource":{"type":"prometheus","uid":"${datasource}"},"hide":`}}{{ if .Values.grafana.sidecar.dashboards.multicluster.global.enabled }}0{{ else }}2{{ end }}{{`,"includeAll":true,"name":"cluster","query":"label_values(prometheus_build_info, cluster)","refresh":2,"type":"query","allValue":".*"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"includeAll":true,"name":"instance","query":"label_values(prometheus_build_info{cluster=~\"$cluster\"}, instance)","refresh":2,"type":"query"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"includeAll":true,"name":"url","query":"label_values(prometheus_remote_storage_shards{cluster=~\"$cluster\", instance=~\"$instance\"}, url)","refresh":2,"type":"query"}]},"time":{"from":"now-1h","to":"now"},"timepicker":{"refresh_intervals":["60s"]},"timezone": "`}}{{ .Values.grafana.defaultDashboardsTimezone }}{{`","title":"Prometheus / Remote Write","uid":"cb079f93-fde4-41f0-862b-d4301d7c1c56"}`}} + {{`{"panels":[{"collapsed":false,"gridPos":{"h":1,"w":24,"x":0,"y":0},"id":1,"panels":[],"title":"Timestamps","type":"row"},{"datasource":{"type":"prometheus","uid":"$datasource"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never"},"unit":"short"}},"gridPos":{"h":7,"w":12,"x":0,"y":1},"id":2,"options":{"tooltip":{"mode":"multi"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"(\n prometheus_remote_storage_queue_highest_timestamp_seconds{cluster=~\"$cluster\", instance=~\"$instance\", url=~\"$url\"}\n-\n prometheus_remote_storage_queue_highest_sent_timestamp_seconds{cluster=~\"$cluster\", instance=~\"$instance\", url=~\"$url\"}\n)\n","format":"time_series","intervalFactor":2,"legendFormat":"{{cluster}}::{{instance}} {{remote_name}}:{{url}}"}],"title":"Highest Enqueued Timestamp vs. Highest Timestamp Sent","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"$datasource"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never"},"unit":"short"}},"gridPos":{"h":7,"w":12,"x":12,"y":1},"id":3,"options":{"tooltip":{"mode":"multi"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"clamp_min(\n rate(prometheus_remote_storage_queue_highest_timestamp_seconds{cluster=~\"$cluster\", instance=~\"$instance\", url=~\"$url\"}[5m])\n-\n rate(prometheus_remote_storage_queue_highest_sent_timestamp_seconds{cluster=~\"$cluster\", instance=~\"$instance\", url=~\"$url\"}[5m])\n, 0)\n","format":"time_series","intervalFactor":2,"legendFormat":"{{cluster}}:{{instance}} {{remote_name}}:{{url}}"}],"title":"Rate[5m]","type":"timeseries"},{"collapsed":false,"gridPos":{"h":1,"w":24,"x":0,"y":8},"id":4,"panels":[],"title":"Samples","type":"row"},{"datasource":{"type":"prometheus","uid":"$datasource"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never"},"unit":"short"}},"gridPos":{"h":7,"w":24,"x":0,"y":9},"id":5,"options":{"tooltip":{"mode":"multi"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"rate(\n prometheus_remote_storage_samples_in_total{cluster=~\"$cluster\", instance=~\"$instance\"}[5m])\n-\n ignoring(remote_name, url) group_right(instance) (rate(prometheus_remote_storage_succeeded_samples_total{cluster=~\"$cluster\", instance=~\"$instance\", url=~\"$url\"}[5m]) or rate(prometheus_remote_storage_samples_total{cluster=~\"$cluster\", instance=~\"$instance\", url=~\"$url\"}[5m]))\n-\n (rate(prometheus_remote_storage_dropped_samples_total{cluster=~\"$cluster\", instance=~\"$instance\", url=~\"$url\"}[5m]) or rate(prometheus_remote_storage_samples_dropped_total{cluster=~\"$cluster\", instance=~\"$instance\", url=~\"$url\"}[5m]))\n","format":"time_series","intervalFactor":2,"legendFormat":"{{cluster}}:{{instance}} {{remote_name}}:{{url}}"}],"title":"Rate, in vs. succeeded or dropped [5m]","type":"timeseries"},{"collapsed":false,"gridPos":{"h":1,"w":24,"x":0,"y":16},"id":6,"panels":[],"title":"Shards","type":"row"},{"datasource":{"type":"prometheus","uid":"$datasource"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never"},"unit":"short"}},"gridPos":{"h":7,"w":24,"x":0,"y":16},"id":7,"options":{"tooltip":{"mode":"multi"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"prometheus_remote_storage_shards{cluster=~\"$cluster\", instance=~\"$instance\", url=~\"$url\"}","format":"time_series","intervalFactor":2,"legendFormat":"{{cluster}}:{{instance}} {{remote_name}}:{{url}}"}],"title":"Current Shards","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"$datasource"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never"},"unit":"short"}},"gridPos":{"h":7,"w":8,"x":0,"y":23},"id":8,"options":{"tooltip":{"mode":"multi"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"prometheus_remote_storage_shards_max{cluster=~\"$cluster\", instance=~\"$instance\", url=~\"$url\"}","format":"time_series","intervalFactor":2,"legendFormat":"{{cluster}}:{{instance}} {{remote_name}}:{{url}}"}],"title":"Max Shards","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"$datasource"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never"},"unit":"short"}},"gridPos":{"h":7,"w":8,"x":8,"y":23},"id":9,"options":{"tooltip":{"mode":"multi"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"prometheus_remote_storage_shards_min{cluster=~\"$cluster\", instance=~\"$instance\", url=~\"$url\"}","format":"time_series","intervalFactor":2,"legendFormat":"{{cluster}}{{instance}} {{remote_name}}:{{url}}"}],"title":"Min Shards","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"$datasource"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never"},"unit":"short"}},"gridPos":{"h":7,"w":8,"x":16,"y":23},"id":10,"options":{"tooltip":{"mode":"multi"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"prometheus_remote_storage_shards_desired{cluster=~\"$cluster\", instance=~\"$instance\", url=~\"$url\"}","format":"time_series","intervalFactor":2,"legendFormat":"{{cluster}}:{{instance}} {{remote_name}}:{{url}}"}],"title":"Desired Shards","type":"timeseries"},{"collapsed":false,"gridPos":{"h":1,"w":24,"x":0,"y":24},"id":11,"panels":[],"title":"Shard Details","type":"row"},{"datasource":{"type":"prometheus","uid":"$datasource"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never"},"unit":"short"}},"gridPos":{"h":7,"w":12,"x":0,"y":25},"id":12,"options":{"tooltip":{"mode":"multi"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"prometheus_remote_storage_shard_capacity{cluster=~\"$cluster\", instance=~\"$instance\", url=~\"$url\"}","format":"time_series","intervalFactor":2,"legendFormat":"{{cluster}}:{{instance}} {{remote_name}}:{{url}}"}],"title":"Shard Capacity","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"$datasource"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never"},"unit":"short"}},"gridPos":{"h":7,"w":12,"x":12,"y":25},"id":13,"options":{"tooltip":{"mode":"multi"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"prometheus_remote_storage_pending_samples{cluster=~\"$cluster\", instance=~\"$instance\", url=~\"$url\"} or prometheus_remote_storage_samples_pending{cluster=~\"$cluster\", instance=~\"$instance\", url=~\"$url\"}","format":"time_series","intervalFactor":2,"legendFormat":"{{cluster}}:{{instance}} {{remote_name}}:{{url}}"}],"title":"Pending Samples","type":"timeseries"},{"collapsed":false,"gridPos":{"h":1,"w":24,"x":0,"y":32},"id":14,"panels":[],"title":"Segments","type":"row"},{"datasource":{"type":"prometheus","uid":"$datasource"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":0,"showPoints":"never"},"unit":"none"}},"gridPos":{"h":7,"w":12,"x":0,"y":33},"id":15,"options":{"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"prometheus_tsdb_wal_segment_current{cluster=~\"$cluster\", instance=~\"$instance\"}","format":"time_series","intervalFactor":2,"legendFormat":"{{cluster}}:{{instance}}"}],"title":"TSDB Current Segment","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"$datasource"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":0,"showPoints":"never"},"unit":"none"}},"gridPos":{"h":7,"w":12,"x":12,"y":33},"id":16,"options":{"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"prometheus_wal_watcher_current_segment{cluster=~\"$cluster\", instance=~\"$instance\"}","format":"time_series","intervalFactor":2,"legendFormat":"{{cluster}}:{{instance}} {{consumer}}"}],"title":"Remote Write Current Segment","type":"timeseries"},{"collapsed":false,"gridPos":{"h":1,"w":24,"x":0,"y":40},"id":17,"panels":[],"title":"Misc. Rates","type":"row"},{"datasource":{"type":"prometheus","uid":"$datasource"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":0,"showPoints":"never"}}},"gridPos":{"h":7,"w":6,"x":0,"y":41},"id":18,"options":{"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"rate(prometheus_remote_storage_dropped_samples_total{cluster=~\"$cluster\", instance=~\"$instance\", url=~\"$url\"}[5m]) or rate(prometheus_remote_storage_samples_dropped_total{cluster=~\"$cluster\", instance=~\"$instance\", url=~\"$url\"}[5m])","format":"time_series","intervalFactor":2,"legendFormat":"{{cluster}}:{{instance}} {{remote_name}}:{{url}}"}],"title":"Dropped Samples","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"$datasource"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":0,"showPoints":"never"}}},"gridPos":{"h":7,"w":6,"x":6,"y":41},"id":19,"options":{"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"rate(prometheus_remote_storage_failed_samples_total{cluster=~\"$cluster\", instance=~\"$instance\", url=~\"$url\"}[5m]) or rate(prometheus_remote_storage_samples_failed_total{cluster=~\"$cluster\", instance=~\"$instance\", url=~\"$url\"}[5m])","format":"time_series","intervalFactor":2,"legendFormat":"{{cluster}}:{{instance}} {{remote_name}}:{{url}}"}],"title":"Failed Samples","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"$datasource"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":0,"showPoints":"never"}}},"gridPos":{"h":7,"w":6,"x":12,"y":41},"id":20,"options":{"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"rate(prometheus_remote_storage_retried_samples_total{cluster=~\"$cluster\", instance=~\"$instance\", url=~\"$url\"}[5m]) or rate(prometheus_remote_storage_samples_retried_total{cluster=~\"$cluster\", instance=~\"$instance\", url=~\"$url\"}[5m])","format":"time_series","intervalFactor":2,"legendFormat":"{{cluster}}:{{instance}} {{remote_name}}:{{url}}"}],"title":"Retried Samples","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"$datasource"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":0,"showPoints":"never"}}},"gridPos":{"h":7,"w":6,"x":18,"y":41},"id":21,"options":{"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"rate(prometheus_remote_storage_enqueue_retries_total{cluster=~\"$cluster\", instance=~\"$instance\", url=~\"$url\"}[5m])","format":"time_series","intervalFactor":2,"legendFormat":"{{cluster}}:{{instance}} {{remote_name}}:{{url}}"}],"title":"Enqueue Retries","type":"timeseries"}],"schemaVersion":39,"tags":["prometheus-mixin"],"templating":{"list":[{"current":{"selected":false,"text":"default","value":"default"},"hide":0,"name":"datasource","query":"prometheus","type":"datasource"},{"current":{"selected":false,"text":"$__all","value":"$__all"},"datasource":{"type":"prometheus","uid":"${datasource}"},"hide":`}}{{ if .Values.grafana.sidecar.dashboards.multicluster.global.enabled }}0{{ else }}2{{ end }}{{`,"includeAll":true,"name":"cluster","query":"label_values(prometheus_build_info, cluster)","refresh":2,"type":"query","allValue":".*"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"includeAll":true,"name":"instance","query":"label_values(prometheus_build_info{cluster=~\"$cluster\"}, instance)","refresh":2,"type":"query"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"includeAll":true,"name":"url","query":"label_values(prometheus_remote_storage_shards{cluster=~\"$cluster\", instance=~\"$instance\"}, url)","refresh":2,"type":"query"}]},"time":{"from":"now-1h","to":"now"},"timepicker":{"refresh_intervals":["60s"]},"timezone": "`}}{{ .Values.grafana.defaultDashboardsTimezone }}{{`","title":"Prometheus / Remote Write","uid":"cb079f93-fde4-41f0-862b-d4301d7c1c56"}`}} {{- end }} --- {{- if and .Values.grafana.operator.dashboardsConfigMapRefEnabled (or .Values.grafana.enabled .Values.grafana.forceDeployDashboards) (semverCompare ">=1.14.0-0" $kubeTargetVersion) (semverCompare "<9.9.9-9" $kubeTargetVersion) .Values.grafana.defaultDashboardsEnabled .Values.prometheus.prometheusSpec.remoteWriteDashboards }} diff --git a/charts/kube-prometheus-stack/templates/grafana/dashboards-1.14/prometheus.yaml b/charts/kube-prometheus-stack/templates/grafana/dashboards-1.14/prometheus.yaml index 78e305eab2..d547073164 100644 --- a/charts/kube-prometheus-stack/templates/grafana/dashboards-1.14/prometheus.yaml +++ b/charts/kube-prometheus-stack/templates/grafana/dashboards-1.14/prometheus.yaml @@ -1,5 +1,5 @@ {{- /* -Generated from 'prometheus' from https://raw.githubusercontent.com/prometheus-operator/kube-prometheus/eaca1a5fd76b356974054906af46810fec1cd7f8/manifests/grafana-dashboardDefinitions.yaml +Generated from 'prometheus' from https://raw.githubusercontent.com/prometheus-operator/kube-prometheus/4eafa8b5395ef839bb02a55e3b5fbdfa03280cf9/manifests/grafana-dashboardDefinitions.yaml Do not change in-place! In order to change this file first read following link: https://github.com/prometheus-community/helm-charts/tree/main/charts/kube-prometheus-stack/hack */ -}} @@ -20,7 +20,7 @@ metadata: {{- include "kube-prometheus-stack.labels" $ | nindent 4 }} data: prometheus.json: |- - {{`{"panels":[{"collapsed":false,"gridPos":{"h":1,"w":24,"x":0,"y":0},"id":1,"panels":[],"title":"Prometheus Stats","type":"row"},{"datasource":{"type":"prometheus","uid":"$datasource"},"fieldConfig":{"defaults":{"decimals":2,"displayName":"","unit":"short"},"overrides":[{"matcher":{"id":"byName","options":"Time"},"properties":[{"id":"displayName","value":"Time"},{"id":"custom.align","value":null},{"id":"custom.hidden","value":"true"}]},{"matcher":{"id":"byName","options":"cluster"},"properties":[{"id":"custom.align","value":null},{"id":"unit","value":"short"},{"id":"decimals","value":2},{"id":"displayName","value":"Cluster"}]},{"matcher":{"id":"byName","options":"job"},"properties":[{"id":"custom.align","value":null},{"id":"unit","value":"short"},{"id":"decimals","value":2},{"id":"displayName","value":"Job"}]},{"matcher":{"id":"byName","options":"instance"},"properties":[{"id":"displayName","value":"Instance"},{"id":"custom.align","value":null},{"id":"unit","value":"short"},{"id":"decimals","value":2}]},{"matcher":{"id":"byName","options":"version"},"properties":[{"id":"displayName","value":"Version"},{"id":"custom.align","value":null},{"id":"unit","value":"short"},{"id":"decimals","value":2}]},{"matcher":{"id":"byName","options":"Value #A"},"properties":[{"id":"displayName","value":"Count"},{"id":"custom.align","value":null},{"id":"unit","value":"short"},{"id":"decimals","value":2},{"id":"custom.hidden","value":"true"}]},{"matcher":{"id":"byName","options":"Value #B"},"properties":[{"id":"displayName","value":"Uptime"},{"id":"custom.align","value":null},{"id":"unit","value":"s"}]}]},"gridPos":{"h":7,"w":24,"x":0,"y":1},"id":2,"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"count by (cluster, job, instance, version) (prometheus_build_info{cluster=~\"$cluster\", job=~\"$job\", instance=~\"$instance\"})","format":"table","instant":true,"legendFormat":""},{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"max by (cluster, job, instance) (time() - process_start_time_seconds{cluster=~\"$cluster\", job=~\"$job\", instance=~\"$instance\"})","format":"table","instant":true,"legendFormat":""}],"title":"Prometheus Stats","type":"table"},{"collapsed":false,"gridPos":{"h":1,"w":24,"x":0,"y":8},"id":3,"panels":[],"title":"Discovery","type":"row"},{"datasource":{"type":"prometheus","uid":"$datasource"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never"},"min":0,"unit":"ms"}},"gridPos":{"h":7,"w":12,"x":0,"y":9},"id":4,"options":{"tooltip":{"mode":"multi","sort":"desc"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"sum(rate(prometheus_target_sync_length_seconds_sum{cluster=~\"$cluster\",job=~\"$job\",instance=~\"$instance\"}[5m])) by (cluster, job, scrape_job, instance) * 1e3","format":"time_series","legendFormat":"{{cluster}}:{{job}}:{{instance}}:{{scrape_job}}"}],"title":"Target Sync","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"$datasource"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":100,"lineWidth":0,"showPoints":"never","stacking":{"mode":"normal"}},"min":0,"unit":"short"}},"gridPos":{"h":7,"w":12,"x":12,"y":9},"id":5,"options":{"tooltip":{"mode":"multi","sort":"desc"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"sum by (cluster, job, instance) (prometheus_sd_discovered_targets{cluster=~\"$cluster\", job=~\"$job\",instance=~\"$instance\"})","format":"time_series","legendFormat":"{{cluster}}:{{job}}:{{instance}}"}],"title":"Targets","type":"timeseries"},{"collapsed":false,"gridPos":{"h":1,"w":24,"x":0,"y":16},"id":6,"panels":[],"title":"Retrieval","type":"row"},{"datasource":{"type":"prometheus","uid":"$datasource"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never"},"min":0,"unit":"ms"}},"gridPos":{"h":7,"w":8,"x":0,"y":17},"id":7,"options":{"tooltip":{"mode":"multi","sort":"desc"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"rate(prometheus_target_interval_length_seconds_sum{cluster=~\"$cluster\", job=~\"$job\",instance=~\"$instance\"}[5m]) / rate(prometheus_target_interval_length_seconds_count{cluster=~\"$cluster\", job=~\"$job\",instance=~\"$instance\"}[5m]) * 1e3","format":"time_series","legendFormat":"{{cluster}}:{{job}}:{{instance}} {{interval}} configured"}],"title":"Average Scrape Interval Duration","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"$datasource"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":100,"lineWidth":0,"showPoints":"never","stacking":{"mode":"normal"}},"min":0,"unit":"short"}},"gridPos":{"h":7,"w":8,"x":8,"y":17},"id":8,"options":{"tooltip":{"mode":"multi","sort":"desc"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"sum by (cluster, job, instance) (rate(prometheus_target_scrapes_exceeded_body_size_limit_total{cluster=~\"$cluster\",job=~\"$job\",instance=~\"$instance\"}[1m]))","format":"time_series","legendFormat":"exceeded body size limit: {{cluster}} {{job}} {{instance}}"},{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"sum by (cluster, job, instance) (rate(prometheus_target_scrapes_exceeded_sample_limit_total{cluster=~\"$cluster\",job=~\"$job\",instance=~\"$instance\"}[1m]))","format":"time_series","legendFormat":"exceeded sample limit: {{cluster}} {{job}} {{instance}}"},{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"sum by (cluster, job, instance) (rate(prometheus_target_scrapes_sample_duplicate_timestamp_total{cluster=~\"$cluster\",job=~\"$job\",instance=~\"$instance\"}[1m]))","format":"time_series","legendFormat":"duplicate timestamp: {{cluster}} {{job}} {{instance}}"},{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"sum by (cluster, job, instance) (rate(prometheus_target_scrapes_sample_out_of_bounds_total{cluster=~\"$cluster\",job=~\"$job\",instance=~\"$instance\"}[1m]))","format":"time_series","legendFormat":"out of bounds: {{cluster}} {{job}} {{instance}}"},{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"sum by (cluster, job, instance) (rate(prometheus_target_scrapes_sample_out_of_order_total{cluster=~\"$cluster\",job=~\"$job\",instance=~\"$instance\"}[1m]))","format":"time_series","legendFormat":"out of order: {{cluster}} {{job}} {{instance}}"}],"title":"Scrape failures","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"$datasource"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":100,"lineWidth":0,"showPoints":"never","stacking":{"mode":"normal"}},"min":0,"unit":"short"}},"gridPos":{"h":7,"w":8,"x":16,"y":17},"id":9,"options":{"tooltip":{"mode":"multi","sort":"desc"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"rate(prometheus_tsdb_head_samples_appended_total{cluster=~\"$cluster\", job=~\"$job\",instance=~\"$instance\"}[5m])","format":"time_series","legendFormat":"{{cluster}} {{job}} {{instance}}"}],"title":"Appended Samples","type":"timeseries"},{"collapsed":false,"gridPos":{"h":1,"w":24,"x":0,"y":24},"id":10,"panels":[],"title":"Storage","type":"row"},{"datasource":{"type":"prometheus","uid":"$datasource"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":100,"lineWidth":0,"showPoints":"never","stacking":{"mode":"normal"}},"min":0,"unit":"short"}},"gridPos":{"h":7,"w":12,"x":0,"y":25},"id":11,"options":{"tooltip":{"mode":"multi","sort":"desc"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"prometheus_tsdb_head_series{cluster=~\"$cluster\",job=~\"$job\",instance=~\"$instance\"}","format":"time_series","legendFormat":"{{cluster}} {{job}} {{instance}} head series"}],"title":"Head Series","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"$datasource"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":100,"lineWidth":0,"showPoints":"never","stacking":{"mode":"normal"}},"min":0,"unit":"short"}},"gridPos":{"h":7,"w":12,"x":12,"y":25},"id":12,"options":{"tooltip":{"mode":"multi","sort":"desc"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"prometheus_tsdb_head_chunks{cluster=~\"$cluster\",job=~\"$job\",instance=~\"$instance\"}","format":"time_series","legendFormat":"{{cluster}} {{job}} {{instance}} head chunks"}],"title":"Head Chunks","type":"timeseries"},{"collapsed":false,"gridPos":{"h":1,"w":24,"x":0,"y":32},"id":13,"panels":[],"title":"Query","type":"row"},{"datasource":{"type":"prometheus","uid":"$datasource"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":100,"lineWidth":0,"showPoints":"never","stacking":{"mode":"normal"}},"min":0,"unit":"short"}},"gridPos":{"h":7,"w":12,"x":0,"y":33},"id":14,"options":{"tooltip":{"mode":"multi","sort":"desc"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"rate(prometheus_engine_query_duration_seconds_count{cluster=~\"$cluster\",job=~\"$job\",instance=~\"$instance\",slice=\"inner_eval\"}[5m])","format":"time_series","legendFormat":"{{cluster}} {{job}} {{instance}}"}],"title":"Query Rate","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"$datasource"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":100,"lineWidth":0,"showPoints":"never","stacking":{"mode":"normal"}},"min":0,"unit":"ms"}},"gridPos":{"h":7,"w":12,"x":12,"y":33},"id":15,"options":{"tooltip":{"mode":"multi","sort":"desc"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"max by (slice) (prometheus_engine_query_duration_seconds{quantile=\"0.9\",cluster=~\"$cluster\", job=~\"$job\",instance=~\"$instance\"}) * 1e3","format":"time_series","legendFormat":"{{slice}}"}],"title":"Stage Duration","type":"timeseries"}],"schemaVersion":39,"tags":["prometheus-mixin"],"templating":{"list":[{"current":{"selected":false,"text":"default","value":"default"},"hide":0,"label":"Data source","name":"datasource","query":"prometheus","type":"datasource"},{"allValue":".*","current":{"selected":false,"text":["$__all"],"value":["$__all"]},"datasource":{"type":"prometheus","uid":"${datasource}"},"hide":`}}{{ if .Values.grafana.sidecar.dashboards.multicluster.global.enabled }}0{{ else }}2{{ end }}{{`,"includeAll":true,"label":"cluster","multi":true,"name":"cluster","query":"label_values(prometheus_build_info{}, cluster)","refresh":2,"sort":2,"type":"query"},{"allValue":".+","datasource":{"type":"prometheus","uid":"${datasource}"},"includeAll":true,"label":"job","multi":true,"name":"job","query":"label_values(prometheus_build_info{cluster=~\"$cluster\"}, job)","refresh":2,"sort":2,"type":"query"},{"allValue":".+","datasource":{"type":"prometheus","uid":"${datasource}"},"includeAll":true,"label":"instance","multi":true,"name":"instance","query":"label_values(prometheus_build_info{cluster=~\"$cluster\", job=~\"$job\"}, instance)","refresh":2,"sort":2,"type":"query"}]},"time":{"from":"now-1h","to":"now"},"timepicker":{"refresh_intervals":["60s"]},"timezone": "`}}{{ .Values.grafana.defaultDashboardsTimezone }}{{`","title":"Prometheus / Overview","uid":"9fa0d141-d019-4ad7-8bc5-42196ee308bd"}`}} + {{`{"panels":[{"collapsed":false,"gridPos":{"h":1,"w":24,"x":0,"y":0},"id":1,"panels":[],"title":"Prometheus Stats","type":"row"},{"datasource":{"type":"prometheus","uid":"$datasource"},"fieldConfig":{"defaults":{"decimals":2,"displayName":"","unit":"short"},"overrides":[{"matcher":{"id":"byName","options":"Time"},"properties":[{"id":"displayName","value":"Time"},{"id":"custom.align","value":null},{"id":"custom.hidden","value":"true"}]},{"matcher":{"id":"byName","options":"cluster"},"properties":[{"id":"custom.align","value":null},{"id":"unit","value":"short"},{"id":"decimals","value":2},{"id":"displayName","value":"Cluster"}]},{"matcher":{"id":"byName","options":"job"},"properties":[{"id":"custom.align","value":null},{"id":"unit","value":"short"},{"id":"decimals","value":2},{"id":"displayName","value":"Job"}]},{"matcher":{"id":"byName","options":"instance"},"properties":[{"id":"displayName","value":"Instance"},{"id":"custom.align","value":null},{"id":"unit","value":"short"},{"id":"decimals","value":2}]},{"matcher":{"id":"byName","options":"version"},"properties":[{"id":"displayName","value":"Version"},{"id":"custom.align","value":null},{"id":"unit","value":"short"},{"id":"decimals","value":2}]},{"matcher":{"id":"byName","options":"Value #A"},"properties":[{"id":"displayName","value":"Count"},{"id":"custom.align","value":null},{"id":"unit","value":"short"},{"id":"decimals","value":2},{"id":"custom.hidden","value":"true"}]},{"matcher":{"id":"byName","options":"Value #B"},"properties":[{"id":"displayName","value":"Uptime"},{"id":"custom.align","value":null},{"id":"unit","value":"s"}]}]},"gridPos":{"h":7,"w":24,"x":0,"y":1},"id":2,"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"count by (cluster, job, instance, version) (prometheus_build_info{cluster=~\"$cluster\", job=~\"$job\", instance=~\"$instance\"})","format":"table","instant":true,"legendFormat":""},{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"max by (cluster, job, instance) (time() - process_start_time_seconds{cluster=~\"$cluster\", job=~\"$job\", instance=~\"$instance\"})","format":"table","instant":true,"legendFormat":""}],"title":"Prometheus Stats","type":"table"},{"collapsed":false,"gridPos":{"h":1,"w":24,"x":0,"y":8},"id":3,"panels":[],"title":"Discovery","type":"row"},{"datasource":{"type":"prometheus","uid":"$datasource"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never"},"min":0,"unit":"ms"}},"gridPos":{"h":7,"w":12,"x":0,"y":9},"id":4,"options":{"tooltip":{"mode":"multi","sort":"desc"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"sum(rate(prometheus_target_sync_length_seconds_sum{cluster=~\"$cluster\",job=~\"$job\",instance=~\"$instance\"}[5m])) by (cluster, job, scrape_job, instance) * 1e3","format":"time_series","legendFormat":"{{cluster}}:{{job}}:{{instance}}:{{scrape_job}}"}],"title":"Target Sync","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"$datasource"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":100,"lineWidth":0,"showPoints":"never","stacking":{"mode":"normal"}},"min":0,"unit":"short"}},"gridPos":{"h":7,"w":12,"x":12,"y":9},"id":5,"options":{"tooltip":{"mode":"multi","sort":"desc"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"sum by (cluster, job, instance) (prometheus_sd_discovered_targets{cluster=~\"$cluster\", job=~\"$job\",instance=~\"$instance\"})","format":"time_series","legendFormat":"{{cluster}}:{{job}}:{{instance}}"}],"title":"Targets","type":"timeseries"},{"collapsed":false,"gridPos":{"h":1,"w":24,"x":0,"y":16},"id":6,"panels":[],"title":"Retrieval","type":"row"},{"datasource":{"type":"prometheus","uid":"$datasource"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never"},"min":0,"unit":"ms"}},"gridPos":{"h":7,"w":8,"x":0,"y":17},"id":7,"options":{"tooltip":{"mode":"multi","sort":"desc"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"rate(prometheus_target_interval_length_seconds_sum{cluster=~\"$cluster\", job=~\"$job\",instance=~\"$instance\"}[5m]) / rate(prometheus_target_interval_length_seconds_count{cluster=~\"$cluster\", job=~\"$job\",instance=~\"$instance\"}[5m]) * 1e3","format":"time_series","legendFormat":"{{cluster}}:{{job}}:{{instance}} {{interval}} configured"}],"title":"Average Scrape Interval Duration","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"$datasource"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":100,"lineWidth":0,"showPoints":"never","stacking":{"mode":"normal"}},"min":0,"unit":"short"}},"gridPos":{"h":7,"w":8,"x":8,"y":17},"id":8,"options":{"tooltip":{"mode":"multi","sort":"desc"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"sum by (cluster, job, instance) (rate(prometheus_target_scrapes_exceeded_body_size_limit_total{cluster=~\"$cluster\",job=~\"$job\",instance=~\"$instance\"}[1m]))","format":"time_series","legendFormat":"exceeded body size limit: {{cluster}} {{job}} {{instance}}"},{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"sum by (cluster, job, instance) (rate(prometheus_target_scrapes_exceeded_sample_limit_total{cluster=~\"$cluster\",job=~\"$job\",instance=~\"$instance\"}[1m]))","format":"time_series","legendFormat":"exceeded sample limit: {{cluster}} {{job}} {{instance}}"},{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"sum by (cluster, job, instance) (rate(prometheus_target_scrapes_sample_duplicate_timestamp_total{cluster=~\"$cluster\",job=~\"$job\",instance=~\"$instance\"}[1m]))","format":"time_series","legendFormat":"duplicate timestamp: {{cluster}} {{job}} {{instance}}"},{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"sum by (cluster, job, instance) (rate(prometheus_target_scrapes_sample_out_of_bounds_total{cluster=~\"$cluster\",job=~\"$job\",instance=~\"$instance\"}[1m]))","format":"time_series","legendFormat":"out of bounds: {{cluster}} {{job}} {{instance}}"},{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"sum by (cluster, job, instance) (rate(prometheus_target_scrapes_sample_out_of_order_total{cluster=~\"$cluster\",job=~\"$job\",instance=~\"$instance\"}[1m]))","format":"time_series","legendFormat":"out of order: {{cluster}} {{job}} {{instance}}"}],"title":"Scrape failures","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"$datasource"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":100,"lineWidth":0,"showPoints":"never","stacking":{"mode":"normal"}},"min":0,"unit":"short"}},"gridPos":{"h":7,"w":8,"x":16,"y":17},"id":9,"options":{"tooltip":{"mode":"multi","sort":"desc"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"rate(prometheus_tsdb_head_samples_appended_total{cluster=~\"$cluster\", job=~\"$job\",instance=~\"$instance\"}[5m])","format":"time_series","legendFormat":"{{cluster}} {{job}} {{instance}}"}],"title":"Appended Samples","type":"timeseries"},{"collapsed":false,"gridPos":{"h":1,"w":24,"x":0,"y":24},"id":10,"panels":[],"title":"Storage","type":"row"},{"datasource":{"type":"prometheus","uid":"$datasource"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":100,"lineWidth":0,"showPoints":"never","stacking":{"mode":"normal"}},"min":0,"unit":"short"}},"gridPos":{"h":7,"w":12,"x":0,"y":25},"id":11,"options":{"tooltip":{"mode":"multi","sort":"desc"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"prometheus_tsdb_head_series{cluster=~\"$cluster\",job=~\"$job\",instance=~\"$instance\"}","format":"time_series","legendFormat":"{{cluster}} {{job}} {{instance}} head series"}],"title":"Head Series","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"$datasource"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":100,"lineWidth":0,"showPoints":"never","stacking":{"mode":"normal"}},"min":0,"unit":"short"}},"gridPos":{"h":7,"w":12,"x":12,"y":25},"id":12,"options":{"tooltip":{"mode":"multi","sort":"desc"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"prometheus_tsdb_head_chunks{cluster=~\"$cluster\",job=~\"$job\",instance=~\"$instance\"}","format":"time_series","legendFormat":"{{cluster}} {{job}} {{instance}} head chunks"}],"title":"Head Chunks","type":"timeseries"},{"collapsed":false,"gridPos":{"h":1,"w":24,"x":0,"y":32},"id":13,"panels":[],"title":"Query","type":"row"},{"datasource":{"type":"prometheus","uid":"$datasource"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":100,"lineWidth":0,"showPoints":"never","stacking":{"mode":"normal"}},"min":0,"unit":"short"}},"gridPos":{"h":7,"w":12,"x":0,"y":33},"id":14,"options":{"tooltip":{"mode":"multi","sort":"desc"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"rate(prometheus_engine_query_duration_seconds_count{cluster=~\"$cluster\",job=~\"$job\",instance=~\"$instance\",slice=\"inner_eval\"}[5m])","format":"time_series","legendFormat":"{{cluster}} {{job}} {{instance}}"}],"title":"Query Rate","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"$datasource"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":100,"lineWidth":0,"showPoints":"never","stacking":{"mode":"normal"}},"min":0,"unit":"ms"}},"gridPos":{"h":7,"w":12,"x":12,"y":33},"id":15,"options":{"tooltip":{"mode":"multi","sort":"desc"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"$datasource"},"expr":"max by (slice) (prometheus_engine_query_duration_seconds{quantile=\"0.9\",cluster=~\"$cluster\", job=~\"$job\",instance=~\"$instance\"}) * 1e3","format":"time_series","legendFormat":"{{slice}}"}],"title":"Stage Duration","type":"timeseries"}],"schemaVersion":39,"tags":["prometheus-mixin"],"templating":{"list":[{"current":{"selected":false,"text":"default","value":"default"},"hide":0,"label":"Data source","name":"datasource","query":"prometheus","type":"datasource"},{"allValue":".*","current":{"selected":false,"text":["$__all"],"value":["$__all"]},"datasource":{"type":"prometheus","uid":"${datasource}"},"hide":`}}{{ if .Values.grafana.sidecar.dashboards.multicluster.global.enabled }}0{{ else }}2{{ end }}{{`,"includeAll":true,"label":"cluster","multi":true,"name":"cluster","query":"label_values(prometheus_build_info{}, cluster)","refresh":2,"sort":2,"type":"query"},{"allValue":".+","datasource":{"type":"prometheus","uid":"${datasource}"},"includeAll":true,"label":"job","multi":true,"name":"job","query":"label_values(prometheus_build_info{cluster=~\"$cluster\"}, job)","refresh":2,"sort":2,"type":"query"},{"allValue":".+","datasource":{"type":"prometheus","uid":"${datasource}"},"includeAll":true,"label":"instance","multi":true,"name":"instance","query":"label_values(prometheus_build_info{cluster=~\"$cluster\", job=~\"$job\"}, instance)","refresh":2,"sort":2,"type":"query"}]},"time":{"from":"now-1h","to":"now"},"timepicker":{"refresh_intervals":["60s"]},"timezone": "`}}{{ .Values.grafana.defaultDashboardsTimezone }}{{`","title":"Prometheus / Overview","uid":"9fa0d141-d019-4ad7-8bc5-42196ee308bd"}`}} {{- end }} --- {{- if and .Values.grafana.operator.dashboardsConfigMapRefEnabled (or .Values.grafana.enabled .Values.grafana.forceDeployDashboards) (semverCompare ">=1.14.0-0" $kubeTargetVersion) (semverCompare "<9.9.9-9" $kubeTargetVersion) .Values.grafana.defaultDashboardsEnabled }} diff --git a/charts/kube-prometheus-stack/templates/grafana/dashboards-1.14/proxy.yaml b/charts/kube-prometheus-stack/templates/grafana/dashboards-1.14/proxy.yaml index 46a32930c6..f3143759a7 100644 --- a/charts/kube-prometheus-stack/templates/grafana/dashboards-1.14/proxy.yaml +++ b/charts/kube-prometheus-stack/templates/grafana/dashboards-1.14/proxy.yaml @@ -1,5 +1,5 @@ {{- /* -Generated from 'proxy' from https://raw.githubusercontent.com/prometheus-operator/kube-prometheus/eaca1a5fd76b356974054906af46810fec1cd7f8/manifests/grafana-dashboardDefinitions.yaml +Generated from 'proxy' from https://raw.githubusercontent.com/prometheus-operator/kube-prometheus/4eafa8b5395ef839bb02a55e3b5fbdfa03280cf9/manifests/grafana-dashboardDefinitions.yaml Do not change in-place! In order to change this file first read following link: https://github.com/prometheus-community/helm-charts/tree/main/charts/kube-prometheus-stack/hack */ -}} @@ -21,7 +21,7 @@ metadata: {{- include "kube-prometheus-stack.labels" $ | nindent 4 }} data: proxy.json: |- - {{`{"editable":`}}{{ .Values.grafana.defaultDashboardsEditable }}{{`,"links":[{"asDropdown":true,"includeVars":true,"keepTime":true,"tags":["kubernetes-mixin"],"targetBlank":false,"title":"Kubernetes","type":"dashboards"}],"panels":[{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"unit":"none"}},"gridPos":{"h":7,"w":4,"x":0,"y":0},"id":1,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"colorMode":"none"},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(up{cluster=\"$cluster\", job=\"`}}{{ $kubeProxyJob }}{{`\"})","instant":true}],"title":"Up","type":"stat"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"ops"}},"gridPos":{"h":7,"w":10,"x":4,"y":0},"id":2,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(rate(kubeproxy_sync_proxy_rules_duration_seconds_count{cluster=\"$cluster\", job=\"`}}{{ $kubeProxyJob }}{{`\", instance=~\"$instance\"}[$__rate_interval]))","legendFormat":"rate"}],"title":"Rules Sync Rate","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"s"}},"gridPos":{"h":7,"w":10,"x":14,"y":0},"id":3,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"histogram_quantile(0.99,rate(kubeproxy_sync_proxy_rules_duration_seconds_bucket{cluster=\"$cluster\", job=\"`}}{{ $kubeProxyJob }}{{`\", instance=~\"$instance\"}[$__rate_interval]))","legendFormat":"{{instance}}"}],"title":"Rules Sync Latency 99th Quantile","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"ops"}},"gridPos":{"h":7,"w":12,"x":0,"y":7},"id":4,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(rate(kubeproxy_network_programming_duration_seconds_count{cluster=\"$cluster\", job=\"`}}{{ $kubeProxyJob }}{{`\", instance=~\"$instance\"}[$__rate_interval]))","legendFormat":"rate"}],"title":"Network Programming Rate","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"s"}},"gridPos":{"h":7,"w":12,"x":12,"y":7},"id":5,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"histogram_quantile(0.99, sum(rate(kubeproxy_network_programming_duration_seconds_bucket{cluster=\"$cluster\", job=\"`}}{{ $kubeProxyJob }}{{`\", instance=~\"$instance\"}[$__rate_interval])) by (instance, le))","legendFormat":"{{instance}}"}],"title":"Network Programming Latency 99th Quantile","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"ops"}},"gridPos":{"h":7,"w":8,"x":0,"y":14},"id":6,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(rate(rest_client_requests_total{cluster=\"$cluster\",job=\"`}}{{ $kubeProxyJob }}{{`\", instance=~\"$instance\",code=~\"2..\"}[$__rate_interval]))","legendFormat":"2xx"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(rate(rest_client_requests_total{cluster=\"$cluster\",job=\"`}}{{ $kubeProxyJob }}{{`\", instance=~\"$instance\",code=~\"3..\"}[$__rate_interval]))","legendFormat":"3xx"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(rate(rest_client_requests_total{cluster=\"$cluster\",job=\"`}}{{ $kubeProxyJob }}{{`\", instance=~\"$instance\",code=~\"4..\"}[$__rate_interval]))","legendFormat":"4xx"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(rate(rest_client_requests_total{cluster=\"$cluster\",job=\"`}}{{ $kubeProxyJob }}{{`\", instance=~\"$instance\",code=~\"5..\"}[$__rate_interval]))","legendFormat":"5xx"}],"title":"Kube API Request Rate","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"ops"}},"gridPos":{"h":7,"w":16,"x":8,"y":14},"id":7,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"histogram_quantile(0.99, sum(rate(rest_client_request_duration_seconds_bucket{cluster=\"$cluster\", job=\"`}}{{ $kubeProxyJob }}{{`\",instance=~\"$instance\",verb=\"POST\"}[$__rate_interval])) by (verb, le))","legendFormat":"{{verb}}"}],"title":"Post Request Latency 99th Quantile","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"s"}},"gridPos":{"h":7,"w":24,"x":0,"y":21},"id":8,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"histogram_quantile(0.99, sum(rate(rest_client_request_duration_seconds_bucket{cluster=\"$cluster\", job=\"`}}{{ $kubeProxyJob }}{{`\", instance=~\"$instance\", verb=\"GET\"}[$__rate_interval])) by (verb, le))","legendFormat":"{{verb}}"}],"title":"Get Request Latency 99th Quantile","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"bytes"}},"gridPos":{"h":7,"w":8,"x":0,"y":28},"id":9,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"process_resident_memory_bytes{cluster=\"$cluster\", job=\"`}}{{ $kubeProxyJob }}{{`\",instance=~\"$instance\"}","legendFormat":"{{instance}}"}],"title":"Memory","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"short"}},"gridPos":{"h":7,"w":8,"x":8,"y":28},"id":10,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"rate(process_cpu_seconds_total{cluster=\"$cluster\", job=\"`}}{{ $kubeProxyJob }}{{`\",instance=~\"$instance\"}[$__rate_interval])","legendFormat":"{{instance}}"}],"title":"CPU usage","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"short"}},"gridPos":{"h":7,"w":8,"x":16,"y":28},"id":11,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"go_goroutines{cluster=\"$cluster\", job=\"`}}{{ $kubeProxyJob }}{{`\",instance=~\"$instance\"}","legendFormat":"{{instance}}"}],"title":"Goroutines","type":"timeseries"}],"refresh":"10s","schemaVersion":39,"tags":["kubernetes-mixin"],"templating":{"list":[{"current":{"selected":true,"text":"default","value":"default"},"hide":0,"label":"Data source","name":"datasource","query":"prometheus","regex":"","type":"datasource"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"hide":`}}{{ if .Values.grafana.sidecar.dashboards.multicluster.global.enabled }}0{{ else }}2{{ end }}{{`,"label":"cluster","name":"cluster","query":"label_values(up{job=\"`}}{{ $kubeProxyJob }}{{`\"}, cluster)","refresh":2,"sort":1,"type":"query","allValue":".*"},{"allValue":".+","datasource":{"type":"prometheus","uid":"${datasource}"},"hide":0,"includeAll":true,"label":"instance","name":"instance","query":"label_values(up{job=\"`}}{{ $kubeProxyJob }}{{`\", cluster=\"$cluster\", job=\"`}}{{ $kubeProxyJob }}{{`\"}, instance)","refresh":2,"type":"query"}]},"time":{"from":"now-1h","to":"now"},"timezone": "`}}{{ .Values.grafana.defaultDashboardsTimezone }}{{`","title":"Kubernetes / Proxy","uid":"632e265de029684c40b21cb76bca4f94"}`}} + {{`{"editable":`}}{{ .Values.grafana.defaultDashboardsEditable }}{{`,"links":[{"asDropdown":true,"includeVars":true,"keepTime":true,"tags":["kubernetes-mixin"],"targetBlank":false,"title":"Kubernetes","type":"dashboards"}],"panels":[{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"unit":"none"}},"gridPos":{"h":7,"w":4,"x":0,"y":0},"id":1,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"colorMode":"none"},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(up{cluster=\"$cluster\", job=\"`}}{{ $kubeProxyJob }}{{`\"})","instant":true}],"title":"Up","type":"stat"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"ops"}},"gridPos":{"h":7,"w":10,"x":4,"y":0},"id":2,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(rate(kubeproxy_sync_proxy_rules_duration_seconds_count{cluster=\"$cluster\", job=\"`}}{{ $kubeProxyJob }}{{`\", instance=~\"$instance\"}[$__rate_interval]))","legendFormat":"rate"}],"title":"Rules Sync Rate","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"s"}},"gridPos":{"h":7,"w":10,"x":14,"y":0},"id":3,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"histogram_quantile(0.99,rate(kubeproxy_sync_proxy_rules_duration_seconds_bucket{cluster=\"$cluster\", job=\"`}}{{ $kubeProxyJob }}{{`\", instance=~\"$instance\"}[$__rate_interval]))","legendFormat":"{{instance}}"}],"title":"Rules Sync Latency 99th Quantile","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"ops"}},"gridPos":{"h":7,"w":12,"x":0,"y":7},"id":4,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(rate(kubeproxy_network_programming_duration_seconds_count{cluster=\"$cluster\", job=\"`}}{{ $kubeProxyJob }}{{`\", instance=~\"$instance\"}[$__rate_interval]))","legendFormat":"rate"}],"title":"Network Programming Rate","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"s"}},"gridPos":{"h":7,"w":12,"x":12,"y":7},"id":5,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"histogram_quantile(0.99, sum(rate(kubeproxy_network_programming_duration_seconds_bucket{cluster=\"$cluster\", job=\"`}}{{ $kubeProxyJob }}{{`\", instance=~\"$instance\"}[$__rate_interval])) by (instance, le))","legendFormat":"{{instance}}"}],"title":"Network Programming Latency 99th Quantile","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"ops"}},"gridPos":{"h":7,"w":8,"x":0,"y":14},"id":6,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(rate(rest_client_requests_total{cluster=\"$cluster\",job=\"`}}{{ $kubeProxyJob }}{{`\", instance=~\"$instance\",code=~\"2..\"}[$__rate_interval]))","legendFormat":"2xx"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(rate(rest_client_requests_total{cluster=\"$cluster\",job=\"`}}{{ $kubeProxyJob }}{{`\", instance=~\"$instance\",code=~\"3..\"}[$__rate_interval]))","legendFormat":"3xx"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(rate(rest_client_requests_total{cluster=\"$cluster\",job=\"`}}{{ $kubeProxyJob }}{{`\", instance=~\"$instance\",code=~\"4..\"}[$__rate_interval]))","legendFormat":"4xx"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(rate(rest_client_requests_total{cluster=\"$cluster\",job=\"`}}{{ $kubeProxyJob }}{{`\", instance=~\"$instance\",code=~\"5..\"}[$__rate_interval]))","legendFormat":"5xx"}],"title":"Kube API Request Rate","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"ops"}},"gridPos":{"h":7,"w":16,"x":8,"y":14},"id":7,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"histogram_quantile(0.99, sum(rate(rest_client_request_duration_seconds_bucket{cluster=\"$cluster\", job=\"`}}{{ $kubeProxyJob }}{{`\",instance=~\"$instance\",verb=\"POST\"}[$__rate_interval])) by (verb, le))","legendFormat":"{{verb}}"}],"title":"Post Request Latency 99th Quantile","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"s"}},"gridPos":{"h":7,"w":24,"x":0,"y":21},"id":8,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"histogram_quantile(0.99, sum(rate(rest_client_request_duration_seconds_bucket{cluster=\"$cluster\", job=\"`}}{{ $kubeProxyJob }}{{`\", instance=~\"$instance\", verb=\"GET\"}[$__rate_interval])) by (verb, le))","legendFormat":"{{verb}}"}],"title":"Get Request Latency 99th Quantile","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"bytes"}},"gridPos":{"h":7,"w":8,"x":0,"y":28},"id":9,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"process_resident_memory_bytes{cluster=\"$cluster\", job=\"`}}{{ $kubeProxyJob }}{{`\",instance=~\"$instance\"}","legendFormat":"{{instance}}"}],"title":"Memory","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"short"}},"gridPos":{"h":7,"w":8,"x":8,"y":28},"id":10,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"rate(process_cpu_seconds_total{cluster=\"$cluster\", job=\"`}}{{ $kubeProxyJob }}{{`\",instance=~\"$instance\"}[$__rate_interval])","legendFormat":"{{instance}}"}],"title":"CPU usage","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"short"}},"gridPos":{"h":7,"w":8,"x":16,"y":28},"id":11,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"go_goroutines{cluster=\"$cluster\", job=\"`}}{{ $kubeProxyJob }}{{`\",instance=~\"$instance\"}","legendFormat":"{{instance}}"}],"title":"Goroutines","type":"timeseries"}],"refresh":"10s","schemaVersion":39,"tags":["kubernetes-mixin"],"templating":{"list":[{"current":{"selected":true,"text":"default","value":"default"},"hide":0,"label":"Data source","name":"datasource","query":"prometheus","regex":"","type":"datasource"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"hide":`}}{{ if .Values.grafana.sidecar.dashboards.multicluster.global.enabled }}0{{ else }}2{{ end }}{{`,"label":"cluster","name":"cluster","query":"label_values(up{job=\"`}}{{ $kubeProxyJob }}{{`\"}, cluster)","refresh":2,"sort":1,"type":"query","allValue":".*"},{"allValue":".+","datasource":{"type":"prometheus","uid":"${datasource}"},"hide":0,"includeAll":true,"label":"instance","name":"instance","query":"label_values(up{job=\"`}}{{ $kubeProxyJob }}{{`\", cluster=\"$cluster\", job=\"`}}{{ $kubeProxyJob }}{{`\"}, instance)","refresh":2,"type":"query"}]},"time":{"from":"now-1h","to":"now"},"timezone": "`}}{{ .Values.grafana.defaultDashboardsTimezone }}{{`","title":"Kubernetes / Proxy","uid":"632e265de029684c40b21cb76bca4f94"}`}} {{- end }} --- {{- if and .Values.grafana.operator.dashboardsConfigMapRefEnabled (or .Values.grafana.enabled .Values.grafana.forceDeployDashboards) (semverCompare ">=1.14.0-0" $kubeTargetVersion) (semverCompare "<9.9.9-9" $kubeTargetVersion) .Values.grafana.defaultDashboardsEnabled .Values.kubeProxy.enabled }} diff --git a/charts/kube-prometheus-stack/templates/grafana/dashboards-1.14/scheduler.yaml b/charts/kube-prometheus-stack/templates/grafana/dashboards-1.14/scheduler.yaml index 0eee65a558..72f3858cf8 100644 --- a/charts/kube-prometheus-stack/templates/grafana/dashboards-1.14/scheduler.yaml +++ b/charts/kube-prometheus-stack/templates/grafana/dashboards-1.14/scheduler.yaml @@ -1,5 +1,5 @@ {{- /* -Generated from 'scheduler' from https://raw.githubusercontent.com/prometheus-operator/kube-prometheus/eaca1a5fd76b356974054906af46810fec1cd7f8/manifests/grafana-dashboardDefinitions.yaml +Generated from 'scheduler' from https://raw.githubusercontent.com/prometheus-operator/kube-prometheus/4eafa8b5395ef839bb02a55e3b5fbdfa03280cf9/manifests/grafana-dashboardDefinitions.yaml Do not change in-place! In order to change this file first read following link: https://github.com/prometheus-community/helm-charts/tree/main/charts/kube-prometheus-stack/hack */ -}} @@ -21,7 +21,7 @@ metadata: {{- include "kube-prometheus-stack.labels" $ | nindent 4 }} data: scheduler.json: |- - {{`{"editable":`}}{{ .Values.grafana.defaultDashboardsEditable }}{{`,"links":[{"asDropdown":true,"includeVars":true,"keepTime":true,"tags":["kubernetes-mixin"],"targetBlank":false,"title":"Kubernetes","type":"dashboards"}],"panels":[{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"unit":"none"}},"gridPos":{"h":7,"w":4,"x":0,"y":0},"id":1,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"colorMode":"none"},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(up{cluster=\"$cluster\", job=\"`}}{{ $kubeSchedulerJob }}{{`\"})","instant":true}],"title":"Up","type":"stat"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"ops"}},"gridPos":{"h":7,"w":10,"x":4,"y":0},"id":2,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(rate(scheduler_scheduling_attempt_duration_seconds_count{cluster=\"$cluster\", job=\"`}}{{ $kubeSchedulerJob }}{{`\", instance=~\"$instance\"}[$__rate_interval])) by (cluster, instance)","legendFormat":"{{cluster}} {{instance}} e2e"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(rate(scheduler_pod_scheduling_sli_duration_seconds_count{cluster=\"$cluster\", job=\"`}}{{ $kubeSchedulerJob }}{{`\", instance=~\"$instance\"}[$__rate_interval])) by (cluster, instance)","legendFormat":"{{cluster}} {{instance}} binding"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(rate(scheduler_scheduling_algorithm_duration_seconds_count{cluster=\"$cluster\", job=\"`}}{{ $kubeSchedulerJob }}{{`\", instance=~\"$instance\"}[$__rate_interval])) by (cluster, instance)","legendFormat":"{{cluster}} {{instance}} scheduling algorithm"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(rate(scheduler_volume_scheduling_duration_seconds_count{cluster=\"$cluster\", job=\"`}}{{ $kubeSchedulerJob }}{{`\", instance=~\"$instance\"}[$__rate_interval])) by (cluster, instance)","legendFormat":"{{cluster}} {{instance}} volume"}],"title":"Scheduling Rate","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"s"}},"gridPos":{"h":7,"w":10,"x":14,"y":0},"id":3,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"histogram_quantile(0.99, sum(rate(scheduler_scheduling_attempt_duration_seconds_bucket{cluster=\"$cluster\", job=\"`}}{{ $kubeSchedulerJob }}{{`\",instance=~\"$instance\"}[$__rate_interval])) by (cluster, instance, le))","legendFormat":"{{cluster}} {{instance}} e2e"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"histogram_quantile(0.99, sum(rate(scheduler_pod_scheduling_sli_duration_seconds_bucket{cluster=\"$cluster\", job=\"`}}{{ $kubeSchedulerJob }}{{`\",instance=~\"$instance\"}[$__rate_interval])) by (cluster, instance, le))","legendFormat":"{{cluster}} {{instance}} binding"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"histogram_quantile(0.99, sum(rate(scheduler_scheduling_algorithm_duration_seconds_bucket{cluster=\"$cluster\", job=\"`}}{{ $kubeSchedulerJob }}{{`\",instance=~\"$instance\"}[$__rate_interval])) by (cluster, instance, le))","legendFormat":"{{cluster}} {{instance}} scheduling algorithm"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"histogram_quantile(0.99, sum(rate(scheduler_volume_scheduling_duration_seconds_bucket{cluster=\"$cluster\", job=\"`}}{{ $kubeSchedulerJob }}{{`\",instance=~\"$instance\"}[$__rate_interval])) by (cluster, instance, le))","legendFormat":"{{cluster}} {{instance}} volume"}],"title":"Scheduling latency 99th Quantile","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"ops"}},"gridPos":{"h":7,"w":8,"x":0,"y":7},"id":4,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(rate(rest_client_requests_total{cluster=\"$cluster\", job=\"`}}{{ $kubeSchedulerJob }}{{`\", instance=~\"$instance\",code=~\"2..\"}[$__rate_interval]))","legendFormat":"2xx"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(rate(rest_client_requests_total{cluster=\"$cluster\", job=\"`}}{{ $kubeSchedulerJob }}{{`\", instance=~\"$instance\",code=~\"3..\"}[$__rate_interval]))","legendFormat":"3xx"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(rate(rest_client_requests_total{cluster=\"$cluster\", job=\"`}}{{ $kubeSchedulerJob }}{{`\", instance=~\"$instance\",code=~\"4..\"}[$__rate_interval]))","legendFormat":"4xx"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(rate(rest_client_requests_total{cluster=\"$cluster\", job=\"`}}{{ $kubeSchedulerJob }}{{`\", instance=~\"$instance\",code=~\"5..\"}[$__rate_interval]))","legendFormat":"5xx"}],"title":"Kube API Request Rate","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"ops"}},"gridPos":{"h":7,"w":16,"x":8,"y":7},"id":5,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"histogram_quantile(0.99, sum(rate(rest_client_request_duration_seconds_bucket{cluster=\"$cluster\", job=\"`}}{{ $kubeSchedulerJob }}{{`\", instance=~\"$instance\", verb=\"POST\"}[$__rate_interval])) by (verb, le))","legendFormat":"{{verb}}"}],"title":"Post Request Latency 99th Quantile","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"s"}},"gridPos":{"h":7,"w":24,"x":0,"y":14},"id":6,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"histogram_quantile(0.99, sum(rate(rest_client_request_duration_seconds_bucket{cluster=\"$cluster\", job=\"`}}{{ $kubeSchedulerJob }}{{`\", instance=~\"$instance\", verb=\"GET\"}[$__rate_interval])) by (verb, le))","legendFormat":"{{verb}}"}],"title":"Get Request Latency 99th Quantile","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"bytes"}},"gridPos":{"h":7,"w":8,"x":0,"y":21},"id":7,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"process_resident_memory_bytes{cluster=\"$cluster\", job=\"`}}{{ $kubeSchedulerJob }}{{`\", instance=~\"$instance\"}","legendFormat":"{{instance}}"}],"title":"Memory","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"short"}},"gridPos":{"h":7,"w":8,"x":8,"y":21},"id":8,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"rate(process_cpu_seconds_total{cluster=\"$cluster\", job=\"`}}{{ $kubeSchedulerJob }}{{`\", instance=~\"$instance\"}[$__rate_interval])","legendFormat":"{{instance}}"}],"title":"CPU usage","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"short"}},"gridPos":{"h":7,"w":8,"x":16,"y":21},"id":9,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"go_goroutines{cluster=\"$cluster\", job=\"`}}{{ $kubeSchedulerJob }}{{`\",instance=~\"$instance\"}","legendFormat":"{{instance}}"}],"title":"Goroutines","type":"timeseries"}],"refresh":"10s","schemaVersion":39,"tags":["kubernetes-mixin"],"templating":{"list":[{"current":{"selected":true,"text":"default","value":"default"},"hide":0,"label":"Data source","name":"datasource","query":"prometheus","regex":"","type":"datasource"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"hide":`}}{{ if .Values.grafana.sidecar.dashboards.multicluster.global.enabled }}0{{ else }}2{{ end }}{{`,"label":"cluster","name":"cluster","query":"label_values(up{job=\"`}}{{ $kubeSchedulerJob }}{{`\"}, cluster)","refresh":2,"sort":1,"type":"query","allValue":".*"},{"allValue":".+","datasource":{"type":"prometheus","uid":"${datasource}"},"hide":0,"includeAll":true,"label":"instance","name":"instance","query":"label_values(up{job=\"`}}{{ $kubeSchedulerJob }}{{`\", cluster=\"$cluster\"}, instance)","refresh":2,"type":"query"}]},"time":{"from":"now-1h","to":"now"},"timezone": "`}}{{ .Values.grafana.defaultDashboardsTimezone }}{{`","title":"Kubernetes / Scheduler","uid":"2e6b6a3b4bddf1427b3a55aa1311c656"}`}} + {{`{"editable":`}}{{ .Values.grafana.defaultDashboardsEditable }}{{`,"links":[{"asDropdown":true,"includeVars":true,"keepTime":true,"tags":["kubernetes-mixin"],"targetBlank":false,"title":"Kubernetes","type":"dashboards"}],"panels":[{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"unit":"none"}},"gridPos":{"h":7,"w":4,"x":0,"y":0},"id":1,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"colorMode":"none"},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(up{cluster=\"$cluster\", job=\"`}}{{ $kubeSchedulerJob }}{{`\"})","instant":true}],"title":"Up","type":"stat"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"ops"}},"gridPos":{"h":7,"w":10,"x":4,"y":0},"id":2,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(rate(scheduler_scheduling_attempt_duration_seconds_count{cluster=\"$cluster\", job=\"`}}{{ $kubeSchedulerJob }}{{`\", instance=~\"$instance\"}[$__rate_interval])) by (cluster, instance)","legendFormat":"{{cluster}} {{instance}} e2e"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(rate(scheduler_pod_scheduling_sli_duration_seconds_count{cluster=\"$cluster\", job=\"`}}{{ $kubeSchedulerJob }}{{`\", instance=~\"$instance\"}[$__rate_interval])) by (cluster, instance)","legendFormat":"{{cluster}} {{instance}} binding"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(rate(scheduler_scheduling_algorithm_duration_seconds_count{cluster=\"$cluster\", job=\"`}}{{ $kubeSchedulerJob }}{{`\", instance=~\"$instance\"}[$__rate_interval])) by (cluster, instance)","legendFormat":"{{cluster}} {{instance}} scheduling algorithm"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(rate(scheduler_volume_scheduling_duration_seconds_count{cluster=\"$cluster\", job=\"`}}{{ $kubeSchedulerJob }}{{`\", instance=~\"$instance\"}[$__rate_interval])) by (cluster, instance)","legendFormat":"{{cluster}} {{instance}} volume"}],"title":"Scheduling Rate","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"s"}},"gridPos":{"h":7,"w":10,"x":14,"y":0},"id":3,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"histogram_quantile(0.99, sum(rate(scheduler_scheduling_attempt_duration_seconds_bucket{cluster=\"$cluster\", job=\"`}}{{ $kubeSchedulerJob }}{{`\",instance=~\"$instance\"}[$__rate_interval])) by (cluster, instance, le))","legendFormat":"{{cluster}} {{instance}} e2e"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"histogram_quantile(0.99, sum(rate(scheduler_pod_scheduling_sli_duration_seconds_bucket{cluster=\"$cluster\", job=\"`}}{{ $kubeSchedulerJob }}{{`\",instance=~\"$instance\"}[$__rate_interval])) by (cluster, instance, le))","legendFormat":"{{cluster}} {{instance}} binding"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"histogram_quantile(0.99, sum(rate(scheduler_scheduling_algorithm_duration_seconds_bucket{cluster=\"$cluster\", job=\"`}}{{ $kubeSchedulerJob }}{{`\",instance=~\"$instance\"}[$__rate_interval])) by (cluster, instance, le))","legendFormat":"{{cluster}} {{instance}} scheduling algorithm"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"histogram_quantile(0.99, sum(rate(scheduler_volume_scheduling_duration_seconds_bucket{cluster=\"$cluster\", job=\"`}}{{ $kubeSchedulerJob }}{{`\",instance=~\"$instance\"}[$__rate_interval])) by (cluster, instance, le))","legendFormat":"{{cluster}} {{instance}} volume"}],"title":"Scheduling latency 99th Quantile","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"ops"}},"gridPos":{"h":7,"w":8,"x":0,"y":7},"id":4,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(rate(rest_client_requests_total{cluster=\"$cluster\", job=\"`}}{{ $kubeSchedulerJob }}{{`\", instance=~\"$instance\",code=~\"2..\"}[$__rate_interval]))","legendFormat":"2xx"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(rate(rest_client_requests_total{cluster=\"$cluster\", job=\"`}}{{ $kubeSchedulerJob }}{{`\", instance=~\"$instance\",code=~\"3..\"}[$__rate_interval]))","legendFormat":"3xx"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(rate(rest_client_requests_total{cluster=\"$cluster\", job=\"`}}{{ $kubeSchedulerJob }}{{`\", instance=~\"$instance\",code=~\"4..\"}[$__rate_interval]))","legendFormat":"4xx"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sum(rate(rest_client_requests_total{cluster=\"$cluster\", job=\"`}}{{ $kubeSchedulerJob }}{{`\", instance=~\"$instance\",code=~\"5..\"}[$__rate_interval]))","legendFormat":"5xx"}],"title":"Kube API Request Rate","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"ops"}},"gridPos":{"h":7,"w":16,"x":8,"y":7},"id":5,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"histogram_quantile(0.99, sum(rate(rest_client_request_duration_seconds_bucket{cluster=\"$cluster\", job=\"`}}{{ $kubeSchedulerJob }}{{`\", instance=~\"$instance\", verb=\"POST\"}[$__rate_interval])) by (verb, le))","legendFormat":"{{verb}}"}],"title":"Post Request Latency 99th Quantile","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"s"}},"gridPos":{"h":7,"w":24,"x":0,"y":14},"id":6,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"histogram_quantile(0.99, sum(rate(rest_client_request_duration_seconds_bucket{cluster=\"$cluster\", job=\"`}}{{ $kubeSchedulerJob }}{{`\", instance=~\"$instance\", verb=\"GET\"}[$__rate_interval])) by (verb, le))","legendFormat":"{{verb}}"}],"title":"Get Request Latency 99th Quantile","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"bytes"}},"gridPos":{"h":7,"w":8,"x":0,"y":21},"id":7,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"process_resident_memory_bytes{cluster=\"$cluster\", job=\"`}}{{ $kubeSchedulerJob }}{{`\", instance=~\"$instance\"}","legendFormat":"{{instance}}"}],"title":"Memory","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"short"}},"gridPos":{"h":7,"w":8,"x":8,"y":21},"id":8,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"rate(process_cpu_seconds_total{cluster=\"$cluster\", job=\"`}}{{ $kubeSchedulerJob }}{{`\", instance=~\"$instance\"}[$__rate_interval])","legendFormat":"{{instance}}"}],"title":"CPU usage","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"short"}},"gridPos":{"h":7,"w":8,"x":16,"y":21},"id":9,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"go_goroutines{cluster=\"$cluster\", job=\"`}}{{ $kubeSchedulerJob }}{{`\",instance=~\"$instance\"}","legendFormat":"{{instance}}"}],"title":"Goroutines","type":"timeseries"}],"refresh":"10s","schemaVersion":39,"tags":["kubernetes-mixin"],"templating":{"list":[{"current":{"selected":true,"text":"default","value":"default"},"hide":0,"label":"Data source","name":"datasource","query":"prometheus","regex":"","type":"datasource"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"hide":`}}{{ if .Values.grafana.sidecar.dashboards.multicluster.global.enabled }}0{{ else }}2{{ end }}{{`,"label":"cluster","name":"cluster","query":"label_values(up{job=\"`}}{{ $kubeSchedulerJob }}{{`\"}, cluster)","refresh":2,"sort":1,"type":"query","allValue":".*"},{"allValue":".+","datasource":{"type":"prometheus","uid":"${datasource}"},"hide":0,"includeAll":true,"label":"instance","name":"instance","query":"label_values(up{job=\"`}}{{ $kubeSchedulerJob }}{{`\", cluster=\"$cluster\"}, instance)","refresh":2,"type":"query"}]},"time":{"from":"now-1h","to":"now"},"timezone": "`}}{{ .Values.grafana.defaultDashboardsTimezone }}{{`","title":"Kubernetes / Scheduler","uid":"2e6b6a3b4bddf1427b3a55aa1311c656"}`}} {{- end }} --- {{- if and .Values.grafana.operator.dashboardsConfigMapRefEnabled (or .Values.grafana.enabled .Values.grafana.forceDeployDashboards) (semverCompare ">=1.14.0-0" $kubeTargetVersion) (semverCompare "<9.9.9-9" $kubeTargetVersion) .Values.grafana.defaultDashboardsEnabled .Values.kubeScheduler.enabled }} diff --git a/charts/kube-prometheus-stack/templates/grafana/dashboards-1.14/workload-total.yaml b/charts/kube-prometheus-stack/templates/grafana/dashboards-1.14/workload-total.yaml index 8c4de8e6cd..3599659a2c 100644 --- a/charts/kube-prometheus-stack/templates/grafana/dashboards-1.14/workload-total.yaml +++ b/charts/kube-prometheus-stack/templates/grafana/dashboards-1.14/workload-total.yaml @@ -1,5 +1,5 @@ {{- /* -Generated from 'workload-total' from https://raw.githubusercontent.com/prometheus-operator/kube-prometheus/eaca1a5fd76b356974054906af46810fec1cd7f8/manifests/grafana-dashboardDefinitions.yaml +Generated from 'workload-total' from https://raw.githubusercontent.com/prometheus-operator/kube-prometheus/4eafa8b5395ef839bb02a55e3b5fbdfa03280cf9/manifests/grafana-dashboardDefinitions.yaml Do not change in-place! In order to change this file first read following link: https://github.com/prometheus-community/helm-charts/tree/main/charts/kube-prometheus-stack/hack */ -}} @@ -21,7 +21,7 @@ metadata: {{- include "kube-prometheus-stack.labels" $ | nindent 4 }} data: workload-total.json: |- - {{`{"editable":`}}{{ .Values.grafana.defaultDashboardsEditable }}{{`,"links":[{"asDropdown":true,"includeVars":true,"keepTime":true,"tags":["kubernetes-mixin"],"targetBlank":false,"title":"Kubernetes","type":"dashboards"}],"panels":[{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"color":{"fixedColor":"green","mode":"fixed"},"unit":"bps"}},"gridPos":{"h":9,"w":12,"x":0,"y":0},"id":1,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"displayMode":"basic","showUnfilled":false},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sort_desc(sum((8 * rate(container_network_receive_bytes_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\",namespace=~\"$namespace\"}[$__rate_interval]))\n* on (cluster, 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","legendFormat":"__auto"}],"title":"Current Rate of Bits Received","type":"bargauge"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"color":{"fixedColor":"green","mode":"fixed"},"unit":"bps"}},"gridPos":{"h":9,"w":12,"x":12,"y":0},"id":2,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"displayMode":"basic","showUnfilled":false},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sort_desc(sum((8 * rate(container_network_transmit_bytes_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\",namespace=~\"$namespace\"}[$__rate_interval]))\n* on (cluster, 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","legendFormat":"__auto"}],"title":"Current Rate of Bits Transmitted","type":"bargauge"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"color":{"fixedColor":"green","mode":"fixed"},"unit":"bps"}},"gridPos":{"h":9,"w":12,"x":0,"y":9},"id":3,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"displayMode":"basic","showUnfilled":false},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sort_desc(avg((8 * rate(container_network_receive_bytes_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\",namespace=~\"$namespace\"}[$__rate_interval]))\n* on (cluster, 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","legendFormat":"__auto"}],"title":"Average Rate of Bits Received","type":"bargauge"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"color":{"fixedColor":"green","mode":"fixed"},"unit":"bps"}},"gridPos":{"h":9,"w":12,"x":12,"y":9},"id":4,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"displayMode":"basic","showUnfilled":false},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sort_desc(avg((8 * rate(container_network_transmit_bytes_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\",namespace=~\"$namespace\"}[$__rate_interval]))\n* on (cluster, 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","legendFormat":"__auto"}],"title":"Average Rate of Bits Transmitted","type":"bargauge"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"bps"}},"gridPos":{"h":9,"w":12,"x":0,"y":18},"id":5,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sort_desc(sum((8 * rate(container_network_receive_bytes_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\",namespace=~\"$namespace\"}[$__rate_interval]))\n* on (cluster, 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","legendFormat":"__auto"}],"title":"Receive Bandwidth","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"bps"}},"gridPos":{"h":9,"w":12,"x":12,"y":18},"id":6,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sort_desc(sum((8 * rate(container_network_transmit_bytes_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\",namespace=~\"$namespace\"}[$__rate_interval]))\n* on (cluster, 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","legendFormat":"__auto"}],"title":"Transmit Bandwidth","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"pps"}},"gridPos":{"h":9,"w":12,"x":0,"y":27},"id":7,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sort_desc(sum(rate(container_network_receive_packets_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\",namespace=~\"$namespace\"}[$__rate_interval])\n* on (cluster, 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","legendFormat":"__auto"}],"title":"Rate of Received Packets","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"pps"}},"gridPos":{"h":9,"w":12,"x":12,"y":27},"id":8,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sort_desc(sum(rate(container_network_transmit_packets_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\",namespace=~\"$namespace\"}[$__rate_interval])\n* on (cluster, 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","legendFormat":"__auto"}],"title":"Rate of Transmitted Packets","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"pps"}},"gridPos":{"h":9,"w":12,"x":0,"y":36},"id":9,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sort_desc(sum(rate(container_network_receive_packets_dropped_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\",namespace=~\"$namespace\"}[$__rate_interval])\n* on (cluster, 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","legendFormat":"__auto"}],"title":"Rate of Received Packets Dropped","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"pps"}},"gridPos":{"h":9,"w":12,"x":12,"y":36},"id":10,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v11.4.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sort_desc(sum(rate(container_network_transmit_packets_dropped_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\",namespace=~\"$namespace\"}[$__rate_interval])\n* on (cluster, 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","legendFormat":"__auto"}],"title":"Rate of Transmitted Packets Dropped","type":"timeseries"}],"refresh":"10s","schemaVersion":39,"tags":["kubernetes-mixin"],"templating":{"list":[{"current":{"selected":true,"text":"default","value":"default"},"hide":0,"label":"Data source","name":"datasource","query":"prometheus","regex":"","type":"datasource"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"hide":`}}{{ if .Values.grafana.sidecar.dashboards.multicluster.global.enabled }}0{{ else }}2{{ end }}{{`,"label":"cluster","name":"cluster","query":"label_values(kube_pod_info{job=\"kube-state-metrics\"}, cluster)","refresh":2,"sort":1,"type":"query","allValue":".*"},{"allValue":".+","current":{"selected":false,"text":"kube-system","value":"kube-system"},"datasource":{"type":"prometheus","uid":"${datasource}"},"hide":0,"includeAll":true,"label":"namespace","name":"namespace","query":"label_values(container_network_receive_packets_total{cluster=\"$cluster\"}, namespace)","refresh":2,"sort":1,"type":"query"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"hide":0,"label":"workload","name":"workload","query":"label_values(namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=~\"$namespace\", workload=~\".+\"}, workload)","refresh":2,"sort":1,"type":"query"},{"allValue":".+","datasource":{"type":"prometheus","uid":"${datasource}"},"hide":0,"includeAll":true,"label":"workload_type","name":"type","query":"label_values(namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=~\"$namespace\", workload=~\"$workload\"}, workload_type)","refresh":2,"sort":1,"type":"query"}]},"time":{"from":"now-1h","to":"now"},"timezone": "`}}{{ .Values.grafana.defaultDashboardsTimezone }}{{`","title":"Kubernetes / Networking / Workload","uid":"728bf77cc1166d2f3133bf25846876cc"}`}} + {{`{"editable":`}}{{ .Values.grafana.defaultDashboardsEditable }}{{`,"links":[{"asDropdown":true,"includeVars":true,"keepTime":true,"tags":["kubernetes-mixin"],"targetBlank":false,"title":"Kubernetes","type":"dashboards"}],"panels":[{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"color":{"fixedColor":"green","mode":"fixed"},"unit":"bps"}},"gridPos":{"h":9,"w":12,"x":0,"y":0},"id":1,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"displayMode":"basic","showUnfilled":false},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sort_desc(sum((8 * rate(container_network_receive_bytes_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\",namespace=~\"$namespace\"}[$__rate_interval]))\n* on (cluster, 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","legendFormat":"__auto"}],"title":"Current Rate of Bits Received","type":"bargauge"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"color":{"fixedColor":"green","mode":"fixed"},"unit":"bps"}},"gridPos":{"h":9,"w":12,"x":12,"y":0},"id":2,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"displayMode":"basic","showUnfilled":false},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sort_desc(sum((8 * rate(container_network_transmit_bytes_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\",namespace=~\"$namespace\"}[$__rate_interval]))\n* on (cluster, 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","legendFormat":"__auto"}],"title":"Current Rate of Bits Transmitted","type":"bargauge"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"color":{"fixedColor":"green","mode":"fixed"},"unit":"bps"}},"gridPos":{"h":9,"w":12,"x":0,"y":9},"id":3,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"displayMode":"basic","showUnfilled":false},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sort_desc(avg((8 * rate(container_network_receive_bytes_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\",namespace=~\"$namespace\"}[$__rate_interval]))\n* on (cluster, 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","legendFormat":"__auto"}],"title":"Average Rate of Bits Received","type":"bargauge"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"color":{"fixedColor":"green","mode":"fixed"},"unit":"bps"}},"gridPos":{"h":9,"w":12,"x":12,"y":9},"id":4,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"displayMode":"basic","showUnfilled":false},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sort_desc(avg((8 * rate(container_network_transmit_bytes_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\",namespace=~\"$namespace\"}[$__rate_interval]))\n* on (cluster, 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","legendFormat":"__auto"}],"title":"Average Rate of Bits Transmitted","type":"bargauge"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"bps"}},"gridPos":{"h":9,"w":12,"x":0,"y":18},"id":5,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sort_desc(sum((8 * rate(container_network_receive_bytes_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\",namespace=~\"$namespace\"}[$__rate_interval]))\n* on (cluster, 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","legendFormat":"__auto"}],"title":"Receive Bandwidth","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"bps"}},"gridPos":{"h":9,"w":12,"x":12,"y":18},"id":6,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sort_desc(sum((8 * rate(container_network_transmit_bytes_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\",namespace=~\"$namespace\"}[$__rate_interval]))\n* on (cluster, 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","legendFormat":"__auto"}],"title":"Transmit Bandwidth","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"pps"}},"gridPos":{"h":9,"w":12,"x":0,"y":27},"id":7,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sort_desc(sum(rate(container_network_receive_packets_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\",namespace=~\"$namespace\"}[$__rate_interval])\n* on (cluster, 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","legendFormat":"__auto"}],"title":"Rate of Received Packets","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"pps"}},"gridPos":{"h":9,"w":12,"x":12,"y":27},"id":8,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sort_desc(sum(rate(container_network_transmit_packets_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\",namespace=~\"$namespace\"}[$__rate_interval])\n* on (cluster, 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","legendFormat":"__auto"}],"title":"Rate of Transmitted Packets","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"pps"}},"gridPos":{"h":9,"w":12,"x":0,"y":36},"id":9,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sort_desc(sum(rate(container_network_receive_packets_dropped_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\",namespace=~\"$namespace\"}[$__rate_interval])\n* on (cluster, 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","legendFormat":"__auto"}],"title":"Rate of Received Packets Dropped","type":"timeseries"},{"datasource":{"type":"datasource","uid":"-- Mixed --"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":10,"showPoints":"never","spanNulls":true},"unit":"pps"}},"gridPos":{"h":9,"w":12,"x":12,"y":36},"id":10,"interval":"`}}{{ .Values.grafana.defaultDashboardsInterval }}{{`","options":{"legend":{"asTable":true,"calcs":["lastNotNull"],"displayMode":"table","placement":"right","showLegend":true},"tooltip":{"mode":"single"}},"pluginVersion":"v13.0.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"sort_desc(sum(rate(container_network_transmit_packets_dropped_total{job=\"`}}{{ $kubeletJob }}{{`\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\",namespace=~\"$namespace\"}[$__rate_interval])\n* on (cluster, 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","legendFormat":"__auto"}],"title":"Rate of Transmitted Packets Dropped","type":"timeseries"}],"refresh":"10s","schemaVersion":39,"tags":["kubernetes-mixin"],"templating":{"list":[{"current":{"selected":true,"text":"default","value":"default"},"hide":0,"label":"Data source","name":"datasource","query":"prometheus","regex":"","type":"datasource"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"hide":`}}{{ if .Values.grafana.sidecar.dashboards.multicluster.global.enabled }}0{{ else }}2{{ end }}{{`,"label":"cluster","name":"cluster","query":"label_values(kube_pod_info{job=\"kube-state-metrics\"}, cluster)","refresh":2,"sort":1,"type":"query","allValue":".*"},{"allValue":".+","current":{"selected":false,"text":"kube-system","value":"kube-system"},"datasource":{"type":"prometheus","uid":"${datasource}"},"hide":0,"includeAll":true,"label":"namespace","name":"namespace","query":"label_values(container_network_receive_packets_total{cluster=\"$cluster\"}, namespace)","refresh":2,"sort":1,"type":"query"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"hide":0,"label":"workload","name":"workload","query":"label_values(namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=~\"$namespace\", workload=~\".+\"}, workload)","refresh":2,"sort":1,"type":"query"},{"allValue":".+","datasource":{"type":"prometheus","uid":"${datasource}"},"hide":0,"includeAll":true,"label":"workload_type","name":"type","query":"label_values(namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=~\"$namespace\", workload=~\"$workload\"}, workload_type)","refresh":2,"sort":1,"type":"query"}]},"time":{"from":"now-1h","to":"now"},"timezone": "`}}{{ .Values.grafana.defaultDashboardsTimezone }}{{`","title":"Kubernetes / Networking / Workload","uid":"728bf77cc1166d2f3133bf25846876cc"}`}} {{- end }} --- {{- if and .Values.grafana.operator.dashboardsConfigMapRefEnabled (or .Values.grafana.enabled .Values.grafana.forceDeployDashboards) (semverCompare ">=1.14.0-0" $kubeTargetVersion) (semverCompare "<9.9.9-9" $kubeTargetVersion) .Values.grafana.defaultDashboardsEnabled }} diff --git a/charts/kube-prometheus-stack/templates/prometheus-operator/deployment.yaml b/charts/kube-prometheus-stack/templates/prometheus-operator/deployment.yaml index 0125a88e1f..1f36b33f8a 100644 --- a/charts/kube-prometheus-stack/templates/prometheus-operator/deployment.yaml +++ b/charts/kube-prometheus-stack/templates/prometheus-operator/deployment.yaml @@ -137,6 +137,13 @@ spec: {{- if .Values.prometheusOperator.clusterDomain }} - --cluster-domain={{ .Values.prometheusOperator.clusterDomain }} {{- end }} + {{- with .Values.prometheusOperator.featureGates }} + {{- $gates := list }} + {{- range $key, $value := . }} + {{- $gates = append $gates (printf "%s=%v" $key $value) }} + {{- end }} + - --feature-gates={{ join "," $gates }} + {{- end }} {{- if .Values.prometheusOperator.tls.enabled }} - --web.enable-tls=true - --web.cert-file=/cert/{{ if .Values.prometheusOperator.admissionWebhooks.certManager.enabled }}tls.crt{{ else }}cert{{ end }} diff --git a/charts/kube-prometheus-stack/templates/prometheus/clusterrole.yaml b/charts/kube-prometheus-stack/templates/prometheus/clusterrole.yaml index 1bb1802bbc..321192dd05 100644 --- a/charts/kube-prometheus-stack/templates/prometheus/clusterrole.yaml +++ b/charts/kube-prometheus-stack/templates/prometheus/clusterrole.yaml @@ -27,7 +27,17 @@ rules: resources: - ingresses verbs: ["get", "list", "watch"] -- nonResourceURLs: ["/metrics", "/metrics/cadvisor"] +- nonResourceURLs: + - "/metrics" + {{- if .Values.kubelet.serviceMonitor.cAdvisor }} + - "/metrics/cadvisor" + {{- end }} + {{- if .Values.kubelet.serviceMonitor.resource }} + - {{ .Values.kubelet.serviceMonitor.resourcePath }} + {{- end }} + {{- if .Values.kubeScheduler.serviceMonitor.resource.enabled }} + - "/metrics/resources" + {{- end }} verbs: ["get"] {{/* fix(#3338): add required rules to use node-exporter with the RBAC proxy */}} {{- if and .Values.nodeExporter.enabled (index .Values "prometheus-node-exporter").kubeRBACProxy.enabled }} diff --git a/charts/kube-prometheus-stack/templates/prometheus/prometheus.yaml b/charts/kube-prometheus-stack/templates/prometheus/prometheus.yaml index 6e8d6481e0..17b94eaf93 100644 --- a/charts/kube-prometheus-stack/templates/prometheus/prometheus.yaml +++ b/charts/kube-prometheus-stack/templates/prometheus/prometheus.yaml @@ -82,6 +82,8 @@ spec: externalUrl: "{{ tpl .Values.prometheus.prometheusSpec.externalUrl . }}" {{- else if and .Values.prometheus.ingress.enabled .Values.prometheus.ingress.hosts }} externalUrl: "http://{{ tpl (index .Values.prometheus.ingress.hosts 0) . }}{{ .Values.prometheus.prometheusSpec.routePrefix }}" +{{- else if and .Values.prometheus.route.main.enabled .Values.prometheus.route.main.hostnames }} + externalUrl: "http://{{ tpl (index .Values.prometheus.route.main.hostnames 0) . }}{{ .Values.prometheus.prometheusSpec.routePrefix }}" {{- else }} externalUrl: http://{{ template "kube-prometheus-stack.fullname" . }}-prometheus.{{ template "kube-prometheus-stack.namespace" . }}:{{ .Values.prometheus.service.port }} {{- end }} @@ -91,7 +93,9 @@ spec: {{- end }} paused: {{ .Values.prometheus.prometheusSpec.paused }} replicas: {{ .Values.prometheus.prometheusSpec.replicas }} +{{- if not (kindIs "invalid" .Values.prometheus.prometheusSpec.shards) }} shards: {{ .Values.prometheus.prometheusSpec.shards }} +{{- end }} logLevel: {{ .Values.prometheus.prometheusSpec.logLevel | quote }} logFormat: {{ .Values.prometheus.prometheusSpec.logFormat }} listenLocal: {{ .Values.prometheus.prometheusSpec.listenLocal }} @@ -386,11 +390,11 @@ spec: {{- end }} {{- if .Values.prometheus.prometheusSpec.containers }} containers: -{{ toYaml .Values.prometheus.prometheusSpec.containers | indent 4 }} +{{ tpl (toYaml .Values.prometheus.prometheusSpec.containers) . | indent 4 }} {{- end }} {{- if .Values.prometheus.prometheusSpec.initContainers }} initContainers: -{{ toYaml .Values.prometheus.prometheusSpec.initContainers | indent 4 }} +{{ tpl (toYaml .Values.prometheus.prometheusSpec.initContainers) . | indent 4 }} {{- end }} {{- if .Values.prometheus.prometheusSpec.priorityClassName }} priorityClassName: {{ .Values.prometheus.prometheusSpec.priorityClassName }} @@ -474,6 +478,27 @@ spec: {{- if .Values.prometheus.prometheusSpec.sampleLimit }} sampleLimit: {{ .Values.prometheus.prometheusSpec.sampleLimit }} {{- end }} +{{- if .Values.prometheus.prometheusSpec.targetLimit }} + targetLimit: {{ .Values.prometheus.prometheusSpec.targetLimit }} +{{- end }} +{{- if .Values.prometheus.prometheusSpec.labelLimit }} + labelLimit: {{ .Values.prometheus.prometheusSpec.labelLimit }} +{{- end }} +{{- if .Values.prometheus.prometheusSpec.labelNameLengthLimit }} + labelNameLengthLimit: {{ .Values.prometheus.prometheusSpec.labelNameLengthLimit }} +{{- end }} +{{- if .Values.prometheus.prometheusSpec.labelValueLengthLimit }} + labelValueLengthLimit: {{ .Values.prometheus.prometheusSpec.labelValueLengthLimit }} +{{- end }} +{{- if .Values.prometheus.prometheusSpec.keepDroppedTargets }} + keepDroppedTargets: {{ .Values.prometheus.prometheusSpec.keepDroppedTargets }} +{{- end }} +{{- if .Values.prometheus.prometheusSpec.bodySizeLimit }} + bodySizeLimit: {{ .Values.prometheus.prometheusSpec.bodySizeLimit }} +{{- end }} +{{- if .Values.prometheus.prometheusSpec.enforcedBodySizeLimit }} + enforcedBodySizeLimit: {{ .Values.prometheus.prometheusSpec.enforcedBodySizeLimit }} +{{- end }} {{- if .Values.prometheus.prometheusSpec.enforcedKeepDroppedTargets }} enforcedKeepDroppedTargets: {{ .Values.prometheus.prometheusSpec.enforcedKeepDroppedTargets }} {{- end }} @@ -529,6 +554,37 @@ spec: {{- if .Values.prometheus.prometheusSpec.serviceDiscoveryRole }} serviceDiscoveryRole: {{ .Values.prometheus.prometheusSpec.serviceDiscoveryRole }} {{- end }} +{{- if kindIs "bool" .Values.prometheus.prometheusSpec.enableServiceLinks }} + enableServiceLinks: {{ .Values.prometheus.prometheusSpec.enableServiceLinks }} +{{- end }} +{{- with .Values.prometheus.prometheusSpec.schedulerName }} + schedulerName: {{ . }} +{{- end }} +{{- if .Values.prometheus.prometheusSpec.nameEscapingScheme }} + nameEscapingScheme: {{ .Values.prometheus.prometheusSpec.nameEscapingScheme }} +{{- end }} +{{- if .Values.prometheus.prometheusSpec.reloadStrategy }} + reloadStrategy: {{ .Values.prometheus.prometheusSpec.reloadStrategy }} +{{- end }} +{{- if .Values.prometheus.prometheusSpec.ruleQueryOffset }} + ruleQueryOffset: {{ .Values.prometheus.prometheusSpec.ruleQueryOffset | quote }} +{{- end }} +{{- with .Values.prometheus.prometheusSpec.runtime }} + runtime: +{{ toYaml . | indent 4 }} +{{- end }} +{{- with .Values.prometheus.prometheusSpec.shardingStrategy }} + shardingStrategy: +{{ toYaml . | indent 4 }} +{{- end }} +{{- with .Values.prometheus.prometheusSpec.shardRetentionPolicy }} + shardRetentionPolicy: +{{ toYaml . | indent 4 }} +{{- end }} +{{- with .Values.prometheus.prometheusSpec.remoteWriteReceiverMessageVersions }} + remoteWriteReceiverMessageVersions: +{{ toYaml . | indent 4 }} +{{- end }} {{- with .Values.prometheus.prometheusSpec.additionalConfig }} {{- tpl (toYaml .) $ | nindent 2 }} {{- end }} diff --git a/charts/kube-prometheus-stack/templates/prometheus/route.yaml b/charts/kube-prometheus-stack/templates/prometheus/route.yaml index 1a0ed29b01..7f6c3088ac 100644 --- a/charts/kube-prometheus-stack/templates/prometheus/route.yaml +++ b/charts/kube-prometheus-stack/templates/prometheus/route.yaml @@ -4,60 +4,16 @@ {{- range $name, $route := .Values.prometheus.route }} {{- if $route.enabled }} --- -apiVersion: {{ $route.apiVersion | default "gateway.networking.k8s.io/v1" }} -kind: {{ $route.kind | default "HTTPRoute" }} -metadata: - {{- with $route.annotations }} - annotations: - {{- toYaml . | nindent 4 }} - {{- end }} - name: {{ $serviceName }}{{ if ne $name "main" }}-{{ $name }}{{ end }} - namespace: {{ template "kube-prometheus-stack.namespace" $ }} - labels: - app: {{ template "kube-prometheus-stack.name" $ }}-prometheus - {{- include "kube-prometheus-stack.labels" $ | nindent 4 }} - {{- with $route.labels }} - {{- toYaml . | nindent 4 }} - {{- end }} -spec: - {{- with $route.parentRefs }} - parentRefs: - {{- toYaml . | nindent 4 }} - {{- end }} - {{- with $route.hostnames }} - hostnames: - {{- tpl (toYaml .) $ | nindent 4 }} - {{- end }} - rules: - {{- if $route.additionalRules }} - {{- tpl (toYaml $route.additionalRules) $ | nindent 4 }} - {{- end }} - {{- if $route.httpsRedirect }} - - filters: - - type: RequestRedirect - requestRedirect: - scheme: https - statusCode: 301 - {{- else }} - - backendRefs: - - group: "" - kind: Service - weight: 1 - name: {{ $serviceName }} - port: {{ $servicePort }} - {{- with $route.filters }} - filters: - {{- toYaml . | nindent 8 }} - {{- end }} - {{- with $route.matches }} - matches: - {{- toYaml . | nindent 8 }} - {{- end }} - {{- with $route.sessionPersistence }} - sessionPersistence: - {{- toYaml . | nindent 8 }} - {{- end }} - {{- end }} +{{ include "kube-prometheus-stack.route" (dict + "context" $ + "route" $route + "name" (ternary $serviceName (printf "%s-%s" $serviceName $name) (eq $name "main")) + "namespace" (include "kube-prometheus-stack.namespace" $) + "labelApp" (printf "%s-prometheus" (include "kube-prometheus-stack.name" $)) + "hostnames" $route.hostnames + "serviceName" $serviceName + "servicePort" $servicePort + ) }} {{- end }} {{- end }} {{- end }} diff --git a/charts/kube-prometheus-stack/templates/prometheus/routeperreplica.yaml b/charts/kube-prometheus-stack/templates/prometheus/routeperreplica.yaml new file mode 100644 index 0000000000..8e8678c344 --- /dev/null +++ b/charts/kube-prometheus-stack/templates/prometheus/routeperreplica.yaml @@ -0,0 +1,22 @@ +{{- if and .Values.prometheus.enabled .Values.prometheus.servicePerReplica.enabled }} +{{- $count := .Values.prometheus.prometheusSpec.replicas | int -}} +{{- $servicePort := .Values.prometheus.servicePerReplica.port -}} +{{- range $name, $route := .Values.prometheus.routePerReplica }} +{{- if $route.enabled }} +{{- range $i := until $count }} +{{- $serviceName := printf "%s-prometheus-%d" (include "kube-prometheus-stack.fullname" $) $i }} +--- +{{ include "kube-prometheus-stack.route" (dict + "context" $ + "route" $route + "name" (ternary $serviceName (printf "%s-%s" $serviceName $name) (eq $name "main")) + "namespace" (include "kube-prometheus-stack.namespace" $) + "labelApp" (printf "%s-prometheus" (include "kube-prometheus-stack.name" $)) + "hostnames" (list (printf "%s-%d.%s" $route.hostPrefix $i $route.hostDomain)) + "serviceName" $serviceName + "servicePort" $servicePort + ) }} +{{- end }} +{{- end }} +{{- end }} +{{- end }} diff --git a/charts/kube-prometheus-stack/templates/prometheus/rules-1.14/alertmanager.rules.yaml b/charts/kube-prometheus-stack/templates/prometheus/rules-1.14/alertmanager.rules.yaml index 1d2b3bc391..11bd42cdf1 100644 --- a/charts/kube-prometheus-stack/templates/prometheus/rules-1.14/alertmanager.rules.yaml +++ b/charts/kube-prometheus-stack/templates/prometheus/rules-1.14/alertmanager.rules.yaml @@ -348,4 +348,41 @@ spec: {{- end }} {{- end }} {{- end }} +{{- if not (.Values.defaultRules.disabled.AlertmanagerClusterFailedPeers | default false) }} + - alert: AlertmanagerClusterFailedPeers + annotations: +{{- $ruleAnnotations := dig "AlertmanagerClusterFailedPeers" (dict) .Values.defaultRules.additionalRuleAnnotations }} +{{- $groupAnnotations := default (dict) .Values.defaultRules.additionalRuleGroupAnnotations.alertmanager }} +{{- $additionalAnnotations := mergeOverwrite (dict) $groupAnnotations $ruleAnnotations }} +{{- if $additionalAnnotations }} +{{ toYaml $additionalAnnotations | indent 8 }} +{{- end }} + {{- if not (hasKey $additionalAnnotations "description") }} + description: Alertmanager {{`{{`}} $labels.namespace {{`}}`}}/{{`{{`}} $labels.pod{{`}}`}} has {{`{{`}} $value {{`}}`}} failed peers in the {{`{{`}}$labels.job{{`}}`}} cluster. + {{- end }} + {{- if not (hasKey $additionalAnnotations "runbook_url") }} + runbook_url: {{ .Values.defaultRules.runbookUrl }}/alertmanager/alertmanagerclusterfailedpeers + {{- end }} + {{- if not (hasKey $additionalAnnotations "summary") }} + summary: An Alertmanager instance has failed peers in the cluster. + {{- end }} + expr: |- + # Without max_over_time, failed scrapes could create false negatives, see + # https://www.robustperception.io/alerting-on-gauges-in-prometheus-2-0 for details. + max_over_time(alertmanager_cluster_failed_peers{job="{{ $alertmanagerJob }}",container="alertmanager",namespace="{{ $namespace }}"}[5m]) > 0 + for: {{ dig "AlertmanagerClusterFailedPeers" "for" "15m" .Values.customRules }} + {{- with .Values.defaultRules.keepFiringFor }} + keep_firing_for: "{{ . }}" + {{- end }} + labels: + severity: {{ dig "AlertmanagerClusterFailedPeers" "severity" "warning" .Values.customRules }} + {{- if or .Values.defaultRules.additionalRuleLabels .Values.defaultRules.additionalRuleGroupLabels.alertmanager }} + {{- with .Values.defaultRules.additionalRuleLabels }} + {{- toYaml . | nindent 8 }} + {{- end }} + {{- with .Values.defaultRules.additionalRuleGroupLabels.alertmanager }} + {{- toYaml . | nindent 8 }} + {{- end }} + {{- end }} +{{- end }} {{- end }} \ No newline at end of file diff --git a/charts/kube-prometheus-stack/templates/prometheus/rules-1.14/etcd.yaml b/charts/kube-prometheus-stack/templates/prometheus/rules-1.14/etcd.yaml index 418e925d5c..62eeb411ba 100644 --- a/charts/kube-prometheus-stack/templates/prometheus/rules-1.14/etcd.yaml +++ b/charts/kube-prometheus-stack/templates/prometheus/rules-1.14/etcd.yaml @@ -33,6 +33,9 @@ spec: {{- if $additionalAnnotations }} {{ toYaml $additionalAnnotations | indent 8 }} {{- end }} + {{- if not (hasKey $additionalAnnotations "runbook_url") }} + runbook_url: {{ .Values.defaultRules.runbookUrl }}/etcd/etcdmembersdown + {{- end }} {{- if not (hasKey $additionalAnnotations "description") }} description: 'etcd cluster "{{`{{`}} $labels.job {{`}}`}}": members are down ({{`{{`}} $value {{`}}`}}).' {{- end }} @@ -72,6 +75,9 @@ spec: {{- if $additionalAnnotations }} {{ toYaml $additionalAnnotations | indent 8 }} {{- end }} + {{- if not (hasKey $additionalAnnotations "runbook_url") }} + runbook_url: {{ .Values.defaultRules.runbookUrl }}/etcd/etcdinsufficientmembers + {{- end }} {{- if not (hasKey $additionalAnnotations "description") }} description: 'etcd cluster "{{`{{`}} $labels.job {{`}}`}}": insufficient members ({{`{{`}} $value {{`}}`}}).' {{- end }} @@ -103,6 +109,9 @@ spec: {{- if $additionalAnnotations }} {{ toYaml $additionalAnnotations | indent 8 }} {{- end }} + {{- if not (hasKey $additionalAnnotations "runbook_url") }} + runbook_url: {{ .Values.defaultRules.runbookUrl }}/etcd/etcdnoleader + {{- end }} {{- if not (hasKey $additionalAnnotations "description") }} description: 'etcd cluster "{{`{{`}} $labels.job {{`}}`}}": member {{`{{`}} $labels.instance {{`}}`}} has no leader.' {{- end }} @@ -134,6 +143,9 @@ spec: {{- if $additionalAnnotations }} {{ toYaml $additionalAnnotations | indent 8 }} {{- end }} + {{- if not (hasKey $additionalAnnotations "runbook_url") }} + runbook_url: {{ .Values.defaultRules.runbookUrl }}/etcd/etcdhighnumberofleaderchanges + {{- end }} {{- if not (hasKey $additionalAnnotations "description") }} description: 'etcd cluster "{{`{{`}} $labels.job {{`}}`}}": {{`{{`}} $value {{`}}`}} leader changes within the last 15 minutes. Frequent elections may be a sign of insufficient resources, high network latency, or disruptions by other components and should be investigated.' {{- end }} @@ -165,6 +177,9 @@ spec: {{- if $additionalAnnotations }} {{ toYaml $additionalAnnotations | indent 8 }} {{- end }} + {{- if not (hasKey $additionalAnnotations "runbook_url") }} + runbook_url: {{ .Values.defaultRules.runbookUrl }}/etcd/etcdhighnumberoffailedgrpcrequests + {{- end }} {{- if not (hasKey $additionalAnnotations "description") }} description: 'etcd cluster "{{`{{`}} $labels.job {{`}}`}}": {{`{{`}} $value {{`}}`}}% of requests for {{`{{`}} $labels.grpc_method {{`}}`}} failed on etcd instance {{`{{`}} $labels.instance {{`}}`}}.' {{- end }} @@ -200,6 +215,9 @@ spec: {{- if $additionalAnnotations }} {{ toYaml $additionalAnnotations | indent 8 }} {{- end }} + {{- if not (hasKey $additionalAnnotations "runbook_url") }} + runbook_url: {{ .Values.defaultRules.runbookUrl }}/etcd/etcdhighnumberoffailedgrpcrequests + {{- end }} {{- if not (hasKey $additionalAnnotations "description") }} description: 'etcd cluster "{{`{{`}} $labels.job {{`}}`}}": {{`{{`}} $value {{`}}`}}% of requests for {{`{{`}} $labels.grpc_method {{`}}`}} failed on etcd instance {{`{{`}} $labels.instance {{`}}`}}.' {{- end }} @@ -235,6 +253,9 @@ spec: {{- if $additionalAnnotations }} {{ toYaml $additionalAnnotations | indent 8 }} {{- end }} + {{- if not (hasKey $additionalAnnotations "runbook_url") }} + runbook_url: {{ .Values.defaultRules.runbookUrl }}/etcd/etcdgrpcrequestsslow + {{- end }} {{- if not (hasKey $additionalAnnotations "description") }} description: 'etcd cluster "{{`{{`}} $labels.job {{`}}`}}": 99th percentile of gRPC requests is {{`{{`}} $value {{`}}`}}s on etcd instance {{`{{`}} $labels.instance {{`}}`}} for {{`{{`}} $labels.grpc_method {{`}}`}} method.' {{- end }} @@ -268,6 +289,9 @@ spec: {{- if $additionalAnnotations }} {{ toYaml $additionalAnnotations | indent 8 }} {{- end }} + {{- if not (hasKey $additionalAnnotations "runbook_url") }} + runbook_url: {{ .Values.defaultRules.runbookUrl }}/etcd/etcdmembercommunicationslow + {{- end }} {{- if not (hasKey $additionalAnnotations "description") }} description: 'etcd cluster "{{`{{`}} $labels.job {{`}}`}}": member communication with {{`{{`}} $labels.To {{`}}`}} is taking {{`{{`}} $value {{`}}`}}s on etcd instance {{`{{`}} $labels.instance {{`}}`}}.' {{- end }} @@ -301,6 +325,9 @@ spec: {{- if $additionalAnnotations }} {{ toYaml $additionalAnnotations | indent 8 }} {{- end }} + {{- if not (hasKey $additionalAnnotations "runbook_url") }} + runbook_url: {{ .Values.defaultRules.runbookUrl }}/etcd/etcdhighnumberoffailedproposals + {{- end }} {{- if not (hasKey $additionalAnnotations "description") }} description: 'etcd cluster "{{`{{`}} $labels.job {{`}}`}}": {{`{{`}} $value {{`}}`}} proposal failures within the last 30 minutes on etcd instance {{`{{`}} $labels.instance {{`}}`}}.' {{- end }} @@ -332,6 +359,9 @@ spec: {{- if $additionalAnnotations }} {{ toYaml $additionalAnnotations | indent 8 }} {{- end }} + {{- if not (hasKey $additionalAnnotations "runbook_url") }} + runbook_url: {{ .Values.defaultRules.runbookUrl }}/etcd/etcdhighfsyncdurations + {{- end }} {{- if not (hasKey $additionalAnnotations "description") }} description: 'etcd cluster "{{`{{`}} $labels.job {{`}}`}}": 99th percentile fsync durations are {{`{{`}} $value {{`}}`}}s on etcd instance {{`{{`}} $labels.instance {{`}}`}}.' {{- end }} @@ -365,6 +395,9 @@ spec: {{- if $additionalAnnotations }} {{ toYaml $additionalAnnotations | indent 8 }} {{- end }} + {{- if not (hasKey $additionalAnnotations "runbook_url") }} + runbook_url: {{ .Values.defaultRules.runbookUrl }}/etcd/etcdhighfsyncdurations + {{- end }} {{- if not (hasKey $additionalAnnotations "description") }} description: 'etcd cluster "{{`{{`}} $labels.job {{`}}`}}": 99th percentile fsync durations are {{`{{`}} $value {{`}}`}}s on etcd instance {{`{{`}} $labels.instance {{`}}`}}.' {{- end }} @@ -398,6 +431,9 @@ spec: {{- if $additionalAnnotations }} {{ toYaml $additionalAnnotations | indent 8 }} {{- end }} + {{- if not (hasKey $additionalAnnotations "runbook_url") }} + runbook_url: {{ .Values.defaultRules.runbookUrl }}/etcd/etcdhighcommitdurations + {{- end }} {{- if not (hasKey $additionalAnnotations "description") }} description: 'etcd cluster "{{`{{`}} $labels.job {{`}}`}}": 99th percentile commit durations {{`{{`}} $value {{`}}`}}s on etcd instance {{`{{`}} $labels.instance {{`}}`}}.' {{- end }} @@ -431,6 +467,9 @@ spec: {{- if $additionalAnnotations }} {{ toYaml $additionalAnnotations | indent 8 }} {{- end }} + {{- if not (hasKey $additionalAnnotations "runbook_url") }} + runbook_url: {{ .Values.defaultRules.runbookUrl }}/etcd/etcddatabasequotalowspace + {{- end }} {{- if not (hasKey $additionalAnnotations "description") }} description: 'etcd cluster "{{`{{`}} $labels.job {{`}}`}}": database size exceeds the defined quota on etcd instance {{`{{`}} $labels.instance {{`}}`}}, please defrag or increase the quota as the writes to etcd will be disabled when it is full.' {{- end }} @@ -462,6 +501,9 @@ spec: {{- if $additionalAnnotations }} {{ toYaml $additionalAnnotations | indent 8 }} {{- end }} + {{- if not (hasKey $additionalAnnotations "runbook_url") }} + runbook_url: {{ .Values.defaultRules.runbookUrl }}/etcd/etcdexcessivedatabasegrowth + {{- end }} {{- if not (hasKey $additionalAnnotations "description") }} description: 'etcd cluster "{{`{{`}} $labels.job {{`}}`}}": Predicting running out of disk space in the next four hours, based on write observations within the past four hours on etcd instance {{`{{`}} $labels.instance {{`}}`}}, please check as it might be disruptive.' {{- end }} @@ -497,7 +539,7 @@ spec: description: 'etcd cluster "{{`{{`}} $labels.job {{`}}`}}": database size in use on instance {{`{{`}} $labels.instance {{`}}`}} is {{`{{`}} $value | humanizePercentage {{`}}`}} of the actual allocated disk space, please run defragmentation (e.g. etcdctl defrag) to retrieve the unused fragmented disk space.' {{- end }} {{- if not (hasKey $additionalAnnotations "runbook_url") }} - runbook_url: https://etcd.io/docs/v3.5/op-guide/maintenance/#defragmentation + runbook_url: {{ .Values.defaultRules.runbookUrl }}/etcd/etcddatabasehighfragmentationratio {{- end }} {{- if not (hasKey $additionalAnnotations "summary") }} summary: etcd database size in use is less than 50% of the actual allocated storage. diff --git a/charts/kube-prometheus-stack/templates/prometheus/rules-1.14/kubernetes-apps.yaml b/charts/kube-prometheus-stack/templates/prometheus/rules-1.14/kubernetes-apps.yaml index ca50435ce8..94b393b3d7 100644 --- a/charts/kube-prometheus-stack/templates/prometheus/rules-1.14/kubernetes-apps.yaml +++ b/charts/kube-prometheus-stack/templates/prometheus/rules-1.14/kubernetes-apps.yaml @@ -92,6 +92,8 @@ spec: 1, max by ({{ range $.Values.defaultRules.additionalAggregationLabels }}{{ . }},{{ end }}namespace, pod, owner_kind, cluster) (kube_pod_owner{owner_kind!="Job"}) ) ) > 0 + unless on ({{ range $.Values.defaultRules.additionalAggregationLabels }}{{ . }},{{ end }}namespace, pod, cluster) + kube_pod_status_reason{job="{{ $kubeStateMetricsJob }}", namespace{{ $namespaceOperator }}"{{ $targetNamespace }}", reason="SchedulingGated"} == 1 for: {{ dig "KubePodNotReady" "for" "15m" .Values.customRules }} {{- with .Values.defaultRules.keepFiringFor }} keep_firing_for: "{{ . }}" diff --git a/charts/kube-prometheus-stack/templates/thanos-ruler/route.yaml b/charts/kube-prometheus-stack/templates/thanos-ruler/route.yaml index 063edc1ae7..ce7e4460af 100644 --- a/charts/kube-prometheus-stack/templates/thanos-ruler/route.yaml +++ b/charts/kube-prometheus-stack/templates/thanos-ruler/route.yaml @@ -4,60 +4,16 @@ {{- range $name, $route := .Values.thanosRuler.route }} {{- if $route.enabled }} --- -apiVersion: {{ $route.apiVersion | default "gateway.networking.k8s.io/v1" }} -kind: {{ $route.kind | default "HTTPRoute" }} -metadata: - {{- with $route.annotations }} - annotations: - {{- toYaml . | nindent 4 }} - {{- end }} - name: {{ $serviceName }}{{ if ne $name "main" }}-{{ $name }}{{ end }} - namespace: {{ template "kube-prometheus-stack.namespace" $ }} - labels: - app: {{ template "kube-prometheus-stack.name" $ }}-prometheus - {{- include "kube-prometheus-stack.labels" $ | nindent 4 }} - {{- with $route.labels }} - {{- toYaml . | nindent 4 }} - {{- end }} -spec: - {{- with $route.parentRefs }} - parentRefs: - {{- toYaml . | nindent 4 }} - {{- end }} - {{- with $route.hostnames }} - hostnames: - {{- tpl (toYaml .) $ | nindent 4 }} - {{- end }} - rules: - {{- if $route.additionalRules }} - {{- tpl (toYaml $route.additionalRules) $ | nindent 4 }} - {{- end }} - {{- if $route.httpsRedirect }} - - filters: - - type: RequestRedirect - requestRedirect: - scheme: https - statusCode: 301 - {{- else }} - - backendRefs: - - group: "" - kind: Service - weight: 1 - name: {{ $serviceName }} - port: {{ $servicePort }} - {{- with $route.filters }} - filters: - {{- toYaml . | nindent 8 }} - {{- end }} - {{- with $route.matches }} - matches: - {{- toYaml . | nindent 8 }} - {{- end }} - {{- with $route.sessionPersistence }} - sessionPersistence: - {{- toYaml . | nindent 8 }} - {{- end }} - {{- end }} +{{ include "kube-prometheus-stack.route" (dict + "context" $ + "route" $route + "name" (ternary $serviceName (printf "%s-%s" $serviceName $name) (eq $name "main")) + "namespace" (include "kube-prometheus-stack.namespace" $) + "labelApp" (printf "%s-prometheus" (include "kube-prometheus-stack.name" $)) + "hostnames" $route.hostnames + "serviceName" $serviceName + "servicePort" $servicePort + ) }} {{- end }} {{- end }} {{- end }} diff --git a/charts/kube-prometheus-stack/templates/thanos-ruler/ruler.yaml b/charts/kube-prometheus-stack/templates/thanos-ruler/ruler.yaml index 556e498da6..ba6ded850d 100644 --- a/charts/kube-prometheus-stack/templates/thanos-ruler/ruler.yaml +++ b/charts/kube-prometheus-stack/templates/thanos-ruler/ruler.yaml @@ -219,6 +219,96 @@ spec: {{- if .Values.thanosRuler.thanosRulerSpec.terminationGracePeriodSeconds }} terminationGracePeriodSeconds: {{ .Values.thanosRuler.thanosRulerSpec.terminationGracePeriodSeconds }} {{- end }} +{{- if .Values.thanosRuler.thanosRulerSpec.version }} + version: {{ .Values.thanosRuler.thanosRulerSpec.version }} +{{- end }} +{{- if .Values.thanosRuler.thanosRulerSpec.imagePullPolicy }} + imagePullPolicy: {{ .Values.thanosRuler.thanosRulerSpec.imagePullPolicy }} +{{- end }} +{{- if .Values.thanosRuler.thanosRulerSpec.enableFeatures }} + enableFeatures: +{{- range $enableFeatures := .Values.thanosRuler.thanosRulerSpec.enableFeatures }} + - {{ tpl $enableFeatures $ }} +{{- end }} +{{- end }} +{{- if kindIs "bool" .Values.thanosRuler.thanosRulerSpec.enableServiceLinks }} + enableServiceLinks: {{ .Values.thanosRuler.thanosRulerSpec.enableServiceLinks }} +{{- end }} +{{- if .Values.thanosRuler.thanosRulerSpec.minReadySeconds }} + minReadySeconds: {{ .Values.thanosRuler.thanosRulerSpec.minReadySeconds }} +{{- end }} +{{- if .Values.thanosRuler.thanosRulerSpec.dnsConfig }} + dnsConfig: +{{ toYaml .Values.thanosRuler.thanosRulerSpec.dnsConfig | indent 4 }} +{{- end }} +{{- if .Values.thanosRuler.thanosRulerSpec.dnsPolicy }} + dnsPolicy: {{ .Values.thanosRuler.thanosRulerSpec.dnsPolicy }} +{{- end }} +{{- if .Values.thanosRuler.thanosRulerSpec.hostAliases }} + hostAliases: +{{ toYaml .Values.thanosRuler.thanosRulerSpec.hostAliases | indent 4 }} +{{- end }} +{{- if .Values.thanosRuler.thanosRulerSpec.remoteWrite }} + remoteWrite: +{{ tpl (toYaml .Values.thanosRuler.thanosRulerSpec.remoteWrite | indent 4) . }} +{{- end }} +{{- if .Values.thanosRuler.thanosRulerSpec.tracingConfig.existingSecret }} + tracingConfig: + key: "{{ .Values.thanosRuler.thanosRulerSpec.tracingConfig.existingSecret.key }}" + name: "{{ .Values.thanosRuler.thanosRulerSpec.tracingConfig.existingSecret.name }}" +{{- else if .Values.thanosRuler.thanosRulerSpec.tracingConfig.secret }} + tracingConfig: + key: tracing-configs.yaml + name: {{ template "kube-prometheus-stack.thanosRuler.name" . }} +{{- end }} +{{- if .Values.thanosRuler.thanosRulerSpec.tracingConfigFile }} + tracingConfigFile: "{{ .Values.thanosRuler.thanosRulerSpec.tracingConfigFile }}" +{{- end }} +{{- if .Values.thanosRuler.thanosRulerSpec.alertRelabelConfigs.existingSecret }} + alertRelabelConfigs: + key: "{{ .Values.thanosRuler.thanosRulerSpec.alertRelabelConfigs.existingSecret.key }}" + name: "{{ .Values.thanosRuler.thanosRulerSpec.alertRelabelConfigs.existingSecret.name }}" +{{- else if .Values.thanosRuler.thanosRulerSpec.alertRelabelConfigs.secret }} + alertRelabelConfigs: + key: alert-relabel-configs.yaml + name: {{ template "kube-prometheus-stack.thanosRuler.name" . }} +{{- end }} +{{- if .Values.thanosRuler.thanosRulerSpec.alertRelabelConfigFile }} + alertRelabelConfigFile: "{{ .Values.thanosRuler.thanosRulerSpec.alertRelabelConfigFile }}" +{{- end }} +{{- if .Values.thanosRuler.thanosRulerSpec.grpcServerTlsConfig }} + grpcServerTlsConfig: +{{ toYaml .Values.thanosRuler.thanosRulerSpec.grpcServerTlsConfig | indent 4 }} +{{- end }} +{{- if .Values.thanosRuler.thanosRulerSpec.objectStorageConfigFile }} + objectStorageConfigFile: "{{ .Values.thanosRuler.thanosRulerSpec.objectStorageConfigFile }}" +{{- end }} +{{- if .Values.thanosRuler.thanosRulerSpec.ruleConcurrentEval }} + ruleConcurrentEval: {{ .Values.thanosRuler.thanosRulerSpec.ruleConcurrentEval }} +{{- end }} +{{- if .Values.thanosRuler.thanosRulerSpec.ruleOutageTolerance }} + ruleOutageTolerance: {{ .Values.thanosRuler.thanosRulerSpec.ruleOutageTolerance | quote }} +{{- end }} +{{- if .Values.thanosRuler.thanosRulerSpec.ruleGracePeriod }} + ruleGracePeriod: {{ .Values.thanosRuler.thanosRulerSpec.ruleGracePeriod | quote }} +{{- end }} +{{- if .Values.thanosRuler.thanosRulerSpec.ruleQueryOffset }} + ruleQueryOffset: {{ .Values.thanosRuler.thanosRulerSpec.ruleQueryOffset | quote }} +{{- end }} +{{- if .Values.thanosRuler.thanosRulerSpec.resendDelay }} + resendDelay: {{ .Values.thanosRuler.thanosRulerSpec.resendDelay | quote }} +{{- end }} +{{- if .Values.thanosRuler.thanosRulerSpec.enforcedNamespaceLabel }} + enforcedNamespaceLabel: {{ .Values.thanosRuler.thanosRulerSpec.enforcedNamespaceLabel }} +{{- if .Values.thanosRuler.thanosRulerSpec.excludedFromEnforcement }} + excludedFromEnforcement: + {{- if kindIs "string" .Values.thanosRuler.thanosRulerSpec.excludedFromEnforcement }} +{{ tpl .Values.thanosRuler.thanosRulerSpec.excludedFromEnforcement . | indent 4 }} + {{- else }} +{{ tpl (toYaml .Values.thanosRuler.thanosRulerSpec.excludedFromEnforcement | indent 4) . }} + {{- end }} +{{- end }} +{{- end }} {{- with .Values.thanosRuler.thanosRulerSpec.additionalConfig }} {{- tpl (toYaml .) $ | nindent 2 }} {{- end }} diff --git a/charts/kube-prometheus-stack/templates/thanos-ruler/secret.yaml b/charts/kube-prometheus-stack/templates/thanos-ruler/secret.yaml index acab7fd9ae..1606d27286 100644 --- a/charts/kube-prometheus-stack/templates/thanos-ruler/secret.yaml +++ b/charts/kube-prometheus-stack/templates/thanos-ruler/secret.yaml @@ -23,4 +23,14 @@ data: query-configs.yaml: {{ toYaml .secret | b64enc | quote }} {{- end }} {{- end }} + {{- with .Values.thanosRuler.thanosRulerSpec.tracingConfig }} + {{- if and .secret (not .existingSecret) }} + tracing-configs.yaml: {{ toYaml .secret | b64enc | quote }} + {{- end }} + {{- end }} + {{- with .Values.thanosRuler.thanosRulerSpec.alertRelabelConfigs }} + {{- if and .secret (not .existingSecret) }} + alert-relabel-configs.yaml: {{ toYaml .secret | b64enc | quote }} + {{- end }} + {{- end }} {{- end }} diff --git a/charts/kube-prometheus-stack/values.yaml b/charts/kube-prometheus-stack/values.yaml index 38ebec6053..f28bf5a3b4 100644 --- a/charts/kube-prometheus-stack/values.yaml +++ b/charts/kube-prometheus-stack/values.yaml @@ -38,7 +38,9 @@ crds: ## This feature is in preview, off by default and may change in the future. upgradeJob: enabled: false - forceConflicts: false + ## Force apply the CRDs, taking ownership from the manager that installed them (e.g. helm). + ## Required for the job to actually upgrade CRDs whose schema/version changed. + forceConflicts: true image: busybox: registry: docker.io @@ -767,6 +769,58 @@ alertmanager: ## prefix: "alertmanager" + ## Configuration for creating a Gateway API route that will map to each Alertmanager replica service + ## alertmanager.servicePerReplica must be enabled + ## + routePerReplica: + main: + # -- Enables or disables the routePerReplica + enabled: false + + # -- Set the route apiVersion, e.g. gateway.networking.k8s.io/v1 or gateway.networking.k8s.io/v1alpha2 + apiVersion: gateway.networking.k8s.io/v1 + # -- Set the route kind + # Valid options are GRPCRoute, HTTPRoute, TCPRoute, TLSRoute, UDPRoute + kind: HTTPRoute + + annotations: {} + labels: {} + + ## Final form of the hostname for each per replica route is + ## {{ routePerReplica.hostPrefix }}-{{ $replicaNumber }}.{{ routePerReplica.hostDomain }} + ## + ## Prefix for the per replica route that will have `-$replicaNumber` appended to the end + hostPrefix: "" + ## Domain that will be used for the per replica route + hostDomain: "" + + parentRefs: [] + # - name: acme-gw + + # -- create http route for redirect (https://gateway-api.sigs.k8s.io/guides/http-redirect-rewrite/#http-to-https-redirects) + ## Take care that you only enable this on the http listener of the gateway to avoid an infinite redirect. + ## matches, filters and additionalRules will be ignored if this is set to true. + httpsRedirect: false + + ## Filters define the filters that are applied to requests that match this rule. + filters: [] + + matches: + - path: + type: PathPrefix + value: / + + ## Session persistence configuration for the route rule. + sessionPersistence: {} + # sessionName: route + # type: Cookie + # absoluteTimeout: 12h + # cookieConfig: + # lifetimeType: Permanent + + ## Additional custom rules that can be added to the route + additionalRules: [] + ## Configuration for Alertmanager service ## service: @@ -964,7 +1018,7 @@ alertmanager: image: registry: quay.io repository: prometheus/alertmanager - tag: v0.33.0 + tag: v0.33.1 sha: "" pullPolicy: IfNotPresent @@ -1274,6 +1328,31 @@ alertmanager: ## ref: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#pod-termination terminationGracePeriodSeconds: ~ + ## EnableServiceLinks indicates whether information about services should be injected into the + ## pod's environment variables. Uses the operator/Kubernetes default when left unset (~). + enableServiceLinks: ~ + + ## Set the scheduler name to use for the Alertmanager pods. + schedulerName: "" + + ## Pods' hostAliases configuration + ## ref: https://kubernetes.io/docs/concepts/services-networking/add-entries-to-pod-etc-hosts-with-host-aliases/ + hostAliases: [] + # - ip: 10.10.0.100 + # hostnames: + # - a1.app.local + + ## Limits defines the Alertmanager limits command line flags. Requires Alertmanager >= v0.28.0. + ## ref: https://github.com/prometheus-operator/prometheus-operator/blob/main/Documentation/api-reference/api.md#monitoring.coreos.com/v1.AlertmanagerLimitsSpec + limits: {} + # maxSilences: 1000 + # maxPerSilenceBytes: 1MB + + ## ClusterTLS defines the mutual TLS configuration for the Alertmanager cluster's gossip protocol. + ## Requires Alertmanager >= v0.24.0. + ## ref: https://github.com/prometheus-operator/prometheus-operator/blob/main/Documentation/api-reference/api.md#monitoring.coreos.com/v1.ClusterTLSConfig + clusterTLS: {} + ## Additional configuration which is not covered by the properties above. (passed through tpl) additionalConfig: {} @@ -2465,6 +2544,35 @@ kubeScheduler: ## https://github.com/prometheus-operator/prometheus-operator/blob/main/Documentation/api-reference/api.md#servicemonitor targetLabels: [] + resource: + ## Enable scraping /metrics/resource from kube-scheduler + ## https://kubernetes.io/docs/concepts/cluster-administration/system-metrics/#kube-scheduler-metrics + enabled: false + + ## Scrape interval. If not set, the Prometheus default scrape interval is used. + ## + interval: "" + + ## MetricRelabelConfigs to apply to samples after scraping, but before ingestion. + ## ref: https://github.com/prometheus-operator/prometheus-operator/blob/main/Documentation/api-reference/api.md#relabelconfig + ## + metricRelabelings: [] + # - action: keep + # regex: 'kube_(daemonset|deployment|pod|namespace|node|statefulset).+' + # sourceLabels: [__name__] + + ## RelabelConfigs to apply to samples before scraping + ## ref: https://github.com/prometheus-operator/prometheus-operator/blob/main/Documentation/api-reference/api.md#relabelconfig + ## + relabelings: [] + # - sourceLabels: [__meta_kubernetes_pod_node_name] + # separator: ; + # regex: ^(.*)$ + # targetLabel: nodename + # replacement: $1 + # action: replace + + ## Component scraping kube proxy ## kubeProxy: @@ -3021,7 +3129,7 @@ prometheusOperator: image: registry: ghcr.io repository: jkroepke/kube-webhook-certgen - tag: 1.8.4 + tag: 1.8.5 sha: "" pullPolicy: IfNotPresent resources: {} @@ -3463,7 +3571,7 @@ prometheusOperator: thanosImage: registry: quay.io repository: thanos/thanos - tag: v0.41.0 + tag: v0.42.4 sha: "" ## Set a Label Selector to filter watched prometheus and prometheusAgent @@ -3481,6 +3589,14 @@ prometheusOperator: ## secretFieldSelector: "type!=kubernetes.io/dockercfg,type!=kubernetes.io/service-account-token,type!=helm.sh/release.v1" + ## Feature gates to enable/disable operator features, rendered as --feature-gates==. + ## See https://github.com/prometheus-operator/prometheus-operator/blob/main/Documentation/api-reference/feature-gates.md + ## Example: + ## featureGates: + ## PrometheusAgentDaemonSet: true + ## StatusForConfigurationResources: true + featureGates: {} + ## If false then the user will opt out of automounting API credentials. ## automountServiceAccountToken: true @@ -3977,6 +4093,58 @@ prometheus: ## prefix: "prometheus" + ## Configuration for creating a Gateway API route that will map to each Prometheus replica service + ## prometheus.servicePerReplica must be enabled + ## + routePerReplica: + main: + # -- Enables or disables the routePerReplica + enabled: false + + # -- Set the route apiVersion, e.g. gateway.networking.k8s.io/v1 or gateway.networking.k8s.io/v1alpha2 + apiVersion: gateway.networking.k8s.io/v1 + # -- Set the route kind + # Valid options are GRPCRoute, HTTPRoute, TCPRoute, TLSRoute, UDPRoute + kind: HTTPRoute + + annotations: {} + labels: {} + + ## Final form of the hostname for each per replica route is + ## {{ routePerReplica.hostPrefix }}-{{ $replicaNumber }}.{{ routePerReplica.hostDomain }} + ## + ## Prefix for the per replica route that will have `-$replicaNumber` appended to the end + hostPrefix: "" + ## Domain that will be used for the per replica route + hostDomain: "" + + parentRefs: [] + # - name: acme-gw + + # -- create http route for redirect (https://gateway-api.sigs.k8s.io/guides/http-redirect-rewrite/#http-to-https-redirects) + ## Take care that you only enable this on the http listener of the gateway to avoid an infinite redirect. + ## matches, filters and additionalRules will be ignored if this is set to true. + httpsRedirect: false + + ## Filters define the filters that are applied to requests that match this rule. + filters: [] + + matches: + - path: + type: PathPrefix + value: / + + ## Session persistence configuration for the route rule. + sessionPersistence: {} + # sessionName: route + # type: Cookie + # absoluteTimeout: 12h + # cookieConfig: + # lifetimeType: Permanent + + ## Additional custom rules that can be added to the route + additionalRules: [] + serviceMonitor: ## If true, create a serviceMonitor for prometheus ## @@ -4176,7 +4344,7 @@ prometheus: image: registry: quay.io repository: prometheus/prometheus - tag: v3.12.0-distroless + tag: v3.13.2-distroless sha: "" pullPolicy: IfNotPresent @@ -4426,6 +4594,9 @@ prometheus: ## Increasing shards will not reshard data either but it will continue to be available from the same instances. ## To query globally use Thanos sidecar and Thanos querier or remote write data to a central location. ## Sharding is done on the content of the `__address__` target meta-label. + ## Set shards to null to omit spec.shards from the Prometheus custom resource (the operator then + ## defaults to 1 shard). Omitting the field lets an external autoscaler such as an HPA or a KEDA + ## ScaledObject own spec.shards through the /scale subresource without Helm reverting it. ## shards: 1 @@ -4763,6 +4934,28 @@ prometheus: # Set to 'false' to disable global sample_limit. or set to a number to override the default value. sampleLimit: false + ## TargetLimit defines a global limit on the number of scraped targets. 0 means no limit. + targetLimit: 0 + + ## Per-scrape limit on number of labels that will be accepted for a sample. 0 means no limit. + labelLimit: 0 + + ## Per-scrape limit on length of labels name that will be accepted for a sample. 0 means no limit. + labelNameLengthLimit: 0 + + ## Per-scrape limit on length of labels value that will be accepted for a sample. 0 means no limit. + labelValueLengthLimit: 0 + + ## Per-scrape limit on the number of targets dropped by relabeling that will be kept in memory. 0 means no limit. + keepDroppedTargets: 0 + + ## BodySizeLimit defines a global limit on the size of uncompressed response body that will be accepted. Example: 100MB. + bodySizeLimit: "" + + ## EnforcedBodySizeLimit defines the maximum size of uncompressed response body that will be accepted, overriding any + ## value set per ServiceMonitor/PodMonitor. Example: 100MB. Empty means no limit. + enforcedBodySizeLimit: "" + # EnforcedKeepDroppedTargetsLimit defines on the number of targets dropped by relabeling that will be kept in memory. # The value overrides any spec.keepDroppedTargets set by ServiceMonitor, PodMonitor, Probe objects unless spec.keepDroppedTargets # is greater than zero and less than spec.enforcedKeepDroppedTargets. 0 means no limit. @@ -4837,6 +5030,40 @@ prometheus: ## If set, the value should be either "Endpoints" or "EndpointSlice". If unset, the operator assumes the "Endpoints" role. serviceDiscoveryRole: "" + ## EnableServiceLinks indicates whether information about services should be injected into the pod's environment + ## variables. Uses the operator/Kubernetes default when left unset (~). + enableServiceLinks: ~ + + ## Set the scheduler name to use for the Prometheus pods. + schedulerName: "" + + ## Specifies the character escaping scheme applied to metric and label names. + ## Supported values are: AllowUTF8, Underscores, Dots, Values + nameEscapingScheme: "" + + ## Defines the strategy used to reload the Prometheus configuration. + ## Supported values are: HTTP, ProcessSignal + reloadStrategy: "" + + ## Defines the offset the rule evaluation timestamp of the rule evaluation queries is shifted backwards. + ## ref: https://github.com/prometheus-community/helm-charts/issues/5843 + ruleQueryOffset: "" + + ## RuntimeConfig configures the values for the Prometheus process behavior. + runtime: {} + # goGC: 75 + + ## Defines the sharding strategy applied by the operator. + ## ref: https://github.com/prometheus-operator/prometheus-operator/blob/main/Documentation/api-reference/api.md#monitoring.coreos.com/v1.ShardingStrategy + shardingStrategy: {} + + ## Defines the retention policy for the resources of stale shards after a scale-down. + ## ref: https://github.com/prometheus-operator/prometheus-operator/blob/main/Documentation/api-reference/api.md#monitoring.coreos.com/v1.ShardRetentionPolicy + shardRetentionPolicy: {} + + ## List of the protobuf message versions to accept when receiving the remote writes. Example: [V1.0, V2.0]. + remoteWriteReceiverMessageVersions: [] + ## Pod management policy. Kubernetes default is OrderedReady but prometheus-operator default is Parallel. ## ref: https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/#pod-management-policies podManagementPolicy: "" @@ -5311,7 +5538,7 @@ thanosRuler: image: registry: quay.io repository: thanos/thanos - tag: v0.41.0 + tag: v0.42.4 sha: "" ## Namespaces to be selected for PrometheusRules discovery. @@ -5608,6 +5835,102 @@ thanosRuler: # rollingUpdate: # maxUnavailable: 1 + ## Version of Thanos Ruler to deploy. Overrides the version derived from the image tag when set. + version: "" + + ## Image pull policy for the Thanos Ruler container. + imagePullPolicy: "" + + ## EnableFeatures API enables access to Thanos Ruler disabled features. + enableFeatures: [] + + ## EnableServiceLinks indicates whether information about services should be injected into the + ## pod's environment variables. Uses the operator/Kubernetes default when left unset (~). + enableServiceLinks: ~ + + ## Minimum number of seconds for which a newly created pod should be ready without any of its + ## containers crashing/restarting for it to be considered available. + minReadySeconds: ~ + + ## Defines the DNS configuration for the pods. + dnsConfig: {} + # nameservers: + # - 1.2.3.4 + # searches: + # - ns1.svc.cluster-domain.example + # options: + # - name: ndots + # value: "2" + + ## Defines the DNS policy for the pods. + dnsPolicy: "" + + ## Pods' hostAliases configuration + ## ref: https://kubernetes.io/docs/concepts/services-networking/add-entries-to-pod-etc-hosts-with-host-aliases/ + hostAliases: [] + # - ip: 10.10.0.100 + # hostnames: + # - a1.app.local + + ## Defines the list of remote write configurations. When not empty, the Thanos Ruler operates in stateless mode. + ## ref: https://github.com/prometheus-operator/prometheus-operator/blob/main/Documentation/api-reference/api.md#monitoring.coreos.com/v1.RemoteWriteSpec + remoteWrite: [] + + ## Configures tracing for Thanos Ruler. Maps to the tracing.config CLI argument. + tracingConfig: + # use existing secret, if configured, tracingConfig.secret will not be used + existingSecret: {} + # name: "" + # key: "" + # render tracingConfig secret data and configure it to be used by Thanos Ruler custom resource, ignored when tracingConfig.existingSecret is set + secret: {} + + ## Path to a tracing configuration file on disk (e.g. mounted through a volume). Takes precedence over tracingConfig. + tracingConfigFile: "" + + ## Configures alert relabeling for Thanos Ruler. Maps to the alert.relabel-config CLI argument. + alertRelabelConfigs: + # use existing secret, if configured, alertRelabelConfigs.secret will not be used + existingSecret: {} + # name: "" + # key: "" + # render alertRelabelConfigs secret data and configure it to be used by Thanos Ruler custom resource, ignored when alertRelabelConfigs.existingSecret is set + secret: {} + + ## Path to an alert relabel configuration file on disk. Takes precedence over alertRelabelConfigs. + alertRelabelConfigFile: "" + + ## Configures the gRPC server TLS for Thanos Ruler. + ## ref: https://github.com/prometheus-operator/prometheus-operator/blob/main/Documentation/api-reference/api.md#monitoring.coreos.com/v1.TLSConfig + grpcServerTlsConfig: {} + + ## Path to an object storage configuration file on disk. Takes precedence over objectStorageConfig. + objectStorageConfigFile: "" + + ## Number of concurrent rule evaluations. + ruleConcurrentEval: ~ + + ## Maximum time to tolerate outage for restoring "for" state of alert. + ruleOutageTolerance: "" + + ## Minimum duration between alert and restored "for" state. Maintained only for alerts with a configured "for" + ## time greater than the grace period. + ruleGracePeriod: "" + + ## The default rule group's query offset duration to shift the evaluation time of rules backwards. + ## ref: https://github.com/prometheus-community/helm-charts/issues/5843 + ruleQueryOffset: "" + + ## Minimum amount of time to wait before resending an alert to Alertmanager. + resendDelay: "" + + ## EnforcedNamespaceLabel enforces adding a namespace label of origin for each alert and metric. + enforcedNamespaceLabel: "" + + ## List of references to PrometheusRule objects to be excluded from enforcement (requires enforcedNamespaceLabel). + ## Can be a list of objects, or a string that is passed through tpl. + excludedFromEnforcement: [] + ## Additional configuration which is not covered by the properties above. (passed through tpl) additionalConfig: {}