# Конфигурация LogBoard+ **Автор:** Сергей Антропов **Сайт:** https://devops.org.ru ## Содержание 1. [Обзор конфигурации](#обзор-конфигурации) 2. [Переменные окружения](#переменные-окружения) 3. [Настройка Docker](#настройка-docker) 4. [Настройка безопасности](#настройка-безопасности) 5. [Настройка производительности](#настройка-производительности) 6. [Настройка логирования](#настройка-логирования) 7. [Примеры конфигураций](#примеры-конфигураций) ## Обзор конфигурации LogBoard+ использует переменные окружения для настройки всех аспектов работы приложения. Конфигурация разделена на несколько категорий для удобства управления. ### Файлы конфигурации - `.env` - Основной файл конфигурации (создается из `env.example`) - `docker-compose.yml` - Конфигурация Docker Compose - `app/excluded_containers.json` - Список исключенных контейнеров ### Приоритет настроек 1. Переменные окружения системы 2. Файл `.env` 3. Значения по умолчанию в коде ## Переменные окружения ### Основные настройки приложения | Переменная | Описание | По умолчанию | Обязательная | |------------|----------|--------------|--------------| | `LOGBOARD_PORT` | Порт веб-интерфейса | `9001` | Нет | | `LOGBOARD_TAIL` | Количество строк логов по умолчанию | `500` | Нет | | `LOGBOARD_USER` | Имя пользователя для входа | `admin` | Нет | | `LOGBOARD_PASS` | Пароль пользователя | `admin` | Да | | `LOGBOARD_SNAPSHOT_DIR` | Директория для снимков логов | `/app/snapshots` | Нет | | `LOGBOARD_INDEX_HTML` | Путь к HTML шаблону | `./templates/index.html` | Нет | | `TZ_TS` | Временная зона | `Europe/Moscow` | Нет | ### Настройки Docker | Переменная | Описание | По умолчанию | Обязательная | |------------|----------|--------------|--------------| | `COMPOSE_PROJECT_NAME` | Фильтр по проекту Docker Compose | - | Нет | | `LOGBOARD_PROJECTS` | Множественные проекты (через запятую) | - | Нет | | `DOCKER_HOST` | Путь к Docker socket | `unix:///var/run/docker.sock` | Нет | | `DOCKER_TLS_VERIFY` | Проверка TLS для Docker | - | Нет | | `DOCKER_CERT_PATH` | Путь к сертификатам Docker | - | Нет | | `DOCKER_NETWORKS` | Внешние сети Docker | `iaas,infrastructure_iaas` | Нет | ### Настройки безопасности | Переменная | Описание | По умолчанию | Обязательная | |------------|----------|--------------|--------------| | `SECRET_KEY` | Секретный ключ для JWT | `your-secret-key-here` | Да | | `ENCRYPTION_KEY` | Ключ шифрования | `your-encryption-key-here` | Да | | `AUTH_ENABLED` | Включить аутентификацию | `true` | Нет | | `AUTH_METHOD` | Метод аутентификации | `jwt` | Нет | | `SESSION_TIMEOUT` | Время жизни сессии (секунды) | `3600` | Нет | ### Настройки производительности | Переменная | Описание | По умолчанию | Обязательная | |------------|----------|--------------|--------------| | `MAX_CONNECTIONS` | Максимальное количество соединений | `100` | Нет | | `CONNECTION_TIMEOUT` | Таймаут подключения (секунды) | `30` | Нет | | `READ_TIMEOUT` | Таймаут чтения (секунды) | `60` | Нет | | `LOGBOARD_AJAX_UPDATE_INTERVAL` | Интервал AJAX обновления (мс) | `2000` | Нет | ### Настройки фильтрации контейнеров | Переменная | Описание | По умолчанию | Обязательная | |------------|----------|--------------|--------------| | `LOGBOARD_SKIP_UNHEALTHY` | Пропускать нездоровые контейнеры | `true` | Нет | | `LOGBOARD_CONTAINER_LIST_TIMEOUT` | Таймаут получения списка контейнеров | `10` | Нет | | `LOGBOARD_CONTAINER_INFO_TIMEOUT` | Таймаут получения информации о контейнере | `3` | Нет | | `LOGBOARD_HEALTH_CHECK_TIMEOUT` | Таймаут health check | `2` | Нет | ### Настройки логирования | Переменная | Описание | По умолчанию | Обязательная | |------------|----------|--------------|--------------| | `LOG_LEVEL` | Уровень логирования | `INFO` | Нет | | `LOG_FORMAT` | Формат логов | `json` | Нет | ### Настройки веб-интерфейса | Переменная | Описание | По умолчанию | Обязательная | |------------|----------|--------------|--------------| | `WEB_TITLE` | Заголовок веб-интерфейса | `LogBoard+` | Нет | | `WEB_DESCRIPTION` | Описание веб-интерфейса | `Веб-панель для просмотра логов микросервисов` | Нет | | `WEB_VERSION` | Версия веб-интерфейса | `1.0.0` | Нет | ### Настройки режима отладки | Переменная | Описание | По умолчанию | Обязательная | |------------|----------|--------------|--------------| | `DEBUG_MODE` | Режим отладки | `false` | Нет | **Режим отладки включает:** - **Auto-reload** - автоматическая перезагрузка при изменении кода - **Swagger UI** - документация API по адресу `/docs` - **ReDoc** - альтернативная документация по адресу `/redoc` - **Подробное логирование** - детальные логи для отладки **⚠️ Важно:** В продакшене обязательно установите `DEBUG_MODE=false`! ### Настройки уведомлений | Переменная | Описание | По умолчанию | Обязательная | |------------|----------|--------------|--------------| | `NOTIFICATIONS_ENABLED` | Включить уведомления | `false` | Нет | | `SMTP_HOST` | SMTP сервер | - | Нет | | `SMTP_PORT` | Порт SMTP | `587` | Нет | | `SMTP_USER` | Пользователь SMTP | - | Нет | | `SMTP_PASS` | Пароль SMTP | - | Нет | | `SMTP_FROM` | Email отправителя | - | Нет | ## Настройка Docker ### Подключение к Docker daemon #### Локальный Docker ```bash # Стандартная конфигурация для локального Docker DOCKER_HOST=unix:///var/run/docker.sock ``` #### Удаленный Docker ```bash # Подключение к удаленному Docker daemon DOCKER_HOST=tcp://192.168.1.100:2375 # С TLS сертификатами DOCKER_HOST=tcp://192.168.1.100:2376 DOCKER_TLS_VERIFY=1 DOCKER_CERT_PATH=/path/to/certs ``` ### Фильтрация проектов #### Один проект ```bash # Показать только контейнеры из одного проекта COMPOSE_PROJECT_NAME=myproject ``` #### Несколько проектов ```bash # Показать контейнеры из нескольких проектов LOGBOARD_PROJECTS=project1,project2,project3 ``` #### Все проекты ```bash # Показать все контейнеры (по умолчанию) # Оставьте переменные пустыми или не указывайте их ``` ### Настройка сетей ```bash # Подключение к внешним Docker сетям DOCKER_NETWORKS=iaas,infrastructure_iaas,frontend,backend ``` ## Настройка безопасности ### Генерация секретных ключей ```bash # Генерация секретного ключа для JWT openssl rand -hex 32 # 8a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0u1v2w3x4y5z6 # Генерация ключа шифрования openssl rand -hex 32 # 1a2b3c4d5e6f7g8h9i0j1k2l3m4n5o6p7q8r9s0t1u2v3w4x5y6z7 ``` ### Настройка аутентификации ```bash # Включение аутентификации AUTH_ENABLED=true AUTH_METHOD=jwt # Настройка времени жизни сессии (1 час) SESSION_TIMEOUT=3600 # Настройка пользователей LOGBOARD_USER=admin LOGBOARD_PASS=your-secure-password ``` ### Настройка HTTPS Для продакшена рекомендуется использовать HTTPS через reverse proxy: ```nginx # Nginx конфигурация server { listen 443 ssl http2; server_name your-domain.com; ssl_certificate /path/to/certificate.crt; ssl_certificate_key /path/to/private.key; location / { proxy_pass http://localhost:9001; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; # WebSocket поддержка proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; } } ``` ## Настройка производительности ### Ограничения соединений ```bash # Максимальное количество одновременных подключений MAX_CONNECTIONS=100 # Таймауты CONNECTION_TIMEOUT=30 READ_TIMEOUT=60 ``` ### Настройка AJAX обновления ```bash # Интервал обновления логов (в миллисекундах) LOGBOARD_AJAX_UPDATE_INTERVAL=2000 # Количество строк логов по умолчанию LOGBOARD_TAIL=500 ``` ### Оптимизация Docker ```bash # Таймауты для операций с Docker LOGBOARD_CONTAINER_LIST_TIMEOUT=10 LOGBOARD_CONTAINER_INFO_TIMEOUT=3 LOGBOARD_HEALTH_CHECK_TIMEOUT=2 # Пропуск нездоровых контейнеров LOGBOARD_SKIP_UNHEALTHY=true ``` ## Настройка логирования ### Уровни логирования ```bash # Доступные уровни: DEBUG, INFO, WARNING, ERROR LOG_LEVEL=INFO # Форматы: json, text LOG_FORMAT=json ``` ### Настройка логов приложения ```bash # Создание директории для логов sudo mkdir -p /var/log/logboard sudo chown $USER:$USER /var/log/logboard # Обновление docker-compose.yml volumes: - /var/log/logboard:/app/logs ``` ## Исключение контейнеров ### Файл excluded_containers.json ```json { "excluded_containers": [ "noisy-container-1", "noisy-container-2", "debug-container", "test-container" ], "description": "Контейнеры с избыточным логированием, исключенные из отображения" } ``` ### Управление через API ```bash # Получение списка исключенных контейнеров curl -X GET "http://localhost:9001/api/excluded-containers" \ -H "Authorization: Bearer YOUR_TOKEN" # Обновление списка curl -X POST "http://localhost:9001/api/excluded-containers" \ -H "Authorization: Bearer YOUR_TOKEN" \ -H "Content-Type: application/json" \ -d '["container1", "container2"]' ``` ## Примеры конфигураций ### Разработка ```bash # .env для разработки LOGBOARD_PORT=9001 LOGBOARD_USER=admin LOGBOARD_PASS=dev-password SECRET_KEY=dev-secret-key-change-in-production ENCRYPTION_KEY=dev-encryption-key-change-in-production # Docker настройки DOCKER_HOST=unix:///var/run/docker.sock LOGBOARD_PROJECTS=dev-project # Производительность LOGBOARD_TAIL=100 LOGBOARD_AJAX_UPDATE_INTERVAL=1000 LOG_LEVEL=DEBUG # Безопасность AUTH_ENABLED=true SESSION_TIMEOUT=7200 # Режим отладки DEBUG_MODE=true ``` ### Режим отладки ```bash # .env для режима отладки LOGBOARD_PORT=9001 LOGBOARD_USER=admin LOGBOARD_PASS=dev-password SECRET_KEY=dev-secret-key ENCRYPTION_KEY=dev-encryption-key # Docker настройки DOCKER_HOST=unix:///var/run/docker.sock # Производительность LOGBOARD_TAIL=50 LOGBOARD_AJAX_UPDATE_INTERVAL=500 LOG_LEVEL=DEBUG # Безопасность AUTH_ENABLED=true SESSION_TIMEOUT=7200 # Режим отладки (ВКЛЮЧЕН) DEBUG_MODE=true # Команды для управления режимом отладки: # make debug-on # Включить режим отладки # make debug-off # Выключить режим отладки # make debug-status # Проверить статус ``` ### Тестирование ```bash # .env для тестирования LOGBOARD_PORT=9002 LOGBOARD_USER=test LOGBOARD_PASS=test-password SECRET_KEY=test-secret-key ENCRYPTION_KEY=test-encryption-key # Docker настройки DOCKER_HOST=unix:///var/run/docker.sock LOGBOARD_PROJECTS=test-project # Производительность LOGBOARD_TAIL=50 LOGBOARD_AJAX_UPDATE_INTERVAL=500 LOG_LEVEL=INFO # Безопасность AUTH_ENABLED=true SESSION_TIMEOUT=1800 ``` ### Продакшен ```bash # .env для продакшена LOGBOARD_PORT=9001 LOGBOARD_USER=admin LOGBOARD_PASS=very-secure-password-here SECRET_KEY=8a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0u1v2w3x4y5z6 ENCRYPTION_KEY=1a2b3c4d5e6f7g8h9i0j1k2l3m4n5o6p7q8r9s0t1u2v3w4x5y6z7 # Docker настройки DOCKER_HOST=unix:///var/run/docker.sock LOGBOARD_PROJECTS=prod-project,monitoring # Производительность LOGBOARD_TAIL=1000 LOGBOARD_AJAX_UPDATE_INTERVAL=5000 MAX_CONNECTIONS=200 CONNECTION_TIMEOUT=60 READ_TIMEOUT=120 # Безопасность AUTH_ENABLED=true SESSION_TIMEOUT=3600 # Логирование LOG_LEVEL=WARNING LOG_FORMAT=json # Режим отладки (ОБЯЗАТЕЛЬНО ВЫКЛЮЧЕН в продакшене) DEBUG_MODE=false # Уведомления NOTIFICATIONS_ENABLED=true SMTP_HOST=smtp.company.com SMTP_PORT=587 SMTP_USER=logboard@company.com SMTP_PASS=email-password SMTP_FROM=logboard@company.com ``` ### Масштабированная установка ```bash # .env для масштабированной установки LOGBOARD_PORT=9001 LOGBOARD_USER=admin LOGBOARD_PASS=very-secure-password SECRET_KEY=8a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0u1v2w3x4y5z6 ENCRYPTION_KEY=1a2b3c4d5e6f7g8h9i0j1k2l3m4n5o6p7q8r9s0t1u2v3w4x5y6z7 # Docker настройки DOCKER_HOST=tcp://docker-swarm-manager:2376 DOCKER_TLS_VERIFY=1 DOCKER_CERT_PATH=/etc/docker/certs LOGBOARD_PROJECTS=app1,app2,app3,monitoring # Производительность LOGBOARD_TAIL=2000 LOGBOARD_AJAX_UPDATE_INTERVAL=3000 MAX_CONNECTIONS=500 CONNECTION_TIMEOUT=120 READ_TIMEOUT=300 # Безопасность AUTH_ENABLED=true SESSION_TIMEOUT=7200 # Логирование LOG_LEVEL=INFO LOG_FORMAT=json # Уведомления NOTIFICATIONS_ENABLED=true SMTP_HOST=smtp.company.com SMTP_PORT=587 SMTP_USER=logboard@company.com SMTP_PASS=email-password SMTP_FROM=logboard@company.com ``` ## Проверка конфигурации ### Валидация переменных окружения ```bash # Проверка конфигурации make env-check # Проверка Docker Compose make validate ``` ### Тестирование подключения ```bash # Проверка подключения к Docker docker ps # Проверка доступности API curl http://localhost:9001/healthz # Проверка аутентификации curl -X POST "http://localhost:9001/api/auth/login" \ -H "Content-Type: application/json" \ -d '{"username":"admin","password":"your-password"}' ``` ### Мониторинг конфигурации ```bash # Просмотр текущих настроек curl -X GET "http://localhost:9001/api/settings" \ -H "Authorization: Bearer YOUR_TOKEN" # Проверка списка контейнеров curl -X GET "http://localhost:9001/api/services" \ -H "Authorization: Bearer YOUR_TOKEN" ``` ## Рекомендации по безопасности ### Обязательные настройки для продакшена 1. **Измените пароли по умолчанию** 2. **Используйте сильные секретные ключи** 3. **Настройте HTTPS через reverse proxy** 4. **Ограничьте доступ к Docker socket** 5. **Настройте файрвол** 6. **Регулярно обновляйте зависимости** 7. **Мониторьте логи доступа** ### Мониторинг безопасности ```bash # Проверка прав доступа к Docker socket ls -la /var/run/docker.sock # Проверка пользователей в группе docker getent group docker # Проверка открытых портов netstat -tlnp | grep 9001 # Проверка логов аутентификации grep "authentication" /var/log/logboard/app.log ```