Getting Started
This guide assumes you have a basic understanding of the Prometheus Operator. If you are new to it, please start with the Introduction page before proceeding. This guide will walk you through deploying Prometheus and Alertmanager instances.
Deploying Prometheus
To deploy a Prometheus instance, you must create the RBAC rules for the Prometheus service account.
First, create a ServiceAccount for Prometheus.
apiVersion: v1
kind: ServiceAccount
metadata:
name: prometheus
Next, create a ClusterRole that grants Prometheus the necessary permissions to discover and scrape the targets within the cluster.
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: prometheus
rules:
- apiGroups: [""]
resources:
- nodes
- nodes/metrics
- services
- endpoints
- pods
verbs: ["get", "list", "watch"]
- apiGroups: [""]
resources:
- configmaps
verbs: ["get"]
- apiGroups:
- discovery.k8s.io
resources:
- endpointslices
verbs: ["get", "list", "watch"]
- apiGroups:
- networking.k8s.io
resources:
- ingresses
verbs: ["get", "list", "watch"]
- nonResourceURLs: ["/metrics"]
verbs: ["get"]
Now, create a ClusterRoleBinding to bind the ClusterRole to the Prometheus ServiceAccount.
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: prometheus
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: prometheus
subjects:
- kind: ServiceAccount
name: prometheus
namespace: default
Apply all these manifests to create the necessary RBAC resources. Now you are all set to deploy a Prometheus instance. Here is an example of a basic Prometheus instance manifest.
apiVersion: monitoring.coreos.com/v1
kind: Prometheus
metadata:
name: prometheus
spec:
serviceAccountName: prometheus
To verify that the instance is up and running, run:
kubectl get -n default prometheus prometheus -w
For more information, see the Prometheus Operator RBAC guide.
Deploying Alertmanager
Let us take a simple example that creates 3 replicas of Alertmanager.
apiVersion: monitoring.coreos.com/v1
kind: Alertmanager
metadata:
name: example
spec:
replicas: 3
Wait for all Alertmanager pods to be ready:
kubectl get pods -l alertmanager=example -w
However, Alertmanager as it is now is of no use to us. To properly use Alertmanager, it is important to understand the relationship between Prometheus and Alertmanager. Alertmanager is used to:
- Deduplicate alerts received from Prometheus.
- Silence alerts.
- Route and send grouped notifications to various integrations (PagerDuty, OpsGenie, mail, chat, …).
So, to put Alertmanager instances to use, you would need to integrate it with Prometheus.
Integrating Alertmanager With Prometheus
Exposing the Alertmanager service
To access the Alertmanager interface, you have to expose the service to the outside. For
simplicity, we use a NodePort
Service.
apiVersion: v1
kind: Service
metadata:
name: alertmanager-example
spec:
type: NodePort
ports:
- name: web
nodePort: 30903
port: 9093
protocol: TCP
targetPort: web
selector:
alertmanager: example
Once the Service is created, the Alertmanager web server is available under the
node’s IP address on port 30903
.
Note: Exposing the Alertmanager web server this way may not be an applicable solution. Read more about the possible options in the Ingress guide.
Configuring Alertmanager in Prometheus
The Alertmanager cluster is now fully functional and highly available, but no alerts are fired against it.
First, create a Prometheus instance that will send alerts to the Alertmanger cluster:
apiVersion: monitoring.coreos.com/v1
kind: Prometheus
metadata:
name: example
spec:
serviceAccountName: prometheus
replicas: 2
alerting:
alertmanagers:
- namespace: default
name: alertmanager-example
port: web
The Prometheus
resource discovers all of the Alertmanager instances behind
the Service
created before (pay attention to name
, namespace
and port
fields which should match with the definition of the Alertmanager Service).
Open the Prometheus web interface, go to the “Status > Runtime & Build Information” page and check that the Prometheus has discovered 3 Alertmanager instances.