Простой shell сценарий
Sender DSN можно положить в переменную окружения на сервере или в secret store. Он умеет только отправлять сигнал в один pipe.
export NERVE_DSN="nerve://TOKEN:[email protected]"
if ! ./deploy.sh; then
echo "deploy failed on $(hostname)" | nerve send --severity alert
fi
Почему не просто webhook
Обычный webhook часто становится широким секретом. В Nerve sender DSN не читает историю, не подключается как агент и не выполняет команды.
Что отправлять
- имя сервиса и окружение
- статус и короткая причина
- commit SHA или ссылку на run
- без секретов и токенов
Минимальный набор серверных проверок
Для одного VPS обычно достаточно четырех сигналов: сайт отвечает, диск не заполнен, важный systemd service не failed, бэкап свежий. Это не заменяет Prometheus, но закрывает самые дорогие “молчаливые” поломки.
# disk
df / --output=pcent | tail -1 | tr -d ' %'
# failed services
systemctl list-units --state=failed --no-legend --plain
# backup age
find /var/backups -type f -mtime -1 | head
Один DSN или несколько
Для production и staging лучше иметь разные sender DSN. Тогда утечка staging-секрета не позволит шуметь в production pipe, а ротация не затронет все окружения сразу.
Runbook в сообщении
Хороший alert отвечает на вопрос “что делать дальше”. Добавляйте короткую подсказку или внутреннюю ссылку: runbook=/ops/backup-restore, service=api, host=prod-1.
Не превращать телефон в лог-файл
Если отправлять каждый warning, канал быстро станет бесполезным. На телефон отправляйте только события, где человек должен принять решение: сервис упал, бэкап не прошел, SSL истекает, диск заполнен.
Ротация sender DSN
Ротируйте DSN при смене сервера, публикации репозитория или подозрении, что secret попал в логи. Так как sender не читает историю, ротация обычно не требует миграции старых сообщений.