From f49680349e51667769ac95f79ea35e3d9b1c7c66 Mon Sep 17 00:00:00 2001 From: Andreas Holmsten Date: Mon, 15 Apr 2019 14:00:18 +0200 Subject: [PATCH] [stable/percona-xtradb-cluster] Add prometheus-operator support (#11994) Signed-off-by: Andreas Holmsten --- stable/percona-xtradb-cluster/Chart.yaml | 2 +- stable/percona-xtradb-cluster/README.md | 8 +++ .../templates/prometheusrule.yaml | 61 +++++++++++++++++++ .../templates/service-metrics.yaml | 3 +- .../templates/servicemonitor.yaml | 27 ++++++++ stable/percona-xtradb-cluster/values.yaml | 32 ++++++++++ 6 files changed, 131 insertions(+), 2 deletions(-) create mode 100644 stable/percona-xtradb-cluster/templates/prometheusrule.yaml create mode 100644 stable/percona-xtradb-cluster/templates/servicemonitor.yaml diff --git a/stable/percona-xtradb-cluster/Chart.yaml b/stable/percona-xtradb-cluster/Chart.yaml index 6f9c39461a..558500d63d 100644 --- a/stable/percona-xtradb-cluster/Chart.yaml +++ b/stable/percona-xtradb-cluster/Chart.yaml @@ -1,5 +1,5 @@ name: percona-xtradb-cluster -version: 0.6.6 +version: 0.7.0 appVersion: 5.7.19 description: free, fully compatible, enhanced, open source drop-in replacement for MySQL with Galera Replication (xtradb) diff --git a/stable/percona-xtradb-cluster/README.md b/stable/percona-xtradb-cluster/README.md index ec9afaf43c..d69ee3e32a 100644 --- a/stable/percona-xtradb-cluster/README.md +++ b/stable/percona-xtradb-cluster/README.md @@ -82,6 +82,14 @@ The following table lists the configurable parameters of the Percona chart and t | `metricsExporter.enabled` | if set to true runs a [mysql metrics exporter](https://github.com/prometheus/mysqld_exporter) container in the pod | false | | `metricsExporter.commandOverrides` | Overrides default docker command for metrics exporter | `[]` | | `metricsExporter.argsOverrides` | Overrides default docker args for metrics exporter | `[]` | +| `prometheus.operator.enabled` | Setting to true will create Prometheus-Operator specific resources | `false` | +| `prometheus.operator.prometheusRule.enabled` | Create default alerting rules | `true` | +| `prometheus.operator.prometheusRule.labels` | Labels to add to alerts | `{}` | +| `prometheus.operator.prometheusRule.namespace` | Namespace which Prometheus is installed in | `nil` | +| `prometheus.operator.prometheusRule.selector` | Label Selector for Prometheus to find ServiceMonitors | `nil` | +| `prometheus.operator.serviceMonitor.interval` | Interval at which Prometheus will scrape metrics exporter | `10s` | +| `prometheus.operator.serviceMonitor.namespace` | Namespace which Prometheus is installed in | `nil` | +| `prometheus.operator.serviceMonitor.selector` | Label Selector for Prometheus to find ServiceMonitors | `nil` | | `podDisruptionBudget` | Pod disruption budget | `{enabled: false, maxUnavailable: 1}` | | `service.percona.headless` | if set to true makes the percona service [headless](https://kubernetes.io/docs/concepts/services-networking/service/#headless-services) | false | diff --git a/stable/percona-xtradb-cluster/templates/prometheusrule.yaml b/stable/percona-xtradb-cluster/templates/prometheusrule.yaml new file mode 100644 index 0000000000..fe07a7e343 --- /dev/null +++ b/stable/percona-xtradb-cluster/templates/prometheusrule.yaml @@ -0,0 +1,61 @@ +{{ if and .Values.metricsExporter.enabled .Values.prometheus.operator.enabled .Values.prometheus.operator.prometheusRule.enabled }} +apiVersion: monitoring.coreos.com/v1 +kind: PrometheusRule +metadata: + name: {{ template "percona-xtradb-cluster.fullname" . }} +{{- if .Values.prometheus.operator.prometheusRule.namespace }} + namespace: {{ .Values.prometheus.operator.prometheusRule.namespace }} +{{- end }} + labels: + app: {{ template "percona-xtradb-cluster.fullname" . }} + chart: "{{ .Chart.Name }}-{{ .Chart.Version }}" + heritage: "{{ .Release.Service }}" + release: "{{ .Release.Name }}" +{{- if .Values.prometheus.operator.prometheusRule.selector }} +{{ toYaml .Values.prometheus.operator.prometheusRule.selector | indent 4 }} +{{- end }} +spec: + groups: + - name: {{ template "percona-xtradb-cluster.fullname" . }}-alerts + rules: + - alert: MySQLGaleraNotReady + annotations: + message: Galera cluster node not ready + expr: mysql_global_status_wsrep_ready{service="{{ template "percona-xtradb-cluster.fullname" . }}-metrics"} != 1 + for: 5m + labels: + severity: critical +{{- if .Values.prometheus.operator.prometheusRule.labels }} +{{ toYaml .Values.prometheus.operator.prometheusRule.labels | indent 8 }} +{{- end }} + - alert: MySQLGaleraOutOfSync + annotations: + message: Galera cluster node out of sync + expr: (mysql_global_status_wsrep_local_state{service="{{ template "percona-xtradb-cluster.fullname" . }}-metrics"} != 4 and mysql_global_variables_wsrep_desync{service="{{ template "percona-xtradb-cluster.fullname" . }}-metrics"} == 0) + for: 5m + labels: + severity: critical +{{- if .Values.prometheus.operator.prometheusRule.labels }} +{{ toYaml .Values.prometheus.operator.prometheusRule.labels | indent 8 }} +{{- end }} + - alert: MySQLGaleraDonorFallingBehind + annotations: + message: xtradb cluster donor node falling behind + expr: (mysql_global_status_wsrep_local_state{service="{{ template "percona-xtradb-cluster.fullname" . }}-metrics"} == 2 and mysql_global_status_wsrep_local_recv_queue{service="{{ template "percona-xtradb-cluster.fullname" . }}-metrics"} > 100) + for: 5m + labels: + severity: warning +{{- if .Values.prometheus.operator.prometheusRule.labels }} +{{ toYaml .Values.prometheus.operator.prometheusRule.labels | indent 8 }} +{{- end }} + - alert: MySQLInnoDBLogWaits + annotations: + message: MySQL innodb log writes stalling + expr: rate(mysql_global_status_innodb_log_waits{service="{{ template "percona-xtradb-cluster.fullname" . }}-metrics"}[15m]) > 10 + for: 5m + labels: + severity: warning +{{- if .Values.prometheus.operator.prometheusRule.labels }} +{{ toYaml .Values.prometheus.operator.prometheusRule.labels | indent 8 }} +{{- end }} +{{ end }} diff --git a/stable/percona-xtradb-cluster/templates/service-metrics.yaml b/stable/percona-xtradb-cluster/templates/service-metrics.yaml index 9ab6acc327..5bcc5541aa 100644 --- a/stable/percona-xtradb-cluster/templates/service-metrics.yaml +++ b/stable/percona-xtradb-cluster/templates/service-metrics.yaml @@ -12,7 +12,8 @@ metadata: spec: clusterIP: None ports: - - port: 9104 + - name: metrics + port: 9104 selector: app: {{ template "percona-xtradb-cluster.fullname" . }} release: "{{ .Release.Name }}" diff --git a/stable/percona-xtradb-cluster/templates/servicemonitor.yaml b/stable/percona-xtradb-cluster/templates/servicemonitor.yaml new file mode 100644 index 0000000000..7b7216826b --- /dev/null +++ b/stable/percona-xtradb-cluster/templates/servicemonitor.yaml @@ -0,0 +1,27 @@ +{{ if and .Values.metricsExporter.enabled .Values.prometheus.operator.enabled }} +apiVersion: monitoring.coreos.com/v1 +kind: ServiceMonitor +metadata: + name: {{ template "percona-xtradb-cluster.fullname" . }} +{{- if .Values.prometheus.operator.serviceMonitor.namespace }} + namespace: {{ .Values.prometheus.operator.serviceMonitor.namespace }} +{{- end }} + labels: + app: {{ template "percona-xtradb-cluster.fullname" . }} + chart: "{{ .Chart.Name }}-{{ .Chart.Version }}" + heritage: "{{ .Release.Service }}" + release: "{{ .Release.Name }}" +{{- if .Values.prometheus.operator.serviceMonitor.selector }} +{{ toYaml .Values.prometheus.operator.serviceMonitor.selector | indent 4 }} +{{- end }} +spec: + selector: + matchLabels: + app: {{ template "percona-xtradb-cluster.fullname" . }} + release: {{ .Release.Name }} + endpoints: + - port: metrics + interval: {{ .Values.prometheus.operator.serviceMonitor.interval }} + namespaceSelector: + any: true +{{ end }} diff --git a/stable/percona-xtradb-cluster/values.yaml b/stable/percona-xtradb-cluster/values.yaml index b75213b3ce..4d10525c05 100644 --- a/stable/percona-xtradb-cluster/values.yaml +++ b/stable/percona-xtradb-cluster/values.yaml @@ -101,6 +101,38 @@ metricsExporter: commandOverrides: [] argsOverrides: [] +prometheus: + ## Are you using [Prometheus Operator](https://coreos.com/operators/prometheus/docs/latest/user-guides/getting-started.html)? + operator: + ## Setting to true will create Prometheus-Operator specific resources like ServiceMonitors + enabled: false + + ## Configures alerts for Prometheus to pick up + prometheusRule: + enabled: true + + ## Labels to add to alerts + labels: {} + + ## Namespace which Prometheus is installed in + # namespace: monitoring + + ## Label Selector for Prometheus to find alert rules + # selector: + # prometheus: kube-prometheus + + ## Configures targets for Prometheus to pick up + serviceMonitor: + ## Interval at which Prometheus will scrape metrics exporter + interval: 10s + + ## Namespace which Prometheus is installed in + # namespace: monitoring + + ## Label Selector for Prometheus to find ServiceMonitors + # selector: + # prometheus: kube-prometheus + ## When set to true will create sidecar to tail mysql log logTail: true