Skip to content

Cassandra — алерт когда repair не запускался дольше gc_grace

Cassandra требует full repair каждые `gc_grace_seconds` (default 10 дней) — иначе deletes возвращаются «зомби» при failover. Без хорошего scheduler-a это легко пропустить.

Рецепт

bash
#!/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.

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

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

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