Зачем Nerve для Docker
Docker-контейнеры падают тихо. Restart policy скрывает crash. Unhealthy-контейнер отдаёт ошибки. Nerve отправляет зашифрованный push на телефон в момент сбоя — без дашбордов и email-рассылок.
Отслеживание docker events
docker events --filter event=die --format '{{.Actor.Attributes.name}} exited' \
| while read -r line; do echo "$line" | nerve send; done
Cron: проверка unhealthy-контейнеров
# /etc/cron.d/nerve-docker-check
*/2 * * * * root docker ps --filter "health=unhealthy" --format "unhealthy: {{.Names}}" \
| nerve send --severity critical 2>/dev/null || true
Docker Compose: watcher-сервис
services:
app:
image: my-app:latest
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:3000/health"]
interval: 30s
retries: 3
nerve-watcher:
image: alpine:latest
depends_on:
- app
environment:
- NERVE_DSN=nerve://TOKEN:[email protected]
entrypoint: /bin/sh -c
command: |
apk add --no-cache curl docker-cli &&
while true; do
UNHEALTHY=$(docker ps --filter "health=unhealthy" --format "{{.Names}}")
if [ -n "$UNHEALTHY" ]; then
echo "unhealthy: $UNHEALTHY" | nerve send --severity critical
fi
sleep 120
done
Логи упавшего контейнера
CONTAINER="my-app"
docker wait "$CONTAINER" && \
docker logs --tail 20 "$CONTAINER" 2>&1 \
| nerve send --severity critical
Быстрый старт
go install github.com/nerve-ink/nerve-cli/cmd/nerve@latest
export NERVE_DSN="nerve://TOKEN:[email protected]"
echo "container my-app exited with code 137" | nerve send
FAQ
Что считать инцидентом
Не каждый restart контейнера требует push. Для dev-сервера это может быть нормой. Для production полезнее алертить на restart loop, exited контейнер, unhealthy status или заполнение /var/lib/docker.
docker ps --filter "health=unhealthy" --format '{{.Names}}' \
| while read -r name; do
echo "Docker unhealthy: $name on $(hostname)" | nerve send --severity critical
done
Compose project name
Если на сервере несколько compose-проектов, добавляйте project name в сообщение. Иначе на телефоне будет непонятно, какой именно web или worker упал.
Как получить уведомление о падении контейнера?
Используйте docker events или cron-скрипт, проверяющий docker ps на unhealthy/exited контейнеры, и передайте вывод в nerve send.
Nerve работает с Docker Compose?
Да. Сохраните NERVE_DSN как переменную окружения и добавьте watcher-сервис или cron-проверку.
Уведомления зашифрованы?
Да. Payload шифруется end-to-end. Relay видит только шифротекст.