Алерт о задержке репликации Redis
Slave-Redis отстаёт от master — read-after-write возвращает старые данные. Стандартного алерта нет, нужен внешний.
Рецепт
#!/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» — этого достаточно.
Похожие рецепты
Нужно ловить момент, когда реплика начала отставать от мастера больше чем на 10 секунд.
Один из публичных DNS-резольверов (1.1.1.1, 8.8.8.8) deg для региона. Ваш сайт «работает», но половина пользователей видит «server not found» — uptime-monitor молчит.
Нужно убедиться, что сайт возвращает 2xx каждую минуту, и получить алерт в Slack/Telegram при падении.