Основные изменения: - Добавлено AJAX обновление логов с чекбоксом 'Auto-update logs' - Добавлена опция 'All logs' в выпадающий список tail lines - Исправлено отображение длинных названий контейнеров в multi-view режиме - Восстановлена загрузка истории логов при включенном AJAX обновлении Новые функции: - Чекбокс 'Auto-update logs' в секции Options (включен по умолчанию) - Настройка интервала обновления через LOGBOARD_AJAX_UPDATE_INTERVAL - API эндпоинт /api/settings для получения настроек приложения - Поддержка параметра tail=all для загрузки всех логов - Автоматический запуск AJAX обновления при включении чекбокса Исправления UI: - Кнопки LogLevels не уезжают вправо при длинных названиях контейнеров - Добавлено обрезание длинных названий с многоточием - Фиксированная высота заголовков в multi-view режиме - Защита от сжатия кнопок LogLevels Тестирование: - Добавлены тесты для AJAX обновления (test_ajax_update.py) - Тест multi-view AJAX обновления (test_multi_view_ajax.py) - Тест опции 'all logs' (test_all_logs.py) - Тест отображения длинных названий (test_multi_view_layout.py) - Команды make test-ajax, make test-multi-view-ajax, make test-all-logs, make test-multi-view-layout Документация: - Создана подробная документация AJAX обновления (app/docs/ajax-update.md) - Обновлен CHANGELOG.md с версиями 1.3.0, 1.5.0, 1.6.0 - Обновлен README.md с описанием новых функций Автор: Сергей Антропов Сайт: https://devops.org.ru
17 KiB
17 KiB
LogBoard+ - Веб-панель для просмотра логов микросервисов
Автор: Сергей Антропов
Сайт: https://devops.org.ru
Версия: 1.0.0
📋 Описание
LogBoard+ - это современная веб-панель для просмотра логов Docker контейнеров в реальном времени. Приложение предоставляет удобный интерфейс для мониторинга логов микросервисов с поддержкой множественного просмотра, фильтрации, поиска и экспорта логов.
✨ Основные возможности
🔍 Просмотр логов
- Single View режим - просмотр логов одного контейнера
- Multi View режим - одновременный просмотр логов нескольких контейнеров
- Real-time обновление через WebSocket соединения
- AJAX обновление - периодическое получение новых логов без WebSocket
- Автопрокрутка логов
- Пауза/возобновление потока логов
🎨 Интерфейс
- Современный адаптивный дизайн
- Темная и светлая темы
- Мобильная версия
- Интуитивно понятная навигация
🔧 Управление логами
- Фильтрация по уровням логирования (DEBUG, INFO, WARN, ERROR, OTHER)
- Поиск по регулярным выражениям
- Настройка количества строк (Tail Lines)
- Перенос строк (Word Wrap)
- Счетчики логов по уровням
📊 Статистика и мониторинг
- Счетчики логов в реальном времени
- Статистика по уровням логирования
- Мониторинг состояния контейнеров
- Health check статусы
💾 Экспорт и сохранение
- Скачивание логов в формате .log
- Отдельные файлы для каждого контейнера в Multi View режиме
- Автоматическое именование файлов с временными метками
- Сохранение снимков логов
🔐 Безопасность
- JWT аутентификация
- Настраиваемые пользователи
- Защищенные API endpoints
- Шифрование чувствительных данных
🚀 Быстрый старт
Предварительные требования
- Docker и Docker Compose
- Python 3.8+
- Доступ к Docker socket
Установка и запуск
- Клонирование репозитория
git clone <repository-url>
cd logboard
- Настройка переменных окружения
make setup
# Отредактируйте .env файл под свои нужды
- Генерация docker-compose.yml
make generate
- Запуск приложения
make up
- Открытие в браузере
http://localhost:9001
Команды управления
make help # Показать справку по командам
make setup # Настроить переменные окружения
make generate # Сгенерировать docker-compose.yml
make build # Собрать Docker образ
make up # Запустить сервисы
make down # Остановить сервисы
make restart # Перезапустить сервисы
make logs # Показать логи
make status # Показать статус сервисов
make shell # Подключиться к контейнеру
make clean # Очистить проект
⚙️ Конфигурация
Основные настройки (.env)
# Основные настройки приложения
LOGBOARD_PORT=9001 # Порт приложения
LOGBOARD_TAIL=500 # Количество строк логов по умолчанию
LOGBOARD_USER=admin # Имя пользователя
LOGBOARD_PASS=s3cret-change-me # Пароль
# Директория для снимков логов
LOGBOARD_SNAPSHOT_DIR=/app/snapshots
# Фильтр по проекту Docker Compose
COMPOSE_PROJECT_NAME=myproj
# Настройки множественных проектов
LOGBOARD_PROJECTS=project1,project2,project3
# Настройки безопасности
SECRET_KEY=your-secret-key-here
ENCRYPTION_KEY=your-encryption-key-here
# Настройки производительности
MAX_CONNECTIONS=100
CONNECTION_TIMEOUT=30
READ_TIMEOUT=60
# Настройки аутентификации
AUTH_ENABLED=true
AUTH_METHOD=jwt
SESSION_TIMEOUT=3600
Docker сети
Приложение поддерживает подключение к внешним Docker сетям:
networks:
- default: {}
- iaas:
external: true
- infrastructure_iaas:
external: true
🔌 API Endpoints
Аутентификация
POST /api/auth/login
- Вход в системуPOST /api/auth/logout
- Выход из системыGET /api/auth/me
- Информация о текущем пользователе
Сервисы и контейнеры
GET /api/services
- Список всех сервисов/контейнеровGET /api/projects
- Список проектов Docker ComposeGET /api/logs/stats/{container_id}
- Статистика логов контейнера
Управление исключениями
GET /api/excluded-containers
- Список исключенных контейнеровPOST /api/excluded-containers
- Добавить контейнер в исключения
Снимки логов
POST /api/snapshot
- Создать снимок логов
WebSocket endpoints
WS /ws/logs/{container_id}
- Поток логов контейнераWS /ws/fan/{service_name}
- Агрегированный поток логов сервисаWS /ws/fan_group
- Групповой поток логов
Системные
GET /healthz
- Проверка здоровья приложенияGET /
- Главная страницаGET /login
- Страница входа
🎯 Режимы просмотра
Single View режим
- Просмотр логов одного выбранного контейнера
- Полноэкранный режим отображения
- Детальная статистика по уровням логирования
- Возможность паузы и возобновления потока
Multi View режим
- Одновременный просмотр логов нескольких контейнеров
- Адаптивная сетка (1-4 колонки в зависимости от количества контейнеров)
- Отдельные счетчики для каждого контейнера
- Возможность скачивания отдельных файлов логов для каждого контейнера
🔍 Фильтрация и поиск
Уровни логирования
- DEBUG - Отладочная информация
- INFO - Информационные сообщения
- WARN - Предупреждения
- ERROR - Ошибки
- OTHER - Прочие сообщения
Поиск
- Регулярные выражения для поиска в логах
- Фильтрация в реальном времени
- Подсветка найденных совпадений
Настройки отображения
- Tail Lines - количество отображаемых строк
- Word Wrap - перенос длинных строк
- Автопрокрутка - автоматическая прокрутка к новым логам
⌨️ Горячие клавиши
Навигация по контейнерам
[
илиCtrl + ←
- Переключение к предыдущему контейнеру]
илиCtrl + →
- Переключение к следующему контейнеру
Тема оформления
Ctrl + T
- Переключение между темной и светлой темой
Формы и ввод
Enter
- В форме входа: отправка формы авторизацииEnter
- В поле добавления исключений: добавление контейнера в исключения
Условия работы горячих клавиш
- Горячие клавиши работают только когда фокус не находится в полях ввода
- Навигация по контейнерам работает только в Single View режиме
- Переключение темы работает на всех страницах приложения
📱 Мобильная версия
Приложение полностью адаптивно и поддерживает:
- Адаптивный дизайн для мобильных устройств
- Сенсорное управление
- Оптимизированный интерфейс для маленьких экранов
- Боковое меню для мобильных устройств
🔧 Расширенные возможности
Управление проектами
- Множественные проекты Docker Compose
- Фильтрация по проектам
- Переключение между проектами
Исключения контейнеров
- Добавление контейнеров в исключения
- Постоянное хранение исключений
- Управление через веб-интерфейс
Мониторинг состояния
- Health check статусы контейнеров
- Фильтрация нездоровых контейнеров
- Автоматическое обновление статусов
Производительность
- Ограничение количества соединений
- Таймауты для операций
- Оптимизированная обработка логов
- Кэширование данных
🛠️ Разработка
Структура проекта
logboard/
├── app.py # Основное приложение FastAPI
├── docker-compose.yml # Конфигурация Docker Compose
├── Dockerfile # Docker образ
├── requirements.txt # Зависимости Python
├── templates/ # HTML шаблоны
│ ├── index.html # Главная страница
│ ├── login.html # Страница входа
│ └── error.html # Страницы ошибок
├── scripts/ # Вспомогательные скрипты
│ └── generate-compose.py
├── snapshots/ # Директория для снимков логов
├── Makefile # Команды управления
├── env.example # Пример переменных окружения
└── README.md # Документация
Технологии
- Backend: FastAPI, Python 3.8+
- Frontend: HTML5, CSS3, JavaScript (ES6+)
- WebSocket: Асинхронные соединения для real-time логов
- Docker: Интеграция с Docker API
- JWT: Аутентификация и авторизация
- Docker Compose: Управление контейнерами
Разработка и отладка
# Запуск в режиме разработки
make dev
# Подключение к контейнеру
make shell
# Просмотр логов
make logs
# Пересборка
make rebuild
🔒 Безопасность
Аутентификация
- JWT токены для сессий
- Настраиваемые пользователи через переменные окружения
- Автоматический выход по истечении сессии
- Защищенные API endpoints
Шифрование
- Шифрование чувствительных данных с помощью Fernet
- Безопасное хранение токенов и паролей
- Защищенные переменные окружения
Сетевая безопасность
- HTTPS поддержка (при настройке)
- Валидация входных данных
- Защита от XSS и CSRF атак
📊 Мониторинг и логирование
Логирование приложения
- Настраиваемые уровни логирования (DEBUG, INFO, WARN, ERROR)
- JSON формат логов
- Структурированное логирование
Метрики
- Количество активных соединений
- Статистика WebSocket соединений
- Время отклика API
- Использование ресурсов
Health checks
- Проверка состояния приложения
- Мониторинг Docker соединения
- Проверка доступности зависимостей
🚀 Развертывание
Продакшн настройки
- Настройка безопасности
# Измените секретные ключи
SECRET_KEY=your-production-secret-key
ENCRYPTION_KEY=your-production-encryption-key
# Настройте пользователей
LOGBOARD_USER=your-admin-user
LOGBOARD_PASS=your-secure-password
- Настройка сети
# Настройте внешние сети
DOCKER_NETWORKS=your-network1,your-network2
- Настройка производительности
# Увеличьте лимиты для продакшна
MAX_CONNECTIONS=500
CONNECTION_TIMEOUT=60
READ_TIMEOUT=120
Docker Swarm
version: '3.8'
services:
logboard:
image: logboard:latest
deploy:
replicas: 2
resources:
limits:
memory: 512M
reservations:
memory: 256M
networks:
- logboard-network
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- logboard-snapshots:/app/snapshots
Kubernetes
apiVersion: apps/v1
kind: Deployment
metadata:
name: logboard
spec:
replicas: 2
selector:
matchLabels:
app: logboard
template:
metadata:
labels:
app: logboard
spec:
containers:
- name: logboard
image: logboard:latest
ports:
- containerPort: 9001
volumeMounts:
- name: docker-sock
mountPath: /var/run/docker.sock
- name: snapshots
mountPath: /app/snapshots
volumes:
- name: docker-sock
hostPath:
path: /var/run/docker.sock
- name: snapshots
persistentVolumeClaim:
claimName: logboard-snapshots
🤝 Поддержка и обратная связь
Автор
- Сергей Антропов
- Сайт: https://devops.org.ru
- Email: [contact@devops.org.ru]
Сообщество
- Issues: Сообщайте о багах и предлагайте улучшения
- Pull Requests: Приветствуются вклады в развитие проекта
- Документация: Помогите улучшить документацию
Лицензия
Проект распространяется под лицензией MIT.
📝 Changelog
v1.0.0 (2024-12-17)
- ✨ Первый релиз LogBoard+
- 🔍 Поддержка Single View и Multi View режимов
- 🔐 JWT аутентификация
- 📱 Адаптивный дизайн
- 🔧 Полная интеграция с Docker API
- 📊 Статистика и мониторинг логов
- 💾 Экспорт логов в файлы
- 🎨 Темная и светлая темы
LogBoard+ - современное решение для мониторинга логов микросервисов в Docker среде.