DebeziumReplicationSlotLost, DebeziumReplicationSlotMissing
Что означает алерт
DebeziumReplicationSlotLost: слот debezium_iams в состоянии lost или unreserved. PostgreSQL удалил WAL, нужный слоту, по лимиту max_slot_wal_keep_size (10 ГБ). Severity: critical.
DebeziumReplicationSlotMissing: метрик слота нет 10 минут. Слот удалён либо postgres-exporter не отдаёт данные. Severity: critical.
После сброса слота Debezium не может продолжить с прежней позиции. Изменения, которые он не успел прочитать, событиями переданы не будут.
Сброшенный слот в метрике удерживаемого WAL показывает ноль и выглядит исправным. Поэтому алерт построен на wal_status и на отсутствии метрик, а не на объёме.
Диагностика (по шагам)
Команды описаны в разделе 2 общего документа: Debezium: устройство и типовые операции.
- Проверить слот:
SELECT slot_name, active, wal_status, restart_lsn FROM pg_replication_slots WHERE slot_name = 'debezium_iams';
| Результат | Значение | Действие |
|---|---|---|
wal_status = lost |
слот сброшен | пересоздание слота |
| строк нет | слот удалён | пересоздание слота |
wal_status = reserved |
слот исправен, не работают метрики | шаг 2 |
- Слот исправен, сработал
DebeziumReplicationSlotMissing. Проверить экспортеры:
kubectl --context yc-sarex-stage -n postgres-exporter get pods | grep -v Running
Метрики слота отдают несколько экспортеров кластера c9qa2coo5ukgcg93fldm. Алерт срабатывает, когда не отвечает ни один. Проверить доступность самого кластера PostgreSQL и сбор метрик в vm-stack.
- Выяснить, почему слот не подтверждал позицию до сброса: история алертов
DebeziumReplicationSlotNotAdvancingиDebeziumReplicationSlotWalRetained*, лог пода за период перед сбросом.
Как починить
Пересоздать слот и выполнить повторный снапшот по разделу 5 общего документа. Причину, найденную на шаге 3, устранить до пересоздания: иначе новый слот будет сброшен так же.
Критерий закрытия
- Слот существует:
active = true,wal_status = reserved. - Повторный снапшот завершён по всем трём таблицам, число снапшотных событий равно числу строк в таблицах.
- Потребители уведомлены о периоде без событий.
- Алерт перешёл в
inactive.