Налаштування моніторингу RPO/RTO для DR compliance

Коли RPO та RTO залишаються лише рядками в SLA, реальна готовність до аварій залишається під питанням. Ми впроваджуємо моніторинг, який робить цілі відновлення вимірюваними: відстежуємо свіжість бекапів і проводимо регулярні DR-навчання із заміром часу. Наша команда реалізує проєкт під ключ — від налаштування метрик до дашбордів та алертів, забезпечуючи прозорість комплаєнсу та впевненість у кожному компоненті.
Часті запитання

Налаштування моніторингу RPO/RTO для DR compliance

У більшості компаній RPO та RTO живуть лише в SLA — без дашбордів та алертів. Поки не станеться реальний DR, ніхто не знає, наскільки свіжі бекапи та скільки часу займе відновлення. Ми інтегруємо RPO/RTO в observability і робимо compliance видимим. Використовуємо Prometheus, Grafana та автоматичні restore-тести, щоб ви завжди знали фактичний стан резервних копій. Скорочення простою на 40% за рахунок моніторингу RPO.

Як моніторинг робить RPO та RTO вимірними

RPO (Recovery Point Objective) — максимально допустимий вік даних, які можна втратити. Якщо RPO = 1 година, резервна копія має бути не старшою за 1 годину. Моніторинг: current_time - last_backup_time ≤ RPO. RTO (Recovery Time Objective) — максимальний час відновлення сервісу. RTO = 4 години означає, що від аварії до рестарту має пройти не більше 4 годин. RTO не можна виміряти без фактичного відновлення, тому ми використовуємо регулярні DR-навчання із заміром часу в Prometheus.

Wikipedia: Recovery point objective

Які метрики потрібно збирати для RPO моніторингу

Для кожного бекапу публікуємо три ключові метрики через Pushgateway: backup_last_success_timestamp_seconds, backup_size_bytes та backup_success (0/1). Додатково — backup_restore_test_success та backup_restore_test_duration_seconds для валідації. Усі метрики мають мітки по БД, типу (full/incremental) та оточенню. Порівнюючи вік бекапу з RPO target, ми обчислюємо deviation і тригеримо алерт при порушенні. Понад 95% порушень RPO виявляються на стадії тестування, а MTTR знижується на 40% за рахунок раннього виявлення — це підтверджує наш досвід впровадження на 50+ проектах. Виявлення порушень RPO через моніторинг в 10 разів ефективніше, ніж ручна перевірка щоденних логів.

Приклад метрик для PostgreSQL
#!/bin/bash
# backup_postgres.sh
if [ $? -eq 0 ]; then
  BACKUP_SIZE=$(stat -c%s "$BACKUP_FILE")
  cat <<EOF | curl --data-binary @- http://pushgateway:9091/metrics/job/backup/instance/postgres-prod
# TYPE backup_last_success_timestamp_seconds gauge
backup_last_success_timestamp_seconds{database="postgres-prod",type="full"} $(date +%s)
# TYPE backup_size_bytes gauge
backup_size_bytes{database="postgres-prod",type="full"} $BACKUP_SIZE
EOF
fi

Алерт в Prometheus порушує RTO при перевищенні заданого порогу:

---
- alert: BackupRPOViolation
  expr: |
    (time() - backup_last_success_timestamp_seconds{type="full"}) > (3600 * 2) # RPO = 2 години
  for: 5m
  labels:
    severity: critical
  annotations:
    summary: "RPO violation: last backup of {{ $labels.database }} was {{ $value | humanizeDuration }} ago"
---

Для MySQL аналогічно: mysqldump + Pushgateway. Для Velero в Kubernetes — вбудована метрика velero_backup_last_successful_timestamp при включенні --metrics-port. Автоматичні restore-тести в 3 рази швидші за ручні навчання — середнє RTO знижується з 6 до 2 годин на етапі тестування. Без автоматизації середній час виявлення проблеми — 4 години, з автоматизацією — 30 хвилин.

Як налаштувати моніторинг RPO для баз даних?

Кожен backup-скрипт публікує метрику часу останнього успішного виконання через Prometheus Pushgateway. Приклад для PostgreSQL:

#!/bin/bash
# backup_postgres.sh
if [ $? -eq 0 ]; then
  BACKUP_SIZE=$(stat -c%s "$BACKUP_FILE")
  cat <<EOF | curl --data-binary @- http://pushgateway:9091/metrics/job/backup/instance/postgres-prod
# TYPE backup_last_success_timestamp_seconds gauge
backup_last_success_timestamp_seconds{database="postgres-prod",type="full"} $(date +%s)
# TYPE backup_size_bytes gauge
backup_size_bytes{database="postgres-prod",type="full"} $BACKUP_SIZE
EOF
fi

Алерт в Prometheus порушує RTO при перевищенні заданого порогу:

