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

DebeziumReplicationSlotInactive

Что означает алерт

Слот репликации debezium_iams в PostgreSQL stage неактивен 5 минут: к нему не подключён ни один клиент. Severity: critical.

Debezium не читает изменения, события в Kafka не поступают. WAL копится до лимита 10 ГБ, после чего слот будет сброшен.

Лейблы алерта: slot_name.

Диагностика (по шагам)

Команды и переменная POD описаны в разделе 2 общего документа: Debezium: устройство и типовые операции.

  1. Проверить под:
kubectl --context yc-sarex-stage -n debezium get pods

Если пода нет или он не Running, перейти к DebeziumConnectNotReady.

  1. Проверить состояние коннектора и задачи:
kubectl --context yc-sarex-stage -n debezium exec $POD -- curl -s localhost:8083/connectors/debezium-iams/status
Ответ Значение Действие
tasks[0].state: FAILED задача упала, причина в поле trace раздел «Как починить», пункт 1
404 коннектор не зарегистрирован раздел «Как починить», пункт 2
connector.state: PAUSED или STOPPED коннектор остановлен вручную выяснить, кто остановил; запуск: PUT /connectors/debezium-iams/resume
задача RUNNING задача не может получить слот раздел «Как починить», пункт 3
  1. Проверить слот (SQL из раздела 2 общего документа). Если wal_status равен lost, перейти к DebeziumReplicationSlotLost.

Как починить

  1. Задача в FAILED. Прочитать trace. При ошибке replication slot "debezium_iams" is active for PID или сетевой ошибке перезапустить задачу (раздел 3 общего документа). При ошибке на конкретном событии (сериализация, схема таблицы) перезапуск не поможет: зафиксировать trace и эскалировать.
  2. Коннектор не зарегистрирован. Перезапустить пайплайн deploy_stage в репозитории infra/debezium: Job debezium-iams-register зарегистрирует коннектор заново.
  3. Задача RUNNING, слот неактивен. Посмотреть в логе повторы подключения к PostgreSQL. Если слот занят чужим процессом (active_pid не пустой при неработающем Debezium), завершить его: SELECT pg_terminate_backend(<active_pid>);, затем перезапустить задачу.

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

  1. Задача коннектора в RUNNING.
  2. Слот: active = true, wal_status = reserved, значение unconfirmed уменьшается.
  3. Алерт перешёл в inactive.