Cassandra — алерт когда repair не запускался дольше gc_grace
Cassandra требует full repair каждые `gc_grace_seconds` (default 10 дней) — иначе deletes возвращаются «зомби» при failover. Без хорошего scheduler-a это легко пропустить.
Рецепт
#!/usr/bin/env bash
# /etc/cron.d/cassandra-repair
# 0 6 * * * cassandra /opt/cassandra-repair-check.sh
KEYSPACE=${KEYSPACE}
GC_DAYS=${GC_DAYS:-10} # alert if last repair older than 10d
# Path differs per distribution; adapt as needed
LAST=$(grep -h 'Repair completed' /var/log/cassandra/system.log* 2>/dev/null \
| tail -1 | awk '{print $1, $2}')
[ -z "$LAST" ] && {
curl -fsS "$HEARTBEAT_URL" --data "no_repair_log=true,keyspace=$KEYSPACE"
exit 2
}
EPOCH=$(date -d "$LAST" +%s 2>/dev/null || echo 0)
NOW=$(date +%s)
DAYS=$(( (NOW - EPOCH) / 86400 ))
if [ "$DAYS" -gt "$GC_DAYS" ]; then
curl -fsS "$HEARTBEAT_URL" --data "last_repair_days=$DAYS,gc_days=$GC_DAYS"
exit 2
fi
echo "OK (last repair $DAYS d ago)"
То же самое в Enterno.io
Подключите Enterno heartbeat с retention 30 дней — будет видно что repair-cron перестал работать за дни до zombie-incident.
Похожие рецепты
Нужно убедиться, что сайт возвращает 2xx каждую минуту, и получить алерт в Slack/Telegram при падении.
Самоподписанный скрипт проверяет SSL сертификат и шлёт алерт за 14 дней до expiry.
Нужно ловить момент, когда реплика начала отставать от мастера больше чем на 10 секунд.