fix: metrics version bump, fix for inter Grafana links

This commit is contained in:
Stefan Reimer 2021-09-27 17:34:47 +02:00
parent cb008678c4
commit 27f8954a88
56 changed files with 247 additions and 40913 deletions

View File

@ -2,7 +2,7 @@ apiVersion: v2
name: kubezero-metrics
description: KubeZero Umbrella Chart for Prometheus, Grafana and Alertmanager as well as all Kubernetes integrations.
type: application
version: 0.4.7
version: 0.4.8
home: https://kubezero.com
icon: https://cdn.zero-downtime.net/assets/kubezero/logo-small-64.png
keywords:
@ -17,7 +17,7 @@ dependencies:
version: ">= 0.1.4"
repository: https://zero-down-time.github.io/kubezero/
- name: kube-prometheus-stack
version: 18.0.5
version: 18.1.0
# Switch back to upstream once all alerts are fixed eg. etcd gpcr
# repository: https://prometheus-community.github.io/helm-charts
- name: prometheus-adapter

View File

@ -19,7 +19,7 @@ dependencies:
- condition: grafana.enabled
name: grafana
repository: https://grafana.github.io/helm-charts
version: 6.15.*
version: 6.16.*
description: kube-prometheus-stack collects Kubernetes manifests, Grafana dashboards,
and Prometheus rules combined with documentation and scripts to provide easy to
operate end-to-end Kubernetes cluster monitoring with Prometheus using the Prometheus
@ -47,4 +47,4 @@ sources:
- https://github.com/prometheus-community/helm-charts
- https://github.com/prometheus-operator/kube-prometheus
type: application
version: 18.0.5
version: 18.1.0

View File

@ -1,5 +1,5 @@
apiVersion: v2
appVersion: 8.1.0
appVersion: 8.1.5
description: The leading tool for querying and visualizing time series and metrics.
home: https://grafana.net
icon: https://raw.githubusercontent.com/grafana/grafana/master/public/img/logo_transparent_400x.png
@ -19,4 +19,4 @@ name: grafana
sources:
- https://github.com/grafana/grafana
type: application
version: 6.15.0
version: 6.16.9

View File

@ -90,7 +90,7 @@ This version requires Helm >= 3.1.0.
| `tolerations` | Toleration labels for pod assignment | `[]` |
| `affinity` | Affinity settings for pod assignment | `{}` |
| `extraInitContainers` | Init containers to add to the grafana pod | `{}` |
| `extraContainers` | Sidecar containers to add to the grafana pod | `{}` |
| `extraContainers` | Sidecar containers to add to the grafana pod | `""` |
| `extraContainerVolumes` | Volumes that can be mounted in sidecar containers | `[]` |
| `extraLabels` | Custom labels for all manifests | `{}` |
| `schedulerName` | Name of the k8s scheduler (other than default) | `nil` |
@ -137,7 +137,7 @@ This version requires Helm >= 3.1.0.
| `podLabels` | Pod labels | `{}` |
| `podPortName` | Name of the grafana port on the pod | `grafana` |
| `sidecar.image.repository` | Sidecar image repository | `quay.io/kiwigrid/k8s-sidecar` |
| `sidecar.image.tag` | Sidecar image tag | `1.12.2` |
| `sidecar.image.tag` | Sidecar image tag | `1.12.3` |
| `sidecar.image.sha` | Sidecar image sha (optional) | `""` |
| `sidecar.imagePullPolicy` | Sidecar image pull policy | `IfNotPresent` |
| `sidecar.resources` | Sidecar resources | `{}` |
@ -490,10 +490,10 @@ Include in the `extraSecretMounts` configuration flag:
```yaml
- extraSecretMounts:
- name: auth-generic-oauth-secret-mount
secretName: auth-generic-oauth-secret
defaultMode: 0440
mountPath: /etc/secrets/auth_generic_oauth
readOnly: true
secretName: auth-generic-oauth-secret
defaultMode: 0440
mountPath: /etc/secrets/auth_generic_oauth
readOnly: true
```
### extraSecretMounts using a Container Storage Interface (CSI) provider

View File

@ -265,19 +265,25 @@ containers:
{{- end }}
{{- end }}
{{- if .Values.datasources }}
{{- range (keys .Values.datasources | sortAlpha) }}
- name: config
mountPath: "/etc/grafana/provisioning/datasources/datasources.yaml"
subPath: datasources.yaml
mountPath: "/etc/grafana/provisioning/datasources/{{ . }}"
subPath: {{ . | quote }}
{{- end }}
{{- end }}
{{- if .Values.notifiers }}
{{- range (keys .Values.notifiers | sortAlpha) }}
- name: config
mountPath: "/etc/grafana/provisioning/notifiers/notifiers.yaml"
subPath: notifiers.yaml
mountPath: "/etc/grafana/provisioning/notifiers/{{ . }}"
subPath: {{ . | quote }}
{{- end }}
{{- end }}
{{- if .Values.dashboardProviders }}
{{- range (keys .Values.dashboardProviders | sortAlpha) }}
- name: config
mountPath: "/etc/grafana/provisioning/dashboards/dashboardproviders.yaml"
subPath: dashboardproviders.yaml
mountPath: "/etc/grafana/provisioning/dashboards/{{ . }}"
subPath: {{ . | quote }}
{{- end }}
{{- end }}
{{- if .Values.sidecar.dashboards.enabled }}
- name: sc-dashboard-volume
@ -376,16 +382,22 @@ containers:
- name: "{{ tpl $key $ }}"
value: "{{ tpl (print $value) $ }}"
{{- end }}
{{- if .Values.envFromSecret }}
{{- if or .Values.envFromSecret (or .Values.envRenderSecret .Values.envFromSecrets) }}
envFrom:
{{- if .Values.envFromSecret }}
- secretRef:
name: {{ tpl .Values.envFromSecret . }}
{{- end }}
{{- if .Values.envRenderSecret }}
envFrom:
- secretRef:
name: {{ template "grafana.fullname" . }}-env
{{- end }}
{{- range .Values.envFromSecrets }}
- secretRef:
name: {{ .name }}
optional: {{ .optional | default false }}
{{- end }}
{{- end }}
livenessProbe:
{{ toYaml .Values.livenessProbe | indent 6 }}
readinessProbe:

View File

@ -30,7 +30,7 @@ spec:
hostIPC: false
hostPID: false
runAsUser:
rule: 'MustRunAsNonRoot'
rule: 'RunAsAny'
seLinux:
rule: 'RunAsAny'
supplementalGroups:

View File

@ -70,7 +70,7 @@ livenessProbe:
image:
repository: grafana/grafana
tag: 8.1.0
tag: 8.1.5
sha: ""
pullPolicy: IfNotPresent
@ -241,7 +241,8 @@ affinity: {}
extraInitContainers: []
## Enable an Specify container in extraContainers. This is meant to allow adding an authentication proxy to a grafana pod
extraContainers: |
extraContainers: ""
# extraContainers: |
# - name: proxy
# image: quay.io/gambol99/keycloak-proxy:latest
# args:
@ -383,6 +384,12 @@ envFromSecret: ""
## This can be useful for auth tokens, etc
envRenderSecret: {}
## The names of secrets in the same kubernetes namespace which contain values to be added to the environment
## Each entry should contain a name key, and can optionally specify whether the secret must be defined with an optional key.
envFromSecrets: []
## - name: secret-name
## optional: true
# Inject Kubernetes services as environment variables.
# See https://kubernetes.io/docs/concepts/services-networking/connect-applications-service/#environment-variables
enableServiceLinks: true
@ -608,7 +615,7 @@ smtp:
sidecar:
image:
repository: quay.io/kiwigrid/k8s-sidecar
tag: 1.12.2
tag: 1.12.3
sha: ""
imagePullPolicy: IfNotPresent
resources: {}
@ -705,7 +712,7 @@ imageRenderer:
# extra environment variables
env:
HTTP_HOST: "0.0.0.0"
# RENDERING_ARGS: --disable-gpu,--window-size=1280x758
# RENDERING_ARGS: --no-sandbox,--disable-gpu,--window-size=1280x758
# RENDERING_MODE: clustered
# image-renderer deployment serviceAccount
serviceAccountName: ""

View File

@ -101,7 +101,7 @@ spec:
labelSelector:
matchExpressions:
- {key: app, operator: In, values: [alertmanager]}
- {key: prometheus, operator: In, values: [{{ template "kube-prometheus-stack.fullname" . }}-alertmanager]}
- {key: alertmanager, operator: In, values: [{{ template "kube-prometheus-stack.fullname" . }}-alertmanager]}
{{- end }}
{{- end }}
{{- if .Values.alertmanager.alertmanagerSpec.tolerations }}

View File

@ -14,10 +14,13 @@ spec:
{{- if .Values.kubeStateMetrics.serviceMonitor.interval }}
interval: {{ .Values.kubeStateMetrics.serviceMonitor.interval }}
{{- end }}
{{- if .Values.kubeStateMetrics.serviceMonitor.scrapeTimeout }}
scrapeTimeout: {{ .Values.kubeStateMetrics.serviceMonitor.scrapeTimeout }}
{{- end }}
{{- if .Values.kubeStateMetrics.serviceMonitor.proxyUrl }}
proxyUrl: {{ .Values.kubeStateMetrics.serviceMonitor.proxyUrl}}
{{- end }}
honorLabels: true
honorLabels: {{ .Values.kubeStateMetrics.serviceMonitor.honorLabels }}
{{- if .Values.kubeStateMetrics.serviceMonitor.metricRelabelings }}
metricRelabelings:
{{ tpl (toYaml .Values.kubeStateMetrics.serviceMonitor.metricRelabelings | indent 4) . }}
@ -34,7 +37,7 @@ spec:
{{- if .Values.kubeStateMetrics.serviceMonitor.proxyUrl }}
proxyUrl: {{ .Values.kubeStateMetrics.serviceMonitor.proxyUrl}}
{{- end }}
honorLabels: true
honorLabels: {{ .Values.kubeStateMetrics.serviceMonitor.honorLabels }}
{{- if .Values.kubeStateMetrics.serviceMonitor.metricRelabelings }}
metricRelabelings:
{{ tpl (toYaml .Values.kubeStateMetrics.serviceMonitor.metricRelabelings | indent 4) . }}

View File

