Home
/
Alert Requirements
Alert Requirements
What each runbook's alert needs in order to fire. If the metric source
in the "Provided by" column isn't being scraped, the rule is valid but
never triggers. Read in chat with /alertmanager docs requirements.
Legend for "Extra tooling":
- — works with metrics a standard cluster already scrapes
(kube-state-metrics, cAdvisor/kubelet, node-exporter, kube-apiserver).
- ⚠ named tool requires deploying that tool first, or the alert is dark.
Compute
| Runbook |
Key metric(s) |
Provided by |
Extra tooling |
high-cpu-usage |
container_cpu_usage_seconds_total |
cAdvisor (kubelet) |
— |
high-memory-usage |
container_memory_working_set_bytes, container_spec_memory_limit_bytes |
cAdvisor |
— |
high-memory-usage (OOMKilled) |
kube_pod_container_status_last_terminated_reason |
kube-state-metrics |
— |
pod-crashloopbackoff |
kube_pod_container_status_restarts_total |
kube-state-metrics |
— |
pod-not-ready |
kube_pod_status_ready |
kube-state-metrics |
— |
deployment-replicas-unavailable |
kube_deployment_status_replicas_available |
kube-state-metrics |
— |
node-not-ready |
kube_node_status_condition |
kube-state-metrics |
— |
cpu-throttling-high |
container_cpu_cfs_throttled_periods_total, ..._periods_total |
cAdvisor |
— |
image-pull-backoff |
kube_pod_container_status_waiting_reason |
kube-state-metrics |
— |
pods-unschedulable |
kube_pod_status_unschedulable |
kube-state-metrics |
— |
Application
| Runbook |
Key metric(s) |
Provided by |
Extra tooling |
high-http-error-rate |
http_requests_total{status=~"5.."} |
app instrumentation |
⚠ app must expose request metrics |
high-api-latency |
http_request_duration_seconds_bucket |
app instrumentation |
⚠ app must expose a latency histogram |
service-endpoint-down |
probe_success |
blackbox-exporter |
⚠ blackbox-exporter + probe config |
request-rate-anomaly |
http_requests_total |
app instrumentation |
⚠ app must expose request metrics |
Database
| Runbook |
Key metric(s) |
Provided by |
Extra tooling |
database-connectivity-loss |
mattermost_db_master_connections_total |
Mattermost metrics endpoint |
⚠ enable MM metrics |
database-replication-lag |
pg_replication_lag_seconds |
postgres-exporter |
⚠ postgres-exporter |
database-high-latency |
query-time histogram |
postgres-exporter / app |
⚠ postgres-exporter or app metrics |
postgres-connections-near-max |
pg_stat_activity_count, pg_settings_max_connections |
postgres-exporter |
⚠ postgres-exporter |
Storage
| Runbook |
Key metric(s) |
Provided by |
Extra tooling |
persistent-volume-full |
kubelet_volume_stats_available_bytes, ..._capacity_bytes |
kubelet |
— |
disk-fill-rate-high |
node_filesystem_avail_bytes |
node-exporter |
⚠ node-exporter |
Networking
| Runbook |
Key metric(s) |
Provided by |
Extra tooling |
ingress-high-5xx |
ingress 5xx counter |
nginx/traefik ingress metrics |
⚠ ingress-controller metrics |
certificate-expiring-soon |
probe_ssl_earliest_cert_expiry |
blackbox-exporter |
⚠ blackbox-exporter |
dns-resolution-failure |
coredns_dns_responses_total |
CoreDNS metrics |
⚠ CoreDNS metrics scrape |
Observability
| Runbook |
Key metric(s) |
Provided by |
Extra tooling |
prometheus-scrape-target-down |
up |
Prometheus (built-in) |
— |
alertmanager-notification-failure |
alertmanager_notifications_failed_total |
Alertmanager (built-in) |
— |
Security
| Runbook |
Key metric(s) |
Provided by |
Extra tooling |
unexpected-container-image |
kube_pod_container_info |
kube-state-metrics |
— (tune allowlist regex) |
apiserver-auth-failure-spike |
apiserver_request_total{code=~"401|403"} |
kube-apiserver |
— |
privileged-container-started |
kyverno_policy_results_total (or equiv) |
policy engine |
⚠ Kyverno / Gatekeeper |
interactive-shell-in-container |
falco_events{rule="Terminal shell in container"} |
Falco |
⚠ Falco |
rbac-privilege-escalation |
falco_events{rule=~"...RoleBinding..."} |
Falco k8s-audit plugin |
⚠ audit logs + Falco |
security-tooling-down |
up{job=~"falco|kyverno.*"} |
the sensors' scrape targets |
⚠ sensors must expose /metrics |
Bootstrapping checklist
To light up the — rows (most of the catalog) you need, at minimum:
kube-state-metrics, cAdvisor/kubelet, node-exporter, and kube-apiserver
scraped by Prometheus. Everything else is opt-in per the ⚠ column.
The three ⚠ Falco/Kyverno security rows are the highest-lift — they
need runtime/policy/audit tooling deployed. Until then those alerts (and
security-tooling-down watching them) stay dark. See
/alertmanager docs alerts for the plain catalog.