Зачем Nerve для uptime checks
Для небольшого VPS, side project или внутреннего API не всегда нужен большой monitoring stack. Nerve — это короткий зашифрованный push-канал для health checks, которые уже пишутся одной командой.
Проверка HTTP-статуса
#!/bin/sh
URL="https://example.com/health"
STATUS=$(curl -s -o /dev/null -w "%{http_code}" "$URL")
if [ "$STATUS" != "200" ]; then
echo "DOWN: $URL returned $STATUS" | nerve send --severity critical
fi
Cron каждую минуту
* * * * * NERVE_DSN="nerve://TOKEN:[email protected]" /usr/local/bin/check-site.sh
Алерт по latency
TIME=$(curl -s -o /dev/null -w "%{time_total}" https://example.com)
awk "BEGIN { exit !($TIME > 2.0) }" \
&& echo "SLOW: example.com took ${TIME}s" | nerve send --severity alert
Несколько endpoint'ов
for url in https://app.example.com/health https://api.example.com/status; do
code=$(curl -s -o /dev/null -w "%{http_code}" "$url")
if [ "$code" != "200" ]; then
echo "health check failed: $url -> $code" | nerve send --severity critical
fi
done
Не алертить на один случайный таймаут
Интернет иногда моргает. Для публичного сайта лучше считать endpoint down после 2-3 неудачных проверок подряд.
STATE="/tmp/site-fail-count"
code=$(curl -s -o /dev/null -w "%{http_code}" --max-time 10 https://example.com/health || echo 000)
if [ "$code" != "200" ]; then
count=$(( $(cat "$STATE" 2>/dev/null || echo 0) + 1 ))
echo "$count" > "$STATE"
[ "$count" -ge 3 ] && echo "DOWN: example.com failed ${count} checks" | nerve send --severity critical
else
rm -f "$STATE"
fi
Проверять не только HTTP 200
Иногда сайт отвечает 200, но показывает maintenance page или пустой HTML. Добавьте smoke-проверку ожидаемого текста или JSON-поля.
body=$(curl -fsS --max-time 10 https://example.com/health)
echo "$body" | grep -q '"ok":true' \
|| echo "health body invalid: example.com" | nerve send --severity alert
FAQ
Можно использовать Nerve для мониторинга аптайма?
Да. Запустите cron job, который проверяет endpoint через curl и отправляет ошибку в nerve send.
Nerve заменяет полноценный monitoring?
Нет. Nerve — лёгкий зашифрованный канал уведомлений для скриптов, cron jobs и health checks.
Алерты зашифрованы?
Да. Текст алерта шифруется до отправки на relay.