Kubernetes — алерт по pod, который рестартует > N раз за окно
CrashLoopBackOff в одном пространстве имён — kubectl показывает restart-count = 47, но никто не видит. Хочется endpoint, который вернёт high когда счётчик прыгает.
Рецепт
#!/usr/bin/env bash
# Compares current restart-count against the snapshot from N minutes ago.
NS="${NS:-default}"
THRESHOLD="${THRESHOLD:-3}"
STATE_DIR="${STATE_DIR:-/var/lib/enterno/k8s-restarts}"
mkdir -p "$STATE_DIR"
CUR=$(kubectl get pods -n "$NS" \
-o jsonpath='{range .items[*]}{.metadata.name} {.status.containerStatuses[*].restartCount}{"\n"}{end}')
OUT="ok"
while IFS= read -r line; do
POD="${line%% *}"
CNT="${line##* }"
PREV_FILE="$STATE_DIR/$POD.txt"
PREV=$(cat "$PREV_FILE" 2>/dev/null || echo 0)
echo "$CNT" > "$PREV_FILE"
DELTA=$(( CNT - PREV ))
[ "$DELTA" -ge "$THRESHOLD" ] && OUT="high $POD restarted ${DELTA}× since last check"
done <<< "$CUR"
echo "$OUT"
То же самое в Enterno.io
Endpoint + Enterno HTTP-монитор с keyword "ok" каждые 1-2 мин = pager за 60 секунд. Pro+ хранит snapshot — видно какой именно pod зацикливается.
Похожие рецепты
Readiness-probe внутри пода есть, но никто не видит, что LB отказался роутить трафик на новый deploy.
Нужно убедиться, что сайт возвращает 2xx каждую минуту, и получить алерт в Slack/Telegram при падении.
Самоподписанный скрипт проверяет SSL сертификат и шлёт алерт за 14 дней до expiry.