Compare Grafana alerting vs Prometheus Alertmanager. When should you use each, and can they work together?
Quick Answer
Prometheus Alertmanager: production-grade, supports clustering, deduplication, silencing, and routing. Grafana alerting: unified across data sources, easier UI, but less mature for high-volume alerting. They can coexist.
Detailed Answer
Prometheus Alertmanager
- Alert rules defined in Prometheus (PromQL-based) - Alertmanager handles routing, grouping, deduplication, silencing - Supports clustering for HA (gossip protocol) - Mature, battle-tested at scale - Only works with Prometheus-compatible metrics
Grafana Alerting (Grafana 9+)
- Unified alerting across ANY data source (Prometheus, Elasticsearch, CloudWatch, Loki) - Visual alert rule builder in the Grafana UI - Multi-dimensional alerts (one rule, multiple series) - Contact points and notification policies (similar to Alertmanager routing) - Can use Prometheus Alertmanager as an external alertmanager
When to use each
- Use Alertmanager when: All alerts are Prometheus-based, need clustering/HA for alerting, operating at very high scale (1000s of alert rules), team prefers config-as-code (YAML) - Use Grafana Alerting when: Need to alert on non-Prometheus sources (Elasticsearch, CloudWatch), prefer UI-based management, want unified alert management across all data sources
Together: Grafana can send alerts TO Alertmanager as an external backend, giving you Grafana's multi-source alert creation with Alertmanager's routing and deduplication.
Code Example
# Prometheus alert rule (rules.yml)
groups:
- name: slo-alerts
rules:
- alert: HighErrorRate
expr: |
sum(rate(http_requests_total{status=~"5.."}[5m]))
/ sum(rate(http_requests_total[5m])) > 0.01
for: 5m
labels:
severity: page
annotations:
summary: "Error rate above 1%"
# Grafana alert rule (provisioning YAML)
apiVersion: 1
groups:
- orgId: 1
name: api-alerts
folder: SRE
interval: 1m
rules:
- uid: high-error-rate
title: High Error Rate
condition: C
data:
- refId: A
datasourceUid: prometheus
model:
expr: sum(rate(http_requests_total{status=~"5.."}[5m]))
- refId: B
datasourceUid: prometheus
model:
expr: sum(rate(http_requests_total[5m]))
- refId: C
datasourceUid: __expr__
model:
type: math
expression: $A / $B > 0.01Interview Tip
Show you know both systems and can articulate when each is appropriate. The hybrid approach (Grafana for multi-source alert creation, Alertmanager as backend) demonstrates architectural maturity.