Tomcat — алерт когда HTTP connector близок к maxThreads
Под нагрузкой Tomcat-приложение упирается в `maxThreads=200` — новые запросы стоят в очереди, p99 latency растёт. Метрика есть в JMX, но никто не смотрит.
Рецепт
#!/usr/bin/env bash
# Tomcat 9+ Manager / JMX servlet returns currentThreadsBusy.
HOST="${TOMCAT:-http://localhost:8080}"
USER_PASS="${TOMCAT_AUTH:-admin:admin}"
PORT="${PORT:-8080}"
THRESHOLD_PCT="${THRESHOLD_PCT:-80}"
XML=$(curl -sS -u "$USER_PASS" "$HOST/manager/status?XML=true")
BUSY=$(echo "$XML" | grep -oE "currentThreadsBusy=\"[0-9]+\"" | head -1 | grep -oE '[0-9]+')
MAX=$(echo "$XML" | grep -oE "maxThreads=\"[0-9]+\"" | head -1 | grep -oE '[0-9]+')
[ -z "$BUSY" ] || [ -z "$MAX" ] && { echo "no-data"; exit 1; }
PCT=$((BUSY * 100 / MAX))
[ "$PCT" -ge "$THRESHOLD_PCT" ] && echo "high ${PCT}% (${BUSY}/${MAX})" || echo "ok ${PCT}%"
То же самое в Enterno.io
Endpoint + Enterno HTTP-монитор с keyword "ok" каждую минуту. Pro+ хранит history — видно паттерн "saturation в 14:00 ежедневно от cron".
Похожие рецепты
Spring-приложение тормозит — long GC pauses (>500ms) каждые несколько минут. Heap-size был ок, но new-gen неправильно настроен. Нужен endpoint с p99 pause.
Нужно убедиться, что сайт возвращает 2xx каждую минуту, и получить алерт в Slack/Telegram при падении.
Самоподписанный скрипт проверяет SSL сертификат и шлёт алерт за 14 дней до expiry.