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