Skip to content
SYS.DOCS // DOCS

Cluster Alerts

Use Alerts inside Clusters -> Observability to manage cluster-scoped metric alerts.

The Alerts workspace stores alert definitions in Edka and evaluates them from the cluster metrics store. Firing alerts feed into the same global Notifications system as built in cluster, Kubernetes, add-on, and storage checks.

Custom alerts require VictoriaMetrics on the cluster. If VictoriaMetrics is not installed, you can still open the Alerts tab, but rules wait for the metrics store before they can evaluate.

Edka Agent evaluates saved rules inside the cluster and reports the latest series state back to Edka.

Some alert packs have extra metric requirements:

  • workloads, cluster health, and storage packs use kube-state-metrics, cAdvisor, or kubelet metrics
  • PostgreSQL packs use CloudNativePG metrics
  • ClickHouse packs use ClickHouse exporter metrics
  • Valkey packs use the built-in Valkey exporter, collected through the existing VictoriaMetrics annotated-pod scrape
  • NAT Gateway packs use Edka NAT Gateway metrics
  • host infrastructure packs use Node Exporter metrics
  • the certificates pack uses cert-manager certificate metrics, collected through the VictoriaMetrics annotated-pod scrape
  • the External Secrets pack uses External Secrets Operator metrics, collected through the VictoriaMetrics annotated-pod scrape

Open Alerts -> Rules to create, inspect, edit, or delete custom alert rules.

Each rule includes:

  • PromQL query
  • comparator and threshold
  • for duration
  • keep firing for: how long a firing alert waits without a match before it resolves, 2 minutes by default
  • evaluation interval
  • severity: critical, warning, or info
  • labels and annotations
  • optional routing labels such as team or owner

Rules can be enabled or disabled without deleting them. Disabled rules remain saved but are not evaluated.

Use Test rule from the editor to run the PromQL query and threshold against VictoriaMetrics before saving.

The test result shows:

  • how many series were returned
  • how many series matched the comparator and threshold
  • the labels, values, and per-series match status for the returned series (up to the first several)

This is useful for checking metric names, label filters, and threshold units before the rule starts producing notifications.

The Rules view summarizes current evaluation state:

  • OK: enabled rules with no matching alert series
  • Pending: rules with matching series that have not reached their for duration yet
  • Firing: rules whose matching series reached the configured for duration
  • Disabled: saved rules excluded from evaluation
  • Not evaluated: rules that have not reported a state yet

Rule rows also show the last evaluation time, matching series count, and any evaluation error reported by the evaluator.

Alerts reach the delivery channels whose cluster, severity, and label filters match. Channels are organization-wide and live in Settings -> Notifications -> Channels. See Platform Notifications.

Admins see a Delivery line at the top of Alerts -> Rules:

  • the active channels that receive this cluster’s alerts, with Manage to edit them in Settings
  • a warning for each channel whose severity or label filters match none of the enabled rules
  • Add channel when no channel covers the cluster, which opens a new channel in Settings with this cluster selected

Open Alerts -> Packs to install predefined rules as editable cluster alert rules.

Current packs include:

  • Workloads: availability of Deployments, StatefulSets, and DaemonSets, stalled rollouts, and pod restarts
  • Postgres: connection pressure, replication lag, blocked backends, and long transactions for CloudNativePG clusters
  • ClickHouse: replica availability, replication health, query failures, and disk pressure
  • Valkey: availability, memory and connection pressure, replication, persistence failures, and missing core metrics
  • Storage: unbound claims and high or critical persistent volume claim usage
  • Cluster Health: node readiness, pods that fail, cannot start, or stay pending, and container resource alerts
  • NAT Gateway: conntrack table capacity on NAT gateway members. NAT gateway health and failovers notify without a pack.
  • Gateway: Envoy Gateway proxy availability, 5xx rate, p95 latency, rate limiting, backend health per route, upstream timeouts, TLS handshake failures, and certificate expiry
  • Host Infrastructure: host root filesystem usage, inode usage, sustained CPU, encrypted local storage usage, IO pressure and degraded software RAID alerts based on Node Exporter metrics
  • Certificates: overdue renewals and upcoming expiry for every cert-manager certificate in the cluster
  • External Secrets: synced secrets that fail to sync and secret stores that can’t connect to their provider

Pack rules are installed as normal custom rules. You can edit or delete them after installation. They do not count toward your plan’s alert rule limit, which applies only to rules you create yourself. Labels starting with edka.io/ mark pack rules and are managed by Edka.

Installing packs from this tab requires the Standard plan or higher. Packs Edka installs on its own are included on every plan: Workloads, Cluster Health, and Storage once VictoriaMetrics is installed, Postgres when a database becomes ready, Host Infrastructure with Node Exporter, Certificates once VictoriaMetrics and cert-manager are both installed, and External Secrets once VictoriaMetrics and the External Secrets add-on are both installed.

