Что такое self-healing сервер
Self-healing сервер — это система, которая автоматически обнаруживает проблемы и устраняет их без вмешательства человека. OpenClaw берёт на себя роль постоянного дежурного: мониторит состояние сервера, анализирует аномалии и выполняет корректирующие действия.
Типичный сценарий без self-healing:
- 3 часа ночи: сервис упал из-за переполнения диска
- Мониторинг отправил алерт в 3:05
- Дежурный увидел уведомление в 3:47
- Устранил проблему к 4:15
- Даунтайм: 70 минут
С self-healing:
- 3 часа ночи: сервис упал из-за переполнения диска
- OpenClaw обнаружил в 3:01
- Очистил старые логи, перезапустил сервис в 3:02
- Отправил отчёт о произошедшем
- Даунтайм: 2 минуты
Архитектура системы
OpenClaw (агент)
│
├── Мониторинг (cron job каждые 5 мин)
│ ├── CPU, RAM, Disk
│ ├── Статус сервисов (systemd, Docker)
│ ├── Логи ошибок
│ └── Доступность эндпоинтов (HTTP ping)
│
├── Анализ
│ ├── Сравнение с базовыми показателями
│ ├── Определение причины проблемы
│ └── Выбор стратегии восстановления
│
├── Действие
│ ├── Перезапуск сервисов
│ ├── Очистка диска / кешей
│ ├── Масштабирование ресурсов
│ └── Откат к предыдущей версии
│
└── Отчётность
├── Telegram-уведомление
├── Запись в audit.log
└── Обновление dashboard
Настройка: шаг за шагом
Шаг 1: Установить OpenClaw на сервер
# Node.js 22
curl -fsSL https://deb.nodesource.com/setup_22.x | bash -
apt-get install -y nodejs
# OpenClaw
npm install -g openclaw
# Создать рабочую директорию
mkdir -p /opt/openclaw-healer
cd /opt/openclaw-healer
Шаг 2: Создать AGENTS.md для self-healing агента
# Self-Healing Server Agent
Ты — автономный агент мониторинга и восстановления сервера.
Работаешь 24/7 без участия человека.
## Твоя задача
Мониторить состояние сервера и устранять проблемы автоматически.
## Алгоритм при обнаружении проблемы
1. Определи причину (читай логи, проверяй метрики)
2. Выбери минимально инвазивное решение
3. Примени решение
4. Убедись что проблема устранена
5. Отправь отчёт в Telegram
## Что ты можешь делать (разрешённые действия)
- Перезапускать сервисы через systemctl
- Очищать /tmp, /var/log (файлы старше 7 дней)
- Перезапускать Docker контейнеры
- Очищать Docker кеш (docker system prune -f)
- Отправлять уведомления в Telegram
## Чего нельзя делать без явного разрешения
- Удалять файлы из /home, /opt, /var/www
- Изменять конфигурационные файлы
- Устанавливать или удалять пакеты
- Перезагружать сервер (только в крайнем случае с уведомлением)
## При каждом действии
- Логируй в /opt/openclaw-healer/healer.log
- Отправляй краткий отчёт в Telegram
- Сохраняй snapshot метрик до и после
Шаг 3: Создать скрипт мониторинга
Создайте /opt/openclaw-healer/check.sh:
#!/bin/bash
# Собирает метрики и возвращает статус сервера
echo "=== SYSTEM STATUS ==="
echo "Timestamp: $(date -Iseconds)"
echo ""
echo "--- CPU & Memory ---"
top -bn1 | grep "Cpu\|Mem\|Swap" | head -3
free -h
echo ""
echo "--- Disk Usage ---"
df -h | grep -v tmpfs | grep -v udev
echo ""
echo "--- Services Status ---"
systemctl list-units --type=service --state=failed 2>/dev/null | head -20
echo ""
echo "--- Docker Containers ---"
docker ps -a --format "table {{.Names}}\t{{.Status}}\t{{.RunningFor}}" 2>/dev/null
echo ""
echo "--- Recent Errors (last 50 lines) ---"
journalctl -p err -n 50 --no-pager 2>/dev/null
echo ""
echo "--- HTTP Health Checks ---"
for url in $(cat /opt/openclaw-healer/health-urls.txt 2>/dev/null); do
status=$(curl -s -o /dev/null -w "%{http_code}" --max-time 5 "$url")
echo "$url: $status"
done
Создайте /opt/openclaw-healer/health-urls.txt:
https://yourdomain.com/api/health
https://yourdomain.com/
http://localhost:8080/ping
Шаг 4: Настроить cron job
В ~/.openclaw/crons.json:
{
"jobs": [
{
"name": "server-health-check",
"schedule": "*/5 * * * *",
"task": "Запусти /opt/openclaw-healer/check.sh и проанализируй вывод. Если обнаружишь проблемы — примени стандартные меры восстановления согласно инструкциям в AGENTS.md. Если всё в норме — ответь просто OK.",
"model": "gpt-4o-mini",
"timeout": "3m",
"soul": "/opt/openclaw-healer/AGENTS.md",
"onError": "notify_critical"
},
{
"name": "deep-analysis",
"schedule": "0 */6 * * *",
"task": "Проведи глубокий анализ состояния сервера за последние 6 часов: тренды CPU/памяти, паттерны ошибок, аномалии. Сохрани отчёт в /opt/openclaw-healer/reports/$(date +%Y%m%d-%H%M).md. Отправь краткое резюме в Telegram.",
"model": "gpt-4o",
"timeout": "10m",
"soul": "/opt/openclaw-healer/AGENTS.md"
}
]
}
Шаг 5: Настроить Telegram-уведомления
{
"notifications": {
"telegram": {
"token": "BOT_TOKEN",
"chatId": "CHAT_ID",
"events": ["healing_action", "task_failed", "critical_alert"]
}
}
}
Шаг 6: Запустить как systemd-сервис
cat > /etc/systemd/system/openclaw-healer.service << 'EOF'
[Unit]
Description=OpenClaw Self-Healing Agent
After=network.target
[Service]
Type=simple
User=root
WorkingDirectory=/opt/openclaw-healer
ExecStart=/usr/bin/openclaw serve --cron-only
Restart=always
RestartSec=10
Environment=NODE_ENV=production
[Install]
WantedBy=multi-user.target
EOF
systemctl enable openclaw-healer
systemctl start openclaw-healer
systemctl status openclaw-healer
Примеры автоматических восстановлений
Переполнение диска
[03:01] Обнаружено: /dev/sda1 использование 95%
[03:01] Анализ: /var/log занимает 18 GB, файлы старше 7 дней
[03:02] Действие: find /var/log -mtime +7 -delete → освобождено 14 GB
[03:02] Действие: docker system prune -f → освобождено 2 GB
[03:02] Результат: /dev/sda1 использование 61%
[03:02] Уведомление отправлено в Telegram ✅
Упавший сервис
[04:15] Обнаружено: nginx.service в статусе failed
[04:15] Анализ логов: nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address in use)
[04:15] Анализ: порт 80 занят процессом PID 12847 (apache2)
[04:16] Действие: systemctl stop apache2
[04:16] Действие: systemctl start nginx
[04:16] Проверка: HTTP 200 на http://localhost
[04:16] Уведомление: "nginx восстановлен, apache2 остановлен. Рекомендуется проверить, нужен ли apache2" ✅
Высокая нагрузка на CPU
[02:30] Обнаружено: CPU 97% в течение 10 минут
[02:30] Анализ: процесс php-fpm (PID 8834) потребляет 89% CPU
[02:31] Анализ логов PHP: fatal error в файле upload.php — бесконечный цикл
[02:31] Действие: kill -9 8834, systemctl restart php8.2-fpm
[02:31] Проверка: CPU вернулся к 12%
[02:31] Уведомление: "Зациклившийся PHP процесс остановлен. Проверьте /var/www/upload.php строку 47" ✅
Безопасность и ограничения
Принцип минимальных привилегий. Агент должен иметь только те права, которые нужны для восстановления. Не запускайте от root если можно обойтись без этого.
Whitelist действий. Явно перечислите в AGENTS.md что разрешено — это ограничивает радиус возможных ошибок.
Логирование. Каждое действие агента должно логироваться с timestamp. Это критично для post-mortem анализа.
Лимит агрессивности. Если одна и та же проблема возникает больше 3 раз за час — агент должен уведомить человека вместо продолжения автоматического восстановления.
{
"healing": {
"maxActionsPerHour": 10,
"escalateAfterRepeat": 3,
"escalateTo": "telegram"
}
}
Для правильной инфраструктуры под self-healing агента: Mac Mini vs VPS: что выбрать. Запуск OpenClaw 24/7: OpenClaw на VPS круглосуточно.