Мониторинг сайта

Как узнать что сайт упал. Без Datadog, без Telegram-бота.

curl проверяет сайт каждые 2 минуты. Если не отвечает — зашифрованный push на телефон. Настройка за 3 минуты, бесплатно.

Вам не нужен мониторинг-сервис

Datadog — $15/хост/мес. Uptime Robot — видит ваши данные в открытом виде. Telegram-бот — токен бота даёт доступ ко всей истории чата.

Если у вас один сайт, один API или pet-проект — хватит curl, cron и способа получить push на телефон. Nerve шифрует payload до отправки. Sender DSN умеет только отправлять — не читать историю.

Шаг 1: Установить CLI

command -v go >/dev/null || {
  GO_VERSION="$(curl -fsSL 'https://go.dev/VERSION?m=text' | head -n 1)"
  case "$(uname -m)" in
    x86_64|amd64) GO_ARCH="amd64" ;;
    aarch64|arm64) GO_ARCH="arm64" ;;
  esac
  curl -fsSLO "https://go.dev/dl/${GO_VERSION}.linux-${GO_ARCH}.tar.gz"
  sudo tar -C /usr/local -xzf "${GO_VERSION}.linux-${GO_ARCH}.tar.gz"
  export PATH="/usr/local/go/bin:$PATH"
}
go install github.com/nerve-ink/nerve-cli/cmd/nerve@latest
export PATH="$PATH:$(go env GOPATH)/bin"

Шаг 2: Скрипт проверки

#!/bin/bash
# /usr/local/bin/check-site.sh
set -euo pipefail
export NERVE_DSN="nerve://TOKEN:[email protected]"

URL="https://yoursite.ru"
TIMEOUT=10

HTTP=$(curl -s -o /dev/null -w "%{http_code}" --max-time "$TIMEOUT" "$URL" || echo "000")

if [ "$HTTP" = "000" ]; then
  echo "САЙТ ЛЕЖИТ: $URL не отвечает (таймаут ${TIMEOUT}с)" | nerve send --severity critical
elif [ "$HTTP" -ge 500 ]; then
  echo "ОШИБКА: $URL вернул HTTP $HTTP" | nerve send --severity critical
fi
chmod +x /usr/local/bin/check-site.sh

Шаг 3: Добавить в cron

# Проверка каждые 2 минуты
*/2 * * * * /usr/local/bin/check-site.sh

Всё. Телефон зазвонит когда сайт ляжет.

Несколько сайтов

#!/bin/bash
export NERVE_DSN="nerve://TOKEN:[email protected]"

URLS=(
  "https://yoursite.ru"
  "https://api.yoursite.ru/health"
  "https://admin.yoursite.ru"
)

for URL in "${URLS[@]}"; do
  HTTP=$(curl -s -o /dev/null -w "%{http_code}" --max-time 10 "$URL" || echo "000")
  if [ "$HTTP" = "000" ] || [ "$HTTP" -ge 500 ]; then
    echo "ЛЕЖИТ: $URL (HTTP $HTTP)" | nerve send --severity critical
  fi
done

Проверка содержимого (smoke test)

Сайт отдаёт 200, но показывает пустую страницу или «на обслуживании».

BODY=$(curl -s --max-time 10 "https://yoursite.ru")
if ! echo "$BODY" | grep -q "Добро пожаловать"; then
  echo "КОНТЕНТ: yoursite.ru не содержит ожидаемый текст" | nerve send --severity alert
fi

Проверка времени ответа

TIME=$(curl -s -o /dev/null -w "%{time_total}" --max-time 15 "https://yoursite.ru" || echo "99")
SLOW=$(echo "$TIME > 3.0" | bc -l 2>/dev/null || echo "0")
if [ "$SLOW" = "1" ]; then
  echo "ТОРМОЗИТ: yoursite.ru ответ за ${TIME}с" | nerve send --severity alert
fi

Почему не Uptime Robot / Telegram-бот

Uptime RobotБесплатный тариф — 5 минут между проверками. Видит ваши данные. Серверы в США.
Telegram-ботТокен бота = доступ ко всей истории чата, списку участников, файлам. Утечка токена = утечка ops-переписки.
NervePayload шифруется на вашем сервере. Sender DSN — write-only. Бесплатно в бете.

Дальше: добавить проверку диска, SSL, бэкапов