A rule marked off by default is installed disabled. Turn it on from Alerts -> Rules.

If a pack is already partially installed, Edka can install the missing rules. Rules with name conflicts are skipped instead of overwriting unrelated custom rules.

Edka installs Workloads once VictoriaMetrics is on the cluster. It adds nine editable rules based on kube-state-metrics. They evaluate once a minute, keeping each Deployment, StatefulSet, DaemonSet, pod, and Job separate.

RuleConditionDurationSeverity
Deployment has no ready replicasA Deployment that wants at least one replica has none ready3 minutesCritical
Deployment has unavailable replicasSome replicas are unavailable while at least one is ready5 minutesWarning
Deployment rollout is stalledThe observed generation is behind the metadata generation10 minutesWarning
StatefulSet has no ready replicasA StatefulSet that wants at least one replica has none ready3 minutesCritical
StatefulSet has unavailable replicasFewer replicas are ready than wanted while at least one is ready5 minutesWarning
DaemonSet has no ready podsA DaemonSet scheduled on at least one node has no ready pod3 minutesCritical
DaemonSet has unavailable podsSome pods are unavailable while at least one is ready5 minutesWarning
Pod restart spikeA pod restarted more than 3 times in the last 15 minutes5 minutesWarning
CronJob run failedA Job created by a CronJob reached its Failed condition1 minuteCritical

A workload that is fully down matches only its “no ready” rule, so one outage produces one alert. Rollouts shorter than the for duration produce none. The CronJob alert clears when the failed Job is removed, which happens once newer runs replace it. Change a duration or disable a rule from Alerts -> Rules.

Edka installs Cluster Health once VictoriaMetrics is on the cluster. It adds six editable rules based on kube-state-metrics and cAdvisor. The two container resource rules are off by default because their thresholds are absolute and large workloads exceed them on purpose.

RuleConditionDurationSeverityDefault
Node not readyA node reports NotReady or Unknown5 minutesCriticalOn
Pod failed phaseA pod is in the Failed phase5 minutesWarningOn
Pod stuck pendingA pod is in the Pending phase without a container error: unschedulable or a volume wait5 minutesWarningOn
Pod cannot startA container or init container waits on CrashLoopBackOff, an image pull, or a container error3 minutesCriticalOn
Container CPU usage highA container uses more than 900 millicores10 minutesWarningOff
Container memory usage highA container working set is above 1.5 GiB10 minutesWarningOff

Edka installs Storage once VictoriaMetrics is on the cluster. It adds three editable rules based on kube-state-metrics and kubelet volume statistics. The two usage tiers do not overlap, so a claim fires one of them.

RuleConditionDurationSeverity
Persistent volume claim unboundA claim is Pending or Lost5 minutesWarning
Persistent volume usage highA claim is between 85% and 95% usage10 minutesWarning
Persistent volume usage criticalA claim is above 95% usage5 minutesCritical

Install Gateway from Alerts → Packs to add ten editable rules for Envoy Gateway entry points. They use the Envoy proxy metrics VictoriaMetrics already collects and evaluate once a minute, keeping each gateway class separate. Only customer-facing listeners count as traffic; readiness and stats probes do not.

RuleConditionDurationSeverity
Gateway proxy is not liveAn Envoy proxy reports itself as not live3 minutesCritical
Gateway 5xx rate is highMore than 5% of requests return 5xx, with at least 60 requests in 5 minutes5 minutesCritical
Gateway p95 latency is highp95 latency above 2 seconds, with at least 60 requests in 5 minutes10 minutesWarning
Gateway is rate limiting clientsMore than 10% of requests get 429 from the class rate limit, with at least 60 requests in 5 minutes10 minutesWarning
Route has no healthy backendsEvery backend behind an HTTPRoute fails health checks3 minutesCritical
Route has unhealthy backendsAt least one backend behind an HTTPRoute fails health checks10 minutesWarning
Gateway upstream timeoutsBackend timeouts above 1 per second5 minutesWarning
Gateway TLS handshake failuresTLS handshake failures above 1 per second5 minutesWarning
Gateway certificate expires within 14 daysSoonest-expiring certificate served by the class is under 14 days from expiry1 hourWarning
Gateway certificate expires within 3 daysSoonest-expiring certificate served by the class is under 3 days from expiry1 hourCritical

The 5xx and latency rules read 0 for a quiet gateway class instead of firing on a handful of requests.

Edka installs Certificates once VictoriaMetrics and cert-manager are both on the cluster. It adds two editable rules that cover every cert-manager certificate, whichever issuer and validation method it uses. They evaluate every 5 minutes, keeping each certificate separate.

