Налаштування моніторингу 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.
Процес роботи та що входить
- Аудит поточного стану: схеми бекапів, інструменти, існуючі метрики.
- Інструментування backup-скриптів через Pushgateway або експортери.
- Налаштування алертів RPO та дашборду Grafana з RPO Compliance і RTO Trend.
- Автоматизація restore-тестів під ваш стек БД (PostgreSQL, MySQL, MongoDB, Velero).
- Документація runbook і навчання чергових інженерів.
Терміни: від 2 до 5 днів залежно від кількості систем. Вартість розраховується індивідуально. Замовте консультацію — оцінимо проект за 1-2 дні та підготуємо комерційну пропозицію. Отримайте прозорість своїх DR-метрик без авралів при реальній аварії. Наша гарантія якості — понад 5 років досвіду та 50 успішних впроваджень DR-систем. Зв'яжіться з нами, щоб запустити аудит. Економія від автоматизації може сягати до $5000 на рік за рахунок зниження простою.







