Skip to content

Kubernetes — алерт по pod, который рестартует > N раз за окно

CrashLoopBackOff в одном пространстве имён — kubectl показывает restart-count = 47, но никто не видит. Хочется endpoint, который вернёт high когда счётчик прыгает.

Рецепт

bash
#!/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 зацикливается.

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

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

Readiness-probe внутри пода есть, но никто не видит, что LB отказался роутить трафик на новый deploy.