Skip to main content
APA
Sponsored by CAST AI — Kubernetes cost optimization Better Stack — Uptime monitoring and log management
⚠️

Alert thresholds depend on the nature of your applications. Some queries may have arbitrary tolerance thresholds. Building an efficient monitoring platform takes time. 😉

DigitalOcean Prometheus Alert Rules

10 Prometheus alerting rules for DigitalOcean. Exported via metalmatze/digitalocean_exporter. These rules cover critical and warning conditions — copy and paste the YAML into your Prometheus configuration.

wget https://raw.githubusercontent.com/samber/awesome-prometheus-alerts/refs/heads/master/dist/rules/digitalocean/digitalocean-exporter.yml
critical

11.3.1. DigitalOcean droplet down

DigitalOcean droplet {{ $labels.name }} ({{ $labels.id }}) in {{ $labels.region }} is not running.

- alert: DigitalOceanDropletDown
  expr: digitalocean_droplet_up == 0
  for: 5m
  labels:
    severity: critical
  annotations:
    summary: DigitalOcean droplet down (instance {{ $labels.instance }})
    description: "DigitalOcean droplet {{ $labels.name }} ({{ $labels.id }}) in {{ $labels.region }} is not running.\n  VALUE = {{ $value }}\n  LABELS = {{ $labels }}"
critical

11.3.2. DigitalOcean account not active

DigitalOcean account is not active. It may be suspended or locked.

- alert: DigitalOceanAccountNotActive
  expr: digitalocean_account_active != 1
  for: 5m
  labels:
    severity: critical
  annotations:
    summary: DigitalOcean account not active (instance {{ $labels.instance }})
    description: "DigitalOcean account is not active. It may be suspended or locked.\n  VALUE = {{ $value }}\n  LABELS = {{ $labels }}"
critical

11.3.3. DigitalOcean database down

DigitalOcean managed database {{ $labels.name }} ({{ $labels.engine }}) in {{ $labels.region }} is offline.

- alert: DigitalOceanDatabaseDown
  expr: digitalocean_database_status == 0
  for: 2m
  labels:
    severity: critical
  annotations:
    summary: DigitalOcean database down (instance {{ $labels.instance }})
    description: "DigitalOcean managed database {{ $labels.name }} ({{ $labels.engine }}) in {{ $labels.region }} is offline.\n  VALUE = {{ $value }}\n  LABELS = {{ $labels }}"
critical

11.3.4. DigitalOcean Kubernetes cluster down

DigitalOcean Kubernetes cluster {{ $labels.name }} ({{ $labels.version }}) in {{ $labels.region }} is not running.

- alert: DigitalOceanKubernetesClusterDown
  expr: digitalocean_kubernetes_cluster_up == 0
  for: 5m
  labels:
    severity: critical
  annotations:
    summary: DigitalOcean Kubernetes cluster down (instance {{ $labels.instance }})
    description: "DigitalOcean Kubernetes cluster {{ $labels.name }} ({{ $labels.version }}) in {{ $labels.region }} is not running.\n  VALUE = {{ $value }}\n  LABELS = {{ $labels }}"
critical

11.3.5. DigitalOcean load balancer down

DigitalOcean load balancer {{ $labels.name }} ({{ $labels.ip }}) is not active.

- alert: DigitalOceanLoadBalancerDown
  expr: digitalocean_loadbalancer_status == 0
  for: 2m
  labels:
    severity: critical
  annotations:
    summary: DigitalOcean load balancer down (instance {{ $labels.instance }})
    description: "DigitalOcean load balancer {{ $labels.name }} ({{ $labels.ip }}) is not active.\n  VALUE = {{ $value }}\n  LABELS = {{ $labels }}"
warning

11.3.6. DigitalOcean load balancer no backends

DigitalOcean load balancer {{ $labels.name }} ({{ $labels.ip }}) has no droplets attached.

- alert: DigitalOceanLoadBalancerNoBackends
  expr: digitalocean_loadbalancer_droplets == 0
  for: 1m
  labels:
    severity: warning
  annotations:
    summary: DigitalOcean load balancer no backends (instance {{ $labels.instance }})
    description: "DigitalOcean load balancer {{ $labels.name }} ({{ $labels.ip }}) has no droplets attached.\n  VALUE = {{ $value }}\n  LABELS = {{ $labels }}"
warning

11.3.7. DigitalOcean floating IP not assigned

DigitalOcean floating IP {{ $labels.ipv4 }} in {{ $labels.region }} is not assigned to any droplet.

- alert: DigitalOceanFloatingIPNotAssigned
  expr: digitalocean_floating_ipv4_active == 0
  for: 0m
  labels:
    severity: warning
  annotations:
    summary: DigitalOcean floating IP not assigned (instance {{ $labels.instance }})
    description: "DigitalOcean floating IP {{ $labels.ipv4 }} in {{ $labels.region }} is not assigned to any droplet.\n  VALUE = {{ $value }}\n  LABELS = {{ $labels }}"
warning

11.3.8. DigitalOcean active incidents

DigitalOcean platform has {{ $value }} active incident(s).

- alert: DigitalOceanActiveIncidents
  expr: digitalocean_incidents_total > 0
  for: 0m
  labels:
    severity: warning
  annotations:
    summary: DigitalOcean active incidents (instance {{ $labels.instance }})
    description: "DigitalOcean platform has {{ $value }} active incident(s).\n  VALUE = {{ $value }}\n  LABELS = {{ $labels }}"
warning

11.3.9. DigitalOcean exporter collection errors

DigitalOcean exporter {{ $labels.collector }} collector has {{ $value }} errors.

- alert: DigitalOceanExporterCollectionErrors
  expr: increase(digitalocean_errors_total[5m]) > 3
  for: 5m
  labels:
    severity: warning
  annotations:
    summary: DigitalOcean exporter collection errors (instance {{ $labels.instance }})
    description: "DigitalOcean exporter {{ $labels.collector }} collector has {{ $value }} errors.\n  VALUE = {{ $value }}\n  LABELS = {{ $labels }}"
warning

11.3.10. DigitalOcean droplet limit approaching

DigitalOcean account is using {{ $value }}% of its droplet quota.

  # Fires when more than 80% of the account's droplet limit is in use.
- alert: DigitalOceanDropletLimitApproaching
  expr: (count(digitalocean_droplet_up) / digitalocean_account_droplet_limit) * 100 > 80 and digitalocean_account_droplet_limit > 0
  for: 0m
  labels:
    severity: warning
  annotations:
    summary: DigitalOcean droplet limit approaching (instance {{ $labels.instance }})
    description: "DigitalOcean account is using {{ $value }}% of its droplet quota.\n  VALUE = {{ $value }}\n  LABELS = {{ $labels }}"