Перейти к содержанию

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: устройство и типовые операции.

  1. Проверить слот:
SELECT slot_name, active, wal_status, restart_lsn FROM pg_replication_slots WHERE slot_name = 'debezium_iams';
Результат Значение Действие
wal_status = lost слот сброшен пересоздание слота
строк нет слот удалён пересоздание слота
wal_status = reserved слот исправен, не работают метрики шаг 2
  1. Слот исправен, сработал DebeziumReplicationSlotMissing. Проверить экспортеры:
kubectl --context yc-sarex-stage -n postgres-exporter get pods | grep -v Running

Метрики слота отдают несколько экспортеров кластера c9qa2coo5ukgcg93fldm. Алерт срабатывает, когда не отвечает ни один. Проверить доступность самого кластера PostgreSQL и сбор метрик в vm-stack.

  1. Выяснить, почему слот не подтверждал позицию до сброса: история алертов DebeziumReplicationSlotNotAdvancing и DebeziumReplicationSlotWalRetained*, лог пода за период перед сбросом.

Как починить

Пересоздать слот и выполнить повторный снапшот по разделу 5 общего документа. Причину, найденную на шаге 3, устранить до пересоздания: иначе новый слот будет сброшен так же.

Критерий закрытия

  1. Слот существует: active = true, wal_status = reserved.
  2. Повторный снапшот завершён по всем трём таблицам, число снапшотных событий равно числу строк в таблицах.
  3. Потребители уведомлены о периоде без событий.
  4. Алерт перешёл в inactive.