@ -1,610 +0,0 @@
{{- /*
Generated from 'alertmanager-overview' from https://raw.githubusercontent.com/prometheus-operator/kube-prometheus/main/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 }}
apiVersion: v1
kind: ConfigMap
metadata:
namespace: {{ template "kube-prometheus-stack.namespace" . }}
name: {{ printf "%s-%s" (include "kube-prometheus-stack.fullname" $) "alertmanager-overview" | trunc 63 | trimSuffix "-" }}
annotations:
{{ toYaml .Values.grafana.sidecar.dashboards.annotations | indent 4 }}
labels:
{{- if $.Values.grafana.sidecar.dashboards.label }}
{{ $.Values.grafana.sidecar.dashboards.label }}: "1"
{{- end }}
app: {{ template "kube-prometheus-stack.name" $ }}-grafana
{{ include "kube-prometheus-stack.labels" $ | indent 4 }}
data:
alertmanager-overview.json: |-
{
"__inputs": [
],
"__requires": [
],
"annotations": {
"list": [
]
},
"editable": false,
"gnetId": null,
"graphTooltip": 1,
"hideControls": false,
"id": null,
"links": [
],
"refresh": "30s",
"rows": [
{
"collapse": false,
"collapsed": false,
"panels": [
{
"aliasColors": {
},
"bars": false,
"dashLength": 10,
"dashes": false,
"datasource": "$datasource",
"fill": 1,
"fillGradient": 0,
"gridPos": {
},
"id": 2,
"legend": {
"alignAsTable": false,
"avg": false,
"current": false,
"max": false,
"min": false,
"rightSide": false,
"show": false,
"sideWidth": null,
"total": false,
"values": false
},
"lines": true,
"linewidth": 1,
"links": [
],
"nullPointMode": "null",
"percentage": false,
"pointradius": 5,
"points": false,
"renderer": "flot",
"repeat": null,
"seriesOverrides": [
],
"spaceLength": 10,
"span": 6,
"stack": true,
"steppedLine": false,
"targets": [
{
"expr": "sum(alertmanager_alerts{namespace=\"$namespace\",service=\"$service\"}) by (namespace,service,instance)",
"format": "time_series",
"intervalFactor": 2,
"legendFormat": "{{`{{`}}instance{{`}}`}}",
"refId": "A"
}
],
"thresholds": [
],
"timeFrom": null,
"timeShift": null,
"title": "Alerts",
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"buckets": null,
"mode": "time",
"name": null,
"show": true,
"values": [
]
},
"yaxes": [
{
"format": "none",
"label": null,
"logBase": 1,
"max": null,
"min": null,
"show": true
},
{
"format": "none",
"label": null,
"logBase": 1,
"max": null,
"min": null,
"show": true
}
]
},
{
"aliasColors": {
},
"bars": false,
"dashLength": 10,
"dashes": false,
"datasource": "$datasource",
"fill": 1,
"fillGradient": 0,
"gridPos": {
},
"id": 3,
"legend": {
"alignAsTable": false,
"avg": false,
"current": false,
"max": false,
"min": false,
"rightSide": false,
"show": false,
"sideWidth": null,
"total": false,
"values": false
},
"lines": true,
"linewidth": 1,
"links": [
],
"nullPointMode": "null",
"percentage": false,
"pointradius": 5,
"points": false,
"renderer": "flot",
"repeat": null,
"seriesOverrides": [
],
"spaceLength": 10,
"span": 6,
"stack": true,
"steppedLine": false,
"targets": [
{
"expr": "sum(rate(alertmanager_alerts_received_total{namespace=\"$namespace\",service=\"$service\"}[5m])) by (namespace,service,instance)",
"format": "time_series",
"intervalFactor": 2,
"legendFormat": "{{`{{`}}instance{{`}}`}} Received",
"refId": "A"
},
{
"expr": "sum(rate(alertmanager_alerts_invalid_total{namespace=\"$namespace\",service=\"$service\"}[5m])) by (namespace,service,instance)",
"format": "time_series",
"intervalFactor": 2,
"legendFormat": "{{`{{`}}instance{{`}}`}} Invalid",
"refId": "B"
}
],
"thresholds": [
],
"timeFrom": null,
"timeShift": null,
"title": "Alerts receive rate",
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"buckets": null,
"mode": "time",
"name": null,
"show": true,
"values": [
]
},
"yaxes": [
{
"format": "ops",
"label": null,
"logBase": 1,
"max": null,
"min": null,
"show": true
},
{
"format": "ops",
"label": null,
"logBase": 1,
"max": null,
"min": null,
"show": true
}
]
}
],
"repeat": null,
"repeatIteration": null,
"repeatRowId": null,
"showTitle": true,
"title": "Alerts",
"titleSize": "h6",
"type": "row"
},
{
"collapse": false,
"collapsed": false,
"panels": [
{
"aliasColors": {
},
"bars": false,
"dashLength": 10,
"dashes": false,
"datasource": "$datasource",
"fill": 1,
"fillGradient": 0,
"gridPos": {
},
"id": 4,
"legend": {
"alignAsTable": false,
"avg": false,
"current": false,
"max": false,
"min": false,
"rightSide": false,
"show": false,
"sideWidth": null,
"total": false,
"values": false
},
"lines": true,
"linewidth": 1,
"links": [
],
"nullPointMode": "null",
"percentage": false,
"pointradius": 5,
"points": false,
"renderer": "flot",
"repeat": "integration",
"seriesOverrides": [
],
"spaceLength": 10,
"stack": true,
"steppedLine": false,
"targets": [
{
"expr": "sum(rate(alertmanager_notifications_total{namespace=\"$namespace\",service=\"$service\", integration=\"$integration\"}[5m])) by (integration,namespace,service,instance)",
"format": "time_series",
"intervalFactor": 2,
"legendFormat": "{{`{{`}}instance{{`}}`}} Total",
"refId": "A"
},
{
"expr": "sum(rate(alertmanager_notifications_failed_total{namespace=\"$namespace\",service=\"$service\", integration=\"$integration\"}[5m])) by (integration,namespace,service,instance)",
"format": "time_series",
"intervalFactor": 2,
"legendFormat": "{{`{{`}}instance{{`}}`}} Failed",
"refId": "B"
}
],
"thresholds": [
],
"timeFrom": null,
"timeShift": null,
"title": "$integration: Notifications Send Rate",
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"buckets": null,
"mode": "time",
"name": null,
"show": true,
"values": [
]
},
"yaxes": [
{
"format": "ops",
"label": null,
"logBase": 1,
"max": null,
"min": null,
"show": true
},
{
"format": "ops",
"label": null,
"logBase": 1,
"max": null,
"min": null,
"show": true
}
]
},
{
"aliasColors": {
},
"bars": false,
"dashLength": 10,
"dashes": false,
"datasource": "$datasource",
"fill": 1,
"fillGradient": 0,
"gridPos": {
},
"id": 5,
"legend": {
"alignAsTable": false,
"avg": false,
"current": false,
"max": false,
"min": false,
"rightSide": false,
"show": false,
"sideWidth": null,
"total": false,
"values": false
},
"lines": true,
"linewidth": 1,
"links": [
],
"nullPointMode": "null",
"percentage": false,
"pointradius": 5,
"points": false,
"renderer": "flot",
"repeat": "integration",
"seriesOverrides": [
],
"spaceLength": 10,
"stack": false,
"steppedLine": false,
"targets": [
{
"expr": "histogram_quantile(0.99,\n sum(rate(alertmanager_notification_latency_seconds_bucket{namespace=\"$namespace\",service=\"$service\", integration=\"$integration\"}[5m])) by (le,namespace,service,instance)\n) \n",
"format": "time_series",
"intervalFactor": 2,
"legendFormat": "{{`{{`}}instance{{`}}`}} 99th Percentile",
"refId": "A"
},
{
"expr": "histogram_quantile(0.50,\n sum(rate(alertmanager_notification_latency_seconds_bucket{namespace=\"$namespace\",service=\"$service\", integration=\"$integration\"}[5m])) by (le,namespace,service,instance)\n) \n",
"format": "time_series",
"intervalFactor": 2,
"legendFormat": "{{`{{`}}instance{{`}}`}} Median",
"refId": "B"
},
{
"expr": "sum(rate(alertmanager_notification_latency_seconds_sum{namespace=\"$namespace\",service=\"$service\", integration=\"$integration\"}[5m])) by (namespace,service,instance)\n/\nsum(rate(alertmanager_notification_latency_seconds_count{namespace=\"$namespace\",service=\"$service\", integration=\"$integration\"}[5m])) by (namespace,service,instance)\n",
"format": "time_series",
"intervalFactor": 2,
"legendFormat": "{{`{{`}}instance{{`}}`}} Average",
"refId": "C"
}
],
"thresholds": [
],
"timeFrom": null,
"timeShift": null,
"title": "$integration: Notification Duration",
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"buckets": null,
"mode": "time",
"name": null,
"show": true,
"values": [
]
},
"yaxes": [
{
"format": "s",
"label": null,
"logBase": 1,
"max": null,
"min": null,
"show": true
},
{
"format": "s",
"label": null,
"logBase": 1,
"max": null,
"min": null,
"show": true
}
]
}
],
"repeat": null,
"repeatIteration": null,
"repeatRowId": null,
"showTitle": true,
"title": "Notifications",
"titleSize": "h6",
"type": "row"
}
],
"schemaVersion": 14,
"style": "dark",
"tags": [
"alertmanager-mixin"
],
"templating": {
"list": [
{
"current": {
"text": "Prometheus",
"value": "Prometheus"
},
"hide": 0,
"label": null,
"name": "datasource",
"options": [
],
"query": "prometheus",
"refresh": 1,
"regex": "",
"type": "datasource"
},
{
"allValue": null,
"current": {
"text": "",
"value": ""
},
"datasource": "$datasource",
"hide": 0,
"includeAll": false,
"label": null,
"multi": false,
"name": "namespace",
"options": [
],
"query": "label_values(alertmanager_alerts, namespace)",
"refresh": 2,
"regex": "",
"sort": 1,
"tagValuesQuery": "",
"tags": [
],
"tagsQuery": "",
"type": "query",
"useTags": false
},
{
"allValue": null,
"current": {
"text": "",
"value": ""
},
"datasource": "$datasource",
"hide": 0,
"includeAll": false,
"label": null,
"multi": false,
"name": "service",
"options": [
],
"query": "label_values(alertmanager_alerts, service)",
"refresh": 2,
"regex": "",
"sort": 1,
"tagValuesQuery": "",
"tags": [
],
"tagsQuery": "",
"type": "query",
"useTags": false
},
{
"allValue": null,
"current": {
"text": "all",
"value": "$__all"
},
"datasource": "$datasource",
"hide": 2,
"includeAll": true,
"label": null,
"multi": false,
"name": "integration",
"options": [
],
"query": "label_values(alertmanager_notifications_total{integration=~\".*\"}, integration)",
"refresh": 2,
"regex": "",
"sort": 1,
"tagValuesQuery": "",
"tags": [
],
"tagsQuery": "",
"type": "query",
"useTags": false
}
]
},
"time": {
"from": "now-1h",
"to": "now"
},
"timepicker": {
"refresh_intervals": [
"5s",
"10s",
"30s",
"1m",
"5m",
"15m",
"30m",
"1h",
"2h",
"1d"
],
"time_options": [
"5m",
"15m",
"1h",
"6h",
"12h",
"24h",
"2d",
"7d",
"30d"
]
},
"timezone": "utc",
"title": "Alertmanager / Overview",
"uid": "alertmanager-overview",
"version": 0
}
{{- end }}

View File

@ -1,978 +0,0 @@
{{- /*
Generated from 'k8s-resources-node' from https://raw.githubusercontent.com/prometheus-operator/kube-prometheus/main/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 }}
apiVersion: v1
kind: ConfigMap
metadata:
namespace: {{ template "kube-prometheus-stack.namespace" . }}
name: {{ printf "%s-%s" (include "kube-prometheus-stack.fullname" $) "k8s-resources-node" | trunc 63 | trimSuffix "-" }}
annotations:
{{ toYaml .Values.grafana.sidecar.dashboards.annotations | indent 4 }}
labels:
{{- if $.Values.grafana.sidecar.dashboards.label }}
{{ $.Values.grafana.sidecar.dashboards.label }}: "1"
{{- end }}
app: {{ template "kube-prometheus-stack.name" $ }}-grafana
{{ include "kube-prometheus-stack.labels" $ | indent 4 }}
data:
k8s-resources-node.json: |-
{
"annotations": {
"list": [
]
},
"editable": true,
"gnetId": null,
"graphTooltip": 0,
"hideControls": false,
"links": [
],
"refresh": "10s",
"rows": [
{
"collapse": false,
"height": "250px",
"panels": [
{
"aliasColors": {
},
"bars": false,
"dashLength": 10,
"dashes": false,
"datasource": "$datasource",
"fill": 10,
"id": 1,
"legend": {
"avg": false,
"current": false,
"max": false,
"min": false,
"show": true,
"total": false,
"values": false
},
"lines": true,
"linewidth": 0,
"links": [
],
"nullPointMode": "null as zero",
"percentage": false,
"pointradius": 5,
"points": false,
"renderer": "flot",
"seriesOverrides": [
],
"spaceLength": 10,
"span": 12,
"stack": true,
"steppedLine": false,
"targets": [
{
"expr": "sum(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_irate{cluster=\"$cluster\", node=~\"$node\"}) by (pod)",
"format": "time_series",
"intervalFactor": 2,
"legendFormat": "{{`{{`}}pod{{`}}`}}",
"legendLink": null,
"step": 10
}
],
"thresholds": [
],
"timeFrom": null,
"timeShift": null,
"title": "CPU Usage",
"tooltip": {
"shared": false,
"sort": 0,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"buckets": null,
"mode": "time",
"name": null,
"show": true,
"values": [
]
},
"yaxes": [
{
"format": "short",
"label": null,
"logBase": 1,
"max": null,
"min": 0,
"show": true
},
{
"format": "short",
"label": null,
"logBase": 1,
"max": null,
"min": null,
"show": false
}
]
}
],
"repeat": null,
"repeatIteration": null,
"repeatRowId": null,
"showTitle": true,
"title": "CPU Usage",
"titleSize": "h6"
},
{
"collapse": false,
"height": "250px",
"panels": [
{
"aliasColors": {
},
"bars": false,
"dashLength": 10,
"dashes": false,
"datasource": "$datasource",
"fill": 1,
"id": 2,
"legend": {
"avg": false,
"current": false,
"max": false,
"min": false,
"show": true,
"total": false,
"values": false
},
"lines": true,
"linewidth": 1,
"links": [
],
"nullPointMode": "null as zero",
"percentage": false,
"pointradius": 5,
"points": false,
"renderer": "flot",
"seriesOverrides": [
],
"spaceLength": 10,
"span": 12,
"stack": false,
"steppedLine": false,
"styles": [
{
"alias": "Time",
"dateFormat": "YYYY-MM-DD HH:mm:ss",
"pattern": "Time",
"type": "hidden"
},
{
"alias": "CPU Usage",
"colorMode": null,
"colors": [
],
"dateFormat": "YYYY-MM-DD HH:mm:ss",
"decimals": 2,
"link": false,
"linkTargetBlank": false,
"linkTooltip": "Drill down",
"linkUrl": "",
"pattern": "Value #A",
"thresholds": [
],
"type": "number",
"unit": "short"
},
{
"alias": "CPU Requests",
"colorMode": null,
"colors": [
],
"dateFormat": "YYYY-MM-DD HH:mm:ss",
"decimals": 2,
"link": false,
"linkTargetBlank": false,
"linkTooltip": "Drill down",
"linkUrl": "",
"pattern": "Value #B",
"thresholds": [
],
"type": "number",
"unit": "short"
},
{
"alias": "CPU Requests %",
"colorMode": null,
"colors": [
],
"dateFormat": "YYYY-MM-DD HH:mm:ss",
"decimals": 2,
"link": false,
"linkTargetBlank": false,
"linkTooltip": "Drill down",
"linkUrl": "",
"pattern": "Value #C",
"thresholds": [
],
"type": "number",
"unit": "percentunit"
},
{
"alias": "CPU Limits",
"colorMode": null,
"colors": [
],
"dateFormat": "YYYY-MM-DD HH:mm:ss",
"decimals": 2,
"link": false,
"linkTargetBlank": false,
"linkTooltip": "Drill down",
"linkUrl": "",
"pattern": "Value #D",
"thresholds": [
],
"type": "number",
"unit": "short"
},
{
"alias": "CPU Limits %",
"colorMode": null,
"colors": [
],
"dateFormat": "YYYY-MM-DD HH:mm:ss",
"decimals": 2,
"link": false,
"linkTargetBlank": false,
"linkTooltip": "Drill down",
"linkUrl": "",
"pattern": "Value #E",
"thresholds": [
],
"type": "number",
"unit": "percentunit"
},
{
"alias": "Pod",
"colorMode": null,
"colors": [
],
"dateFormat": "YYYY-MM-DD HH:mm:ss",
"decimals": 2,
"link": false,
"linkTargetBlank": false,
"linkTooltip": "Drill down",
"linkUrl": "",
"pattern": "pod",
"thresholds": [
],
"type": "number",
"unit": "short"
},
{
"alias": "",
"colorMode": null,
"colors": [
],
"dateFormat": "YYYY-MM-DD HH:mm:ss",
"decimals": 2,
"pattern": "/.*/",
"thresholds": [
],
"type": "string",
"unit": "short"
}
],
"targets": [
{
"expr": "sum(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_irate{cluster=\"$cluster\", node=~\"$node\"}) by (pod)",
"format": "table",
"instant": true,
"intervalFactor": 2,
"legendFormat": "",
"refId": "A",
"step": 10
},
{
"expr": "sum(cluster:namespace:pod_cpu:active:kube_pod_container_resource_requests{cluster=\"$cluster\", node=~\"$node\"}) by (pod)",
"format": "table",
"instant": true,
"intervalFactor": 2,
"legendFormat": "",
"refId": "B",
"step": 10
},
{
"expr": "sum(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_irate{cluster=\"$cluster\", node=~\"$node\"}) by (pod) / sum(cluster:namespace:pod_cpu:active:kube_pod_container_resource_requests{cluster=\"$cluster\", node=~\"$node\"}) by (pod)",
"format": "table",
"instant": true,
"intervalFactor": 2,
"legendFormat": "",
"refId": "C",
"step": 10
},
{
"expr": "sum(cluster:namespace:pod_cpu:active:kube_pod_container_resource_limits{cluster=\"$cluster\", node=~\"$node\"}) by (pod)",
"format": "table",
"instant": true,
"intervalFactor": 2,
"legendFormat": "",
"refId": "D",
"step": 10
},
{
"expr": "sum(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_irate{cluster=\"$cluster\", node=~\"$node\"}) by (pod) / sum(cluster:namespace:pod_cpu:active:kube_pod_container_resource_limits{cluster=\"$cluster\", node=~\"$node\"}) by (pod)",
"format": "table",
"instant": true,
"intervalFactor": 2,
"legendFormat": "",
"refId": "E",
"step": 10
}
],
"thresholds": [
],
"timeFrom": null,
"timeShift": null,
"title": "CPU Quota",
"tooltip": {
"shared": false,
"sort": 0,
"value_type": "individual"
},
"transform": "table",
"type": "table",
"xaxis": {
"buckets": null,
"mode": "time",
"name": null,
"show": true,
"values": [
]
},
"yaxes": [
{
"format": "short",
"label": null,
"logBase": 1,
"max": null,
"min": 0,
"show": true
},
{
"format": "short",
"label": null,
"logBase": 1,
"max": null,
"min": null,
"show": false
}
]
}
],
"repeat": null,
"repeatIteration": null,
"repeatRowId": null,
"showTitle": true,
"title": "CPU Quota",
"titleSize": "h6"
},
{
"collapse": false,
"height": "250px",
"panels": [
{
"aliasColors": {
},
"bars": false,
"dashLength": 10,
"dashes": false,
"datasource": "$datasource",
"fill": 10,
"id": 3,
"legend": {
"avg": false,
"current": false,
"max": false,
"min": false,
"show": true,
"total": false,
"values": false
},
"lines": true,
"linewidth": 0,
"links": [
],
"nullPointMode": "null as zero",
"percentage": false,
"pointradius": 5,
"points": false,
"renderer": "flot",
"seriesOverrides": [
],
"spaceLength": 10,
"span": 12,
"stack": true,
"steppedLine": false,
"targets": [
{
"expr": "sum(node_namespace_pod_container:container_memory_working_set_bytes{cluster=\"$cluster\", node=~\"$node\", container!=\"\"}) by (pod)",
"format": "time_series",
"intervalFactor": 2,
"legendFormat": "{{`{{`}}pod{{`}}`}}",
"legendLink": null,
"step": 10
}
],
"thresholds": [
],
"timeFrom": null,
"timeShift": null,
"title": "Memory Usage (w/o cache)",
"tooltip": {
"shared": false,
"sort": 0,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"buckets": null,
"mode": "time",
"name": null,
"show": true,
"values": [
]
},
"yaxes": [
{
"format": "bytes",
"label": null,
"logBase": 1,
"max": null,
"min": 0,
"show": true
},
{
"format": "short",
"label": null,
"logBase": 1,
"max": null,
"min": null,
"show": false
}
]
}
],
"repeat": null,
"repeatIteration": null,
"repeatRowId": null,
"showTitle": true,
"title": "Memory Usage",
"titleSize": "h6"
},
{
"collapse": false,
"height": "250px",
"panels": [
{
"aliasColors": {
},
"bars": false,
"dashLength": 10,
"dashes": false,
"datasource": "$datasource",
"fill": 1,
"id": 4,
"legend": {
"avg": false,
"current": false,
"max": false,
"min": false,
"show": true,
"total": false,
"values": false
},
"lines": true,
"linewidth": 1,
"links": [
],
"nullPointMode": "null as zero",
"percentage": false,
"pointradius": 5,
"points": false,
"renderer": "flot",
"seriesOverrides": [
],
"spaceLength": 10,
"span": 12,
"stack": false,
"steppedLine": false,
"styles": [
{
"alias": "Time",
"dateFormat": "YYYY-MM-DD HH:mm:ss",
"pattern": "Time",
"type": "hidden"
},
{
"alias": "Memory Usage",
"colorMode": null,
"colors": [
],
"dateFormat": "YYYY-MM-DD HH:mm:ss",
"decimals": 2,
"link": false,
"linkTargetBlank": false,
"linkTooltip": "Drill down",
"linkUrl": "",
"pattern": "Value #A",
"thresholds": [
],
"type": "number",
"unit": "bytes"
},
{
"alias": "Memory Requests",
"colorMode": null,
"colors": [
],
"dateFormat": "YYYY-MM-DD HH:mm:ss",
"decimals": 2,
"link": false,
"linkTargetBlank": false,
"linkTooltip": "Drill down",
"linkUrl": "",
"pattern": "Value #B",
"thresholds": [
],
"type": "number",
"unit": "bytes"
},
{
"alias": "Memory Requests %",
"colorMode": null,
"colors": [
],
"dateFormat": "YYYY-MM-DD HH:mm:ss",
"decimals": 2,
"link": false,
"linkTargetBlank": false,
"linkTooltip": "Drill down",
"linkUrl": "",
"pattern": "Value #C",
"thresholds": [
],
"type": "number",
"unit": "percentunit"
},
{
"alias": "Memory Limits",
"colorMode": null,
"colors": [
],
"dateFormat": "YYYY-MM-DD HH:mm:ss",
"decimals": 2,
"link": false,
"linkTargetBlank": false,
"linkTooltip": "Drill down",
"linkUrl": "",
"pattern": "Value #D",
"thresholds": [
],
"type": "number",
"unit": "bytes"
},
{
"alias": "Memory Limits %",
"colorMode": null,
"colors": [
],
"dateFormat": "YYYY-MM-DD HH:mm:ss",
"decimals": 2,
"link": false,
"linkTargetBlank": false,
"linkTooltip": "Drill down",
"linkUrl": "",
"pattern": "Value #E",
"thresholds": [
],
"type": "number",
"unit": "percentunit"
},
{
"alias": "Memory Usage (RSS)",
"colorMode": null,
"colors": [
],
"dateFormat": "YYYY-MM-DD HH:mm:ss",
"decimals": 2,
"link": false,
"linkTargetBlank": false,
"linkTooltip": "Drill down",
"linkUrl": "",
"pattern": "Value #F",
"thresholds": [
],
"type": "number",
"unit": "bytes"
},
{
"alias": "Memory Usage (Cache)",
"colorMode": null,
"colors": [
],
"dateFormat": "YYYY-MM-DD HH:mm:ss",
"decimals": 2,
"link": false,
"linkTargetBlank": false,
"linkTooltip": "Drill down",
"linkUrl": "",
"pattern": "Value #G",
"thresholds": [
],
"type": "number",
"unit": "bytes"
},
{
"alias": "Memory Usage (Swap)",
"colorMode": null,
"colors": [
],
"dateFormat": "YYYY-MM-DD HH:mm:ss",
"decimals": 2,
"link": false,
"linkTargetBlank": false,
"linkTooltip": "Drill down",
"linkUrl": "",
"pattern": "Value #H",
"thresholds": [
],
"type": "number",
"unit": "bytes"
},
{
"alias": "Pod",
"colorMode": null,
"colors": [
],
"dateFormat": "YYYY-MM-DD HH:mm:ss",
"decimals": 2,
"link": false,
"linkTargetBlank": false,
"linkTooltip": "Drill down",
"linkUrl": "",
"pattern": "pod",
"thresholds": [
],
"type": "number",
"unit": "short"
},
{
"alias": "",
"colorMode": null,
"colors": [
],
"dateFormat": "YYYY-MM-DD HH:mm:ss",
"decimals": 2,
"pattern": "/.*/",
"thresholds": [
],
"type": "string",
"unit": "short"
}
],
"targets": [
{
"expr": "sum(node_namespace_pod_container:container_memory_working_set_bytes{cluster=\"$cluster\", node=~\"$node\",container!=\"\"}) by (pod)",
"format": "table",
"instant": true,
"intervalFactor": 2,
"legendFormat": "",
"refId": "A",
"step": 10
},
{
"expr": "sum(cluster:namespace:pod_memory:active:kube_pod_container_resource_requests{cluster=\"$cluster\", node=~\"$node\"}) by (pod)",
"format": "table",
"instant": true,
"intervalFactor": 2,
"legendFormat": "",
"refId": "B",
"step": 10
},
{
"expr": "sum(node_namespace_pod_container:container_memory_working_set_bytes{cluster=\"$cluster\", node=~\"$node\",container!=\"\"}) by (pod) / sum(cluster:namespace:pod_memory:active:kube_pod_container_resource_requests{cluster=\"$cluster\", node=~\"$node\"}) by (pod)",
"format": "table",
"instant": true,
"intervalFactor": 2,
"legendFormat": "",
"refId": "C",
"step": 10
},
{
"expr": "sum(cluster:namespace:pod_memory:active:kube_pod_container_resource_limits{cluster=\"$cluster\", node=~\"$node\"}) by (pod)",
"format": "table",
"instant": true,
"intervalFactor": 2,
"legendFormat": "",
"refId": "D",
"step": 10
},
{
"expr": "sum(node_namespace_pod_container:container_memory_working_set_bytes{cluster=\"$cluster\", node=~\"$node\",container!=\"\"}) by (pod) / sum(cluster:namespace:pod_memory:active:kube_pod_container_resource_limits{cluster=\"$cluster\", node=~\"$node\"}) by (pod)",
"format": "table",
"instant": true,
"intervalFactor": 2,
"legendFormat": "",
"refId": "E",
"step": 10
},
{
"expr": "sum(node_namespace_pod_container:container_memory_rss{cluster=\"$cluster\", node=~\"$node\",container!=\"\"}) by (pod)",
"format": "table",
"instant": true,
"intervalFactor": 2,
"legendFormat": "",
"refId": "F",
"step": 10
},
{
"expr": "sum(node_namespace_pod_container:container_memory_cache{cluster=\"$cluster\", node=~\"$node\",container!=\"\"}) by (pod)",
"format": "table",
"instant": true,
"intervalFactor": 2,
"legendFormat": "",
"refId": "G",
"step": 10
},
{
"expr": "sum(node_namespace_pod_container:container_memory_swap{cluster=\"$cluster\", node=~\"$node\",container!=\"\"}) by (pod)",
"format": "table",
"instant": true,
"intervalFactor": 2,
"legendFormat": "",
"refId": "H",
"step": 10
}
],
"thresholds": [
],
"timeFrom": null,
"timeShift": null,
"title": "Memory Quota",
"tooltip": {
"shared": false,
"sort": 0,
"value_type": "individual"
},
"transform": "table",
"type": "table",
"xaxis": {
"buckets": null,
"mode": "time",
"name": null,
"show": true,
"values": [
]
},
"yaxes": [
{
"format": "short",
"label": null,
"logBase": 1,
"max": null,
"min": 0,
"show": true
},
{
"format": "short",
"label": null,
"logBase": 1,
"max": null,
"min": null,
"show": false
}
]
}
],
"repeat": null,
"repeatIteration": null,
"repeatRowId": null,
"showTitle": true,
"title": "Memory Quota",
"titleSize": "h6"
}
],
"schemaVersion": 14,
"style": "dark",
"tags": [
"kubernetes-mixin"
],
"templating": {
"list": [
{
"current": {
"text": "default",
"value": "default"
},
"hide": 0,
"label": null,
"name": "datasource",
"options": [
],
"query": "prometheus",
"refresh": 1,
"regex": "",
"type": "datasource"
},
{
"allValue": null,
"current": {
"text": "",
"value": ""
},
"datasource": "$datasource",
"hide": {{ if .Values.grafana.sidecar.dashboards.multicluster.global.enabled }}0{{ else }}2{{ end }},
"includeAll": false,
"label": null,
"multi": false,
"name": "cluster",
"options": [
],
"query": "label_values(kube_pod_info, cluster)",
"refresh": 2,
"regex": "",
"sort": 1,
"tagValuesQuery": "",
"tags": [
],
"tagsQuery": "",
"type": "query",
"useTags": false
},
{
"allValue": null,
"current": {
"text": "",
"value": ""
},
"datasource": "$datasource",
"hide": 0,
"includeAll": false,
"label": null,
"multi": true,
"name": "node",
"options": [
],
"query": "label_values(kube_pod_info{cluster=\"$cluster\"}, node)",
"refresh": 2,
"regex": "",
"sort": 1,
"tagValuesQuery": "",
"tags": [
],
"tagsQuery": "",
"type": "query",
"useTags": false
}
]
},
"time": {
"from": "now-1h",
"to": "now"
},
"timepicker": {
"refresh_intervals": [
"5s",
"10s",
"30s",
"1m",
"5m",
"15m",
"30m",
"1h",
"2h",
"1d"
],
"time_options": [
"5m",
"15m",
"1h",
"6h",
"12h",
"24h",
"2d",
"7d",
"30d"
]
},
"timezone": "UTC",
"title": "Kubernetes / Compute Resources / Node (Pods)",
"uid": "200ac8fdbfbb74b39aff88118e4d1c2c",
"version": 0
}
{{- end }}

View File

