Amazon ECR — алерт по росту pull-failures
ECR pull начал стабильно фейлить (IRSA expired, network ACL, repo policy mismatch) — поды в kube не могут запуститься, ImagePullBackOff. Но событие kubelet никого не пингует.
Рецепт
#!/usr/bin/env bash
# /etc/cron.d/ecr-pull
# */5 * * * * root /opt/ecr-pull.sh
CONTEXT=${KUBE_CONTEXT:-prod}
# Count ImagePullBackOff pods cluster-wide
COUNT=$(kubectl --context "$CONTEXT" get pods -A -o json \
| jq '[.items[] |
select(.status.containerStatuses // []
| map(.state.waiting.reason // "")
| any(. == "ImagePullBackOff" or . == "ErrImagePull"))]
| length')
if [ "${COUNT:-0}" -gt 0 ]; then
EXAMPLES=$(kubectl --context "$CONTEXT" get pods -A \
--field-selector status.phase=Pending --no-headers \
| awk '/ImagePullBackOff|ErrImagePull/ {printf "%s/%s,", $1, $2}' | head -c 250)
curl -fsS "$HEARTBEAT_URL" --data-urlencode "imgpull_fail=$COUNT,examples=$EXAMPLES"
exit 2
fi
echo "OK (no ImagePullBackOff)"
То же самое в Enterno.io
Заверните в Enterno heartbeat — «pull-fail для image-X» обычно значит protected-policy / expired credential, узнаете и фиксанёте до того как 30 % deploy-ев лягут.
Похожие рецепты
Релиз увеличил bundle-size, p99 cold-start вырос с 800ms до 3s. Метрика в CloudWatch есть, но никто туда не смотрит. Нужен heartbeat-style алерт.
CloudFront CDN-distribution начал возвращать 5xx 4% времени — клиенты в дальних регионах видят битые страницы. CloudWatch graph есть, dashboard никто не открывает.
DynamoDB начал throttle-ить запросы (горячий ключ или write-capacity мал) — приложение получает ProvisionedThroughputExceededException, но AWS-алерты только на 5-минутном агрегате.