Observability

Alert To Runbook Map

Keep this table synchronized with your PrometheusRule package. Alert annotations should link to the matching page or heading. Use the Observability Change Checklist when adding, removing, or changing alerts, alert annotations, runbook links, dashboard links, or actionable Events.

Alerts

AlertPrimary runbookFirst checks
BloodravenOperatorDownOperator unavailableDeployment, leader election, logs
BloodravenNoWritableSiteEmergency manual promotion or Total site lossActive site, pod reachability, fencing
BloodravenFailoverOccurredFailoverDNS, app writes, old primary state
BloodravenDivergentTransactionsDivergent old primary recoveryEvents, GTIDs, old primary fenced
BloodravenReplicationLaggingReplication lag highlag metric, MySQL replica status
BloodravenBackupStaleFailed backuplatest MysqlBackup, Job logs
BloodravenBackupVerificationStaleBackup Verificationverification CRs, restore logs
BloodravenPITRArchiveLaggingBackup And Restorearchiver metrics, object storage
BloodravenDNSUpdateFailedDNS failover stuckDNSEndpoint, external-dns logs
BloodravenSplitBrainDetectedSplit-brain recoverywritable sites, app traffic, GTIDs
BloodravenDragonflySiteDownDragonfly degradedstatus.dragonfly.sites[], Dragonfly pods, active Service endpoints
BloodravenDragonflyPromotionFailedDragonfly degradedplanned-failover Dragonfly status, Events, Redis client impact
BloodravenDragonflySessionsLostDragonfly degradedstatus.dragonfly.replTakeoverSupported, DragonflySessionsLost Events, image pin
BloodravenDragonflyManagerPanicDragonfly degradedoperator logs, panic counter, current status.dragonfly
BloodravenKeyringNotSealedData-at-rest encryptionstatus.encryptionAtRest.sites[].phase and .message, escrow Secret exists, sidecar /keyring/status
BloodravenKeyringEscrowFailingData-at-rest encryptionbloodraven_keyring_escrow_pushes_total{outcome="failure"}, sidecar logs, operator /keyring/escrow rejections
BloodravenUnencryptedTablespacesData-at-rest encryptionbloodraven_encryption_unencrypted_tablespaces, whether the group was adopted with partial coverage
BloodravenLicenseUpdatesExpiringLicensingbloodraven_license_updates_expiry_timestamp_seconds. Renewal reminder only — the operator does not gate or change behavior when the timestamp is in the past.

Kubernetes Events

Event categoryExpected operator actionRunbook
Planned failover requested/started/completedDrain writes, promote target, update DNSPlanned Failover
PlannedFailoverDeferred with DeploymentHoldInspect blocking operation, instance, and retryAfter; prefer completion/release or expiry over interruptionDeployment coordination
DeploymentLeaseRevokedStop deployment heartbeat and further DDL; check topologyGeneration, revocation reason, and post-DDL recovery requirementsDeployment coordination
Emergency failover started/completedPromote best candidate, taint old site, update DNSFailover
Reclone started/completed/failedRebuild replica from active primaryDivergent old primary recovery
Backup started/completed/failedCreate/update MysqlBackup Job and statusFailed backup
Restore started/completed/failedGate bootstrap or restore workflowFailed restore
Verification started/completed/failedRestore backup into ephemeral MySQLBackup Verification
DNS update created/failedWrite DNSEndpoint for external-dnsDNS failover stuck
Split-brain or recovery pendingFence losers or wait for manual recoverySplit-brain recovery
Dragonfly promotion/sync/upgrade eventsPreserve or restore cache/session continuity while MySQL remains authoritativeDragonfly degraded
KeyringPhase / KeyringUnsealedInformational — a site is moving through the keyring lifecycleData-at-rest encryption
KeyringEscrowMissing / KeyringEscrowCorruptUrgent. A sealed site's only copy of its keys is gone or altered; do not restart that podData-at-rest encryption
KeyringNotReadOnly / KeyringDigestMismatchInvestigate the rendering — the site is not actually protectedData-at-rest encryption
KeyringRotationRefused / EncryptionAdoptionRefusedFollow the supported rotation or adoption procedureData-at-rest encryption
KeyringPromotionSkipped / KeyringPromotionRefusedA rotating site is not a promotion target. If the group has no primary, finish the rotation (there is no cancel); then failover proceeds on the next pollData-at-rest encryption
LicenseInvalidNone required for availability. Check the token string and kid. Operator behavior is unchanged.Licensing
LicenseVerifiedInformationalLicensing

Minimum alert annotations

Each alert should include:

  • summary with the failing group and namespace.
  • description with immediate user impact.
  • runbook_url pointing to this docs site.
  • dashboard_url pointing to the relevant Grafana dashboard.

If an alert intentionally has no runbook or dashboard link, the change must include a specific operational rationale in the pull request. Do not use a bare N/A.