- Навигация по контейнерам: [ ] и Ctrl + стрелки - Переключение темы: Ctrl + T - Управление формами: Enter для отправки - Описаны условия работы горячих клавиш
458 lines
17 KiB
Markdown
458 lines
17 KiB
Markdown
|
||
# LogBoard+ - Веб-панель для просмотра логов микросервисов
|
||
|
||
**Автор:** Сергей Антропов
|
||
**Сайт:** https://devops.org.ru
|
||
**Версия:** 1.0.0
|
||
|
||
## 📋 Описание
|
||
|
||
LogBoard+ - это современная веб-панель для просмотра логов Docker контейнеров в реальном времени. Приложение предоставляет удобный интерфейс для мониторинга логов микросервисов с поддержкой множественного просмотра, фильтрации, поиска и экспорта логов.
|
||
|
||
## ✨ Основные возможности
|
||
|
||
### 🔍 Просмотр логов
|
||
- **Single View режим** - просмотр логов одного контейнера
|
||
- **Multi View режим** - одновременный просмотр логов нескольких контейнеров
|
||
- **Real-time обновление** через 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
|
||
|
||
### Установка и запуск
|
||
|
||
1. **Клонирование репозитория**
|
||
```bash
|
||
git clone <repository-url>
|
||
cd logboard
|
||
```
|
||
|
||
2. **Настройка переменных окружения**
|
||
```bash
|
||
make setup
|
||
# Отредактируйте .env файл под свои нужды
|
||
```
|
||
|
||
3. **Генерация docker-compose.yml**
|
||
```bash
|
||
make generate
|
||
```
|
||
|
||
4. **Запуск приложения**
|
||
```bash
|
||
make up
|
||
```
|
||
|
||
5. **Открытие в браузере**
|
||
```
|
||
http://localhost:9001
|
||
```
|
||
|
||
### Команды управления
|
||
|
||
```bash
|
||
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)
|
||
|
||
```bash
|
||
# Основные настройки приложения
|
||
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 сетям:
|
||
|
||
```yaml
|
||
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 Compose
|
||
- `GET /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**: Управление контейнерами
|
||
|
||
### Разработка и отладка
|
||
|
||
```bash
|
||
# Запуск в режиме разработки
|
||
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 соединения**
|
||
- **Проверка доступности** зависимостей
|
||
|
||
## 🚀 Развертывание
|
||
|
||
### Продакшн настройки
|
||
|
||
1. **Настройка безопасности**
|
||
```bash
|
||
# Измените секретные ключи
|
||
SECRET_KEY=your-production-secret-key
|
||
ENCRYPTION_KEY=your-production-encryption-key
|
||
|
||
# Настройте пользователей
|
||
LOGBOARD_USER=your-admin-user
|
||
LOGBOARD_PASS=your-secure-password
|
||
```
|
||
|
||
2. **Настройка сети**
|
||
```bash
|
||
# Настройте внешние сети
|
||
DOCKER_NETWORKS=your-network1,your-network2
|
||
```
|
||
|
||
3. **Настройка производительности**
|
||
```bash
|
||
# Увеличьте лимиты для продакшна
|
||
MAX_CONNECTIONS=500
|
||
CONNECTION_TIMEOUT=60
|
||
READ_TIMEOUT=120
|
||
```
|
||
|
||
### Docker Swarm
|
||
```yaml
|
||
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
|
||
```yaml
|
||
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 среде.
|