RuleConditionDurationSeverity
Certificate renewal overduecert-manager was due to renew the certificate over 24 hours agoNoneWarning
Certificate expires within 7 daysA certificate whose renewal is overdue expires within 7 daysNoneCritical

cert-manager renews a certificate at its renewal time, by default a third of its lifetime before it expires, and sets a new renewal time once the renewal succeeds. A renewal time in the past means renewals are failing, so the warning arrives weeks before the certificate expires. The certificate keeps working until then. The Events tab of the Certificate and its Challenges in Explorer show why the renewal fails.

Edka installs External Secrets once VictoriaMetrics and the External Secrets add-on are both on the cluster. It adds two editable rules that evaluate once a minute, keeping each synced secret and each store separate. They cover stores and synced secrets created outside Edka too.

RuleConditionDurationSeverity
Secret sync failingA synced secret fails to sync10 minutesWarning
Secret store not connectedA secret store can’t connect to its provider10 minutesWarning

A synced secret that fails to sync keeps its last values, and pods that read it get no new values until a sync succeeds. A synced secret that never synced has no Secret, so pods that need it can’t start. A store that is not connected stops updating every synced secret that uses it. The error message on the cluster’s Secrets page shows the cause. See External Secrets.

Install Valkey from Alerts → Packs to add ten editable rules. They use the existing Valkey exporter and evaluate once a minute, keeping each database and pod separate.

RuleConditionDurationSeverity
Metrics endpoint unreachableDiscovered exporter cannot be scraped2 minutesCritical
Server unavailableExporter cannot connect to Valkey2 minutesCritical
Memory usage highReported memory usage above 90% of nonzero maxmemory10 minutesWarning
Connection saturationConnected clients above 80% of maxclients5 minutesWarning
Rejecting connectionsNew rejected connections in the preceding 5 minutes2 minutesCritical
Replica disconnectedReplica link to primary is down2 minutesCritical
Replication traffic stalledConnected replica has received no primary traffic for over 30 seconds5 minutesWarning
Snapshot save failedLatest background RDB save failed2 minutesCritical
AOF write failedLatest AOF write failed while AOF is enabled2 minutesCritical
Core metrics missingReachable exporter lacks server status, or an online server lacks core metrics10 minutesWarning

Replication rules follow the reported role, including after promotion. Traffic inactivity measures the replication link, not replay delay. AOF write alerts apply only when AOF is enabled.

Memory usage is compared with Valkey’s configured maxmemory, not the container memory limit. Adjust the threshold for caches intentionally kept near capacity. Eviction rates and cache hit ratios have no default alerts because their expected values depend on the workload.

Endpoint alerts cover discovered targets. Use Cluster Health for pod and node failures and Storage for PVC pressure. The Valkey pack does not monitor Sentinel quorum or object-storage backup success; its RDB rule reports local snapshot failures. Use the database Backups tab to inspect stored backups and restore a snapshot to test one.

The host infrastructure pack depends on the Node Exporter add-on and VictoriaMetrics.

When node monitoring is enabled for VictoriaMetrics, Edka installs the Node Exporter add-on and configures VictoriaMetrics to scrape host metrics. Once both Node Exporter and VictoriaMetrics are installed, Edka can install the host infrastructure alert pack automatically.

Host alerts cover node-level pressure that Kubernetes object state alone cannot show:

AlertFires whenForSeverity
Host root filesystem usage highA node’s root file system is above 85% used10 minutesWarning
Host inode usage highA node’s root file system is above 85% of its inodes10 minutesWarning
Host CPU usage highA node’s CPU is above 90% busy15 minutesWarning
Host RAID array degradedA software RAID array on a node is missing a drive5 minutesCritical
Encrypted local storage usage highA node’s encrypted local storage is above 85% used10 minutesWarning
Host IO pressure highEvery task on a node waited on IO for more than 20% of the time15 minutesWarning

A degraded array keeps running on the drives it has left, and the next drive failure loses its data. Replace the failed drive in Hetzner Robot, then add it back to the array.

Firing custom alert rules appear in global notifications with the severity and labels from the rule. Once a firing series has gone without a match for the rule’s keep firing for period, the notification occurrence resolves and remains available in notification history until retention expires. A value that dips below the threshold for one evaluation and comes back keeps the alert firing instead of resolving it and firing it again.

Read/unread state is separate from alert resolution.

A rule that cannot be evaluated cannot fire, so Edka raises a notification for the cluster when:

  • a rule’s query returns an error, with the last error message
  • rules have not been evaluated for three of their intervals, and at least 5 minutes, while Edka Agent is still reporting

When Edka Agent itself stops reporting, its own notification covers the cluster instead.