@ -1,991 +0,0 @@
{{- /*
Generated from 'nodes' from https://raw.githubusercontent.com/prometheus-operator/kube-prometheus/main/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 }}
apiVersion: v1
kind: ConfigMap
metadata:
namespace: {{ template "kube-prometheus-stack.namespace" . }}
name: {{ printf "%s-%s" (include "kube-prometheus-stack.fullname" $) "nodes" | trunc 63 | trimSuffix "-" }}
annotations:
{{ toYaml .Values.grafana.sidecar.dashboards.annotations | indent 4 }}
labels:
{{- if $.Values.grafana.sidecar.dashboards.label }}
{{ $.Values.grafana.sidecar.dashboards.label }}: "1"
{{- end }}
app: {{ template "kube-prometheus-stack.name" $ }}-grafana
{{ include "kube-prometheus-stack.labels" $ | indent 4 }}
data:
nodes.json: |-
{
"__inputs": [
],
"__requires": [
],
"annotations": {
"list": [
]
},
"editable": false,
"gnetId": null,
"graphTooltip": 1,
"hideControls": false,
"id": null,
"links": [
],
"refresh": "30s",
"rows": [
{
"collapse": false,
"collapsed": false,
"panels": [
{
"aliasColors": {
},
"bars": false,
"dashLength": 10,
"dashes": false,
"datasource": "$datasource",
"fill": 1,
"fillGradient": 0,
"gridPos": {
},
"id": 2,
"legend": {
"alignAsTable": false,
"avg": false,
"current": false,
"max": false,
"min": false,
"rightSide": false,
"show": true,
"sideWidth": null,
"total": false,
"values": false
},
"lines": true,
"linewidth": 1,
"links": [
],
"nullPointMode": "null",
"percentage": false,
"pointradius": 5,
"points": false,
"renderer": "flot",
"repeat": null,
"seriesOverrides": [
],
"spaceLength": 10,
"span": 6,
"stack": true,
"steppedLine": false,
"targets": [
{
"expr": "(\n (1 - rate(node_cpu_seconds_total{job=\"node-exporter\", mode=\"idle\", instance=\"$instance\"}[$__rate_interval]))\n/ ignoring(cpu) group_left\n count without (cpu)( node_cpu_seconds_total{job=\"node-exporter\", mode=\"idle\", instance=\"$instance\"})\n)\n",
"format": "time_series",
"intervalFactor": 5,
"legendFormat": "{{`{{`}}cpu{{`}}`}}",
"refId": "A"
}
],
"thresholds": [
],
"timeFrom": null,
"timeShift": null,
"title": "CPU Usage",
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"buckets": null,
"mode": "time",
"name": null,
"show": true,
"values": [
]
},
"yaxes": [
{
"format": "percentunit",
"label": null,
"logBase": 1,
"max": 1,
"min": 0,
"show": true
},
{
"format": "percentunit",
"label": null,
"logBase": 1,
"max": 1,
"min": 0,
"show": true
}
]
},
{
"aliasColors": {
},
"bars": false,
"dashLength": 10,
"dashes": false,
"datasource": "$datasource",
"fill": 0,
"fillGradient": 0,
"gridPos": {
},
"id": 3,
"legend": {
"alignAsTable": false,
"avg": false,
"current": false,
"max": false,
"min": false,
"rightSide": false,
"show": true,
"sideWidth": null,
"total": false,
"values": false
},
"lines": true,
"linewidth": 1,
"links": [
],
"nullPointMode": "null",
"percentage": false,
"pointradius": 5,
"points": false,
"renderer": "flot",
"repeat": null,
"seriesOverrides": [
],
"spaceLength": 10,
"span": 6,
"stack": false,
"steppedLine": false,
"targets": [
{
"expr": "node_load1{job=\"node-exporter\", instance=\"$instance\"}",
"format": "time_series",
"intervalFactor": 2,
"legendFormat": "1m load average",
"refId": "A"
},
{
"expr": "node_load5{job=\"node-exporter\", instance=\"$instance\"}",
"format": "time_series",
"intervalFactor": 2,
"legendFormat": "5m load average",
"refId": "B"
},
{
"expr": "node_load15{job=\"node-exporter\", instance=\"$instance\"}",
"format": "time_series",
"intervalFactor": 2,
"legendFormat": "15m load average",
"refId": "C"
},
{
"expr": "count(node_cpu_seconds_total{job=\"node-exporter\", instance=\"$instance\", mode=\"idle\"})",
"format": "time_series",
"intervalFactor": 2,
"legendFormat": "logical cores",
"refId": "D"
}
],
"thresholds": [
],
"timeFrom": null,
"timeShift": null,
"title": "Load Average",
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"buckets": null,
"mode": "time",
"name": null,
"show": true,
"values": [
]
},
"yaxes": [
{
"format": "short",
"label": null,
"logBase": 1,
"max": null,
"min": 0,
"show": true
},
{
"format": "short",
"label": null,
"logBase": 1,
"max": null,
"min": 0,
"show": true
}
]
}
],
"repeat": null,
"repeatIteration": null,
"repeatRowId": null,
"showTitle": false,
"title": "Dashboard Row",
"titleSize": "h6",
"type": "row"
},
{
"collapse": false,
"collapsed": false,
"panels": [
{
"aliasColors": {
},
"bars": false,
"dashLength": 10,
"dashes": false,
"datasource": "$datasource",
"fill": 1,
"fillGradient": 0,
"gridPos": {
},
"id": 4,
"legend": {
"alignAsTable": false,
"avg": false,
"current": false,
"max": false,
"min": false,
"rightSide": false,
"show": true,
"sideWidth": null,
"total": false,
"values": false
},
"lines": true,
"linewidth": 1,
"links": [
],
"nullPointMode": "null",
"percentage": false,
"pointradius": 5,
"points": false,
"renderer": "flot",
"repeat": null,
"seriesOverrides": [
],
"spaceLength": 10,
"span": 9,
"stack": true,
"steppedLine": false,
"targets": [
{
"expr": "(\n node_memory_MemTotal_bytes{job=\"node-exporter\", instance=\"$instance\"}\n-\n node_memory_MemFree_bytes{job=\"node-exporter\", instance=\"$instance\"}\n-\n node_memory_Buffers_bytes{job=\"node-exporter\", instance=\"$instance\"}\n-\n node_memory_Cached_bytes{job=\"node-exporter\", instance=\"$instance\"}\n)\n",
"format": "time_series",
"intervalFactor": 2,
"legendFormat": "memory used",
"refId": "A"
},
{
"expr": "node_memory_Buffers_bytes{job=\"node-exporter\", instance=\"$instance\"}",
"format": "time_series",
"intervalFactor": 2,
"legendFormat": "memory buffers",
"refId": "B"
},
{
"expr": "node_memory_Cached_bytes{job=\"node-exporter\", instance=\"$instance\"}",
"format": "time_series",
"intervalFactor": 2,
"legendFormat": "memory cached",
"refId": "C"
},
{
"expr": "node_memory_MemFree_bytes{job=\"node-exporter\", instance=\"$instance\"}",
"format": "time_series",
"intervalFactor": 2,
"legendFormat": "memory free",
"refId": "D"
}
],
"thresholds": [
],
"timeFrom": null,
"timeShift": null,
"title": "Memory Usage",
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"buckets": null,
"mode": "time",
"name": null,
"show": true,
"values": [
]
},
"yaxes": [
{
"format": "bytes",
"label": null,
"logBase": 1,
"max": null,
"min": 0,
"show": true
},
{
"format": "bytes",
"label": null,
"logBase": 1,
"max": null,
"min": 0,
"show": true
}
]
},
{
"cacheTimeout": null,
"colorBackground": false,
"colorValue": false,
"colors": [
"rgba(50, 172, 45, 0.97)",
"rgba(237, 129, 40, 0.89)",
"rgba(245, 54, 54, 0.9)"
],
"datasource": "$datasource",
"format": "percent",
"gauge": {
"maxValue": 100,
"minValue": 0,
"show": true,
"thresholdLabels": false,
"thresholdMarkers": true
},
"gridPos": {
},
"id": 5,
"interval": null,
"links": [
],
"mappingType": 1,
"mappingTypes": [
{
"name": "value to text",
"value": 1
},
{
"name": "range to text",
"value": 2
}
],
"maxDataPoints": 100,
"nullPointMode": "connected",
"nullText": null,
"postfix": "",
"postfixFontSize": "50%",
"prefix": "",
"prefixFontSize": "50%",
"rangeMaps": [
{
"from": "null",
"text": "N/A",
"to": "null"
}
],
"span": 3,
"sparkline": {
"fillColor": "rgba(31, 118, 189, 0.18)",
"full": false,
"lineColor": "rgb(31, 120, 193)",
"show": false
},
"tableColumn": "",
"targets": [
{
"expr": "100 -\n(\n avg(node_memory_MemAvailable_bytes{job=\"node-exporter\", instance=\"$instance\"})\n/\n avg(node_memory_MemTotal_bytes{job=\"node-exporter\", instance=\"$instance\"})\n* 100\n)\n",
"format": "time_series",
"intervalFactor": 2,
"legendFormat": "",
"refId": "A"
}
],
"thresholds": "80, 90",
"title": "Memory Usage",
"type": "singlestat",
"valueFontSize": "80%",
"valueMaps": [
{
"op": "=",
"text": "N/A",
"value": "null"
}
],
"valueName": "current"
}
],
"repeat": null,
"repeatIteration": null,
"repeatRowId": null,
"showTitle": false,
"title": "Dashboard Row",
"titleSize": "h6",
"type": "row"
},
{
"collapse": false,
"collapsed": false,
"panels": [
{
"aliasColors": {
},
"bars": false,
"dashLength": 10,
"dashes": false,
"datasource": "$datasource",
"fill": 0,
"fillGradient": 0,
"gridPos": {
},
"id": 6,
"legend": {
"alignAsTable": false,
"avg": false,
"current": false,
"max": false,
"min": false,
"rightSide": false,
"show": true,
"sideWidth": null,
"total": false,
"values": false
},
"lines": true,
"linewidth": 1,
"links": [
],
"nullPointMode": "null",
"percentage": false,
"pointradius": 5,
"points": false,
"renderer": "flot",
"repeat": null,
"seriesOverrides": [
{
"alias": "/ read| written/",
"yaxis": 1
},
{
"alias": "/ io time/",
"yaxis": 2
}
],
"spaceLength": 10,
"span": 6,
"stack": false,
"steppedLine": false,
"targets": [
{
"expr": "rate(node_disk_read_bytes_total{job=\"node-exporter\", instance=\"$instance\", device=~\"mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|dasd.+\"}[$__rate_interval])",
"format": "time_series",
"intervalFactor": 2,
"legendFormat": "{{`{{`}}device{{`}}`}} read",
"refId": "A"
},
{
"expr": "rate(node_disk_written_bytes_total{job=\"node-exporter\", instance=\"$instance\", device=~\"mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|dasd.+\"}[$__rate_interval])",
"format": "time_series",
"intervalFactor": 2,
"legendFormat": "{{`{{`}}device{{`}}`}} written",
"refId": "B"
},
{
"expr": "rate(node_disk_io_time_seconds_total{job=\"node-exporter\", instance=\"$instance\", device=~\"mmcblk.p.+|nvme.+|rbd.+|sd.+|vd.+|xvd.+|dm-.+|dasd.+\"}[$__rate_interval])",
"format": "time_series",
"intervalFactor": 2,
"legendFormat": "{{`{{`}}device{{`}}`}} io time",
"refId": "C"
}
],
"thresholds": [
],
"timeFrom": null,
"timeShift": null,
"title": "Disk I/O",
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"buckets": null,
"mode": "time",
"name": null,
"show": true,
"values": [
]
},
"yaxes": [
{
"format": "bytes",
"label": null,
"logBase": 1,
"max": null,
"min": null,
"show": true
},
{
"format": "s",
"label": null,
"logBase": 1,
"max": null,
"min": null,
"show": true
}
]
},
{
"aliasColors": {
},
"bars": false,
"dashLength": 10,
"dashes": false,
"datasource": "$datasource",
"fill": 1,
"fillGradient": 0,
"gridPos": {
},
"id": 7,
"legend": {
"alignAsTable": false,
"avg": false,
"current": false,
"max": false,
"min": false,
"rightSide": false,
"show": true,
"sideWidth": null,
"total": false,
"values": false
},
"lines": true,
"linewidth": 1,
"links": [
],
"nullPointMode": "null",
"percentage": false,
"pointradius": 5,
"points": false,
"renderer": "flot",
"repeat": null,
"seriesOverrides": [
{
"alias": "used",
"color": "#E0B400"
},
{
"alias": "available",
"color": "#73BF69"
}
],
"spaceLength": 10,
"span": 6,
"stack": true,
"steppedLine": false,
"targets": [
{
"expr": "sum(\n max by (device) (\n node_filesystem_size_bytes{job=\"node-exporter\", instance=\"$instance\", fstype!=\"\"}\n -\n node_filesystem_avail_bytes{job=\"node-exporter\", instance=\"$instance\", fstype!=\"\"}\n )\n)\n",
"format": "time_series",
"intervalFactor": 2,
"legendFormat": "used",
"refId": "A"
},
{
"expr": "sum(\n max by (device) (\n node_filesystem_avail_bytes{job=\"node-exporter\", instance=\"$instance\", fstype!=\"\"}\n )\n)\n",
"format": "time_series",
"intervalFactor": 2,
"legendFormat": "available",
"refId": "B"
}
],
"thresholds": [
],
"timeFrom": null,
"timeShift": null,
"title": "Disk Space Usage",
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"buckets": null,
"mode": "time",
"name": null,
"show": true,
"values": [
]
},
"yaxes": [
{
"format": "bytes",
"label": null,
"logBase": 1,
"max": null,
"min": 0,
"show": true
},
{
"format": "bytes",
"label": null,
"logBase": 1,
"max": null,
"min": 0,
"show": true
}
]
}
],
"repeat": null,
"repeatIteration": null,
"repeatRowId": null,
"showTitle": false,
"title": "Dashboard Row",
"titleSize": "h6",
"type": "row"
},
{
"collapse": false,
"collapsed": false,
"panels": [
{
"aliasColors": {
},
"bars": false,
"dashLength": 10,
"dashes": false,
"datasource": "$datasource",
"fill": 0,
"fillGradient": 0,
"gridPos": {
},
"id": 8,
"legend": {
"alignAsTable": false,
"avg": false,
"current": false,
"max": false,
"min": false,
"rightSide": false,
"show": true,
"sideWidth": null,
"total": false,
"values": false
},
"lines": true,
"linewidth": 1,
"links": [
],
"nullPointMode": "null",
"percentage": false,
"pointradius": 5,
"points": false,
"renderer": "flot",
"repeat": null,
"seriesOverrides": [
],
"spaceLength": 10,
"span": 6,
"stack": false,
"steppedLine": false,
"targets": [
{
"expr": "rate(node_network_receive_bytes_total{job=\"node-exporter\", instance=\"$instance\", device!=\"lo\"}[$__rate_interval])",
"format": "time_series",
"intervalFactor": 2,
"legendFormat": "{{`{{`}}device{{`}}`}}",
"refId": "A"
}
],
"thresholds": [
],
"timeFrom": null,
"timeShift": null,
"title": "Network Received",
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"buckets": null,
"mode": "time",
"name": null,
"show": true,
"values": [
]
},
"yaxes": [
{
"format": "bytes",
"label": null,
"logBase": 1,
"max": null,
"min": 0,
"show": true
},
{
"format": "bytes",
"label": null,
"logBase": 1,
"max": null,
"min": 0,
"show": true
}
]
},
{
"aliasColors": {
},
"bars": false,
"dashLength": 10,
"dashes": false,
"datasource": "$datasource",
"fill": 0,
"fillGradient": 0,
"gridPos": {
},
"id": 9,
"legend": {
"alignAsTable": false,
"avg": false,
"current": false,
"max": false,
"min": false,
"rightSide": false,
"show": true,
"sideWidth": null,
"total": false,
"values": false
},
"lines": true,
"linewidth": 1,
"links": [
],
"nullPointMode": "null",
"percentage": false,
"pointradius": 5,
"points": false,
"renderer": "flot",
"repeat": null,
"seriesOverrides": [
],
"spaceLength": 10,
"span": 6,
"stack": false,
"steppedLine": false,
"targets": [
{
"expr": "rate(node_network_transmit_bytes_total{job=\"node-exporter\", instance=\"$instance\", device!=\"lo\"}[$__rate_interval])",
"format": "time_series",
"intervalFactor": 2,
"legendFormat": "{{`{{`}}device{{`}}`}}",
"refId": "A"
}
],
"thresholds": [
],
"timeFrom": null,
"timeShift": null,
"title": "Network Transmitted",
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"buckets": null,
"mode": "time",
"name": null,
"show": true,
"values": [
]
},
"yaxes": [
{
"format": "bytes",
"label": null,
"logBase": 1,
"max": null,
"min": 0,
"show": true
},
{
"format": "bytes",
"label": null,
"logBase": 1,
"max": null,
"min": 0,
"show": true
}
]
}
],
"repeat": null,
"repeatIteration": null,
"repeatRowId": null,
"showTitle": false,
"title": "Dashboard Row",
"titleSize": "h6",
"type": "row"
}
],
"schemaVersion": 14,
"style": "dark",
"tags": [
"node-exporter-mixin"
],
"templating": {
"list": [
{
"current": {
"text": "Prometheus",
"value": "Prometheus"
},
"hide": 0,
"label": null,
"name": "datasource",
"options": [
],
"query": "prometheus",
"refresh": 1,
"regex": "",
"type": "datasource"
},
{
"allValue": null,
"current": {
},
"datasource": "$datasource",
"hide": 0,
"includeAll": false,
"label": null,
"multi": false,
"name": "instance",
"options": [
],
"query": "label_values(node_exporter_build_info{job=\"node-exporter\"}, instance)",
"refresh": 2,
"regex": "",
"sort": 0,
"tagValuesQuery": "",
"tags": [
],
"tagsQuery": "",
"type": "query",
"useTags": false
}
]
},
"time": {
"from": "now-1h",
"to": "now"
},
"timepicker": {
"refresh_intervals": [
"5s",
"10s",
"30s",
"1m",
"5m",
"15m",
"30m",
"1h",
"2h",
"1d"
],
"time_options": [
"5m",
"15m",
"1h",
"6h",
"12h",
"24h",
"2d",
"7d",
"30d"
]
},
"timezone": "utc",
"title": "Node Exporter / Nodes",
"version": 0
}
{{- end }}

View File

@ -1,577 +0,0 @@
{{- /*
Generated from 'persistentvolumesusage' from https://raw.githubusercontent.com/prometheus-operator/kube-prometheus/main/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 }}
apiVersion: v1
kind: ConfigMap
metadata:
namespace: {{ template "kube-prometheus-stack.namespace" . }}
name: {{ printf "%s-%s" (include "kube-prometheus-stack.fullname" $) "persistentvolumesusage" | trunc 63 | trimSuffix "-" }}
annotations:
{{ toYaml .Values.grafana.sidecar.dashboards.annotations | indent 4 }}
labels:
{{- if $.Values.grafana.sidecar.dashboards.label }}
{{ $.Values.grafana.sidecar.dashboards.label }}: "1"
{{- end }}
app: {{ template "kube-prometheus-stack.name" $ }}-grafana
{{ include "kube-prometheus-stack.labels" $ | indent 4 }}
data:
persistentvolumesusage.json: |-
{
"__inputs": [
],
"__requires": [
],
"annotations": {
"list": [
]
},
"editable": false,
"gnetId": null,
"graphTooltip": 0,
"hideControls": false,
"id": null,
"links": [
],
"refresh": "10s",
"rows": [
{
"collapse": false,
"collapsed": false,
"panels": [
{
"aliasColors": {
},
"bars": false,
"dashLength": 10,
"dashes": false,
"datasource": "$datasource",
"fill": 1,
"fillGradient": 0,
"gridPos": {
},
"id": 2,
"legend": {
"alignAsTable": true,
"avg": true,
"current": true,
"max": true,
"min": true,
"rightSide": false,
"show": true,
"sideWidth": null,
"total": false,
"values": true
},
"lines": true,
"linewidth": 1,
"links": [
],
"nullPointMode": "null",
"percentage": false,
"pointradius": 5,
"points": false,
"renderer": "flot",
"repeat": null,
"seriesOverrides": [
],
"spaceLength": 10,
"span": 9,
"stack": true,
"steppedLine": false,
"targets": [
{
"expr": "(\n sum without(instance, node) (topk(1, (kubelet_volume_stats_capacity_bytes{cluster=\"$cluster\", job=\"kubelet\", metrics_path=\"/metrics\", namespace=\"$namespace\", persistentvolumeclaim=\"$volume\"})))\n -\n sum without(instance, node) (topk(1, (kubelet_volume_stats_available_bytes{cluster=\"$cluster\", job=\"kubelet\", metrics_path=\"/metrics\", namespace=\"$namespace\", persistentvolumeclaim=\"$volume\"})))\n)\n",
"format": "time_series",
"intervalFactor": 1,
"legendFormat": "Used Space",
"refId": "A"
},
{
"expr": "sum without(instance, node) (topk(1, (kubelet_volume_stats_available_bytes{cluster=\"$cluster\", job=\"kubelet\", metrics_path=\"/metrics\", namespace=\"$namespace\", persistentvolumeclaim=\"$volume\"})))\n",
"format": "time_series",
"intervalFactor": 1,
"legendFormat": "Free Space",
"refId": "B"
}
],
"thresholds": [
],
"timeFrom": null,
"timeShift": null,
"title": "Volume Space Usage",
"tooltip": {
"shared": false,
"sort": 0,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"buckets": null,
"mode": "time",
"name": null,
"show": true,
"values": [
]
},
"yaxes": [
{
"format": "bytes",
"label": null,
"logBase": 1,
"max": null,
"min": 0,
"show": true
},
{
"format": "bytes",
"label": null,
"logBase": 1,
"max": null,
"min": 0,
"show": true
}
]
},
{
"cacheTimeout": null,
"colorBackground": false,
"colorValue": false,
"colors": [
"rgba(50, 172, 45, 0.97)",
"rgba(237, 129, 40, 0.89)",
"rgba(245, 54, 54, 0.9)"
],
"datasource": "$datasource",
"format": "percent",
"gauge": {
"maxValue": 100,
"minValue": 0,
"show": true,
"thresholdLabels": false,
"thresholdMarkers": true
},
"gridPos": {
},
"id": 3,
"interval": null,
"links": [
],
"mappingType": 1,
"mappingTypes": [
{
"name": "value to text",
"value": 1
},
{
"name": "range to text",
"value": 2
}
],
"maxDataPoints": 100,
"nullPointMode": "connected",
"nullText": null,
"postfix": "",
"postfixFontSize": "50%",
"prefix": "",
"prefixFontSize": "50%",
"rangeMaps": [
{
"from": "null",
"text": "N/A",
"to": "null"
}
],
"span": 3,
"sparkline": {
"fillColor": "rgba(31, 118, 189, 0.18)",
"full": false,
"lineColor": "rgb(31, 120, 193)",
"show": false
},
"tableColumn": "",
"targets": [
{
"expr": "max without(instance,node) (\n(\n topk(1, kubelet_volume_stats_capacity_bytes{cluster=\"$cluster\", job=\"kubelet\", metrics_path=\"/metrics\", namespace=\"$namespace\", persistentvolumeclaim=\"$volume\"})\n -\n topk(1, kubelet_volume_stats_available_bytes{cluster=\"$cluster\", job=\"kubelet\", metrics_path=\"/metrics\", namespace=\"$namespace\", persistentvolumeclaim=\"$volume\"})\n)\n/\ntopk(1, kubelet_volume_stats_capacity_bytes{cluster=\"$cluster\", job=\"kubelet\", metrics_path=\"/metrics\", namespace=\"$namespace\", persistentvolumeclaim=\"$volume\"})\n* 100)\n",
"format": "time_series",
"intervalFactor": 2,
"legendFormat": "",
"refId": "A"
}
],
"thresholds": "80, 90",
"title": "Volume Space Usage",
"tooltip": {
"shared": false
},
"type": "singlestat",
"valueFontSize": "80%",
"valueMaps": [
{
"op": "=",
"text": "N/A",
"value": "null"
}
],
"valueName": "current"
}
],
"repeat": null,
"repeatIteration": null,
"repeatRowId": null,
"showTitle": false,
"title": "Dashboard Row",
"titleSize": "h6",
"type": "row"
},
{
"collapse": false,
"collapsed": false,
"panels": [
{
"aliasColors": {
},
"bars": false,
"dashLength": 10,
"dashes": false,
"datasource": "$datasource",
"fill": 1,
"fillGradient": 0,
"gridPos": {
},
"id": 4,
"legend": {
"alignAsTable": true,
"avg": true,
"current": true,
"max": true,
"min": true,
"rightSide": false,
"show": true,
"sideWidth": null,
"total": false,
"values": true
},
"lines": true,
"linewidth": 1,
"links": [
],
"nullPointMode": "null",
"percentage": false,
"pointradius": 5,
"points": false,
"renderer": "flot",
"repeat": null,
"seriesOverrides": [
],
"spaceLength": 10,
"span": 9,
"stack": true,
"steppedLine": false,
"targets": [
{
"expr": "sum without(instance, node) (topk(1, (kubelet_volume_stats_inodes_used{cluster=\"$cluster\", job=\"kubelet\", metrics_path=\"/metrics\", namespace=\"$namespace\", persistentvolumeclaim=\"$volume\"})))\n",
"format": "time_series",
"intervalFactor": 1,
"legendFormat": "Used inodes",
"refId": "A"
},
{
"expr": "(\n sum without(instance, node) (topk(1, (kubelet_volume_stats_inodes{cluster=\"$cluster\", job=\"kubelet\", metrics_path=\"/metrics\", namespace=\"$namespace\", persistentvolumeclaim=\"$volume\"})))\n -\n sum without(instance, node) (topk(1, (kubelet_volume_stats_inodes_used{cluster=\"$cluster\", job=\"kubelet\", metrics_path=\"/metrics\", namespace=\"$namespace\", persistentvolumeclaim=\"$volume\"})))\n)\n",
"format": "time_series",
"intervalFactor": 1,
"legendFormat": " Free inodes",
"refId": "B"
}
],
"thresholds": [
],
"timeFrom": null,
"timeShift": null,
"title": "Volume inodes Usage",
"tooltip": {
"shared": false,
"sort": 0,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"buckets": null,
"mode": "time",
"name": null,
"show": true,
"values": [
]
},
"yaxes": [
{
"format": "none",
"label": null,
"logBase": 1,
"max": null,
"min": 0,
"show": true
},
{
"format": "none",
"label": null,
"logBase": 1,
"max": null,
"min": 0,
"show": true
}
]
},
{
"cacheTimeout": null,
"colorBackground": false,
"colorValue": false,
"colors": [
"rgba(50, 172, 45, 0.97)",
"rgba(237, 129, 40, 0.89)",
"rgba(245, 54, 54, 0.9)"
],
"datasource": "$datasource",
"format": "percent",
"gauge": {
"maxValue": 100,
"minValue": 0,
"show": true,
"thresholdLabels": false,
"thresholdMarkers": true
},
"gridPos": {
},
"id": 5,
"interval": null,
"links": [
],
"mappingType": 1,
"mappingTypes": [
{
"name": "value to text",
"value": 1
},
{
"name": "range to text",
"value": 2
}
],
"maxDataPoints": 100,
"nullPointMode": "connected",
"nullText": null,
"postfix": "",
"postfixFontSize": "50%",
"prefix": "",
"prefixFontSize": "50%",
"rangeMaps": [
{
"from": "null",
"text": "N/A",
"to": "null"
}
],
"span": 3,
"sparkline": {
"fillColor": "rgba(31, 118, 189, 0.18)",
"full": false,
"lineColor": "rgb(31, 120, 193)",
"show": false
},
"tableColumn": "",
"targets": [
{
"expr": "max without(instance,node) (\ntopk(1, kubelet_volume_stats_inodes_used{cluster=\"$cluster\", job=\"kubelet\", metrics_path=\"/metrics\", namespace=\"$namespace\", persistentvolumeclaim=\"$volume\"})\n/\ntopk(1, kubelet_volume_stats_inodes{cluster=\"$cluster\", job=\"kubelet\", metrics_path=\"/metrics\", namespace=\"$namespace\", persistentvolumeclaim=\"$volume\"})\n* 100)\n",
"format": "time_series",
"intervalFactor": 2,
"legendFormat": "",
"refId": "A"
}
],
"thresholds": "80, 90",
"title": "Volume inodes Usage",
"tooltip": {
"shared": false
},
"type": "singlestat",
"valueFontSize": "80%",
"valueMaps": [
{
"op": "=",
"text": "N/A",
"value": "null"
}
],
"valueName": "current"
}
],
"repeat": null,
"repeatIteration": null,
"repeatRowId": null,
"showTitle": false,
"title": "Dashboard Row",
"titleSize": "h6",
"type": "row"
}
],
"schemaVersion": 14,
"style": "dark",
"tags": [
"kubernetes-mixin"
],
"templating": {
"list": [
{
"current": {
"text": "default",
"value": "default"
},
"hide": 0,
"label": null,
"name": "datasource",
"options": [
],
"query": "prometheus",
"refresh": 1,
"regex": "",
"type": "datasource"
},
{
"allValue": null,
"current": {
},
"datasource": "$datasource",
"hide": {{ if .Values.grafana.sidecar.dashboards.multicluster.global.enabled }}0{{ else }}2{{ end }},
"includeAll": false,
"label": "cluster",
"multi": false,
"name": "cluster",
"options": [
],
"query": "label_values(kubelet_volume_stats_capacity_bytes, cluster)",
"refresh": 2,
"regex": "",
"sort": 1,
"tagValuesQuery": "",
"tags": [
],
"tagsQuery": "",
"type": "query",
"useTags": false
},
{
"allValue": null,
"current": {
},
"datasource": "$datasource",
"hide": 0,
"includeAll": false,
"label": "Namespace",
"multi": false,
"name": "namespace",
"options": [
],
"query": "label_values(kubelet_volume_stats_capacity_bytes{cluster=\"$cluster\", job=\"kubelet\", metrics_path=\"/metrics\"}, namespace)",
"refresh": 2,
"regex": "",
"sort": 1,
"tagValuesQuery": "",
"tags": [
],
"tagsQuery": "",
"type": "query",
"useTags": false
},
{
"allValue": null,
"current": {
},
"datasource": "$datasource",
"hide": 0,
"includeAll": false,
"label": "PersistentVolumeClaim",
"multi": false,
"name": "volume",
"options": [
],
"query": "label_values(kubelet_volume_stats_capacity_bytes{cluster=\"$cluster\", job=\"kubelet\", metrics_path=\"/metrics\", namespace=\"$namespace\"}, persistentvolumeclaim)",
"refresh": 2,
"regex": "",
"sort": 1,
"tagValuesQuery": "",
"tags": [
],
"tagsQuery": "",
"type": "query",
"useTags": false
}
]
},
"time": {
"from": "now-7d",
"to": "now"
},
"timepicker": {
"refresh_intervals": [
"5s",
"10s",
"30s",
"1m",
"5m",
"15m",
"30m",
"1h",
"2h",
"1d"
],
"time_options": [
"5m",
"15m",
"1h",
"6h",
"12h",
"24h",
"2d",
"7d",
"30d"
]
},
"timezone": "UTC",
"title": "Kubernetes / Persistent Volumes",
"uid": "919b92a8e8041bd567af9edab12c840c",
"version": 0
}
{{- end }}

View File

@ -1,928 +0,0 @@
{{- /*
Generated from 'statefulset' from https://raw.githubusercontent.com/prometheus-operator/kube-prometheus/master/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 }}
apiVersion: v1
kind: ConfigMap
metadata:
namespace: {{ template "kube-prometheus-stack.namespace" . }}
name: {{ printf "%s-%s" (include "kube-prometheus-stack.fullname" $) "statefulset" | trunc 63 | trimSuffix "-" }}
annotations:
{{ toYaml .Values.grafana.sidecar.dashboards.annotations | indent 4 }}
labels:
{{- if $.Values.grafana.sidecar.dashboards.label }}
{{ $.Values.grafana.sidecar.dashboards.label }}: "1"
{{- end }}
app: {{ template "kube-prometheus-stack.name" $ }}-grafana
{{ include "kube-prometheus-stack.labels" $ | indent 4 }}
data:
statefulset.json: |-
{
"__inputs": [
],
"__requires": [
],
"annotations": {
"list": [
]
},
"editable": false,
"gnetId": null,
"graphTooltip": 0,
"hideControls": false,
"id": null,
"links": [
],
"refresh": "",
"rows": [
{
"collapse": false,
"collapsed": false,
"panels": [
{
"cacheTimeout": null,
"colorBackground": false,
"colorValue": false,
"colors": [
"#299c46",
"rgba(237, 129, 40, 0.89)",
"#d44a3a"
],
"datasource": "$datasource",
"format": "none",
"gauge": {
"maxValue": 100,
"minValue": 0,
"show": false,
"thresholdLabels": false,
"thresholdMarkers": true
},
"gridPos": {
},
"id": 2,
"interval": null,
"links": [
],
"mappingType": 1,
"mappingTypes": [
{
"name": "value to text",
"value": 1
},
{
"name": "range to text",
"value": 2
}
],
"maxDataPoints": 100,
"nullPointMode": "connected",
"nullText": null,
"postfix": "cores",
"postfixFontSize": "50%",
"prefix": "",
"prefixFontSize": "50%",
"rangeMaps": [
{
"from": "null",
"text": "N/A",
"to": "null"
}
],
"span": 4,
"sparkline": {
"fillColor": "rgba(31, 118, 189, 0.18)",
"lineColor": "rgb(31, 120, 193)",
"show": true
},
"tableColumn": "",
"targets": [
{
"expr": "sum(rate(container_cpu_usage_seconds_total{job=\"kubelet\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", container!=\"\", namespace=\"$namespace\", pod=~\"$statefulset.*\"}[3m]))",
"format": "time_series",
"intervalFactor": 2,
"legendFormat": "",
"refId": "A"
}
],
"thresholds": "",
"title": "CPU",
"tooltip": {
"shared": false
},
"type": "singlestat",
"valueFontSize": "80%",
"valueMaps": [
{
"op": "=",
"text": "0",
"value": "null"
}
],
"valueName": "current"
},
{
"cacheTimeout": null,
"colorBackground": false,
"colorValue": false,
"colors": [
"#299c46",
"rgba(237, 129, 40, 0.89)",
"#d44a3a"
],
"datasource": "$datasource",
"format": "none",
"gauge": {
"maxValue": 100,
"minValue": 0,
"show": false,
"thresholdLabels": false,
"thresholdMarkers": true
},
"gridPos": {
},
"id": 3,
"interval": null,
"links": [
],
"mappingType": 1,
"mappingTypes": [
{
"name": "value to text",
"value": 1
},
{
"name": "range to text",
"value": 2
}
],
"maxDataPoints": 100,
"nullPointMode": "connected",
"nullText": null,
"postfix": "GB",
"postfixFontSize": "50%",
"prefix": "",
"prefixFontSize": "50%",
"rangeMaps": [
{
"from": "null",
"text": "N/A",
"to": "null"
}
],
"span": 4,
"sparkline": {
"fillColor": "rgba(31, 118, 189, 0.18)",
"lineColor": "rgb(31, 120, 193)",
"show": true
},
"tableColumn": "",
"targets": [
{
"expr": "sum(container_memory_usage_bytes{job=\"kubelet\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", container!=\"\", namespace=\"$namespace\", pod=~\"$statefulset.*\"}) / 1024^3",
"format": "time_series",
"intervalFactor": 2,
"legendFormat": "",
"refId": "A"
}
],
"thresholds": "",
"title": "Memory",
"tooltip": {
"shared": false
},
"type": "singlestat",
"valueFontSize": "80%",
"valueMaps": [
{
"op": "=",
"text": "0",
"value": "null"
}
],
"valueName": "current"
},
{
"cacheTimeout": null,
"colorBackground": false,
"colorValue": false,
"colors": [
"#299c46",
"rgba(237, 129, 40, 0.89)",
"#d44a3a"
],
"datasource": "$datasource",
"format": "none",
"gauge": {
"maxValue": 100,
"minValue": 0,
"show": false,
"thresholdLabels": false,
"thresholdMarkers": true
},
"gridPos": {
},
"id": 4,
"interval": null,
"links": [
],
"mappingType": 1,
"mappingTypes": [
{
"name": "value to text",
"value": 1
},
{
"name": "range to text",
"value": 2
}
],
"maxDataPoints": 100,
"nullPointMode": "connected",
"nullText": null,
"postfix": "Bps",
"postfixFontSize": "50%",
"prefix": "",
"prefixFontSize": "50%",
"rangeMaps": [
{
"from": "null",
"text": "N/A",
"to": "null"
}
],
"span": 4,
"sparkline": {
"fillColor": "rgba(31, 118, 189, 0.18)",
"lineColor": "rgb(31, 120, 193)",
"show": true
},
"tableColumn": "",
"targets": [
{
"expr": "sum(rate(container_network_transmit_bytes_total{job=\"kubelet\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=\"$namespace\", pod=~\"$statefulset.*\"}[3m])) + sum(rate(container_network_receive_bytes_total{job=\"kubelet\", metrics_path=\"/metrics/cadvisor\", cluster=\"$cluster\", namespace=\"$namespace\",pod=~\"$statefulset.*\"}[3m]))",
"format": "time_series",
"intervalFactor": 2,
"legendFormat": "",
"refId": "A"
}
],
"thresholds": "",
"title": "Network",
"tooltip": {
"shared": false
},
"type": "singlestat",
"valueFontSize": "80%",
"valueMaps": [
{
"op": "=",
"text": "0",
"value": "null"
}
],
"valueName": "current"
}
],
"repeat": null,
"repeatIteration": null,
"repeatRowId": null,
"showTitle": false,
"title": "Dashboard Row",
"titleSize": "h6",
"type": "row"
},
{
"collapse": false,
"collapsed": false,
"height": "100px",
"panels": [
{
"cacheTimeout": null,
"colorBackground": false,
"colorValue": false,
"colors": [
"#299c46",
"rgba(237, 129, 40, 0.89)",
"#d44a3a"
],
"datasource": "$datasource",
"format": "none",
"gauge": {
"maxValue": 100,
"minValue": 0,
"show": false,
"thresholdLabels": false,
"thresholdMarkers": true
},
"gridPos": {
},
"id": 5,
"interval": null,
"links": [
],
"mappingType": 1,
"mappingTypes": [
{
"name": "value to text",
"value": 1
},
{
"name": "range to text",
"value": 2
}
],
"maxDataPoints": 100,
"nullPointMode": "connected",
"nullText": null,
"postfix": "",
"postfixFontSize": "50%",
"prefix": "",
"prefixFontSize": "50%",
"rangeMaps": [
{
"from": "null",
"text": "N/A",
"to": "null"
}
],
"span": 3,
"sparkline": {
"fillColor": "rgba(31, 118, 189, 0.18)",
"full": false,
"lineColor": "rgb(31, 120, 193)",
"show": false
},
"tableColumn": "",
"targets": [
{
"expr": "max(kube_statefulset_replicas{job=\"kube-state-metrics\", cluster=\"$cluster\", namespace=\"$namespace\", statefulset=\"$statefulset\"}) without (instance, pod)",
"format": "time_series",
"intervalFactor": 2,
"legendFormat": "",
"refId": "A"
}
],
"thresholds": "",
"title": "Desired Replicas",
"tooltip": {
"shared": false
},
"type": "singlestat",
"valueFontSize": "80%",
"valueMaps": [
{
"op": "=",
"text": "0",
"value": "null"
}
],
"valueName": "current"
},
{
"cacheTimeout": null,
"colorBackground": false,
"colorValue": false,
"colors": [
"#299c46",
"rgba(237, 129, 40, 0.89)",
"#d44a3a"
],
"datasource": "$datasource",
"format": "none",
"gauge": {
"maxValue": 100,
"minValue": 0,
"show": false,
"thresholdLabels": false,
"thresholdMarkers": true
},
"gridPos": {
},
"id": 6,
"interval": null,
"links": [
],
"mappingType": 1,
"mappingTypes": [
{
"name": "value to text",
"value": 1
},
{
"name": "range to text",
"value": 2
}
],
"maxDataPoints": 100,
"nullPointMode": "connected",
"nullText": null,
"postfix": "",
"postfixFontSize": "50%",
"prefix": "",
"prefixFontSize": "50%",
"rangeMaps": [
{
"from": "null",
"text": "N/A",
"to": "null"
}
],
"span": 3,
"sparkline": {
"fillColor": "rgba(31, 118, 189, 0.18)",
"full": false,
"lineColor": "rgb(31, 120, 193)",
"show": false
},
"tableColumn": "",
"targets": [
{
"expr": "min(kube_statefulset_status_replicas_current{job=\"kube-state-metrics\", cluster=\"$cluster\", namespace=\"$namespace\", statefulset=\"$statefulset\"}) without (instance, pod)",
"format": "time_series",
"intervalFactor": 2,
"legendFormat": "",
"refId": "A"
}
],
"thresholds": "",
"title": "Replicas of current version",
"tooltip": {
"shared": false
},
"type": "singlestat",
"valueFontSize": "80%",
"valueMaps": [
{
"op": "=",
"text": "0",
"value": "null"
}
],
"valueName": "current"
},
{
"cacheTimeout": null,
"colorBackground": false,
"colorValue": false,
"colors": [
"#299c46",
"rgba(237, 129, 40, 0.89)",
"#d44a3a"
],
"datasource": "$datasource",
"format": "none",
"gauge": {
"maxValue": 100,
"minValue": 0,
"show": false,
"thresholdLabels": false,
"thresholdMarkers": true
},
"gridPos": {
},
"id": 7,
"interval": null,
"links": [
],
"mappingType": 1,
"mappingTypes": [
{
"name": "value to text",
"value": 1
},
{
"name": "range to text",
"value": 2
}
],
"maxDataPoints": 100,
"nullPointMode": "connected",
"nullText": null,
"postfix": "",
"postfixFontSize": "50%",
"prefix": "",
"prefixFontSize": "50%",
"rangeMaps": [
{
"from": "null",
"text": "N/A",
"to": "null"
}
],
"span": 3,
"sparkline": {
"fillColor": "rgba(31, 118, 189, 0.18)",
"full": false,
"lineColor": "rgb(31, 120, 193)",
"show": false
},
"tableColumn": "",
"targets": [
{
"expr": "max(kube_statefulset_status_observed_generation{job=\"kube-state-metrics\", cluster=\"$cluster\", namespace=\"$namespace\", statefulset=\"$statefulset\"}) without (instance, pod)",
"format": "time_series",
"intervalFactor": 2,
"legendFormat": "",
"refId": "A"
}
],
"thresholds": "",
"title": "Observed Generation",
"tooltip": {
"shared": false
},
"type": "singlestat",
"valueFontSize": "80%",
"valueMaps": [
{
"op": "=",
"text": "0",
"value": "null"
}
],
"valueName": "current"
},
{
"cacheTimeout": null,
"colorBackground": false,
"colorValue": false,
"colors": [
"#299c46",
"rgba(237, 129, 40, 0.89)",
"#d44a3a"
],
"datasource": "$datasource",
"format": "none",
"gauge": {
"maxValue": 100,
"minValue": 0,
"show": false,
"thresholdLabels": false,
"thresholdMarkers": true
},
"gridPos": {
},
"id": 8,
"interval": null,
"links": [
],
"mappingType": 1,
"mappingTypes": [
{
"name": "value to text",
"value": 1
},
{
"name": "range to text",
"value": 2
}
],
"maxDataPoints": 100,
"nullPointMode": "connected",
"nullText": null,
"postfix": "",
"postfixFontSize": "50%",
"prefix": "",
"prefixFontSize": "50%",
"rangeMaps": [
{
"from": "null",
"text": "N/A",
"to": "null"
}
],
"span": 3,
"sparkline": {
"fillColor": "rgba(31, 118, 189, 0.18)",
"full": false,
"lineColor": "rgb(31, 120, 193)",
"show": false
},
"tableColumn": "",
"targets": [
{
"expr": "max(kube_statefulset_metadata_generation{job=\"kube-state-metrics\", statefulset=\"$statefulset\", cluster=\"$cluster\", namespace=\"$namespace\"}) without (instance, pod)",
"format": "time_series",
"intervalFactor": 2,
"legendFormat": "",
"refId": "A"
}
],
"thresholds": "",
"title": "Metadata Generation",
"tooltip": {
"shared": false
},
"type": "singlestat",
"valueFontSize": "80%",
"valueMaps": [
{
"op": "=",
"text": "0",
"value": "null"
}
],
"valueName": "current"
}
],
"repeat": null,
"repeatIteration": null,
"repeatRowId": null,
"showTitle": false,
"title": "Dashboard Row",
"titleSize": "h6",
"type": "row"
},
{
"collapse": false,
"collapsed": false,
"panels": [
{
"aliasColors": {
},
"bars": false,
"dashLength": 10,
"dashes": false,
"datasource": "$datasource",
"fill": 1,
"fillGradient": 0,
"gridPos": {
},
"id": 9,
"legend": {
"alignAsTable": false,
"avg": false,
"current": false,
"max": false,
"min": false,
"rightSide": false,
"show": true,
"sideWidth": null,
"total": false,
"values": false
},
"lines": true,
"linewidth": 1,
"links": [
],
"nullPointMode": "null",
"percentage": false,
"pointradius": 5,
"points": false,
"renderer": "flot",
"repeat": null,
"seriesOverrides": [
],
"spaceLength": 10,
"stack": false,
"steppedLine": false,
"targets": [
{
"expr": "max(kube_statefulset_replicas{job=\"kube-state-metrics\", statefulset=\"$statefulset\", cluster=\"$cluster\", namespace=\"$namespace\"}) without (instance, pod)",
"format": "time_series",
"intervalFactor": 2,
"legendFormat": "replicas specified",
"refId": "A"
},
{
"expr": "max(kube_statefulset_status_replicas{job=\"kube-state-metrics\", statefulset=\"$statefulset\", cluster=\"$cluster\", namespace=\"$namespace\"}) without (instance, pod)",
"format": "time_series",
"intervalFactor": 2,
"legendFormat": "replicas created",
"refId": "B"
},
{
"expr": "min(kube_statefulset_status_replicas_ready{job=\"kube-state-metrics\", statefulset=\"$statefulset\", cluster=\"$cluster\", namespace=\"$namespace\"}) without (instance, pod)",
"format": "time_series",
"intervalFactor": 2,
"legendFormat": "ready",
"refId": "C"
},
{
"expr": "min(kube_statefulset_status_replicas_current{job=\"kube-state-metrics\", statefulset=\"$statefulset\", cluster=\"$cluster\", namespace=\"$namespace\"}) without (instance, pod)",
"format": "time_series",
"intervalFactor": 2,
"legendFormat": "replicas of current version",
"refId": "D"
},
{
"expr": "min(kube_statefulset_status_replicas_updated{job=\"kube-state-metrics\", statefulset=\"$statefulset\", cluster=\"$cluster\", namespace=\"$namespace\"}) without (instance, pod)",
"format": "time_series",
"intervalFactor": 2,
"legendFormat": "updated",
"refId": "E"
}
],
"thresholds": [
],
"timeFrom": null,
"timeShift": null,
"title": "Replicas",
"tooltip": {
"shared": false,
"sort": 0,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"buckets": null,
"mode": "time",
"name": null,
"show": true,
"values": [
]
},
"yaxes": [
{
"format": "short",
"label": null,
"logBase": 1,
"max": null,
"min": null,
"show": true
},
{
"format": "short",
"label": null,
"logBase": 1,
"max": null,
"min": null,
"show": true
}
]
}
],
"repeat": null,
"repeatIteration": null,
"repeatRowId": null,
"showTitle": false,
"title": "Dashboard Row",
"titleSize": "h6",
"type": "row"
}
],
"schemaVersion": 14,
"style": "dark",
"tags": [
"kubernetes-mixin"
],
"templating": {
"list": [
{
"current": {
"text": "default",
"value": "default"
},
"hide": 0,
"label": null,
"name": "datasource",
"options": [
],
"query": "prometheus",
"refresh": 1,
"regex": "",
"type": "datasource"
},
{
"allValue": null,
"current": {
},
"datasource": "$datasource",
"hide": {{ if .Values.grafana.sidecar.dashboards.multicluster }}0{{ else }}2{{ end }},
"includeAll": false,
"label": "cluster",
"multi": false,
"name": "cluster",
"options": [
],
"query": "label_values(kube_statefulset_metadata_generation, cluster)",
"refresh": 2,
"regex": "",
"sort": 1,
"tagValuesQuery": "",
"tags": [
],
"tagsQuery": "",
"type": "query",
"useTags": false
},
{
"allValue": null,
"current": {
},
"datasource": "$datasource",
"hide": 0,
"includeAll": false,
"label": "Namespace",
"multi": false,
"name": "namespace",
"options": [
],
"query": "label_values(kube_statefulset_metadata_generation{job=\"kube-state-metrics\", cluster=\"$cluster\"}, namespace)",
"refresh": 2,
"regex": "",
"sort": 1,
"tagValuesQuery": "",
"tags": [
],
"tagsQuery": "",
"type": "query",
"useTags": false
},
{
"allValue": null,
"current": {
},
"datasource": "$datasource",
"hide": 0,
"includeAll": false,
"label": "Name",
"multi": false,
"name": "statefulset",
"options": [
],
"query": "label_values(kube_statefulset_metadata_generation{job=\"kube-state-metrics\", cluster=\"$cluster\", namespace=\"$namespace\"}, statefulset)",
"refresh": 2,
"regex": "",
"sort": 1,
"tagValuesQuery": "",
"tags": [
],
"tagsQuery": "",
"type": "query",
"useTags": false
}
]
},
"time": {
"from": "now-1h",
"to": "now"
},
"timepicker": {
"refresh_intervals": [
"5s",
"10s",
"30s",
"1m",
"5m",
"15m",
"30m",
"1h",
"2h",
"1d"
],
"time_options": [
"5m",
"15m",
"1h",
"6h",
"12h",
"24h",
"2d",
"7d",
"30d"
]
},
"timezone": "UTC",
"title": "Kubernetes / StatefulSets",
"uid": "a31c1f46e6f727cb37c0d731a7245005",
"version": 0
}
{{- end }}

View File

@ -71,6 +71,6 @@ spec:
{{- end -}}
{{- if .Values.prometheus.thanosIngress.tls }}
tls:
{{ toYaml .Values.prometheus.thanosIngress.tls | indent 4 }}
{{ tpl (toYaml .Values.prometheus.thanosIngress.tls | indent 4) . }}
{{- end -}}
{{- end -}}

View File

@ -341,6 +341,18 @@ spec:
{{- if .Values.prometheus.prometheusSpec.enforcedSampleLimit }}
enforcedSampleLimit: {{ .Values.prometheus.prometheusSpec.enforcedSampleLimit }}
{{- end }}
{{- if .Values.prometheus.prometheusSpec.enforcedTargetLimit }}
enforcedTargetLimit: {{ .Values.prometheus.prometheusSpec.enforcedTargetLimit }}
{{- end }}
{{- if .Values.prometheus.prometheusSpec.enforcedLabelLimit }}
enforcedLabelLimit: {{ .Values.prometheus.prometheusSpec.enforcedLabelLimit }}
{{- end }}
{{- if .Values.prometheus.prometheusSpec.enforcedLabelNameLengthLimit }}
enforcedLabelNameLengthLimit: {{ .Values.prometheus.prometheusSpec.enforcedLabelNameLengthLimit }}
{{- end }}
{{- if .Values.prometheus.prometheusSpec.enforcedLabelValueLengthLimit}}
enforcedLabelValueLengthLimit: {{ .Values.prometheus.prometheusSpec.enforcedLabelValueLengthLimit }}
{{- end }}
{{- if .Values.prometheus.prometheusSpec.allowOverlappingBlocks }}
allowOverlappingBlocks: {{ .Values.prometheus.prometheusSpec.allowOverlappingBlocks }}
{{- end }}

View File

@ -24,6 +24,12 @@ spec:
{{- if eq .Values.prometheus.thanosService.type "NodePort" }}
nodePort: {{ .Values.prometheus.thanosService.nodePort }}
{{- end }}
- name: {{ .Values.prometheus.thanosService.httpPortName }}
port: {{ .Values.prometheus.thanosService.httpPort }}
targetPort: {{ .Values.prometheus.thanosService.targetHttpPort }}
{{- if eq .Values.prometheus.thanosService.type "NodePort" }}
nodePort: {{ .Values.prometheus.thanosService.httpNodePort }}
{{- end }}
selector:
app.kubernetes.io/name: prometheus
prometheus: {{ template "kube-prometheus-stack.fullname" . }}-prometheus

View File

@ -31,6 +31,12 @@ spec:
{{- if eq .Values.prometheus.thanosServiceExternal.type "NodePort" }}
nodePort: {{ .Values.prometheus.thanosServiceExternal.nodePort }}
{{- end }}
- name: {{ .Values.prometheus.thanosServiceExternal.httpPortName }}
port: {{ .Values.prometheus.thanosServiceExternal.httpPort }}
targetPort: {{ .Values.prometheus.thanosServiceExternal.targetHttpPort }}
{{- if eq .Values.prometheus.thanosServiceExternal.type "NodePort" }}
nodePort: {{ .Values.prometheus.thanosServiceExternal.httpNodePort }}
{{- end }}
selector:
app.kubernetes.io/name: prometheus
prometheus: {{ template "kube-prometheus-stack.fullname" . }}-prometheus

View File

@ -0,0 +1,41 @@
{{- if and .Values.prometheus.thanosService.enabled .Values.prometheus.thanosServiceMonitor.enabled }}
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: {{ template "kube-prometheus-stack.fullname" . }}-thanos-discovery
namespace: {{ template "kube-prometheus-stack.namespace" . }}
labels:
app: {{ template "kube-prometheus-stack.name" . }}-thanos-discovery
{{ include "kube-prometheus-stack.labels" . | indent 4 }}
spec:
selector:
matchLabels:
app: {{ template "kube-prometheus-stack.name" . }}-thanos-discovery
release: {{ $.Release.Name | quote }}
namespaceSelector:
matchNames:
- {{ printf "%s" (include "kube-prometheus-stack.namespace" .) | quote }}
endpoints:
- port: {{ .Values.prometheus.thanosService.httpPortName }}
{{- if .Values.prometheus.thanosServiceMonitor.interval }}
interval: {{ .Values.prometheus.thanosServiceMonitor.interval }}
{{- end }}
{{- if .Values.prometheus.thanosServiceMonitor.scheme }}
scheme: {{ .Values.prometheus.thanosServiceMonitor.scheme }}
{{- end }}
{{- if .Values.prometheus.thanosServiceMonitor.tlsConfig }}
tlsConfig: {{ toYaml .Values.prometheus.thanosServiceMonitor.tlsConfig | nindent 6 }}
{{- end }}
{{- if .Values.prometheus.thanosServiceMonitor.bearerTokenFile }}
bearerTokenFile: {{ .Values.prometheus.thanosServiceMonitor.bearerTokenFile }}
{{- end }}
path: "/metrics"
{{- if .Values.prometheus.thanosServiceMonitor.metricRelabelings }}
metricRelabelings:
{{ tpl (toYaml .Values.prometheus.thanosServiceMonitor.metricRelabelings | indent 6) . }}
{{- end }}
{{- if .Values.prometheus.thanosServiceMonitor.relabelings }}
relabelings:
{{ toYaml .Values.prometheus.thanosServiceMonitor.relabelings | indent 6 }}
{{- end }}
{{- end }}

View File

@ -631,10 +631,15 @@ grafana:
##
forceDeployDashboards: false
## Deploy default dashboards.
## Deploy default dashboards
##
defaultDashboardsEnabled: true
## Timezone for the default dashboards
## Other options are: browser or a specific timezone, i.e. Europe/Luxembourg
##
defaultDashboardsTimezone: utc
adminPassword: prom-operator
ingress:
@ -1247,6 +1252,9 @@ kubeStateMetrics:
## Scrape interval. If not set, the Prometheus default scrape interval is used.
##
interval: ""
## Scrape Timeout. If not set, the Prometheus default scrape timeout is used.
##
scrapeTimeout: ""
## proxyUrl: URL of a proxy that should be used for scraping.
##
proxyUrl: ""
@ -1274,6 +1282,9 @@ kubeStateMetrics:
# replacement: $1
# action: replace
# Keep labels from scraped data, overriding server-side labels
honorLabels: true
# Enable self metrics configuration for Service Monitor
selfMonitor:
enabled: false
@ -1643,18 +1654,50 @@ prometheus:
enabled: false
annotations: {}
labels: {}
portName: grpc
port: 10901
targetPort: "grpc"
clusterIP: "None"
## Service type
##
type: ClusterIP
## Port to expose on each node
## gRPC port config
portName: grpc
port: 10901
targetPort: "grpc"
## HTTP port config (for metrics)
httpPortName: http
httpPort: 10902
targetHttpPort: "http"
## ClusterIP to assign
# Default is to make this a headless service ("None")
clusterIP: "None"
## Port to expose on each node, if service type is NodePort
##
nodePort: 30901
httpNodePort: 30902
# ServiceMonitor to scrape Sidecar metrics
# Needs thanosService to be enabled as well
thanosServiceMonitor:
enabled: false
interval: ""
## scheme: HTTP scheme to use for scraping. Can be used with `tlsConfig` for example if using istio mTLS.
scheme: ""
## tlsConfig: TLS configuration to use when scraping the endpoint. For example if using istio mTLS.
## Of type: https://github.com/coreos/prometheus-operator/blob/master/Documentation/api.md#tlsconfig
tlsConfig: {}
bearerTokenFile:
## Metric relabel configs to apply to samples before ingestion.
metricRelabelings: []
## relabel configs to apply to samples before ingestion.
relabelings: []
# Service for external access to sidecar
# Enabling this creates a service to expose thanos-sidecar outside the cluster.
@ -1662,11 +1705,18 @@ prometheus:
enabled: false
annotations: {}
labels: {}
loadBalancerIP: ""
loadBalancerSourceRanges: []
## gRPC port config
portName: grpc
port: 10901
targetPort: "grpc"
loadBalancerIP: ""
loadBalancerSourceRanges: []
## HTTP port config (for metrics)
httpPortName: http
httpPort: 10902
targetHttpPort: "http"
## Service type
##
@ -1675,6 +1725,7 @@ prometheus:
## Port to expose on each node
##
nodePort: 30901
httpNodePort: 30902
## Configuration for Prometheus service
##
@ -2422,6 +2473,28 @@ prometheus:
## number of samples/series under the desired limit. Note that if SampleLimit is lower that value will be taken instead.
enforcedSampleLimit: false
## EnforcedTargetLimit defines a global limit on the number of scraped targets. This overrides any TargetLimit set
## per ServiceMonitor or/and PodMonitor. It is meant to be used by admins to enforce the TargetLimit to keep the overall
## number of targets under the desired limit. Note that if TargetLimit is lower, that value will be taken instead, except
## if either value is zero, in which case the non-zero value will be used. If both values are zero, no limit is enforced.
enforcedTargetLimit: false
## Per-scrape limit on number of labels that will be accepted for a sample. If more than this number of labels are present
## post metric-relabeling, the entire scrape will be treated as failed. 0 means no limit. Only valid in Prometheus versions
## 2.27.0 and newer.
enforcedLabelLimit: false
## Per-scrape limit on length of labels name that will be accepted for a sample. If a label name is longer than this number
## post metric-relabeling, the entire scrape will be treated as failed. 0 means no limit. Only valid in Prometheus versions
## 2.27.0 and newer.
enforcedLabelNameLengthLimit: false
## Per-scrape limit on length of labels value that will be accepted for a sample. If a label value is longer than this
## number post metric-relabeling, the entire scrape will be treated as failed. 0 means no limit. Only valid in Prometheus
## versions 2.27.0 and newer.
enforcedLabelValueLengthLimit: false
## AllowOverlappingBlocks enables vertical compaction and vertical query merge in Prometheus. This is still experimental
## in Prometheus so it may change in any upcoming release.
allowOverlappingBlocks: false

View File

@ -8,8 +8,8 @@
"subdir": "grafonnet"
}
},
"version": "05fb200ee1a1816fc1b4c522071d5606d8dd71c1",
"sum": "mEoObbqbyVaXrHFEJSM2Nad31tOvadzIevWuyNHHBgI="
"version": "19b27b272abf4263af1365ec485784c49815a332",
"sum": "gF8foHByYcB25jcUOBqP6jxk0OPifQMjPvKY0HaCk6w="
},
{
"source": {
@ -18,7 +18,7 @@
"subdir": "grafana-builder"
}
},
"version": "ff22d1d6698573e7cb76228198edfa2b2f632dcc",
"version": "14bc3cec71f32ba3cc490a47a22004a744b6bb4e",
"sum": "GRf2GvwEU4jhXV+JOonXSZ4wdDv8mnHBPCQ6TUVd+g8="
},
{
@ -28,8 +28,8 @@
"subdir": ""
}
},
"version": "2b27a09a667091cef74776b690ccceaf55995e29",
"sum": "j2jPdrcM3iuaUK+6V9jWn2M3Fapr0KtI8FZ1KQoHIGA="
"version": "ff4641bcd83314c955150bea6b147df9ca335c4a",
"sum": "oUVGwcCbmdH8qz9B+lbRawI9s23GY9HeW7MwYZRbZ/0="
}
],
"legacyImports": false

View File

@ -1,685 +0,0 @@
"groups":
- "name": "kubernetes-apps"
"rules":
- "alert": "KubePodCrashLooping"
"annotations":
"description": "Pod {{ $labels.namespace }}/{{ $labels.pod }} ({{ $labels.container }}) is restarting {{ printf \"%.2f\" $value }} times / 10 minutes."
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubepodcrashlooping"
"summary": "Pod is crash looping."
"expr": |
increase(kube_pod_container_status_restarts_total{job="kube-state-metrics"}[10m]) > 0
and
kube_pod_container_status_waiting{job="kube-state-metrics"} == 1
"for": "15m"
"labels":
"severity": "warning"
- "alert": "KubePodNotReady"
"annotations":
"description": "Pod {{ $labels.namespace }}/{{ $labels.pod }} has been in a non-ready state for longer than 15 minutes."
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubepodnotready"
"summary": "Pod has been in a non-ready state for more than 15 minutes."
"expr": |
sum by (namespace, pod) (
max by(namespace, pod) (
kube_pod_status_phase{job="kube-state-metrics", phase=~"Pending|Unknown"}
) * on(namespace, pod) group_left(owner_kind) topk by(namespace, pod) (
1, max by(namespace, pod, owner_kind) (kube_pod_owner{owner_kind!="Job"})
)
) > 0
"for": "15m"
"labels":
"severity": "warning"
- "alert": "KubeDeploymentGenerationMismatch"
"annotations":
"description": "Deployment generation for {{ $labels.namespace }}/{{ $labels.deployment }} does not match, this indicates that the Deployment has failed but has not been rolled back."
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubedeploymentgenerationmismatch"
"summary": "Deployment generation mismatch due to possible roll-back"
"expr": |
kube_deployment_status_observed_generation{job="kube-state-metrics"}
!=
kube_deployment_metadata_generation{job="kube-state-metrics"}
"for": "15m"
"labels":
"severity": "warning"
- "alert": "KubeDeploymentReplicasMismatch"
"annotations":
"description": "Deployment {{ $labels.namespace }}/{{ $labels.deployment }} has not matched the expected number of replicas for longer than 15 minutes."
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubedeploymentreplicasmismatch"
"summary": "Deployment has not matched the expected number of replicas."
"expr": |
(
kube_deployment_spec_replicas{job="kube-state-metrics"}
>
kube_deployment_status_replicas_available{job="kube-state-metrics"}
) and (
changes(kube_deployment_status_replicas_updated{job="kube-state-metrics"}[10m])
==
0
)
"for": "15m"
"labels":
"severity": "warning"
- "alert": "KubeStatefulSetReplicasMismatch"
"annotations":
"description": "StatefulSet {{ $labels.namespace }}/{{ $labels.statefulset }} has not matched the expected number of replicas for longer than 15 minutes."
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubestatefulsetreplicasmismatch"
"summary": "Deployment has not matched the expected number of replicas."
"expr": |
(
kube_statefulset_status_replicas_ready{job="kube-state-metrics"}
!=
kube_statefulset_status_replicas{job="kube-state-metrics"}
) and (
changes(kube_statefulset_status_replicas_updated{job="kube-state-metrics"}[10m])
==
0
)
"for": "15m"
"labels":
"severity": "warning"
- "alert": "KubeStatefulSetGenerationMismatch"
"annotations":
"description": "StatefulSet generation for {{ $labels.namespace }}/{{ $labels.statefulset }} does not match, this indicates that the StatefulSet has failed but has not been rolled back."
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubestatefulsetgenerationmismatch"
"summary": "StatefulSet generation mismatch due to possible roll-back"
"expr": |
kube_statefulset_status_observed_generation{job="kube-state-metrics"}
!=
kube_statefulset_metadata_generation{job="kube-state-metrics"}
"for": "15m"
"labels":
"severity": "warning"
- "alert": "KubeStatefulSetUpdateNotRolledOut"
"annotations":
"description": "StatefulSet {{ $labels.namespace }}/{{ $labels.statefulset }} update has not been rolled out."
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubestatefulsetupdatenotrolledout"
"summary": "StatefulSet update has not been rolled out."
"expr": |
(
max without (revision) (
kube_statefulset_status_current_revision{job="kube-state-metrics"}
unless
kube_statefulset_status_update_revision{job="kube-state-metrics"}
)
*
(
kube_statefulset_replicas{job="kube-state-metrics"}
!=
kube_statefulset_status_replicas_updated{job="kube-state-metrics"}
)
) and (
changes(kube_statefulset_status_replicas_updated{job="kube-state-metrics"}[5m])
==
0
)
"for": "15m"
"labels":
"severity": "warning"
- "alert": "KubeDaemonSetRolloutStuck"
"annotations":
"description": "DaemonSet {{ $labels.namespace }}/{{ $labels.daemonset }} has not finished or progressed for at least 15 minutes."
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubedaemonsetrolloutstuck"
"summary": "DaemonSet rollout is stuck."
"expr": |
(
(
kube_daemonset_status_current_number_scheduled{job="kube-state-metrics"}
!=
kube_daemonset_status_desired_number_scheduled{job="kube-state-metrics"}
) or (
kube_daemonset_status_number_misscheduled{job="kube-state-metrics"}
!=
0
) or (
kube_daemonset_updated_number_scheduled{job="kube-state-metrics"}
!=
kube_daemonset_status_desired_number_scheduled{job="kube-state-metrics"}
) or (
kube_daemonset_status_number_available{job="kube-state-metrics"}
!=
kube_daemonset_status_desired_number_scheduled{job="kube-state-metrics"}
)
) and (
changes(kube_daemonset_updated_number_scheduled{job="kube-state-metrics"}[5m])
==
0
)
"for": "15m"
"labels":
"severity": "warning"
- "alert": "KubeContainerWaiting"
"annotations":
"description": "Pod {{ $labels.namespace }}/{{ $labels.pod }} container {{ $labels.container}} has been in waiting state for longer than 1 hour."
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubecontainerwaiting"
"summary": "Pod container waiting longer than 1 hour"
"expr": |
sum by (namespace, pod, container) (kube_pod_container_status_waiting_reason{job="kube-state-metrics"}) > 0
"for": "1h"
"labels":
"severity": "warning"
- "alert": "KubeDaemonSetNotScheduled"
"annotations":
"description": "{{ $value }} Pods of DaemonSet {{ $labels.namespace }}/{{ $labels.daemonset }} are not scheduled."
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubedaemonsetnotscheduled"
"summary": "DaemonSet pods are not scheduled."
"expr": |
kube_daemonset_status_desired_number_scheduled{job="kube-state-metrics"}
-
kube_daemonset_status_current_number_scheduled{job="kube-state-metrics"} > 0
"for": "10m"
"labels":
"severity": "warning"
- "alert": "KubeDaemonSetMisScheduled"
"annotations":
"description": "{{ $value }} Pods of DaemonSet {{ $labels.namespace }}/{{ $labels.daemonset }} are running where they are not supposed to run."
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubedaemonsetmisscheduled"
"summary": "DaemonSet pods are misscheduled."
"expr": |
kube_daemonset_status_number_misscheduled{job="kube-state-metrics"} > 0
"for": "15m"
"labels":
"severity": "warning"
- "alert": "KubeJobCompletion"
"annotations":
"description": "Job {{ $labels.namespace }}/{{ $labels.job_name }} is taking more than 12 hours to complete."
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubejobcompletion"
"summary": "Job did not complete in time"
"expr": |
kube_job_spec_completions{job="kube-state-metrics"} - kube_job_status_succeeded{job="kube-state-metrics"} > 0
"for": "12h"
"labels":
"severity": "warning"
- "alert": "KubeJobFailed"
"annotations":
"description": "Job {{ $labels.namespace }}/{{ $labels.job_name }} failed to complete. Removing failed job after investigation should clear this alert."
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubejobfailed"
"summary": "Job failed to complete."
"expr": |
kube_job_failed{job="kube-state-metrics"} > 0
"for": "15m"
"labels":
"severity": "warning"
- "alert": "KubeHpaReplicasMismatch"
"annotations":
"description": "HPA {{ $labels.namespace }}/{{ $labels.horizontalpodautoscaler }} has not matched the desired number of replicas for longer than 15 minutes."
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubehpareplicasmismatch"
"summary": "HPA has not matched descired number of replicas."
"expr": |
(kube_horizontalpodautoscaler_status_desired_replicas{job="kube-state-metrics"}
!=
kube_horizontalpodautoscaler_status_current_replicas{job="kube-state-metrics"})
and
(kube_horizontalpodautoscaler_status_current_replicas{job="kube-state-metrics"}
>
kube_horizontalpodautoscaler_spec_min_replicas{job="kube-state-metrics"})
and
(kube_horizontalpodautoscaler_status_current_replicas{job="kube-state-metrics"}
<
kube_horizontalpodautoscaler_spec_max_replicas{job="kube-state-metrics"})
and
changes(kube_horizontalpodautoscaler_status_current_replicas{job="kube-state-metrics"}[15m]) == 0
"for": "15m"
"labels":
"severity": "warning"
- "alert": "KubeHpaMaxedOut"
"annotations":
"description": "HPA {{ $labels.namespace }}/{{ $labels.horizontalpodautoscaler }} has been running at max replicas for longer than 15 minutes."
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubehpamaxedout"
"summary": "HPA is running at max replicas"
"expr": |
kube_horizontalpodautoscaler_status_current_replicas{job="kube-state-metrics"}
==
kube_horizontalpodautoscaler_spec_max_replicas{job="kube-state-metrics"}
"for": "15m"
"labels":
"severity": "warning"
- "name": "kubernetes-resources"
"rules":
- "alert": "KubeCPUOvercommit"
"annotations":
"description": "Cluster has overcommitted CPU resource requests for Pods by {{ $value }} CPU shares and cannot tolerate node failure."
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubecpuovercommit"
"summary": "Cluster has overcommitted CPU resource requests."
"expr": |
sum(namespace_cpu:kube_pod_container_resource_requests:sum{}) - (sum(kube_node_status_allocatable{resource="cpu"}) - max(kube_node_status_allocatable{resource="cpu"})) > 0
and
(sum(kube_node_status_allocatable{resource="cpu"}) - max(kube_node_status_allocatable{resource="cpu"})) > 0
"for": "10m"
"labels":
"severity": "warning"
- "alert": "KubeMemoryOvercommit"
"annotations":
"description": "Cluster has overcommitted memory resource requests for Pods by {{ $value }} bytes and cannot tolerate node failure."
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubememoryovercommit"
"summary": "Cluster has overcommitted memory resource requests."
"expr": |
sum(namespace_memory:kube_pod_container_resource_requests:sum{}) - (sum(kube_node_status_allocatable{resource="memory"}) - max(kube_node_status_allocatable{resource="memory"})) > 0
and
(sum(kube_node_status_allocatable{resource="memory"}) - max(kube_node_status_allocatable{resource="memory"})) > 0
"for": "10m"
"labels":
"severity": "warning"
- "alert": "KubeCPUQuotaOvercommit"
"annotations":
"description": "Cluster has overcommitted CPU resource requests for Namespaces."
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubecpuquotaovercommit"
"summary": "Cluster has overcommitted CPU resource requests."
"expr": |
sum(kube_resourcequota{job="kube-state-metrics", type="hard", resource="cpu"})
/
sum(kube_node_status_allocatable{resource="cpu"})
> 1.5
"for": "5m"
"labels":
"severity": "warning"
- "alert": "KubeMemoryQuotaOvercommit"
"annotations":
"description": "Cluster has overcommitted memory resource requests for Namespaces."
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubememoryquotaovercommit"
"summary": "Cluster has overcommitted memory resource requests."
"expr": |
sum(kube_resourcequota{job="kube-state-metrics", type="hard", resource="memory"})
/
sum(kube_node_status_allocatable{resource="memory",job="kube-state-metrics"})
> 1.5
"for": "5m"
"labels":
"severity": "warning"
- "alert": "KubeQuotaAlmostFull"
"annotations":
"description": "Namespace {{ $labels.namespace }} is using {{ $value | humanizePercentage }} of its {{ $labels.resource }} quota."
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubequotaalmostfull"
"summary": "Namespace quota is going to be full."
"expr": |
kube_resourcequota{job="kube-state-metrics", type="used"}
/ ignoring(instance, job, type)
(kube_resourcequota{job="kube-state-metrics", type="hard"} > 0)
> 0.9 < 1
"for": "15m"
"labels":
"severity": "info"
- "alert": "KubeQuotaFullyUsed"
"annotations":
"description": "Namespace {{ $labels.namespace }} is using {{ $value | humanizePercentage }} of its {{ $labels.resource }} quota."
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubequotafullyused"
"summary": "Namespace quota is fully used."
"expr": |
kube_resourcequota{job="kube-state-metrics", type="used"}
/ ignoring(instance, job, type)
(kube_resourcequota{job="kube-state-metrics", type="hard"} > 0)
== 1
"for": "15m"
"labels":
"severity": "info"
- "alert": "KubeQuotaExceeded"
"annotations":
"description": "Namespace {{ $labels.namespace }} is using {{ $value | humanizePercentage }} of its {{ $labels.resource }} quota."
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubequotaexceeded"
"summary": "Namespace quota has exceeded the limits."
"expr": |
kube_resourcequota{job="kube-state-metrics", type="used"}
/ ignoring(instance, job, type)
(kube_resourcequota{job="kube-state-metrics", type="hard"} > 0)
> 1
"for": "15m"
"labels":
"severity": "warning"
- "alert": "CPUThrottlingHigh"
"annotations":
"description": "{{ $value | humanizePercentage }} throttling of CPU in namespace {{ $labels.namespace }} for container {{ $labels.container }} in pod {{ $labels.pod }}."
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-cputhrottlinghigh"
"summary": "Processes experience elevated CPU throttling."
"expr": |
sum(increase(container_cpu_cfs_throttled_periods_total{container!="", }[5m])) by (container, pod, namespace)
/
sum(increase(container_cpu_cfs_periods_total{}[5m])) by (container, pod, namespace)
> ( 25 / 100 )
"for": "15m"
"labels":
"severity": "info"
- "name": "kubernetes-storage"
"rules":
- "alert": "KubePersistentVolumeFillingUp"
"annotations":
"description": "The PersistentVolume claimed by {{ $labels.persistentvolumeclaim }} in Namespace {{ $labels.namespace }} is only {{ $value | humanizePercentage }} free."
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubepersistentvolumefillingup"
"summary": "PersistentVolume is filling up."
"expr": |
(
kubelet_volume_stats_available_bytes{job="kubelet"}
/
kubelet_volume_stats_capacity_bytes{job="kubelet"}
) < 0.03
and
kubelet_volume_stats_used_bytes{job="kubelet"} > 0
"for": "1m"
"labels":
"severity": "critical"
- "alert": "KubePersistentVolumeFillingUp"
"annotations":
"description": "Based on recent sampling, the PersistentVolume claimed by {{ $labels.persistentvolumeclaim }} in Namespace {{ $labels.namespace }} is expected to fill up within four days. Currently {{ $value | humanizePercentage }} is available."
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubepersistentvolumefillingup"
"summary": "PersistentVolume is filling up."
"expr": |
(
kubelet_volume_stats_available_bytes{job="kubelet"}
/
kubelet_volume_stats_capacity_bytes{job="kubelet"}
) < 0.15
and
kubelet_volume_stats_used_bytes{job="kubelet"} > 0
and
predict_linear(kubelet_volume_stats_available_bytes{job="kubelet"}[6h], 4 * 24 * 3600) < 0
"for": "1h"
"labels":
"severity": "warning"
- "alert": "KubePersistentVolumeErrors"
"annotations":
"description": "The persistent volume {{ $labels.persistentvolume }} has status {{ $labels.phase }}."
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubepersistentvolumeerrors"
"summary": "PersistentVolume is having issues with provisioning."
"expr": |
kube_persistentvolume_status_phase{phase=~"Failed|Pending",job="kube-state-metrics"} > 0
"for": "5m"
"labels":
"severity": "critical"
- "name": "kubernetes-system"
"rules":
- "alert": "KubeVersionMismatch"
"annotations":
"description": "There are {{ $value }} different semantic versions of Kubernetes components running."
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubeversionmismatch"
"summary": "Different semantic versions of Kubernetes components running."
"expr": |
count(count by (git_version) (label_replace(kubernetes_build_info{job!~"kube-dns|coredns"},"git_version","$1","git_version","(v[0-9]*.[0-9]*).*"))) > 1
"for": "15m"
"labels":
"severity": "warning"
- "alert": "KubeClientErrors"
"annotations":
"description": "Kubernetes API server client '{{ $labels.job }}/{{ $labels.instance }}' is experiencing {{ $value | humanizePercentage }} errors.'"
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubeclienterrors"
"summary": "Kubernetes API server client is experiencing errors."
"expr": |
(sum(rate(rest_client_requests_total{code=~"5.."}[5m])) by (instance, job, namespace)
/
sum(rate(rest_client_requests_total[5m])) by (instance, job, namespace))
> 0.01
"for": "15m"
"labels":
"severity": "warning"
- "name": "kube-apiserver-slos"
"rules":
- "alert": "KubeAPIErrorBudgetBurn"
"annotations":
"description": "The API server is burning too much error budget."
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubeapierrorbudgetburn"
"summary": "The API server is burning too much error budget."
"expr": |
sum(apiserver_request:burnrate1h) > (14.40 * 0.01000)
and
sum(apiserver_request:burnrate5m) > (14.40 * 0.01000)
"for": "2m"
"labels":
"long": "1h"
"severity": "critical"
"short": "5m"
- "alert": "KubeAPIErrorBudgetBurn"
"annotations":
"description": "The API server is burning too much error budget."
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubeapierrorbudgetburn"
"summary": "The API server is burning too much error budget."
"expr": |
sum(apiserver_request:burnrate6h) > (6.00 * 0.01000)
and
sum(apiserver_request:burnrate30m) > (6.00 * 0.01000)
"for": "15m"
"labels":
"long": "6h"
"severity": "critical"
"short": "30m"
- "alert": "KubeAPIErrorBudgetBurn"
"annotations":
"description": "The API server is burning too much error budget."
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubeapierrorbudgetburn"
"summary": "The API server is burning too much error budget."
"expr": |
sum(apiserver_request:burnrate1d) > (3.00 * 0.01000)
and
sum(apiserver_request:burnrate2h) > (3.00 * 0.01000)
"for": "1h"
"labels":
"long": "1d"
"severity": "warning"
"short": "2h"
- "alert": "KubeAPIErrorBudgetBurn"
"annotations":
"description": "The API server is burning too much error budget."
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubeapierrorbudgetburn"
"summary": "The API server is burning too much error budget."
"expr": |
sum(apiserver_request:burnrate3d) > (1.00 * 0.01000)
and
sum(apiserver_request:burnrate6h) > (1.00 * 0.01000)
"for": "3h"
"labels":
"long": "3d"
"severity": "warning"
"short": "6h"
- "name": "kubernetes-system-apiserver"
"rules":
- "alert": "KubeClientCertificateExpiration"
"annotations":
"description": "A client certificate used to authenticate to the apiserver is expiring in less than 7.0 days."
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubeclientcertificateexpiration"
"summary": "Client certificate is about to expire."
"expr": |
apiserver_client_certificate_expiration_seconds_count{job="kube-apiserver"} > 0 and on(job) histogram_quantile(0.01, sum by (job, le) (rate(apiserver_client_certificate_expiration_seconds_bucket{job="kube-apiserver"}[5m]))) < 604800
"labels":
"severity": "warning"
- "alert": "KubeClientCertificateExpiration"
"annotations":
"description": "A client certificate used to authenticate to the apiserver is expiring in less than 24.0 hours."
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubeclientcertificateexpiration"
"summary": "Client certificate is about to expire."
"expr": |
apiserver_client_certificate_expiration_seconds_count{job="kube-apiserver"} > 0 and on(job) histogram_quantile(0.01, sum by (job, le) (rate(apiserver_client_certificate_expiration_seconds_bucket{job="kube-apiserver"}[5m]))) < 86400
"labels":
"severity": "critical"
- "alert": "AggregatedAPIErrors"
"annotations":
"description": "An aggregated API {{ $labels.name }}/{{ $labels.namespace }} has reported errors. It has appeared unavailable {{ $value | humanize }} times averaged over the past 10m."
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-aggregatedapierrors"
"summary": "An aggregated API has reported errors."
"expr": |
sum by(name, namespace)(increase(aggregator_unavailable_apiservice_total[10m])) > 4
"labels":
"severity": "warning"
- "alert": "AggregatedAPIDown"
"annotations":
"description": "An aggregated API {{ $labels.name }}/{{ $labels.namespace }} has been only {{ $value | humanize }}% available over the last 10m."
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-aggregatedapidown"
"summary": "An aggregated API is down."
"expr": |
(1 - max by(name, namespace)(avg_over_time(aggregator_unavailable_apiservice[10m]))) * 100 < 85
"for": "5m"
"labels":
"severity": "warning"
- "alert": "KubeAPIDown"
"annotations":
"description": "KubeAPI has disappeared from Prometheus target discovery."
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubeapidown"
"summary": "Target disappeared from Prometheus target discovery."
"expr": |
absent(up{job="kube-apiserver"} == 1)
"for": "15m"
"labels":
"severity": "critical"
- "alert": "KubeAPITerminatedRequests"
"annotations":
"description": "The apiserver has terminated {{ $value | humanizePercentage }} of its incoming requests."
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubeapiterminatedrequests"
"summary": "The apiserver has terminated {{ $value | humanizePercentage }} of its incoming requests."
"expr": |
sum(rate(apiserver_request_terminations_total{job="kube-apiserver"}[10m])) / ( sum(rate(apiserver_request_total{job="kube-apiserver"}[10m])) + sum(rate(apiserver_request_terminations_total{job="kube-apiserver"}[10m])) ) > 0.20
"for": "5m"
"labels":
"severity": "warning"
- "name": "kubernetes-system-kubelet"
"rules":
- "alert": "KubeNodeNotReady"
"annotations":
"description": "{{ $labels.node }} has been unready for more than 15 minutes."
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubenodenotready"
"summary": "Node is not ready."
"expr": |
kube_node_status_condition{job="kube-state-metrics",condition="Ready",status="true"} == 0
"for": "15m"
"labels":
"severity": "warning"
- "alert": "KubeNodeUnreachable"
"annotations":
"description": "{{ $labels.node }} is unreachable and some workloads may be rescheduled."
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubenodeunreachable"
"summary": "Node is unreachable."
"expr": |
(kube_node_spec_taint{job="kube-state-metrics",key="node.kubernetes.io/unreachable",effect="NoSchedule"} unless ignoring(key,value) kube_node_spec_taint{job="kube-state-metrics",key=~"ToBeDeletedByClusterAutoscaler|cloud.google.com/impending-node-termination|aws-node-termination-handler/spot-itn"}) == 1
"for": "15m"
"labels":
"severity": "warning"
- "alert": "KubeletTooManyPods"
"annotations":
"description": "Kubelet '{{ $labels.node }}' is running at {{ $value | humanizePercentage }} of its Pod capacity."
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubelettoomanypods"
"summary": "Kubelet is running at capacity."
"expr": |
count by(node) (
(kube_pod_status_phase{job="kube-state-metrics",phase="Running"} == 1) * on(instance,pod,namespace,cluster) group_left(node) topk by(instance,pod,namespace,cluster) (1, kube_pod_info{job="kube-state-metrics"})
)
/
max by(node) (
kube_node_status_capacity{job="kube-state-metrics",resource="pods"} != 1
) > 0.95
"for": "15m"
"labels":
"severity": "info"
- "alert": "KubeNodeReadinessFlapping"
"annotations":
"description": "The readiness status of node {{ $labels.node }} has changed {{ $value }} times in the last 15 minutes."
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubenodereadinessflapping"
"summary": "Node readiness status is flapping."
"expr": |
sum(changes(kube_node_status_condition{status="true",condition="Ready"}[15m])) by (node) > 2
"for": "15m"
"labels":
"severity": "warning"
- "alert": "KubeletPlegDurationHigh"
"annotations":
"description": "The Kubelet Pod Lifecycle Event Generator has a 99th percentile duration of {{ $value }} seconds on node {{ $labels.node }}."
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubeletplegdurationhigh"
"summary": "Kubelet Pod Lifecycle Event Generator is taking too long to relist."
"expr": |
node_quantile:kubelet_pleg_relist_duration_seconds:histogram_quantile{quantile="0.99"} >= 10
"for": "5m"
"labels":
"severity": "warning"
- "alert": "KubeletPodStartUpLatencyHigh"
"annotations":
"description": "Kubelet Pod startup 99th percentile latency is {{ $value }} seconds on node {{ $labels.node }}."
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubeletpodstartuplatencyhigh"
"summary": "Kubelet Pod startup latency is too high."
"expr": |
histogram_quantile(0.99, sum(rate(kubelet_pod_worker_duration_seconds_bucket{job="kubelet"}[5m])) by (instance, le)) * on(instance) group_left(node) kubelet_node_name{job="kubelet"} > 60
"for": "15m"
"labels":
"severity": "warning"
- "alert": "KubeletClientCertificateExpiration"
"annotations":
"description": "Client certificate for Kubelet on node {{ $labels.node }} expires in {{ $value | humanizeDuration }}."
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubeletclientcertificateexpiration"
"summary": "Kubelet client certificate is about to expire."
"expr": |
kubelet_certificate_manager_client_ttl_seconds < 604800
"labels":
"severity": "warning"
- "alert": "KubeletClientCertificateExpiration"
"annotations":
"description": "Client certificate for Kubelet on node {{ $labels.node }} expires in {{ $value | humanizeDuration }}."
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubeletclientcertificateexpiration"
"summary": "Kubelet client certificate is about to expire."
"expr": |
kubelet_certificate_manager_client_ttl_seconds < 86400
"labels":
"severity": "critical"
- "alert": "KubeletServerCertificateExpiration"
"annotations":
"description": "Server certificate for Kubelet on node {{ $labels.node }} expires in {{ $value | humanizeDuration }}."
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubeletservercertificateexpiration"
"summary": "Kubelet server certificate is about to expire."
"expr": |
kubelet_certificate_manager_server_ttl_seconds < 604800
"labels":
"severity": "warning"
- "alert": "KubeletServerCertificateExpiration"
"annotations":
"description": "Server certificate for Kubelet on node {{ $labels.node }} expires in {{ $value | humanizeDuration }}."
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubeletservercertificateexpiration"
"summary": "Kubelet server certificate is about to expire."
"expr": |
kubelet_certificate_manager_server_ttl_seconds < 86400
"labels":
"severity": "critical"
- "alert": "KubeletClientCertificateRenewalErrors"
"annotations":
"description": "Kubelet on node {{ $labels.node }} has failed to renew its client certificate ({{ $value | humanize }} errors in the last 5 minutes)."
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubeletclientcertificaterenewalerrors"
"summary": "Kubelet has failed to renew its client certificate."
"expr": |
increase(kubelet_certificate_manager_client_expiration_renew_errors[5m]) > 0
"for": "15m"
"labels":
"severity": "warning"
- "alert": "KubeletServerCertificateRenewalErrors"
"annotations":
"description": "Kubelet on node {{ $labels.node }} has failed to renew its server certificate ({{ $value | humanize }} errors in the last 5 minutes)."
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubeletservercertificaterenewalerrors"
"summary": "Kubelet has failed to renew its server certificate."
"expr": |
increase(kubelet_server_expiration_renew_errors[5m]) > 0
"for": "15m"
"labels":
"severity": "warning"
- "alert": "KubeletDown"
"annotations":
"description": "Kubelet has disappeared from Prometheus target discovery."
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubeletdown"
"summary": "Target disappeared from Prometheus target discovery."
"expr": |
absent(up{job="kubelet"} == 1)
"for": "15m"
"labels":
"severity": "critical"
- "name": "kubernetes-system-scheduler"
"rules":
- "alert": "KubeSchedulerDown"
"annotations":
"description": "KubeScheduler has disappeared from Prometheus target discovery."
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubeschedulerdown"
"summary": "Target disappeared from Prometheus target discovery."
"expr": |
absent(up{job="kube-scheduler"} == 1)
"for": "15m"
"labels":
"severity": "critical"
- "name": "kubernetes-system-controller-manager"
"rules":
- "alert": "KubeControllerManagerDown"
"annotations":
"description": "KubeControllerManager has disappeared from Prometheus target discovery."
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubecontrollermanagerdown"
"summary": "Target disappeared from Prometheus target discovery."
"expr": |
absent(up{job="kube-controller-manager"} == 1)
"for": "15m"
"labels":
"severity": "critical"

View File

@ -616,7 +616,7 @@
"link": true,
"linkTargetBlank": false,
"linkTooltip": "Drill down to pods",
"linkUrl": "./d/85a562078cdf77779eaa1add43ccec1e/k8s-resources-namespace?var-datasource=$datasource&var-cluster=$cluster&var-namespace=$__cell_1",
"linkUrl": "/d/85a562078cdf77779eaa1add43ccec1e/k8s-resources-namespace?var-datasource=$datasource&var-cluster=$cluster&var-namespace=$__cell_1",
"pattern": "Value #A",
"thresholds": [ ],
"type": "number",
@ -631,7 +631,7 @@
"link": true,
"linkTargetBlank": false,
"linkTooltip": "Drill down to workloads",
"linkUrl": "./d/a87fb0d919ec0ea5f6543124e16c42a5/k8s-resources-workloads-namespace?var-datasource=$datasource&var-cluster=$cluster&var-namespace=$__cell_1",
"linkUrl": "/d/a87fb0d919ec0ea5f6543124e16c42a5/k8s-resources-workloads-namespace?var-datasource=$datasource&var-cluster=$cluster&var-namespace=$__cell_1",
"pattern": "Value #B",
"thresholds": [ ],
"type": "number",
@ -721,7 +721,7 @@
"link": true,
"linkTargetBlank": false,
"linkTooltip": "Drill down to pods",
"linkUrl": "./d/85a562078cdf77779eaa1add43ccec1e/k8s-resources-namespace?var-datasource=$datasource&var-cluster=$cluster&var-namespace=$__cell",
"linkUrl": "/d/85a562078cdf77779eaa1add43ccec1e/k8s-resources-namespace?var-datasource=$datasource&var-cluster=$cluster&var-namespace=$__cell",
"pattern": "namespace",
"thresholds": [ ],
"type": "number",
@ -987,7 +987,7 @@
"link": true,
"linkTargetBlank": false,
"linkTooltip": "Drill down to pods",
"linkUrl": "./d/85a562078cdf77779eaa1add43ccec1e/k8s-resources-namespace?var-datasource=$datasource&var-cluster=$cluster&var-namespace=$__cell_1",
"linkUrl": "/d/85a562078cdf77779eaa1add43ccec1e/k8s-resources-namespace?var-datasource=$datasource&var-cluster=$cluster&var-namespace=$__cell_1",
"pattern": "Value #A",
"thresholds": [ ],
"type": "number",
@ -1002,7 +1002,7 @@
"link": true,
"linkTargetBlank": false,
"linkTooltip": "Drill down to workloads",
"linkUrl": "./d/a87fb0d919ec0ea5f6543124e16c42a5/k8s-resources-workloads-namespace?var-datasource=$datasource&var-cluster=$cluster&var-namespace=$__cell_1",
"linkUrl": "/d/a87fb0d919ec0ea5f6543124e16c42a5/k8s-resources-workloads-namespace?var-datasource=$datasource&var-cluster=$cluster&var-namespace=$__cell_1",
"pattern": "Value #B",
"thresholds": [ ],
"type": "number",
@ -1092,7 +1092,7 @@
"link": true,
"linkTargetBlank": false,
"linkTooltip": "Drill down to pods",
"linkUrl": "./d/85a562078cdf77779eaa1add43ccec1e/k8s-resources-namespace?var-datasource=$datasource&var-cluster=$cluster&var-namespace=$__cell",
"linkUrl": "/d/85a562078cdf77779eaa1add43ccec1e/k8s-resources-namespace?var-datasource=$datasource&var-cluster=$cluster&var-namespace=$__cell",
"pattern": "namespace",
"thresholds": [ ],
"type": "number",
@ -1361,7 +1361,7 @@
"link": true,
"linkTargetBlank": false,
"linkTooltip": "Drill down to pods",
"linkUrl": "./d/85a562078cdf77779eaa1add43ccec1e/k8s-resources-namespace?var-datasource=$datasource&var-cluster=$cluster&var-namespace=$__cell",
"linkUrl": "/d/85a562078cdf77779eaa1add43ccec1e/k8s-resources-namespace?var-datasource=$datasource&var-cluster=$cluster&var-namespace=$__cell",
"pattern": "namespace",
"thresholds": [ ],
"type": "number",
@ -2445,7 +2445,7 @@
"link": true,
"linkTargetBlank": false,
"linkTooltip": "Drill down to pods",
"linkUrl": "./d/85a562078cdf77779eaa1add43ccec1e/k8s-resources-namespace?var-datasource=$datasource&var-cluster=$cluster&var-namespace=$__cell",
"linkUrl": "/d/85a562078cdf77779eaa1add43ccec1e/k8s-resources-namespace?var-datasource=$datasource&var-cluster=$cluster&var-namespace=$__cell",
"pattern": "namespace",
"thresholds": [ ],
"type": "number",

View File

@ -577,7 +577,7 @@
"link": true,
"linkTargetBlank": false,
"linkTooltip": "Drill down",
"linkUrl": "./d/6581e46e4e5c7ba40a07646395ef7b23/k8s-resources-pod?var-datasource=$datasource&var-cluster=$cluster&var-namespace=$namespace&var-pod=$__cell",
"linkUrl": "/d/6581e46e4e5c7ba40a07646395ef7b23/k8s-resources-pod?var-datasource=$datasource&var-cluster=$cluster&var-namespace=$namespace&var-pod=$__cell",
"pattern": "pod",
"thresholds": [ ],
"type": "number",
@ -984,7 +984,7 @@
"link": true,
"linkTargetBlank": false,
"linkTooltip": "Drill down",
"linkUrl": "./d/6581e46e4e5c7ba40a07646395ef7b23/k8s-resources-pod?var-datasource=$datasource&var-cluster=$cluster&var-namespace=$namespace&var-pod=$__cell",
"linkUrl": "/d/6581e46e4e5c7ba40a07646395ef7b23/k8s-resources-pod?var-datasource=$datasource&var-cluster=$cluster&var-namespace=$namespace&var-pod=$__cell",
"pattern": "pod",
"thresholds": [ ],
"type": "number",
@ -1262,7 +1262,7 @@
"link": true,
"linkTargetBlank": false,
"linkTooltip": "Drill down to pods",
"linkUrl": "./d/6581e46e4e5c7ba40a07646395ef7b23/k8s-resources-pod?var-datasource=$datasource&var-cluster=$cluster&var-namespace=$namespace&var-pod=$__cell",
"linkUrl": "/d/6581e46e4e5c7ba40a07646395ef7b23/k8s-resources-pod?var-datasource=$datasource&var-cluster=$cluster&var-namespace=$namespace&var-pod=$__cell",
"pattern": "pod",
"thresholds": [ ],
"type": "number",
@ -2182,7 +2182,7 @@
"link": true,
"linkTargetBlank": false,
"linkTooltip": "Drill down to pods",
"linkUrl": "./d/6581e46e4e5c7ba40a07646395ef7b23/k8s-resources-pod?var-datasource=$datasource&var-cluster=$cluster&var-namespace=$namespace&var-pod=$__cell",
"linkUrl": "/d/6581e46e4e5c7ba40a07646395ef7b23/k8s-resources-pod?var-datasource=$datasource&var-cluster=$cluster&var-namespace=$namespace&var-pod=$__cell",
"pattern": "pod",
"thresholds": [ ],
"type": "number",

View File

@ -222,7 +222,7 @@
"link": true,
"linkTargetBlank": false,
"linkTooltip": "Drill down",
"linkUrl": "./d/6581e46e4e5c7ba40a07646395ef7b23/k8s-resources-pod?var-datasource=$datasource&var-cluster=$cluster&var-namespace=$namespace&var-pod=$__cell",
"linkUrl": "/d/6581e46e4e5c7ba40a07646395ef7b23/k8s-resources-pod?var-datasource=$datasource&var-cluster=$cluster&var-namespace=$namespace&var-pod=$__cell",
"pattern": "pod",
"thresholds": [ ],
"type": "number",
@ -545,7 +545,7 @@
"link": true,
"linkTargetBlank": false,
"linkTooltip": "Drill down",
"linkUrl": "./d/6581e46e4e5c7ba40a07646395ef7b23/k8s-resources-pod?var-datasource=$datasource&var-cluster=$cluster&var-namespace=$namespace&var-pod=$__cell",
"linkUrl": "/d/6581e46e4e5c7ba40a07646395ef7b23/k8s-resources-pod?var-datasource=$datasource&var-cluster=$cluster&var-namespace=$namespace&var-pod=$__cell",
"pattern": "pod",
"thresholds": [ ],
"type": "number",
@ -796,7 +796,7 @@
"link": true,
"linkTargetBlank": false,
"linkTooltip": "Drill down",
"linkUrl": "./d/6581e46e4e5c7ba40a07646395ef7b23/k8s-resources-pod?var-datasource=$datasource&var-cluster=$cluster&var-namespace=$namespace&var-pod=$__cell",
"linkUrl": "/d/6581e46e4e5c7ba40a07646395ef7b23/k8s-resources-pod?var-datasource=$datasource&var-cluster=$cluster&var-namespace=$namespace&var-pod=$__cell",
"pattern": "pod",
"thresholds": [ ],
"type": "number",

View File

@ -276,7 +276,7 @@
"link": true,
"linkTargetBlank": false,
"linkTooltip": "Drill down",
"linkUrl": "./d/a164a7f0339f99e89cea5cb47e9be617/k8s-resources-workload?var-datasource=$datasource&var-cluster=$cluster&var-namespace=$namespace&var-workload=$__cell&var-type=$__cell_2",
"linkUrl": "/d/a164a7f0339f99e89cea5cb47e9be617/k8s-resources-workload?var-datasource=$datasource&var-cluster=$cluster&var-namespace=$namespace&var-workload=$__cell&var-type=$__cell_2",
"pattern": "workload",
"thresholds": [ ],
"type": "number",
@ -677,7 +677,7 @@
"link": true,
"linkTargetBlank": false,
"linkTooltip": "Drill down",
"linkUrl": "./d/a164a7f0339f99e89cea5cb47e9be617/k8s-resources-workload?var-datasource=$datasource&var-cluster=$cluster&var-namespace=$namespace&var-workload=$__cell&var-type=$__cell_2",
"linkUrl": "/d/a164a7f0339f99e89cea5cb47e9be617/k8s-resources-workload?var-datasource=$datasource&var-cluster=$cluster&var-namespace=$namespace&var-workload=$__cell&var-type=$__cell_2",
"pattern": "workload",
"thresholds": [ ],
"type": "number",
@ -952,7 +952,7 @@
"link": true,
"linkTargetBlank": false,
"linkTooltip": "Drill down to pods",
"linkUrl": "./d/a164a7f0339f99e89cea5cb47e9be617/k8s-resources-workload?var-datasource=$datasource&var-cluster=$cluster&var-namespace=$namespace&var-workload=$__cell&var-type=$type",
"linkUrl": "/d/a164a7f0339f99e89cea5cb47e9be617/k8s-resources-workload?var-datasource=$datasource&var-cluster=$cluster&var-namespace=$namespace&var-workload=$__cell&var-type=$type",
"pattern": "workload",
"thresholds": [ ],
"type": "number",

View File

@ -43,7 +43,8 @@
],
"fields": "",
"values": false
}
},
"textMode": "auto"
},
"pluginVersion": "7",
"targets": [
@ -91,7 +92,8 @@
],
"fields": "",
"values": false
}
},
"textMode": "auto"
},
"pluginVersion": "7",
"targets": [
@ -139,7 +141,8 @@
],
"fields": "",
"values": false
}
},
"textMode": "auto"
},
"pluginVersion": "7",
"targets": [
@ -187,7 +190,8 @@
],
"fields": "",
"values": false
}
},
"textMode": "auto"
},
"pluginVersion": "7",
"targets": [
@ -235,7 +239,8 @@
],
"fields": "",
"values": false
}
},
"textMode": "auto"
},
"pluginVersion": "7",
"targets": [
@ -283,7 +288,8 @@
],
"fields": "",
"values": false
}
},
"textMode": "auto"
},
"pluginVersion": "7",
"targets": [

View File

@ -1,685 +0,0 @@
"groups":
- "name": "kube-apiserver-burnrate.rules"
"rules":
- "expr": |
(
(
# too slow
sum by (cluster) (rate(apiserver_request_duration_seconds_count{job="kube-apiserver",verb=~"LIST|GET"}[1d]))
-
(
(
sum by (cluster) (rate(apiserver_request_duration_seconds_bucket{job="kube-apiserver",verb=~"LIST|GET",scope=~"resource|",le="1"}[1d]))
or
vector(0)
)
+
sum by (cluster) (rate(apiserver_request_duration_seconds_bucket{job="kube-apiserver",verb=~"LIST|GET",scope="namespace",le="5"}[1d]))
+
sum by (cluster) (rate(apiserver_request_duration_seconds_bucket{job="kube-apiserver",verb=~"LIST|GET",scope="cluster",le="40"}[1d]))
)
)
+
# errors
sum by (cluster) (rate(apiserver_request_total{job="kube-apiserver",verb=~"LIST|GET",code=~"5.."}[1d]))
)
/
sum by (cluster) (rate(apiserver_request_total{job="kube-apiserver",verb=~"LIST|GET"}[1d]))
"labels":
"verb": "read"
"record": "apiserver_request:burnrate1d"
- "expr": |
(
(
# too slow
sum by (cluster) (rate(apiserver_request_duration_seconds_count{job="kube-apiserver",verb=~"LIST|GET"}[1h]))
-
(
(
sum by (cluster) (rate(apiserver_request_duration_seconds_bucket{job="kube-apiserver",verb=~"LIST|GET",scope=~"resource|",le="1"}[1h]))
or
vector(0)
)
+
sum by (cluster) (rate(apiserver_request_duration_seconds_bucket{job="kube-apiserver",verb=~"LIST|GET",scope="namespace",le="5"}[1h]))
+
sum by (cluster) (rate(apiserver_request_duration_seconds_bucket{job="kube-apiserver",verb=~"LIST|GET",scope="cluster",le="40"}[1h]))
)
)
+
# errors
sum by (cluster) (rate(apiserver_request_total{job="kube-apiserver",verb=~"LIST|GET",code=~"5.."}[1h]))
)
/
sum by (cluster) (rate(apiserver_request_total{job="kube-apiserver",verb=~"LIST|GET"}[1h]))
"labels":
"verb": "read"
"record": "apiserver_request:burnrate1h"
- "expr": |
(
(
# too slow
sum by (cluster) (rate(apiserver_request_duration_seconds_count{job="kube-apiserver",verb=~"LIST|GET"}[2h]))
-
(
(
sum by (cluster) (rate(apiserver_request_duration_seconds_bucket{job="kube-apiserver",verb=~"LIST|GET",scope=~"resource|",le="1"}[2h]))
or
vector(0)
)
+
sum by (cluster) (rate(apiserver_request_duration_seconds_bucket{job="kube-apiserver",verb=~"LIST|GET",scope="namespace",le="5"}[2h]))
+
sum by (cluster) (rate(apiserver_request_duration_seconds_bucket{job="kube-apiserver",verb=~"LIST|GET",scope="cluster",le="40"}[2h]))
)
)
+
# errors
sum by (cluster) (rate(apiserver_request_total{job="kube-apiserver",verb=~"LIST|GET",code=~"5.."}[2h]))
)
/
sum by (cluster) (rate(apiserver_request_total{job="kube-apiserver",verb=~"LIST|GET"}[2h]))
"labels":
"verb": "read"
"record": "apiserver_request:burnrate2h"
- "expr": |
(
(
# too slow
sum by (cluster) (rate(apiserver_request_duration_seconds_count{job="kube-apiserver",verb=~"LIST|GET"}[30m]))
-
(
(
sum by (cluster) (rate(apiserver_request_duration_seconds_bucket{job="kube-apiserver",verb=~"LIST|GET",scope=~"resource|",le="1"}[30m]))
or
vector(0)
)
+
sum by (cluster) (rate(apiserver_request_duration_seconds_bucket{job="kube-apiserver",verb=~"LIST|GET",scope="namespace",le="5"}[30m]))
+
sum by (cluster) (rate(apiserver_request_duration_seconds_bucket{job="kube-apiserver",verb=~"LIST|GET",scope="cluster",le="40"}[30m]))
)
)
+
# errors
sum by (cluster) (rate(apiserver_request_total{job="kube-apiserver",verb=~"LIST|GET",code=~"5.."}[30m]))
)
/
sum by (cluster) (rate(apiserver_request_total{job="kube-apiserver",verb=~"LIST|GET"}[30m]))
"labels":
"verb": "read"
"record": "apiserver_request:burnrate30m"
- "expr": |
(
(
# too slow
sum by (cluster) (rate(apiserver_request_duration_seconds_count{job="kube-apiserver",verb=~"LIST|GET"}[3d]))
-
(
(
sum by (cluster) (rate(apiserver_request_duration_seconds_bucket{job="kube-apiserver",verb=~"LIST|GET",scope=~"resource|",le="1"}[3d]))
or
vector(0)
)
+
sum by (cluster) (rate(apiserver_request_duration_seconds_bucket{job="kube-apiserver",verb=~"LIST|GET",scope="namespace",le="5"}[3d]))
+
sum by (cluster) (rate(apiserver_request_duration_seconds_bucket{job="kube-apiserver",verb=~"LIST|GET",scope="cluster",le="40"}[3d]))
)
)
+
# errors
sum by (cluster) (rate(apiserver_request_total{job="kube-apiserver",verb=~"LIST|GET",code=~"5.."}[3d]))
)
/
sum by (cluster) (rate(apiserver_request_total{job="kube-apiserver",verb=~"LIST|GET"}[3d]))
"labels":
"verb": "read"
"record": "apiserver_request:burnrate3d"
- "expr": |
(
(
# too slow
sum by (cluster) (rate(apiserver_request_duration_seconds_count{job="kube-apiserver",verb=~"LIST|GET"}[5m]))
-
(
(
sum by (cluster) (rate(apiserver_request_duration_seconds_bucket{job="kube-apiserver",verb=~"LIST|GET",scope=~"resource|",le="1"}[5m]))
or
vector(0)
)
+
sum by (cluster) (rate(apiserver_request_duration_seconds_bucket{job="kube-apiserver",verb=~"LIST|GET",scope="namespace",le="5"}[5m]))
+
sum by (cluster) (rate(apiserver_request_duration_seconds_bucket{job="kube-apiserver",verb=~"LIST|GET",scope="cluster",le="40"}[5m]))
)
)
+
# errors
sum by (cluster) (rate(apiserver_request_total{job="kube-apiserver",verb=~"LIST|GET",code=~"5.."}[5m]))
)
/
sum by (cluster) (rate(apiserver_request_total{job="kube-apiserver",verb=~"LIST|GET"}[5m]))
"labels":
"verb": "read"
"record": "apiserver_request:burnrate5m"
- "expr": |
(
(
# too slow
sum by (cluster) (rate(apiserver_request_duration_seconds_count{job="kube-apiserver",verb=~"LIST|GET"}[6h]))
-
(
(
sum by (cluster) (rate(apiserver_request_duration_seconds_bucket{job="kube-apiserver",verb=~"LIST|GET",scope=~"resource|",le="1"}[6h]))
or
vector(0)
)
+
sum by (cluster) (rate(apiserver_request_duration_seconds_bucket{job="kube-apiserver",verb=~"LIST|GET",scope="namespace",le="5"}[6h]))
+
sum by (cluster) (rate(apiserver_request_duration_seconds_bucket{job="kube-apiserver",verb=~"LIST|GET",scope="cluster",le="40"}[6h]))
)
)
+
# errors
sum by (cluster) (rate(apiserver_request_total{job="kube-apiserver",verb=~"LIST|GET",code=~"5.."}[6h]))
)
/
sum by (cluster) (rate(apiserver_request_total{job="kube-apiserver",verb=~"LIST|GET"}[6h]))
"labels":
"verb": "read"
"record": "apiserver_request:burnrate6h"
- "expr": |
(
(
# too slow
sum by (cluster) (rate(apiserver_request_duration_seconds_count{job="kube-apiserver",verb=~"POST|PUT|PATCH|DELETE"}[1d]))
-
sum by (cluster) (rate(apiserver_request_duration_seconds_bucket{job="kube-apiserver",verb=~"POST|PUT|PATCH|DELETE",le="1"}[1d]))
)
+
sum by (cluster) (rate(apiserver_request_total{job="kube-apiserver",verb=~"POST|PUT|PATCH|DELETE",code=~"5.."}[1d]))
)
/
sum by (cluster) (rate(apiserver_request_total{job="kube-apiserver",verb=~"POST|PUT|PATCH|DELETE"}[1d]))
"labels":
"verb": "write"
"record": "apiserver_request:burnrate1d"
- "expr": |
(
(
# too slow
sum by (cluster) (rate(apiserver_request_duration_seconds_count{job="kube-apiserver",verb=~"POST|PUT|PATCH|DELETE"}[1h]))
-
sum by (cluster) (rate(apiserver_request_duration_seconds_bucket{job="kube-apiserver",verb=~"POST|PUT|PATCH|DELETE",le="1"}[1h]))
)
+
sum by (cluster) (rate(apiserver_request_total{job="kube-apiserver",verb=~"POST|PUT|PATCH|DELETE",code=~"5.."}[1h]))
)
/
sum by (cluster) (rate(apiserver_request_total{job="kube-apiserver",verb=~"POST|PUT|PATCH|DELETE"}[1h]))
"labels":
"verb": "write"
"record": "apiserver_request:burnrate1h"
- "expr": |
(
(
# too slow
sum by (cluster) (rate(apiserver_request_duration_seconds_count{job="kube-apiserver",verb=~"POST|PUT|PATCH|DELETE"}[2h]))
-
sum by (cluster) (rate(apiserver_request_duration_seconds_bucket{job="kube-apiserver",verb=~"POST|PUT|PATCH|DELETE",le="1"}[2h]))
)
+
sum by (cluster) (rate(apiserver_request_total{job="kube-apiserver",verb=~"POST|PUT|PATCH|DELETE",code=~"5.."}[2h]))
)
/
sum by (cluster) (rate(apiserver_request_total{job="kube-apiserver",verb=~"POST|PUT|PATCH|DELETE"}[2h]))
"labels":
"verb": "write"
"record": "apiserver_request:burnrate2h"
- "expr": |
(
(
# too slow
sum by (cluster) (rate(apiserver_request_duration_seconds_count{job="kube-apiserver",verb=~"POST|PUT|PATCH|DELETE"}[30m]))
-
sum by (cluster) (rate(apiserver_request_duration_seconds_bucket{job="kube-apiserver",verb=~"POST|PUT|PATCH|DELETE",le="1"}[30m]))
)
+
sum by (cluster) (rate(apiserver_request_total{job="kube-apiserver",verb=~"POST|PUT|PATCH|DELETE",code=~"5.."}[30m]))
)
/
sum by (cluster) (rate(apiserver_request_total{job="kube-apiserver",verb=~"POST|PUT|PATCH|DELETE"}[30m]))
"labels":
"verb": "write"
"record": "apiserver_request:burnrate30m"
- "expr": |
(
(
# too slow
sum by (cluster) (rate(apiserver_request_duration_seconds_count{job="kube-apiserver",verb=~"POST|PUT|PATCH|DELETE"}[3d]))
-
sum by (cluster) (rate(apiserver_request_duration_seconds_bucket{job="kube-apiserver",verb=~"POST|PUT|PATCH|DELETE",le="1"}[3d]))
)
+
sum by (cluster) (rate(apiserver_request_total{job="kube-apiserver",verb=~"POST|PUT|PATCH|DELETE",code=~"5.."}[3d]))
)
/
sum by (cluster) (rate(apiserver_request_total{job="kube-apiserver",verb=~"POST|PUT|PATCH|DELETE"}[3d]))
"labels":
"verb": "write"
"record": "apiserver_request:burnrate3d"
- "expr": |
(
(
# too slow
sum by (cluster) (rate(apiserver_request_duration_seconds_count{job="kube-apiserver",verb=~"POST|PUT|PATCH|DELETE"}[5m]))
-
sum by (cluster) (rate(apiserver_request_duration_seconds_bucket{job="kube-apiserver",verb=~"POST|PUT|PATCH|DELETE",le="1"}[5m]))
)
+
sum by (cluster) (rate(apiserver_request_total{job="kube-apiserver",verb=~"POST|PUT|PATCH|DELETE",code=~"5.."}[5m]))
)
/
sum by (cluster) (rate(apiserver_request_total{job="kube-apiserver",verb=~"POST|PUT|PATCH|DELETE"}[5m]))
"labels":
"verb": "write"
"record": "apiserver_request:burnrate5m"
- "expr": |
(
(
# too slow
sum by (cluster) (rate(apiserver_request_duration_seconds_count{job="kube-apiserver",verb=~"POST|PUT|PATCH|DELETE"}[6h]))
-
sum by (cluster) (rate(apiserver_request_duration_seconds_bucket{job="kube-apiserver",verb=~"POST|PUT|PATCH|DELETE",le="1"}[6h]))
)
+
sum by (cluster) (rate(apiserver_request_total{job="kube-apiserver",verb=~"POST|PUT|PATCH|DELETE",code=~"5.."}[6h]))
)
/
sum by (cluster) (rate(apiserver_request_total{job="kube-apiserver",verb=~"POST|PUT|PATCH|DELETE"}[6h]))
"labels":
"verb": "write"
"record": "apiserver_request:burnrate6h"
- "name": "kube-apiserver-histogram.rules"
"rules":
- "expr": |
histogram_quantile(0.99, sum by (cluster, le, resource) (rate(apiserver_request_duration_seconds_bucket{job="kube-apiserver",verb=~"LIST|GET"}[5m]))) > 0
"labels":
"quantile": "0.99"
"verb": "read"
"record": "cluster_quantile:apiserver_request_duration_seconds:histogram_quantile"
- "expr": |
histogram_quantile(0.99, sum by (cluster, le, resource) (rate(apiserver_request_duration_seconds_bucket{job="kube-apiserver",verb=~"POST|PUT|PATCH|DELETE"}[5m]))) > 0
"labels":
"quantile": "0.99"
"verb": "write"
"record": "cluster_quantile:apiserver_request_duration_seconds:histogram_quantile"
- "expr": |
histogram_quantile(0.99, sum(rate(apiserver_request_duration_seconds_bucket{job="kube-apiserver",subresource!="log",verb!~"LIST|WATCH|WATCHLIST|DELETECOLLECTION|PROXY|CONNECT"}[5m])) without(instance, pod))
"labels":
"quantile": "0.99"
"record": "cluster_quantile:apiserver_request_duration_seconds:histogram_quantile"
- "expr": |
histogram_quantile(0.9, sum(rate(apiserver_request_duration_seconds_bucket{job="kube-apiserver",subresource!="log",verb!~"LIST|WATCH|WATCHLIST|DELETECOLLECTION|PROXY|CONNECT"}[5m])) without(instance, pod))
"labels":
"quantile": "0.9"
"record": "cluster_quantile:apiserver_request_duration_seconds:histogram_quantile"
- "expr": |
histogram_quantile(0.5, sum(rate(apiserver_request_duration_seconds_bucket{job="kube-apiserver",subresource!="log",verb!~"LIST|WATCH|WATCHLIST|DELETECOLLECTION|PROXY|CONNECT"}[5m])) without(instance, pod))
"labels":
"quantile": "0.5"
"record": "cluster_quantile:apiserver_request_duration_seconds:histogram_quantile"
- "interval": "3m"
"name": "kube-apiserver-availability.rules"
"rules":
- "expr": |
avg_over_time(code_verb:apiserver_request_total:increase1h[30d]) * 24 * 30
"record": "code_verb:apiserver_request_total:increase30d"
- "expr": |
sum by (cluster, code) (code_verb:apiserver_request_total:increase30d{verb=~"LIST|GET"})
"labels":
"verb": "read"
"record": "code:apiserver_request_total:increase30d"
- "expr": |
sum by (cluster, code) (code_verb:apiserver_request_total:increase30d{verb=~"POST|PUT|PATCH|DELETE"})
"labels":
"verb": "write"
"record": "code:apiserver_request_total:increase30d"
- "expr": |
sum by (cluster, verb, scope) (increase(apiserver_request_duration_seconds_count[1h]))
"record": "cluster_verb_scope:apiserver_request_duration_seconds_count:increase1h"
- "expr": |
sum by (cluster, verb, scope) (avg_over_time(cluster_verb_scope:apiserver_request_duration_seconds_count:increase1h[30d]) * 24 * 30)
"record": "cluster_verb_scope:apiserver_request_duration_seconds_count:increase30d"
- "expr": |
sum by (cluster, verb, scope, le) (increase(apiserver_request_duration_seconds_bucket[1h]))
"record": "cluster_verb_scope_le:apiserver_request_duration_seconds_bucket:increase1h"
- "expr": |
sum by (cluster, verb, scope, le) (avg_over_time(cluster_verb_scope_le:apiserver_request_duration_seconds_bucket:increase1h[30d]) * 24 * 30)
"record": "cluster_verb_scope_le:apiserver_request_duration_seconds_bucket:increase30d"
- "expr": |
1 - (
(
# write too slow
sum by (cluster) (cluster_verb_scope:apiserver_request_duration_seconds_count:increase30d{verb=~"POST|PUT|PATCH|DELETE"})
-
sum by (cluster) (cluster_verb_scope_le:apiserver_request_duration_seconds_bucket:increase30d{verb=~"POST|PUT|PATCH|DELETE",le="1"})
) +
(
# read too slow
sum by (cluster) (cluster_verb_scope:apiserver_request_duration_seconds_count:increase30d{verb=~"LIST|GET"})
-
(
(
sum by (cluster) (cluster_verb_scope_le:apiserver_request_duration_seconds_bucket:increase30d{verb=~"LIST|GET",scope=~"resource|",le="1"})
or
vector(0)
)
+
sum by (cluster) (cluster_verb_scope_le:apiserver_request_duration_seconds_bucket:increase30d{verb=~"LIST|GET",scope="namespace",le="5"})
+
sum by (cluster) (cluster_verb_scope_le:apiserver_request_duration_seconds_bucket:increase30d{verb=~"LIST|GET",scope="cluster",le="40"})
)
) +
# errors
sum by (cluster) (code:apiserver_request_total:increase30d{code=~"5.."} or vector(0))
)
/
sum by (cluster) (code:apiserver_request_total:increase30d)
"labels":
"verb": "all"
"record": "apiserver_request:availability30d"
- "expr": |
1 - (
sum by (cluster) (cluster_verb_scope:apiserver_request_duration_seconds_count:increase30d{verb=~"LIST|GET"})
-
(
# too slow
(
sum by (cluster) (cluster_verb_scope_le:apiserver_request_duration_seconds_bucket:increase30d{verb=~"LIST|GET",scope=~"resource|",le="1"})
or
vector(0)
)
+
sum by (cluster) (cluster_verb_scope_le:apiserver_request_duration_seconds_bucket:increase30d{verb=~"LIST|GET",scope="namespace",le="5"})
+
sum by (cluster) (cluster_verb_scope_le:apiserver_request_duration_seconds_bucket:increase30d{verb=~"LIST|GET",scope="cluster",le="40"})
)
+
# errors
sum by (cluster) (code:apiserver_request_total:increase30d{verb="read",code=~"5.."} or vector(0))
)
/
sum by (cluster) (code:apiserver_request_total:increase30d{verb="read"})
"labels":
"verb": "read"
"record": "apiserver_request:availability30d"
- "expr": |
1 - (
(
# too slow
sum by (cluster) (cluster_verb_scope:apiserver_request_duration_seconds_count:increase30d{verb=~"POST|PUT|PATCH|DELETE"})
-
sum by (cluster) (cluster_verb_scope_le:apiserver_request_duration_seconds_bucket:increase30d{verb=~"POST|PUT|PATCH|DELETE",le="1"})
)
+
# errors
sum by (cluster) (code:apiserver_request_total:increase30d{verb="write",code=~"5.."} or vector(0))
)
/
sum by (cluster) (code:apiserver_request_total:increase30d{verb="write"})
"labels":
"verb": "write"
"record": "apiserver_request:availability30d"
- "expr": |
sum by (cluster,code,resource) (rate(apiserver_request_total{job="kube-apiserver",verb=~"LIST|GET"}[5m]))
"labels":
"verb": "read"
"record": "code_resource:apiserver_request_total:rate5m"
- "expr": |
sum by (cluster,code,resource) (rate(apiserver_request_total{job="kube-apiserver",verb=~"POST|PUT|PATCH|DELETE"}[5m]))
"labels":
"verb": "write"
"record": "code_resource:apiserver_request_total:rate5m"
- "expr": |
sum by (cluster, code, verb) (increase(apiserver_request_total{job="kube-apiserver",verb=~"LIST|GET|POST|PUT|PATCH|DELETE",code=~"2.."}[1h]))
"record": "code_verb:apiserver_request_total:increase1h"
- "expr": |
sum by (cluster, code, verb) (increase(apiserver_request_total{job="kube-apiserver",verb=~"LIST|GET|POST|PUT|PATCH|DELETE",code=~"3.."}[1h]))
"record": "code_verb:apiserver_request_total:increase1h"
- "expr": |
sum by (cluster, code, verb) (increase(apiserver_request_total{job="kube-apiserver",verb=~"LIST|GET|POST|PUT|PATCH|DELETE",code=~"4.."}[1h]))
"record": "code_verb:apiserver_request_total:increase1h"
- "expr": |
sum by (cluster, code, verb) (increase(apiserver_request_total{job="kube-apiserver",verb=~"LIST|GET|POST|PUT|PATCH|DELETE",code=~"5.."}[1h]))
"record": "code_verb:apiserver_request_total:increase1h"
- "name": "k8s.rules"
"rules":
- "expr": |
sum by (cluster, namespace, pod, container) (
irate(container_cpu_usage_seconds_total{job="cadvisor", image!=""}[5m])
) * on (cluster, namespace, pod) group_left(node) topk by (cluster, namespace, pod) (
1, max by(cluster, namespace, pod, node) (kube_pod_info{node!=""})
)
"record": "node_namespace_pod_container:container_cpu_usage_seconds_total:sum_irate"
- "expr": |
container_memory_working_set_bytes{job="cadvisor", image!=""}
* on (namespace, pod) group_left(node) topk by(namespace, pod) (1,
max by(namespace, pod, node) (kube_pod_info{node!=""})
)
"record": "node_namespace_pod_container:container_memory_working_set_bytes"
- "expr": |
container_memory_rss{job="cadvisor", image!=""}
* on (namespace, pod) group_left(node) topk by(namespace, pod) (1,
max by(namespace, pod, node) (kube_pod_info{node!=""})
)
"record": "node_namespace_pod_container:container_memory_rss"
- "expr": |
container_memory_cache{job="cadvisor", image!=""}
* on (namespace, pod) group_left(node) topk by(namespace, pod) (1,
max by(namespace, pod, node) (kube_pod_info{node!=""})
)
"record": "node_namespace_pod_container:container_memory_cache"
- "expr": |
container_memory_swap{job="cadvisor", image!=""}
* on (namespace, pod) group_left(node) topk by(namespace, pod) (1,
max by(namespace, pod, node) (kube_pod_info{node!=""})
)
"record": "node_namespace_pod_container:container_memory_swap"
- "expr": |
kube_pod_container_resource_requests{resource="memory",job="kube-state-metrics"} * on (namespace, pod, cluster)
group_left() max by (namespace, pod) (
(kube_pod_status_phase{phase=~"Pending|Running"} == 1)
)
"record": "cluster:namespace:pod_memory:active:kube_pod_container_resource_requests"
- "expr": |
sum by (namespace, cluster) (
sum by (namespace, pod, cluster) (
max by (namespace, pod, container, cluster) (
kube_pod_container_resource_requests{resource="memory",job="kube-state-metrics"}
) * on(namespace, pod, cluster) group_left() max by (namespace, pod, cluster) (
kube_pod_status_phase{phase=~"Pending|Running"} == 1
)
)
)
"record": "namespace_memory:kube_pod_container_resource_requests:sum"
- "expr": |
kube_pod_container_resource_requests{resource="cpu",job="kube-state-metrics"} * on (namespace, pod, cluster)
group_left() max by (namespace, pod) (
(kube_pod_status_phase{phase=~"Pending|Running"} == 1)
)
"record": "cluster:namespace:pod_cpu:active:kube_pod_container_resource_requests"
- "expr": |
sum by (namespace, cluster) (
sum by (namespace, pod, cluster) (
max by (namespace, pod, container, cluster) (
kube_pod_container_resource_requests{resource="cpu",job="kube-state-metrics"}
) * on(namespace, pod, cluster) group_left() max by (namespace, pod, cluster) (
kube_pod_status_phase{phase=~"Pending|Running"} == 1
)
)
)
"record": "namespace_cpu:kube_pod_container_resource_requests:sum"
- "expr": |
kube_pod_container_resource_limits{resource="memory",job="kube-state-metrics"} * on (namespace, pod, cluster)
group_left() max by (namespace, pod) (
(kube_pod_status_phase{phase=~"Pending|Running"} == 1)
)
"record": "cluster:namespace:pod_memory:active:kube_pod_container_resource_limits"
- "expr": |
sum by (namespace, cluster) (
sum by (namespace, pod, cluster) (
max by (namespace, pod, container, cluster) (
kube_pod_container_resource_limits{resource="memory",job="kube-state-metrics"}
) * on(namespace, pod, cluster) group_left() max by (namespace, pod, cluster) (
kube_pod_status_phase{phase=~"Pending|Running"} == 1
)
)
)
"record": "namespace_memory:kube_pod_container_resource_limits:sum"
- "expr": |
kube_pod_container_resource_limits{resource="cpu",job="kube-state-metrics"} * on (namespace, pod, cluster)
group_left() max by (namespace, pod) (
(kube_pod_status_phase{phase=~"Pending|Running"} == 1)
)
"record": "cluster:namespace:pod_cpu:active:kube_pod_container_resource_limits"
- "expr": |
sum by (namespace, cluster) (
sum by (namespace, pod, cluster) (
max by (namespace, pod, container, cluster) (
kube_pod_container_resource_limits{resource="cpu",job="kube-state-metrics"}
) * on(namespace, pod, cluster) group_left() max by (namespace, pod, cluster) (
kube_pod_status_phase{phase=~"Pending|Running"} == 1
)
)
)
"record": "namespace_cpu:kube_pod_container_resource_limits:sum"
- "expr": |
max by (cluster, namespace, workload, pod) (
label_replace(
label_replace(
kube_pod_owner{job="kube-state-metrics", owner_kind="ReplicaSet"},
"replicaset", "$1", "owner_name", "(.*)"
) * on(replicaset, namespace) group_left(owner_name) topk by(replicaset, namespace) (
1, max by (replicaset, namespace, owner_name) (
kube_replicaset_owner{job="kube-state-metrics"}
)
),
"workload", "$1", "owner_name", "(.*)"
)
)
"labels":
"workload_type": "deployment"
"record": "namespace_workload_pod:kube_pod_owner:relabel"
- "expr": |
max by (cluster, namespace, workload, pod) (
label_replace(
kube_pod_owner{job="kube-state-metrics", owner_kind="DaemonSet"},
"workload", "$1", "owner_name", "(.*)"
)
)
"labels":
"workload_type": "daemonset"
"record": "namespace_workload_pod:kube_pod_owner:relabel"
- "expr": |
max by (cluster, namespace, workload, pod) (
label_replace(
kube_pod_owner{job="kube-state-metrics", owner_kind="StatefulSet"},
"workload", "$1", "owner_name", "(.*)"
)
)
"labels":
"workload_type": "statefulset"
"record": "namespace_workload_pod:kube_pod_owner:relabel"
- "name": "kube-scheduler.rules"
"rules":
- "expr": |
histogram_quantile(0.99, sum(rate(scheduler_e2e_scheduling_duration_seconds_bucket{job="kube-scheduler"}[5m])) without(instance, pod))
"labels":
"quantile": "0.99"
"record": "cluster_quantile:scheduler_e2e_scheduling_duration_seconds:histogram_quantile"
- "expr": |
histogram_quantile(0.99, sum(rate(scheduler_scheduling_algorithm_duration_seconds_bucket{job="kube-scheduler"}[5m])) without(instance, pod))
"labels":
"quantile": "0.99"
"record": "cluster_quantile:scheduler_scheduling_algorithm_duration_seconds:histogram_quantile"
- "expr": |
histogram_quantile(0.99, sum(rate(scheduler_binding_duration_seconds_bucket{job="kube-scheduler"}[5m])) without(instance, pod))
"labels":
"quantile": "0.99"
"record": "cluster_quantile:scheduler_binding_duration_seconds:histogram_quantile"
- "expr": |
histogram_quantile(0.9, sum(rate(scheduler_e2e_scheduling_duration_seconds_bucket{job="kube-scheduler"}[5m])) without(instance, pod))
"labels":
"quantile": "0.9"
"record": "cluster_quantile:scheduler_e2e_scheduling_duration_seconds:histogram_quantile"
- "expr": |
histogram_quantile(0.9, sum(rate(scheduler_scheduling_algorithm_duration_seconds_bucket{job="kube-scheduler"}[5m])) without(instance, pod))
"labels":
"quantile": "0.9"
"record": "cluster_quantile:scheduler_scheduling_algorithm_duration_seconds:histogram_quantile"
- "expr": |
histogram_quantile(0.9, sum(rate(scheduler_binding_duration_seconds_bucket{job="kube-scheduler"}[5m])) without(instance, pod))
"labels":
"quantile": "0.9"
"record": "cluster_quantile:scheduler_binding_duration_seconds:histogram_quantile"
- "expr": |
histogram_quantile(0.5, sum(rate(scheduler_e2e_scheduling_duration_seconds_bucket{job="kube-scheduler"}[5m])) without(instance, pod))
"labels":
"quantile": "0.5"
"record": "cluster_quantile:scheduler_e2e_scheduling_duration_seconds:histogram_quantile"
- "expr": |
histogram_quantile(0.5, sum(rate(scheduler_scheduling_algorithm_duration_seconds_bucket{job="kube-scheduler"}[5m])) without(instance, pod))
"labels":
"quantile": "0.5"
"record": "cluster_quantile:scheduler_scheduling_algorithm_duration_seconds:histogram_quantile"
- "expr": |
histogram_quantile(0.5, sum(rate(scheduler_binding_duration_seconds_bucket{job="kube-scheduler"}[5m])) without(instance, pod))
"labels":
"quantile": "0.5"
"record": "cluster_quantile:scheduler_binding_duration_seconds:histogram_quantile"
- "name": "node.rules"
"rules":
- "expr": |
topk by(namespace, pod) (1,
max by (node, namespace, pod) (
label_replace(kube_pod_info{job="kube-state-metrics",node!=""}, "pod", "$1", "pod", "(.*)")
))
"record": "node_namespace_pod:kube_pod_info:"
- "expr": |
count by (cluster, node) (sum by (node, cpu) (
node_cpu_seconds_total{job="node-exporter"}
* on (namespace, pod) group_left(node)
topk by(namespace, pod) (1, node_namespace_pod:kube_pod_info:)
))
"record": "node:node_num_cpu:sum"
- "expr": |
sum(
node_memory_MemAvailable_bytes{job="node-exporter"} or
(
node_memory_Buffers_bytes{job="node-exporter"} +
node_memory_Cached_bytes{job="node-exporter"} +
node_memory_MemFree_bytes{job="node-exporter"} +
node_memory_Slab_bytes{job="node-exporter"}
)
) by (cluster)
"record": ":node_memory_MemAvailable_bytes:sum"
- "name": "kubelet.rules"
"rules":
- "expr": |
histogram_quantile(0.99, sum(rate(kubelet_pleg_relist_duration_seconds_bucket[5m])) by (instance, le) * on(instance) group_left(node) kubelet_node_name{job="kubelet"})
"labels":
"quantile": "0.99"
"record": "node_quantile:kubelet_pleg_relist_duration_seconds:histogram_quantile"
- "expr": |
histogram_quantile(0.9, sum(rate(kubelet_pleg_relist_duration_seconds_bucket[5m])) by (instance, le) * on(instance) group_left(node) kubelet_node_name{job="kubelet"})
"labels":
"quantile": "0.9"
"record": "node_quantile:kubelet_pleg_relist_duration_seconds:histogram_quantile"
- "expr": |
histogram_quantile(0.5, sum(rate(kubelet_pleg_relist_duration_seconds_bucket[5m])) by (instance, le) * on(instance) group_left(node) kubelet_node_name{job="kubelet"})
"labels":
"quantile": "0.5"
"record": "node_quantile:kubelet_pleg_relist_duration_seconds:histogram_quantile"

View File

@ -4,8 +4,10 @@ local kubernetes = import "kubernetes-mixin/mixin.libsonnet";
kubernetes {
_config+:: {
kubeApiserverSelector: 'job="apiserver"',
grafanaK8s+:: {
dashboardNamePrefix: '',
linkPrefix: '',
dashboardNamePrefix: '',
dashboardTags: ['kubernetes'],
},
},

View File

@ -54,7 +54,7 @@ metadata:
namespace: {{ .Release.Namespace }}
labels:
grafana_dashboard: "1"
{{ include "kubezero-lib.labels" . | indent 4 }}
{{- include "kubezero-lib.labels" . | nindent 4 }}
''' % config
# Put all dashboards into a folder ?

View File

@ -5,7 +5,7 @@ metadata:
namespace: {{ .Release.Namespace }}
labels:
grafana_dashboard: "1"
{{ include "kubezero-lib.labels" . | indent 4 }}
{{- include "kubezero-lib.labels" . | nindent 4 }}
annotations:
k8s-sidecar-target-directory: Kubernetes
binaryData:
@ -22,19 +22,19 @@ binaryData:
controller-manager.json.gz:
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
k8s-resources-cluster.json.gz:
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
k8s-resources-namespace.json.gz:
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
k8s-resources-node.json.gz:
H4sIAAAAAAAC/+1cbW/bNhD+nl+hcRuQDO5iO0mbGeiHNlmaAs2W5qXAsBYGLdE2EUrUSCp2Gni/fSQly5REJU6cLI5Df5J4FF+e5+54Jk+6XvM8AKOICigwjTjoeNeySBYSzIW8+/ubvJ00VDUUYAF7BMlSwRKkywYREh8DWRIlhKQlDMbDM0qJwLEsb+rCIQ7QHo0Eo0R10YeEp88THF1w3Y2+ZajPEB/KArDV5CAtoyNdQw8rHZws9SkhMObIbE0LhggPhmrkoL3TjMcgF8QwQmTWktmalkOCId+jhDKNwqRhCnuQ8XJXWhBAPvyEooFQg241KzJU95iAnCbMVxMAx4yGSAxRwkGhVh8TUm0WK7xbhSKCBigKcvJmc7oc2LpX+CWMoUjUSEM4rpPgqEbCh3RkqIYhEVK7SM1Tl5AkM4wMWRF/qSe6Vrl1LRjhQMPfLEsM1cqLlaIeUxyJIxpo8FWBB7n3HTFahD9Gkp9IwAGychirVhgMcKK62anK7NRL2APEEFN99wkVxT45YhjxPy8RY9JmLOPnMfRRncZJoaKn1S6WCuhf2MDjAsUxCj5JDK1DFZANkCjaTNludEU0jvV8eBKuRxLXbgRDpEfajWnQ9aXpQ9kJ6+RXXT9OugmX2HY5kqUB72o16cgmuphBga59ksgBsrdfwU/Z5VfQ8FTzb/+VZeriK5hseL0rb132sgEa5WH1KQuh9gUCh6ojhW21mqQKMamIB9AXVM2jXamSGthB3t71texxMgE1FSWiF4ZTLNqJBF0zVxBMjLsi4WKoXCIlgUUZ1LQOpPOw9KVlp0PcF3ah0I4c7B2fe+eKhqIaityBX5etHDIU1LkAykTZDqc23hVXse4RRwG+xEEiXUKtuU/r6sWkOLIxHGNeHVcv8S9SVa2CDsLM1BUkJcqA0lT7U/UOLXdaenW0T+EKjtEcljNTUdkdExaFgj1E6nSJ0MF7qBfBVkWW+nDrY6kTb1ZVczbjonI2lnYSdhNL51FeUkpWtlYuzW1L+ugYwbLhZKUfpbPQwZJdfEJHhYAoH9BZZnKmPt1kh6nsFH/X8uHr1FoyKl5mHFQNg9ouDKqEQS0XBt0YBlXHclscxMUVmceZa9NREzqrLjSpsqNZCPGX/L06Onq1v+8dHnbCsMMtoUkMhXQ3UX2b05VS/sMKUATu5Lbz4dqDgKl/oSzTEauv9aeeokjQfSccIB+HUPsnSxSWhlUWA8qEZzpgfU/gbfXy8AbsM+lcvICOImCtes6UzYIbqfmirNf78Z2FnvrgrUBflIQ9aQsVeRJhY129P7sn6B/pXwR3BC9C8PvlJ9j72VG8CMV7j0dxto7q2/sT/QmH2NnxYiTvL68dp/Q6K16M4N+X2YqPaeDYvRe7sQ25ZbDcJefTgHDz1182748hFwxHg7thWL+xuTq7y/pYzLKvLP9y6s2F6m7A/badq30w1NfbTcDy56Nmp7kxP9oZMp0c8I4GPE46csz4EnUukl6JhK7UJL2hIy/SkHTloH7/GFA/mWJ7m56juo7qvaWzKqIDxJUDet/Z1Msg+nfwDE5EPydSAZbrRJTBiCsm7TzmEZpF5E5M3Ynpip6YFu3UnZjOkzm25Y5MXebYc84cC1FI2VV3RNkFjgYyZhPd3pVAc4ZKDS9v6QdZ02WQLRovHWk60vNjb320ST0f+kO04RLKnjg80kbhwqMXGh6ZZukipLvklG27AMnllLmcsgVzyqz+xx13LldaWRoiLESwyyxb8syyB+TYpaWscHJZxrXLL1vq/LIHsGaXYrbyKWbFPZmT09MNR/YiZB8stUFnNO9Vt90c0Xck+sNzIPp0BGPH80I8Hy4nzy412KUGu9TgpT4+vOfp4cvKEE4xdknCT5TQ+GgqfmNeoyP9/0wXnh9tlzH84gzsxecOPxrljK9+oHDw9DDrFKKVB/rD0wPNRzBeeZwPwfPIoXOvHbjXDlxe3bPIq5vrzYO1bKiAy9UshF8Q4+lwWttpscoBUk8EkF2kX7sVcDBTRqBiPBahbEMxbUugMCZyXtGg+rHetTLvRjJaISFPoLFWgwD1YUJKiVLaakzpmkW/9Dd9i8pZoz1TyzUT8wwpjadfHjbdKpD/ENmV3tmzJfAZXwpuFUoHaFxaDHIfZXS/VpqOARgk5Es2/9I0boGyBkM7eHPkKE4BNlY+6bLl+hygd8SS81eHfigZxJbqU1ayFf8ulOieuqlzXc//h+CoTxte1tyGnaz2bWRlK5dJqjQJzQj/PO0fFKWVgaoye+VMFdKZGIKEo7O0IdMXPQv9aD6QfhSXz1w9VPD3MLphDTMnaZy5GuqyNl2u0g+m6ygm99H9NEKUgI5etabvIMj4LisDhcdiLKMkNns4g6Q7jYvNgAXszNQCtJrGzZZ50wpn1zvGdcu82WqaktmbEqBtXLeCVGm/TeegXo0x9OLWXsyGX5sNm720t82b2ekOeBOY452OpQDfd6qzbsH52V62rOZvDdIwTgTyTrKtEu5ten9IBfTWj2nAUzUEic4DB+1mE/q7/aDX7/XebPe2foP9/u5uq7WLtoOW3/bTypf5qt5cm/wHvjWxiFBfAAA=
k8s-resources-pod.json.gz:
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
k8s-resources-workload.json.gz:
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
k8s-resources-workloads-namespace.json.gz:
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
kubelet.json.gz:
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
namespace-by-pod.json.gz:
H4sIAAAAAAAC/+1dW2/bOBZ+768Q1G6RYpOpJV+SFAgWuW4LtJ1sk3ax2wYGLdG2JrKkoahcGmR/+5LUjaRIyU7SxBmrD21NUofkuX48JKWbF4ZhDodeECU4Nt8Z38/W0xIE/0w8BLkyEAQhBtgLA1p4Q4pIoe/FmDZhv4yslNWMEs/HHwJSaa2XpS7AIA4T5EBSYR6jcAbxFCaxybWBARj5tB6jBHLlU89VlHpOGOyHfogoQTQZgbXOumFbFvmr3183rDc86QDMWMe75VyM18auDxEWhoCvI9bOBfF0FALkmlndLfv3jPx9y5gCXQ9LozUnAcQfXFISJL6fliAQTU/D0MdeRMo7rJBOZz8MMAp9ytAx8OP0eU941veCc04KEQgga5+yPGe46YS+D6IY8pSECrdSM0GeexyWwkyZLAnskvy2e1zBVT6B7Pc1/Z1zp6DN5mAXP8tRnxVlCEYQYG6qXOkHDBETj7r6S3gpMJhVxdPw8tTDFc0xcVZo7icIwQAbeyBwLz0XT02xzYn3k7WbDriKTBNQeJnqQDbHkvHAmcJTbwbDpDIZh+rlHnDOJyhMAlclmxB9A34C1VUxZ1qk7KW9ve30BryiMoW3u5tE0e3tdaNHdL/z29a2oPQv3V4PdEGuwqUEGo3RdKHjzQCTXCFzcxyiGRMc4doMDmOIPMg9MwHJBIpKNQNX+SytDq88My/IK/hiKkqZI1QWU+KQpqHvfgQjKBqN3OITQOeQ8Y+qQkU9taq/Lam+ZTeovlWhPYXeZIp5Wqk1dMufAVHvC+DL6iKaesa5KPKCyWmqhZaqXFSScj6cu7ugPDZwaGB4hTnVMLIqbh7cTDTEEAgmDcTsklhF6YguHBC9Ow4JF2JRIag6nBBXIfDdpCxirT+FzP8T0wgC6GDi0YQ2p3Q4EkfDSIxXqf560Hd/V9Qwa/YdkaGpZAAJc1zRmTBtF45B4mOZWDrZdIr5n3Wp3gtEnRId1ivK8zgCxEClJkngMQvci2J+XLfCuDIlEVUq5csFRCgNpzfiM4UFVbkgzi33UWmYROcbEwRhII2TKbsLr6qT5LSFSkyou11fpN9r6PvEXWg7trQd9wux3KN7xOlhpW9b2/empm+tkrEHC59XMbDS/0RhjMce7d005cIjgjfyKNfv/I2rR7D6DCvTPsL8wCcCLfT+Z0xCCn2OSlj0FDg1VvPz212pIiweqHEiccVLkBJ0ThwolG3d90V02CXI0LK2yF9b2zRYWltCsBzTnquBhVLm6aRkbBJure2uQICPXRXZMKxI6CSzQOQ1BmgCcQ0r4VXE+o6T2ZpHsBFcI24QAzIsNCR48zJE5wSzO9C7gMPRNYbxEBOE6984fhKTaLPzw3yV/feHuV64lZ3//eCczA/z9vurPDi9e0UcARkpdZNnb96IUqqHAJkJxBgEskcW4t8RcDDjqGCipg8nMHCPii5EukQpGfYzd+sURHBjPJ/JcI9SrRQCBS0/mXpjXK2QwOMXwnsjHBt7lMnGl5TlbhUwpjCoKGbmy9vSFm9LrLbelkK6cjB35jSj3M00WhJr+DkL7U46xxbotkBXLFgM6fZapNsi3Rbptki3Rbot0v0lSBcTkcQzD7dQ9/Gg7mnGc7waaJepbs0I88FQRKwZDatqRBs5IYYPjZe6qRXVixLcqye4tzDB/XqC+wsTPKgneLAwwcN6gocLEzyqJ3g0P8EodDW0aE2N6javYWgEEKDzmDNAgsw4C5x7WdC49WNp9n76PNaHsbwnQwvTLRh+wKplQQGUy6FUgTItMEBs/IQo5OI28a0QQRZNxn5YQngzdlDImCUMiga09xC47AmxJkRYZBbxDxI3XBg72nDIgs5HGEzSGXfk+M5NLsbXft1SB/geiNWeh+G1jCeVUFQutCVMT7x8GYH+Q/5sfPq0cXBgvH//bjZ7F0vBjlsp22IsI8Kr4omsotz8NA8Q0VPDDS9FCM2afUV+NQxGgMQcFKinLKJ4cWZ5cJp6risB9mJZQZ5FuNl8C6YXe4fV1M9qiEAdpuYRQ5DMRsS0lGIQVncLCEEFSlZKDntPKYccIOamYBwD5xzieDVFsf+woojuJArOIFZbGgfLIA3ZMIwDFEbRqvqqwyU1kNWWytFTSuU4XEKuiycM78R09+0msLY6g00Hbve6oNcB0O73+r3BZt+xtsfjvvP2PCE8DCCG8UaW1vKCyQZZBf4jRJMP7o71GsExlcVOtxO/vgBoo8xllYksVkEe2nk1HDpQTj5y0q4sPO8raBk5VxNTy76nbYyujTXCF33Gjx3t1OT6KlpSyfXZd8v1CeVkdhG/zNbb1JPnTZeSnXu/kp25ckZpHFkFfu4/inquEEMPHlNB3RTorAJfDx9VUVeIsUeNjK0igXtvRZ1ggPlcdw5QUgbodnCe7kaEta1Oiw+W7ErEg16FYKh+P8fo5XELcwRQ5RATu1ujyojTcqhqPuf+hy0U/BMB14PMHjq/4Pi/rdn+2Cz3NJhViV0RRk2C3fg0uzkkb8GDi4miNN+urNbQm0SHswhfq+9M/ZduilRq0gM7Mqn0mI5ciug5r5P0FI1cl50CkKjHpPG/s/0dcRlnMhepIKQ89nE7/zaSPd820oLnrXT7NhEkmkjCwqTqXyJKkqpdEgsbYVF+EExsrt+lUruD9ATC79m5JmmeTftM/DkSTGJXZaOLeHMSxz6mx0vEgf4F1nP6ExwLHdO4uSG93N7eeQVXf4bj+0MEzizzqLzrVmQybngzBohFRNmQ051PWzbUYR4NvMD1Ljw3AcXBi9vq6RB6/7EcwBW48iTnO0rSVHXFW8wy08Tizl9+RlNqrXZGhWf5flYZ4jW4qttsLXWH7oyISkHP5qqyVH442QMxrGhR6nErzRUnI/l5NOLVZRpirtirCg8qh6Z1+GCrxQctPmjxwdJlKFcHIOT7YC1CaBHCsiAELmUjeB0+YyNUPFzCxtYkbLYVCZuaPU0FvNFCnDqYUwN15oM7SshTC3u0DC2ZKl/fkTGQirsFh7sd7fUdxmlp8gpcNAc20uOjeozUgJPqsZIeL+kxUxNu0jurBvxUh6HqrtfIMlHhKT2m0uAqLbaaF1/VYawGnFWHtWrwVj3m0uOuRuxVi7/UGEyLw5qwmBaPKa95LetW55zgbA6ANjdIqwNqGrBWf5mt9pSFGrzVAjgpyzPXAUwVnKuDdBpYNxe0qzoSNcTTwLxaqFcH9/SQr8GTVqFfdQpVCKi0o1JVo0ihojqsVYe3ajCX/lqtBnvNc+PzOUyBt7X5Tpq1qKySnZofllktLGthWQvLlhOWPcmJqRaXzYvLGm9jtNCshWZ/eWhWyWY//jkn2fju88LXp0tSdjW7iZbdZikfKEvZa4LD3RYOt3C4hcPPI0v5mMeyW1R812yl+v5lC41baNxmLVuUpsxaNsK0XgvTWpjWwrRnkrVscdozyV62UK2Fam0W86mymIcIUUR4lyTmi2zkZvZSEVrb7aS0aDPuE2OxM4Uz8A2iOB2/tZUW0/cS5i+DTp8jkbLUWrN8oYlZ9IbhLPIJI4LJPN+MKxGV8t2Z2dvHNe/PzGtV4Dr/dhyfUFWrWvHydw4Vc7Xla9Z5r2v+mUB0zZRa+UW7kueWUDqBV9JFa+7Lc0X3cs5XuCjif+PeLa68DcKvHub6/l7GK/5AtxeQQOzCXfUbo9WMnBFheIrmOYOz0L4Id1lPw9ShriXRzR/hiIAEB7gXHokmBAqsGxnVN2r2203sz4ISrydEyRmP43/lwzDF2sp4aZm6cSbcdEJcRRLD05SQ8nKLWuLmb3/naYCEvVG8clmIFA+dMGG60O3INalzNK2OoAINhkgtfSO+JoyeaYyRb6E0yHkUkVi0F3iZFxWFf58DikRLCvj4xqx3EoLiS5cG7qj3qi8dLKb5v2TyixjJuRd9Rf7JdeCoLnylJmQ9BxOSRPeIJtTXWU7/HgbTpMAP5LnLRZZGhV/oACBZ0/rpmlydTsi50+3I2LBkEK3TAWl9bwpgrhGFThhzd1U3MWuq7YtUvVCBUKU/IExY78/WBXLPzYSLjwO1VvwU+EvF/kVtuMaqenpN7y2i6b0VUXHpw9Is+1AsmYrPy4SXG4XN51+QSdd45WORR0AAKh/OeDbMB8OL1+xzy0le9wUXbFqlnvM6b1r8j26Hr+Fuc9rc/63sIwdn+Rxo+q2qdvpeeMIDnjDfi93jf3DXtTddfrz5WAT2/QxZCtT8erqfrXLz5ffn4jWdxlvjc46ijLXj0I1TLGUmbPfB3Bptgq1R1x64m2Awtsadnt3rdQaD7mDLGWyCcdr4olhid17c/h8c4vp8in0AAA==
namespace-by-workload.json.gz:

View File

@ -5,7 +5,7 @@ metadata:
namespace: {{ .Release.Namespace }}
labels:
grafana_dashboard: "1"
{{ include "kubezero-lib.labels" . | indent 4 }}
{{- include "kubezero-lib.labels" . | nindent 4 }}
annotations:
k8s-sidecar-target-directory: Metrics
binaryData:

View File

@ -5,7 +5,7 @@ metadata:
namespace: {{ .Release.Namespace }}
labels:
grafana_dashboard: "1"
{{ include "kubezero-lib.labels" . | indent 4 }}
{{- include "kubezero-lib.labels" . | nindent 4 }}
binaryData:
home.json.gz:
H4sIAAAAAAAC/9VVS2/UMBC+8yuMDwikdnezj1b0VrVCVLwKFJBoq8obTxJrHTvYTndb1P+O7byczULFDS6J55vxeB6fxz+fIISJENIQw6TQ+Aj9tJAFOdPGSpdeQjXqNcuScXMmrDLa61BKDNGyVDFYBT5XMgeTQalxYAOCLLnTG1VCgGeM7kBZLMWJ5FI5hypdkueTPTSNIvtZLPZQ9CJ0LUjuDz7uckHP0DEHZXohmLvC21Gis6UkiuJa9+D/1/b74MwxUGa2osWpAHNGLSJKzitEkSK7kJIbVlh84kHmTKYv/ZozsXJVvbz2YkEEcN3Wtalqv3qNd69JGHB6IkXC0rY51RZISMmNb9lDkKG8BaVsQatTm+xaf6nVnUvd95VZcRb4WLsE5gGwaZKr5TsnD3z7xA9aURZ9TnnQNtWAcNTCTy+/n16gtzKV188zYwp9NB7HVIzuQcl9KtfCsBxGtuZjojUYPV6VS3DKMbd79nVOON8/mI8KkaIrfE/NFX5xJb4Bjy35kJHojbX/bu3ROzCKxRo9RW0cQTK59PTDOVErdyweJFbwMmXiKyhtE3Kmh6PFaNb6wC7QV5by281z+OeMJWaoMJ5a+LUNNfBTs9PAxlRR1DH8S0SJFltMiaaPMGW2mykt47Zuye/Jk0hOQfkrGJ6Rk82ZgdwZz0L8RwnKnY/DbutMrl8DoUykejh0nPYTxJah/O4rgzXQ3TafgajYVSMhXA+Uhii1a6ch6W+q/SjDmp1DCp02o0wPieTGnJ/k/y+ZesAf2DT/ezYB0C+Kuzo142c4epigsBltcj6cCm0H3hID2qD3sNYosWMA+aFzat2gC7brfgtrWbfEfqunQUGiQLua4NmkaiXWcQY56VgxPaxgc8fr9qpVZdnjh50fecHtKyjS4YPePXEux06fVPMLC7nej7I6ZmxkjeHetoLFK1DdZvuCUxA9wjcJ3TA78NUtCZ49q1wEZI0mgTALhSjv1otgHYXCbBJqsm49DdZR/dBfN3nZJG46Vlw+ekro+CB0HJ4ynYcC7daHNIx3O5Zm6neF7RX7XgqvXyq51lZZK2ryOa45qjmmofY5waW/FPjg4wdIFy/f3VfobUul+ZOHX/6tTqj9CQAA

View File

@ -19,10 +19,10 @@ patch -p0 -i zdt-pushgateway.patch --no-backup-if-mismatch
cd dashboards
./build.sh
# Patch for the apiserver dashboard
patch -p1 -i ../zdt-apiserver-dashboard.patch --no-backup-if-mismatch
../sync_grafana_dashboards.py metrics-dashboards.yaml ../templates/grafana-dashboards-metrics.yaml
../sync_grafana_dashboards.py k8s-dashboards.yaml ../templates/grafana-dashboards-k8s.yaml
../sync_grafana_dashboards.py zdt-dashboards.yaml ../templates/grafana-dashboards-zdt.yaml
cd -
# Delete not used upstream dashboards
rm -rf charts/kube-prometheus-stack/templates/grafana/dashboards-1.14

View File

@ -1,67 +0,0 @@
diff --git a/kube-mixin/apiserver.json b/kube-mixin/apiserver.json
index 9830c36..1c940dc 100644
--- a/kube-mixin/apiserver.json
+++ b/kube-mixin/apiserver.json
@@ -968,7 +968,7 @@
"steppedLine": false,
"targets": [
{
- "expr": "sum(rate(workqueue_adds_total{job=\"kube-apiserver\", instance=~\"$instance\", cluster=\"$cluster\"}[5m])) by (instance, name)",
+ "expr": "sum(rate(workqueue_adds_total{job=\"apiserver\", instance=~\"$instance\", cluster=\"$cluster\"}[5m])) by (instance, name)",
"format": "time_series",
"intervalFactor": 2,
"legendFormat": "{{instance}} {{name}}",
@@ -1049,7 +1049,7 @@
"steppedLine": false,
"targets": [
{
- "expr": "sum(rate(workqueue_depth{job=\"kube-apiserver\", instance=~\"$instance\", cluster=\"$cluster\"}[5m])) by (instance, name)",
+ "expr": "sum(rate(workqueue_depth{job=\"apiserver\", instance=~\"$instance\", cluster=\"$cluster\"}[5m])) by (instance, name)",
"format": "time_series",
"intervalFactor": 2,
"legendFormat": "{{instance}} {{name}}",
@@ -1130,7 +1130,7 @@
"steppedLine": false,
"targets": [
{
- "expr": "histogram_quantile(0.99, sum(rate(workqueue_queue_duration_seconds_bucket{job=\"kube-apiserver\", instance=~\"$instance\", cluster=\"$cluster\"}[5m])) by (instance, name, le))",
+ "expr": "histogram_quantile(0.99, sum(rate(workqueue_queue_duration_seconds_bucket{job=\"apiserver\", instance=~\"$instance\", cluster=\"$cluster\"}[5m])) by (instance, name, le))",
"format": "time_series",
"intervalFactor": 2,
"legendFormat": "{{instance}} {{name}}",
@@ -1224,7 +1224,7 @@
"steppedLine": false,
"targets": [
{
- "expr": "process_resident_memory_bytes{job=\"kube-apiserver\",instance=~\"$instance\", cluster=\"$cluster\"}",
+ "expr": "process_resident_memory_bytes{job=\"apiserver\",instance=~\"$instance\", cluster=\"$cluster\"}",
"format": "time_series",
"intervalFactor": 2,
"legendFormat": "{{instance}}",
@@ -1305,7 +1305,7 @@
"steppedLine": false,
"targets": [
{
- "expr": "rate(process_cpu_seconds_total{job=\"kube-apiserver\",instance=~\"$instance\", cluster=\"$cluster\"}[5m])",
+ "expr": "rate(process_cpu_seconds_total{job=\"apiserver\",instance=~\"$instance\", cluster=\"$cluster\"}[5m])",
"format": "time_series",
"intervalFactor": 2,
"legendFormat": "{{instance}}",
@@ -1386,7 +1386,7 @@
"steppedLine": false,
"targets": [
{
- "expr": "go_goroutines{job=\"kube-apiserver\",instance=~\"$instance\", cluster=\"$cluster\"}",
+ "expr": "go_goroutines{job=\"apiserver\",instance=~\"$instance\", cluster=\"$cluster\"}",
"format": "time_series",
"intervalFactor": 2,
"legendFormat": "{{instance}}",
@@ -1490,7 +1490,7 @@
"multi": false,
"name": "instance",
"options": [ ],
- "query": "label_values(apiserver_request_total{job=\"kube-apiserver\", cluster=\"$cluster\"}, instance)",
+ "query": "label_values(apiserver_request_total{job=\"apiserver\", cluster=\"$cluster\"}, instance)",
"refresh": 2,
"regex": "",
"sort": 1,