원문 캡처 · github.com
원문 캡처 · github.com

slotwatch는 PostgreSQL 복제 슬롯별로 보유한 WAL 양과 증가 속도, 읽는 클라이언트, 유휴 시간을 터미널에서 보여주는 도구다. 데이터베이스를 변경하지 않고 슬롯 상태를 읽기만 하며, 디스크를 채울 수 있는 슬롯을 찾아 조치 방향을 제안한다.

설치는 go install github.com/Dem1241/slotwatch@latest로 할 수 있다. 데이터베이스 없이 기능을 둘러보려면 slotwatch --demo를 실행하면 된다. 데모는 읽기가 중단된 Debezium 슬롯이 WAL을 쌓는 상황과 정상 슬롯을 함께 보여준다. Linux, macOS, Windows용 바이너리는 릴리스 페이지에서도 받을 수 있다.

PostgreSQL 연결은 PGHOST, PGUSER 등 psql과 같은 환경변수를 쓰거나 DATABASE_URL 또는 -d 옵션으로 설정한다. --warn과 --danger로 경고 기준을, --inactive로 슬롯이 사용되지 않은 상태를 허용할 시간을 지정할 수 있다. 기본 경고 기준은 1GB와 10GB이며, 기본 유휴 시간은 10분이다.

대화형 화면에서는 화살표 키나 j·k로 슬롯을 이동하고 s로 상태, 보유 WAL 양 또는 이름순으로 정렬한다. space는 새로고침을 멈추거나 다시 시작하며, /는 슬롯 이름·플러그인·데이터베이스·클라이언트 기준으로 필터링한다. q를 누르면 종료한다.

자동 점검에는 --check를 쓸 수 있다. 한 번 점검한 뒤 종료하며, 정상일 때는 종료 코드 0, 확인이 필요한 상태는 1, 위험 상태는 2, 점검 실패는 3을 반환한다. --check --json은 스크립트용 JSON 결과를 출력한다.

slotwatch는 경고·위험 기준을 넘는 WAL을 보유한 슬롯, 설정한 시간보다 오래 사용되지 않은 슬롯, wal_status가 extended, unreserved, lost인 슬롯과 서버가 무효화한 슬롯을 표시한다. 현재 증가 속도로 한 시간 안에 max_slot_wal_keep_size에 도달할 슬롯도 찾아내며, 해당 설정이 무제한인 서버도 알린다.

논리·물리 슬롯과 임시 슬롯을 지원하며 프라이머리와 스탠바이에서 사용할 수 있다. PostgreSQL 14~18에서 테스트됐고, 12와 13도 지원되지 않는 컬럼을 제외하면 작동할 것으로 안내돼 있다. PostgreSQL 17 이상에서는 유휴 시간을 서버의 inactive_since 값으로 확인하고, 이전 버전에서는 slotwatch가 슬롯을 처음 유휴 상태로 본 시점부터 계산한다.

로그인 권한이 있는 역할이면 사용할 수 있고 별도 권한 부여는 필요하지 않다. 다만 pg_read_all_stats 권한이 없으면 PostgreSQL이 클라이언트 주소를 숨기며, 애플리케이션 이름은 계속 표시된다.