logrotate — алерт когда лог-файл вырос без ротации
logrotate stopped (config-syntax-error при последнем edit, или systemd timer disabled) — главный лог растёт. Никто не заметит пока диск не закончится.
Рецепт
#!/usr/bin/env bash
# /etc/cron.d/logrotate-stuck
# 0 */1 * * * root /opt/logrotate-stuck.sh
WATCH=${WATCH:-/var/log}
SIZE_GB=${SIZE_GB:-2} # alert per file > 2 GB
AGE_DAYS=${AGE_DAYS:-2} # not rotated in N days
# Files larger than threshold AND not modified-time-suspicious (i.e.
# they are still being appended to but haven't been rotated).
HOT=$(find "$WATCH" -type f -size +${SIZE_GB}G -mtime -1 \
-not -name '*.gz' -not -name '*.zst' 2>/dev/null)
if [ -n "$HOT" ]; then
COUNT=$(echo "$HOT" | wc -l)
curl -fsS "$HEARTBEAT_URL" --data "huge_logs=$COUNT,examples=$(echo "$HOT" | head -3 | tr '\n' ',')"
exit 2
fi
echo "OK (no oversized active logs)"
То же самое в Enterno.io
Поставьте Enterno heartbeat на 1 час — выберите ловить именно «диск не упал, но логи раздулись» раньше disk-monitor.
Похожие рецепты
Логи или backup-файлы съедают /var; через 24 часа сервер ляжет. Базовый df-чек один раз в 10 минут спасает от 2 АМ инцидента.
Filebeat / Logstash тихо упал на одном edge-сервере. Ingest rate в Elasticsearch снижен на 40%, но dashboards никто не смотрит. Запросы в Sentry без логов = слепота.
OpenSearch на 85 % диска (high watermark) — индексы переходят в read-only, write-API ломается. Нужно поймать раньше, а не когда уже 95 % (flood-stage).