Skip to content

Алерт о задержке репликации Redis

Slave-Redis отстаёт от master — read-after-write возвращает старые данные. Стандартного алерта нет, нужен внешний.

Рецепт

bash
#!/usr/bin/env bash
# Run on the standby Redis host. Exposes `200 ok` / `500 lag` over HTTP
# so an external monitor can poll it.

LAG_LIMIT=${1:-10}    # seconds
HOST=${REDIS_HOST:-127.0.0.1}
PORT=${REDIS_PORT:-6379}

LAG=$(redis-cli -h "$HOST" -p "$PORT" INFO replication \
       | awk -F: '/master_last_io_seconds_ago/ {gsub(/\r/,""); print $2}')

if [ -z "$LAG" ] || [ "$LAG" -gt "$LAG_LIMIT" ]; then
  printf 'HTTP/1.1 500 OK\r\nContent-Type: text/plain\r\n\r\nlag=%s\n' "$LAG"
else
  printf 'HTTP/1.1 200 OK\r\nContent-Type: text/plain\r\n\r\nok lag=%s\n' "$LAG"
fi

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

Заверните этот скрипт в /redis-replication-status через nginx + fcgiwrap (или просто systemd-socket) и направьте на него HTTP-монитор Enterno. Алерт-правило: «не 200» — этого достаточно.

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

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

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