Эксплуатация AlertWeb
Справочник для администраторов: какие процессы крутятся на панели и KVM-нодах, где лежат конфиги, как смотреть логи и проверять здоровье системы.
Архитектура процессов
| Компонент | Где | Назначение |
|---|---|---|
| alertweb-api | Панель | HTTP REST (:8080), gRPC для агентов (:9090), MySQL, лицензия |
| alertweb-worker | Панель | Фоновые jobs: создание VM, миграции, distribute ISO/шаблонов |
| nginx | Панель | TLS, статика UI, прокси /api/ и WebSocket консоли |
| MySQL/MariaDB | Панель | Состояние control plane (VM, ноды, jobs, RBAC) |
| alertweb-agent | KVM-нода | libvirt, диски VM, сеть, VNC/websockify, отчёт метрик |
| libvirtd | KVM-нода | Гипервизор QEMU/KVM |
Браузер ходит только на nginx панели. Агенты на нодах подключаются к API по gRPC (mTLS) на порт 9090.
Сервисы на панели (systemd)
| Unit | Бинарник | EnvironmentFile |
|---|---|---|
alertweb-api.service | /usr/local/bin/alertweb-api | /etc/alertweb/api.env |
alertweb-worker.service | /usr/local/bin/alertweb-worker | /etc/alertweb/worker.env |
nginx.service | — | /etc/nginx/conf.d/alertweb-panel.conf |
mariadb / mysqld | — | БД alertweb |
sudo systemctl status alertweb-api alertweb-worker nginx
sudo systemctl restart alertweb-api alertweb-worker
sudo systemctl enable --now alertweb-api alertweb-worker
Сервисы на KVM-ноде
| Unit | Назначение |
|---|---|
alertweb-agent.service | Агент AlertWeb → gRPC панели |
libvirtd.service | KVM/QEMU |
alertweb-network-reconcile.timer | Периодическая сверка сети (если установлен) |
sudo systemctl status alertweb-agent libvirtd
sudo systemctl restart alertweb-agent
Каталоги на диске
| Путь | Содержимое |
|---|---|
/etc/alertweb/ | api.env, worker.env, agent.env, certs/ |
/usr/local/bin/alertweb-* | Бинарники API, worker, agent |
/var/www/alertweb-ui/ | Статика веб-интерфейса (SPA) |
/usr/share/alertweb/migrations/ | SQL-миграции MySQL |
/var/lib/alertweb/iso/ | Загруженные ISO на панели (ALERTWEB_ISO_STORAGE) |
/vm/ | Диски виртуальных машин на ноде (ALERTWEB_VM_DISKS_DIR) |
/opt/alertweb/ | Распакованный релиз (скрипты обновления), опционально |
Файлы конфигурации
Панель — /etc/alertweb/api.env
Основной конфиг API. Пример production (значения замените на свои):
ALERTWEB_HTTP_ADDR=:8080
ALERTWEB_GRPC_ADDR=:9090
ALERTWEB_MYSQL_DSN=alertweb:SECRET@tcp(127.0.0.1:3306)/alertweb?parseTime=true&charset=utf8mb4
ALERTWEB_JWT_SECRET=...длинный-секрет...
ALERTWEB_MIGRATIONS_DIR=/usr/share/alertweb/migrations
ALERTWEB_ISO_STORAGE=/var/lib/alertweb/iso
ALERTWEB_GRPC_TLS_CERT=/etc/alertweb/certs/server.pem
ALERTWEB_GRPC_TLS_KEY=/etc/alertweb/certs/server-key.pem
ALERTWEB_GRPC_TLS_CA=/etc/alertweb/certs/ca.pem
ALERTWEB_HTTP_READ_TIMEOUT=2h
ALERTWEB_HTTP_WRITE_TIMEOUT=2h
Панель — /etc/alertweb/worker.env
ALERTWEB_MYSQL_DSN=...тот же DSN...
ALERTWEB_JWT_SECRET=...тот же секрет...
ALERTWEB_WORKER_ID=worker-1
ALERTWEB_CONTROL_PLANE_GRPC=127.0.0.1:9090
ALERTWEB_GRPC_TLS_CERT=/etc/alertweb/certs/client.pem
ALERTWEB_GRPC_TLS_KEY=/etc/alertweb/certs/client-key.pem
ALERTWEB_GRPC_TLS_CA=/etc/alertweb/certs/ca.pem
ALERTWEB_GRPC_TLS_SERVER_NAME=alertweb-api
Нода — /etc/alertweb/agent.env
ALERTWEB_AGENT_NODE_UUID=...
ALERTWEB_AGENT_BOOTSTRAP_TOKEN=...
ALERTWEB_CONTROL_PLANE_GRPC=203.0.113.10:9090
ALERTWEB_HYPERVISOR_DRIVER=libvirt
LIBVIRT_DEFAULT_URI=qemu:///system
ALERTWEB_VM_DISKS_DIR=/vm
ALERTWEB_GRPC_TLS_CERT=/etc/alertweb/certs/client.pem
ALERTWEB_GRPC_TLS_KEY=/etc/alertweb/certs/client-key.pem
ALERTWEB_GRPC_TLS_CA=/etc/alertweb/certs/ca.pem
ALERTWEB_GRPC_TLS_SERVER_NAME=alertweb-api
mTLS — /etc/alertweb/certs/
ca.pem— корневой CAserver.pem/server-key.pem— сертификат API (gRPC server)client.pem/client-key.pem— worker и агенты (gRPC client)
nginx — /etc/nginx/conf.d/alertweb-panel.conf
Проксирует /api/ на 127.0.0.1:8080, отдаёт UI из /var/www/alertweb-ui. Для ISO-загрузок обязательно:
client_max_body_size 8g;
proxy_read_timeout 7200s;
proxy_send_timeout 7200s;
Сгенерировать черновик конфига можно из UI: GET /api/platform/settings/security/nginx (см. API).
Переменные API (справочник)
| Переменная | Описание | По умолчанию |
|---|---|---|
ALERTWEB_HTTP_ADDR | HTTP listen | :8080 |
ALERTWEB_GRPC_ADDR | gRPC для агентов | :9090 |
ALERTWEB_MYSQL_DSN | MySQL DSN | — |
ALERTWEB_JWT_SECRET | Секрет JWT (обязателен) | — |
ALERTWEB_JWT_ACCESS_TTL | Время жизни access token | 1h |
ALERTWEB_JWT_REFRESH_TTL | Refresh token | 24h |
ALERTWEB_ISO_STORAGE | Каталог ISO на панели | /var/lib/alertweb/iso |
ALERTWEB_GRPC_INTERNAL_TOKEN | Внутренний токен worker↔API | — |
ALERTWEB_METRICS_TOKEN | Защита /metrics | — |
ALERTWEB_AUTH_RATE_LIMIT_RPM | Лимит login/min на IP | 20 |
Переменные worker
| Переменная | Описание |
|---|---|
ALERTWEB_WORKER_ID | Идентификатор воркера (уникальный при нескольких) |
ALERTWEB_WORKER_CONCURRENCY | Параллельные jobs (по умолчанию 8) |
ALERTWEB_CONTROL_PLANE_GRPC | Адрес gRPC API |
Переменные agent (нода)
| Переменная | Описание |
|---|---|
ALERTWEB_AGENT_NODE_UUID | UUID из панели при создании ноды |
ALERTWEB_AGENT_BOOTSTRAP_TOKEN | Одноразовый токен регистрации |
ALERTWEB_VM_DISKS_DIR | Каталог дисков VM (обычно /vm) |
ALERTWEB_NETCONFIG_DRY_RUN | 1 — не применять сетевые команды (тест) |
ALERTWEB_VXLAN_UPLINK | Интерфейс uplink для VXLAN |
Лицензирование
В production релизах проверка лицензии включена через ALERTWEB_LICENSE_ENABLED=true.
| Переменная | Описание |
|---|---|
ALERTWEB_LICENSE_ENABLED | true — коммерческий режим, мутации требуют активную лицензию |
ALERTWEB_LICENSE_KEY | Ключ из личного кабинета (можно задать в UI вместо env) |
ALERTWEB_LICENSE_PUBLIC_IP | Публичный IP панели (если NAT) |
ALERTWEB_LICENSE_EMAIL | Email владельца лицензии |
Подробнее о поведении без ключа — в разделе Установка → Лицензия.
Журналы (логи)
AlertWeb пишет в journald (stdout/stderr процессов). Отдельных файлов в /var/log/alertweb/ на панели обычно нет.
# Панель
sudo journalctl -u alertweb-api -f
sudo journalctl -u alertweb-worker -f
sudo journalctl -u alertweb-api --since "1 hour ago" -p err
# Нода
sudo journalctl -u alertweb-agent -f
# nginx (доступ / ошибки прокси)
sudo tail -f /var/log/nginx/error.log
Логи jobs в UI и API
Детальные шаги фоновых задач (создание VM, миграция, distribute) хранятся в MySQL и доступны:
- В панели: Задачи → открыть job → шаги и лог
- API:
GET /jobs/{uuid}/logs,GET /jobs/{uuid}/steps
Аудит действий пользователей: GET /audit (permission platform.audit.read).
Health и метрики
| Endpoint | Назначение |
|---|---|
GET /health | Liveness — процесс жив |
GET /health/ready | Readiness — MySQL + worker доступны |
GET /metrics | Prometheus-метрики (нужен ALERTWEB_METRICS_TOKEN) |
curl -fsS http://127.0.0.1:8080/health
curl -fsS http://127.0.0.1:8080/health/ready
nginx и WebSocket
- REST:
https://panel.example.ru/api/...→ API:8080 - VNC-консоль:
wss://panel.example.ru/api/console/ws?vm=...&token=... - UI:
try_files→index.html(SPA)
Быстрая диагностика
В комплекте релиза — скрипт только для чтения (не меняет firewall и сеть):
sudo bash /opt/alertweb/deploy/almalinux/diagnose-alertweb.sh
| Симптом | Что проверить |
|---|---|
| 502 / API недоступен | systemctl status alertweb-api, DSN, journalctl -u alertweb-api |
| Jobs висят | alertweb-worker, gRPC/mTLS certs |
| Нода offline | agent logs, firewall :9090, clock skew, bootstrap token |
| 403 license_* | Ключ, IP, POST /platform/license/sync, исходящий HTTPS |
| ISO upload 413 | client_max_body_size в nginx |
| Консоль не открывается | websockify на ноде, порты 6080+, nginx Upgrade headers |