diff --git a/README.md b/README.md index 0ff7e2017410eebd587e4e06bfbb1dae451d8c22..89686cf426c63547206096f0700cddbdee7c3b1e 100644 --- a/README.md +++ b/README.md @@ -26,6 +26,7 @@ This stack is meant for cluster monitoring, so it is pre-configured to collect m * [Compiling](#compiling) * [Configuration](#configuration) * [Customization](#customization) + * [Alertmanager configuration](#alertmanager-configuration) * [Customizing Prometheus alerting/recording rules and Grafana dashboards](#customizing-prometheus-alertingrecording-rules-and-grafana-dashboards) * [Exposing Prometheus/Alermanager/Grafana via Ingress](#exposing-prometheusalermanagergrafana-via-ingress) * [Minikube Example](#minikube-example) @@ -242,6 +243,49 @@ local daemonset = k.apps.v1beta2.daemonSet; }).nodeExporter.daemonset ``` +### Alertmanager configuration + +The Alertmanager configuration is located in the `_config.alertmanager.config` configuration field. In order to set a custom Alertmanager configuration simply set this field. + +[embedmd]:# (examples/alertmanager-config.jsonnet) +```jsonnet +((import 'kube-prometheus/kube-prometheus.libsonnet') + { + _config+:: { + alertmanager+: { + config: ||| + global: + resolve_timeout: 10m + route: + group_by: ['job'] + group_wait: 30s + group_interval: 5m + repeat_interval: 12h + receiver: 'null' + routes: + - match: + alertname: DeadMansSwitch + receiver: 'null' + receivers: + - name: 'null' + |||, + }, + }, + }).alertmanager.secret +``` + +In the above example the configuration has been inlined, but can just as well be an external file imported in jsonnet via the `importstr` function. + +[embedmd]:# (examples/alertmanager-config-external.jsonnet) +```jsonnet +((import 'kube-prometheus/kube-prometheus.libsonnet') + { + _config+:: { + alertmanager+: { + config: importstr 'alertmanager-config.yaml', + }, + }, + }).alertmanager.secret +``` + ### Customizing Prometheus alerting/recording rules and Grafana dashboards See [developing Prometheus rules and Grafana dashboards](docs/developing-prometheus-rules-and-grafana-dashboards.md) guide. diff --git a/examples/alertmanager-config-external.jsonnet b/examples/alertmanager-config-external.jsonnet new file mode 100644 index 0000000000000000000000000000000000000000..c2b34ccaa36892ce5a0fa28ff1947083d5d93167 --- /dev/null +++ b/examples/alertmanager-config-external.jsonnet @@ -0,0 +1,7 @@ +((import 'kube-prometheus/kube-prometheus.libsonnet') + { + _config+:: { + alertmanager+: { + config: importstr 'alertmanager-config.yaml', + }, + }, + }).alertmanager.secret diff --git a/examples/alertmanager-config.jsonnet b/examples/alertmanager-config.jsonnet new file mode 100644 index 0000000000000000000000000000000000000000..162104d71470aba4cc45b9b21f9c793550a4580b --- /dev/null +++ b/examples/alertmanager-config.jsonnet @@ -0,0 +1,22 @@ +((import 'kube-prometheus/kube-prometheus.libsonnet') + { + _config+:: { + alertmanager+: { + config: ||| + global: + resolve_timeout: 10m + route: + group_by: ['job'] + group_wait: 30s + group_interval: 5m + repeat_interval: 12h + receiver: 'null' + routes: + - match: + alertname: DeadMansSwitch + receiver: 'null' + receivers: + - name: 'null' + |||, + }, + }, + }).alertmanager.secret diff --git a/examples/alertmanager-config.yaml b/examples/alertmanager-config.yaml new file mode 100644 index 0000000000000000000000000000000000000000..78c65b64723bf1ed42857fb13284ace813cc85e5 --- /dev/null +++ b/examples/alertmanager-config.yaml @@ -0,0 +1,15 @@ +# external alertmanager yaml +global: + resolve_timeout: 10m +route: + group_by: ['job'] + group_wait: 30s + group_interval: 5m + repeat_interval: 12h + receiver: 'null' + routes: + - match: + alertname: DeadMansSwitch + receiver: 'null' +receivers: +- name: 'null' diff --git a/jsonnet/kube-prometheus/alertmanager/alertmanager.libsonnet b/jsonnet/kube-prometheus/alertmanager/alertmanager.libsonnet index 473f89d35fe3d0f5ee77d3108f3aa0ca646b1435..27bc2398ed50889278070a4547df933ceed9a1fb 100644 --- a/jsonnet/kube-prometheus/alertmanager/alertmanager.libsonnet +++ b/jsonnet/kube-prometheus/alertmanager/alertmanager.libsonnet @@ -1,7 +1,5 @@ local k = import 'ksonnet/ksonnet.beta.3/k.libsonnet'; -local alertmanagerConfig = "\nglobal:\n resolve_timeout: 5m\nroute:\n group_by: ['job']\n group_wait: 30s\n group_interval: 5m\n repeat_interval: 12h\n receiver: 'null'\n routes:\n - match:\n alertname: DeadMansSwitch\n receiver: 'null'\nreceivers:\n- name: 'null'\n"; - { _config+:: { namespace: 'default', @@ -16,7 +14,22 @@ local alertmanagerConfig = "\nglobal:\n resolve_timeout: 5m\nroute:\n group_by alertmanager+:: { name: $._config.alertmanager.name, - config: alertmanagerConfig, + config: ||| + global: + resolve_timeout: 5m + route: + group_by: ['job'] + group_wait: 30s + group_interval: 5m + repeat_interval: 12h + receiver: 'null' + routes: + - match: + alertname: DeadMansSwitch + receiver: 'null' + receivers: + - name: 'null' + |||, replicas: 3, }, }, diff --git a/manifests/alertmanager-secret.yaml b/manifests/alertmanager-secret.yaml index 07155d978fbf185accebf22890325d2ee8c9c39a..4a143fbb16883e5afd3375518d4abf12632398fe 100644 --- a/manifests/alertmanager-secret.yaml +++ b/manifests/alertmanager-secret.yaml @@ -1,6 +1,6 @@ apiVersion: v1 data: - alertmanager.yaml: Cmdsb2JhbDoKICByZXNvbHZlX3RpbWVvdXQ6IDVtCnJvdXRlOgogIGdyb3VwX2J5OiBbJ2pvYiddCiAgZ3JvdXBfd2FpdDogMzBzCiAgZ3JvdXBfaW50ZXJ2YWw6IDVtCiAgcmVwZWF0X2ludGVydmFsOiAxMmgKICByZWNlaXZlcjogJ251bGwnCiAgcm91dGVzOgogIC0gbWF0Y2g6CiAgICAgIGFsZXJ0bmFtZTogRGVhZE1hbnNTd2l0Y2gKICAgIHJlY2VpdmVyOiAnbnVsbCcKcmVjZWl2ZXJzOgotIG5hbWU6ICdudWxsJwo= + alertmanager.yaml: Z2xvYmFsOgogIHJlc29sdmVfdGltZW91dDogNW0Kcm91dGU6CiAgZ3JvdXBfYnk6IFsnam9iJ10KICBncm91cF93YWl0OiAzMHMKICBncm91cF9pbnRlcnZhbDogNW0KICByZXBlYXRfaW50ZXJ2YWw6IDEyaAogIHJlY2VpdmVyOiAnbnVsbCcKICByb3V0ZXM6CiAgLSBtYXRjaDoKICAgICAgYWxlcnRuYW1lOiBEZWFkTWFuc1N3aXRjaAogICAgcmVjZWl2ZXI6ICdudWxsJwpyZWNlaXZlcnM6Ci0gbmFtZTogJ251bGwnCg== kind: Secret metadata: name: alertmanager-main