Skip to main content
APA
Sponsored byCAST AI — Kubernetes cost optimizationBetter Stack — Uptime monitoring and log managementVictoriaMetrics — Fast, open-source time series database and drop-in Prometheus replacement.

External Secrets Operator logoExternal Secrets Operator Prometheus Alert Rules

5 Prometheus alerting rules for External Secrets Operator.Exported via Embedded exporter.These rules cover critical and warning conditions — copy and paste the YAML into your Prometheus configuration.

⚠️

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

9.9.External Secrets Operator logoEmbedded exporter(5 rules)

The `name` and `namespace` labels are those of the ExternalSecret, PushSecret or SecretStore.
With the chart default `serviceMonitor.honorLabels: false`, Prometheus renames the resource namespace to `exported_namespace`.
wget https://raw.githubusercontent.com/samber/awesome-prometheus-alerts/refs/heads/master/dist/rules/external-secrets-operator/embedded-exporter.yml
critical

9.9.1.External Secrets SecretStore not ready

SecretStore {{ $labels.namespace }}/{{ $labels.name }} is not ready. Every ExternalSecret that uses it stops syncing (credentials, permissions or provider unreachable).

- alert: ExternalSecretsSecretstoreNotReady
  expr: 'secretstore_status_condition{condition="Ready",status="False"} == 1'
  for: 5m
  labels:
    severity: critical
  annotations:
    summary: External Secrets SecretStore not ready (instance {{ $labels.instance }})
    description: "SecretStore {{ $labels.namespace }}/{{ $labels.name }} is not ready. Every ExternalSecret that uses it stops syncing (credentials, permissions or provider unreachable).\n  VALUE = {{ $value }}\n  LABELS = {{ $labels }}"
critical

9.9.2.External Secrets ClusterSecretStore not ready

ClusterSecretStore {{ $labels.name }} is not ready. Every ExternalSecret that uses it stops syncing (credentials, permissions or provider unreachable).

- alert: ExternalSecretsClustersecretstoreNotReady
  expr: 'clustersecretstore_status_condition{condition="Ready",status="False"} == 1'
  for: 5m
  labels:
    severity: critical
  annotations:
    summary: External Secrets ClusterSecretStore not ready (instance {{ $labels.instance }})
    description: "ClusterSecretStore {{ $labels.name }} is not ready. Every ExternalSecret that uses it stops syncing (credentials, permissions or provider unreachable).\n  VALUE = {{ $value }}\n  LABELS = {{ $labels }}"
warning

9.9.3.External Secrets ExternalSecret not ready

ExternalSecret {{ $labels.namespace }}/{{ $labels.name }} failed to sync. The target Secret keeps its last synced data or does not exist yet. Check the ExternalSecret events.

- alert: ExternalSecretsExternalsecretNotReady
  expr: 'externalsecret_status_condition{condition="Ready",status="False"} == 1'
  for: 10m
  labels:
    severity: warning
  annotations:
    summary: External Secrets ExternalSecret not ready (instance {{ $labels.instance }})
    description: "ExternalSecret {{ $labels.namespace }}/{{ $labels.name }} failed to sync. The target Secret keeps its last synced data or does not exist yet. Check the ExternalSecret events.\n  VALUE = {{ $value }}\n  LABELS = {{ $labels }}"
warning

9.9.4.External Secrets PushSecret not ready

PushSecret {{ $labels.namespace }}/{{ $labels.name }} failed to push its Secret to the provider.

- alert: ExternalSecretsPushsecretNotReady
  expr: 'pushsecret_status_condition{condition="Ready",status="False"} == 1'
  for: 10m
  labels:
    severity: warning
  annotations:
    summary: External Secrets PushSecret not ready (instance {{ $labels.instance }})
    description: "PushSecret {{ $labels.namespace }}/{{ $labels.name }} failed to push its Secret to the provider.\n  VALUE = {{ $value }}\n  LABELS = {{ $labels }}"
warning

9.9.5.External Secrets provider API errors

{{ $value | humanizePercentage }} of the {{ $labels.call }} calls to provider {{ $labels.provider }} failed in the last 5 minutes.

  # Threshold of 5% is arbitrary. Adjust it to your workload.
- alert: ExternalSecretsProviderApiErrors
  expr: 'sum by (provider, call) (rate(externalsecret_provider_api_calls_count{status="error"}[5m])) / sum by (provider, call) (rate(externalsecret_provider_api_calls_count[5m])) > 0.05 and sum by (provider, call) (rate(externalsecret_provider_api_calls_count[5m])) > 0'
  for: 5m
  labels:
    severity: warning
  annotations:
    summary: External Secrets provider API errors (instance {{ $labels.instance }})
    description: "{{ $value | humanizePercentage }} of the {{ $labels.call }} calls to provider {{ $labels.provider }} failed in the last 5 minutes.\n  VALUE = {{ $value }}\n  LABELS = {{ $labels }}"