Skip to content

PostgreSQL — алерт по запросу, который висит дольше N секунд

Раз в неделю аналитик запускает тяжёлую выборку без LIMIT и блокирует другие транзакции. Хочется получать уведомление через минуту, а не через час.

Рецепт

bash
#!/usr/bin/env bash
# psql one-liner: any query > 60s currently active outside vacuum/autovacuum.
LIMIT_SEC="${LIMIT_SEC:-60}"
COUNT=$(psql -tAX -c "
  SELECT COUNT(*) FROM pg_stat_activity
   WHERE state = 'active'
     AND backend_type = 'client backend'
     AND now() - query_start > interval '${LIMIT_SEC} seconds'")

[ "${COUNT:-0}" -gt 0 ] && echo "high ${COUNT}" || echo "ok"

То же самое в Enterno.io

Поднимите endpoint и Enterno-монитор с keyword "ok" и интервалом 1 мин. Дополнительно — heartbeat на pg_dump, чтобы при долгих транзакциях не пропустить и сам бэкап.

Настроить HTTP monitor → ← Все рецепты

Похожие рецепты

Нужно ловить момент, когда реплика начала отставать от мастера больше чем на 10 секунд.