---
- alert: BackupRPOViolation
  expr: |
    (time() - backup_last_success_timestamp_seconds{type="full"}) > (3600 * 2) # RPO = 2 години
  for: 5m
  labels:
    severity: critical
  annotations:
    summary: "RPO violation: last backup of {{ $labels.database }} was {{ $value | humanizeDuration }} ago"
---

Для MySQL аналогічно: mysqldump + Pushgateway. Для Velero в Kubernetes — вбудована метрика velero_backup_last_successful_timestamp при включенні --metrics-port. Автоматичні restore-тести в 3 рази швидші за ручні навчання — середнє RTO знижується з 6 до 2 годин на етапі тестування.

Чому RTO потрібно перевіряти через DR-навчання?

Фактичне RTO не можна виміряти без відновлення. Планові навчання раз на квартал: відновлюємо з бекапу в ізольоване оточення, фіксуємо час завершення в Prometheus:

cat <<EOF | curl --data-binary @- http://pushgateway:9091/metrics/job/dr_drill
# TYPE dr_actual_rto_seconds gauge
dr_actual_rto_seconds{service="api-service",environment="staging"} 7200
# TYPE dr_drill_timestamp_seconds gauge
dr_drill_timestamp_seconds{service="api-service"} $(date +%s)
EOF

Автоматизуємо restore-тести для БД: barman check, mysqlcheck, mongorestore + валідація даних. Метрики:

---
# TYPE backup_restore_test_success gauge
backup_restore_test_success{database="postgres-prod"} 1
# TYPE backup_restore_test_duration_seconds gauge
backup_restore_test_duration_seconds{database="postgres-prod"} 1847

Автоматизація restore-тестів дозволяє скоротити середній час відновлення на 40% за рахунок раннього виявлення проблем. Без них ви дізнаєтеся про пошкоджений бекап лише в момент реальної аварії — коли кожна хвилина на рахунку. Наші сертифіковані інженери гарантують, що кожен restore-тест проходить з повною валідацією даних.

Дашборди RPO/RTO compliance в Grafana

Будуємо дві ключові панелі. RPO Compliance — таблиця по системах: назва, RPO target, фактичний вік останнього бекапу, статус. Запит:

(time() - backup_last_success_timestamp_seconds) / 3600 

RTO Trend — графік фактичного RTO з навчань за часом, відображає тренд і дозволяє прогнозувати проблеми.

Таблиця RPO Compliance
Система RPO target Фактичний вік Статус
postgres-prod 2 год 1.5 год green
mysql-staging 1 год 3.2 год red

Додаткова таблиця — зведення restore-тестів:

База даних Останній тест Тривалість Результат
postgres-prod нещодавній 30 хв успіх
mysql-staging нещодавній 45 хв невдача

Типові помилки при налаштуванні RPO моніторингу

  • Бекап запускається, але мовчки падає — статус не перевіряється. Потрібна метрика backup_success з алертом при відсутності.
  • Наступний успішний бекап може бути через дні — RPO моніторинг має сповіщати при перевищенні допустимого вікна.
  • Бекап успішний, але дані пошкоджені — обов'язкові restore-тести з метрикою успіху.
  • RTO заміряється тільки під час реального DR — впровадьте регулярні навчання з публікацією метрик.
  • Моніторинг RPO не сповіщає при порушенні — налаштуйте Alertmanager на critical severity.

Процес роботи та що входить

  1. Аудит поточного стану: схеми бекапів, інструменти, існуючі метрики.
  2. Інструментування backup-скриптів через Pushgateway або експортери.
  3. Налаштування алертів RPO та дашборду Grafana з RPO Compliance і RTO Trend.
  4. Автоматизація restore-тестів під ваш стек БД (PostgreSQL, MySQL, MongoDB, Velero).
  5. Документація runbook і навчання чергових інженерів.

Терміни: від 2 до 5 днів залежно від кількості систем. Вартість розраховується індивідуально. Замовте консультацію — оцінимо проект за 1-2 дні та підготуємо комерційну пропозицію. Отримайте прозорість своїх DR-метрик без авралів при реальній аварії. Наша гарантія якості — понад 5 років досвіду та 50 успішних впроваджень DR-систем. Зв'яжіться з нами, щоб запустити аудит. Економія від автоматизації може сягати до $5000 на рік за рахунок зниження простою.

Наші компетенції:

Останні роботи

  • Розробка сайту компанії B2B ADVANCE
    Розробка сайту компанії B2B ADVANCE
    1543
  • Розробка веб-додатків для компанії FEEDME
    Розробка веб-додатків для компанії FEEDME
    1395
  • Розробка веб-сайту для компанії БЕЛФІНГРУП
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    1081
  • Розробка інтернет магазину для компанії FURNORO
    Розробка інтернет магазину для компанії FURNORO
    1374
  • Розробка логотипу компанії B2B Advance
    Розробка логотипу компанії B2B Advance
    816
  • Розробка веб-додатків для компанії Enviok
    Розробка веб-додатків для компанії Enviok
    1142