logboard/README.md
Сергей Антропов a1572d470c docs: обновить README.md с информацией о множественных проектах
- Добавлено описание работы с множественными проектами
- Добавлена информация о селекторе проектов в веб-интерфейсе
- Добавлены примеры использования переменной LOGBOARD_PROJECTS
- Добавлено описание API эндпоинтов для работы с проектами
- Обновлена таблица переменных окружения

Автор: Сергей Антропов
Сайт: https://devops.org.ru
2025-08-16 12:29:45 +03:00

265 lines
12 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# LogBoard+
**Автор:** Сергей Антропов
**Сайт:** https://devops.org.ru
LogBoard+ — это веб-панель для просмотра логов микросервисов из `docker-compose` в **реальном времени** с поддержкой:
- Вкладок по сервисам и репликам
- Темная/светлая темы
- Подсветка ANSI-цветов из логов
- Фильтрация по уровням (`debug`, `info`, `warn`, `error`)
- Снимки логов в файл (`snapshot`)
- Объединение всех реплик сервиса в одну вкладку (**aggregate**)
- Fan-in группировка нескольких сервисов в одну панель (**group**)
- Цветовые теги по короткому ID контейнера
- Sticky-фильтры по репликам
- Пауза/возобновление стрима
- Basic Auth для доступа
- Автопереподключение вебсокетов
- Поддержка нескольких клиентов одновременно
---
## Установка и запуск
### Быстрый старт с Makefile (рекомендуется)
```bash
# Распаковать проект
unzip logboard_plus_fanin_groups.zip
cd logboard_plus
# Показать доступные команды
make help
# Настроить переменные окружения
make setup
# Отредактировать .env файл под свои нужды (опционально)
# nano .env
# Собрать и запустить проект
make build
make up
# Открыть в браузере
http://localhost:9001
```
### Команды Makefile
| Команда | Описание |
|---------|----------|
| `make help` | Показать справку по всем командам |
| `make setup` | Настроить переменные окружения (копировать env.example в .env) |
| `make generate` | Сгенерировать docker-compose.yml из .env файла |
| `make build` | Собрать Docker образ |
| `make up` | Запустить сервисы в фоновом режиме (с правами root) |
| `make down` | Остановить и удалить сервисы (с правами root) |
| `make restart` | Перезапустить сервисы (с правами root) |
| `make logs` | Показать логи сервисов в реальном времени |
| `make logs-tail` | Показать последние 100 строк логов |
| `make status` | Показать статус сервисов |
| `make clean` | Остановить сервисы и удалить образы |
| `make shell` | Подключиться к контейнеру |
| `make dev` | Запуск в режиме разработки (с выводом логов) |
| `make rebuild` | Пересобрать и запустить сервисы |
### Настройка переменных окружения
Проект использует файл `.env` для хранения всех настроек. Для настройки:
1. **Автоматическая настройка:**
```bash
make setup
```
2. **Ручная настройка:**
```bash
cp env.example .env
nano .env # или любой другой редактор
```
#### Основные переменные окружения:
| Переменная | Описание | Значение по умолчанию |
|------------|----------|----------------------|
| `LOGBOARD_PORT` | Порт веб-интерфейса | `9001` |
| `LOGBOARD_USER` | Имя пользователя для Basic Auth | `admin` |
| `LOGBOARD_PASS` | Пароль для Basic Auth | `s3cret-change-me` |
| `LOGBOARD_TAIL` | Количество строк истории | `500` |
| `LOGBOARD_SNAPSHOT_DIR` | Директория для снимков | `/app/snapshots` |
| `LOGBOARD_INDEX_HTML` | Путь к HTML шаблону | `./templates/index.html` |
| `TZ_TS` | Временная зона для меток времени | (пусто) |
| `COMPOSE_PROJECT_NAME` | Фильтр по проекту Docker Compose | (пусто) |
| `LOGBOARD_PROJECTS` | Множественные проекты (через запятую) | (пусто) |
| `DOCKER_NETWORKS` | Внешние Docker сети (через запятую) | `iaas,infrastructure_iaas` |
| `LOGBOARD_SKIP_UNHEALTHY` | Пропускать нездоровые контейнеры | `true` |
| `LOGBOARD_CONTAINER_LIST_TIMEOUT` | Таймаут получения списка контейнеров (сек) | `10` |
| `LOGBOARD_CONTAINER_INFO_TIMEOUT` | Таймаут получения информации о контейнере (сек) | `3` |
| `LOGBOARD_HEALTH_CHECK_TIMEOUT` | Таймаут проверки health status (сек) | `2` |
| `SECRET_KEY` | Секретный ключ для шифрования | `your-secret-key-here` |
| `ENCRYPTION_KEY` | Ключ шифрования | `your-encryption-key-here` |
**⚠️ Важно:** Измените значения `LOGBOARD_PASS`, `SECRET_KEY` и `ENCRYPTION_KEY` в продакшене!
### Работа с множественными проектами
LogBoard+ поддерживает работу с несколькими проектами Docker Compose одновременно:
#### Через веб-интерфейс:
1. **Откройте LogBoard+** в браузере
2. **Используйте селектор "Projects"** в верхней панели
3. **Выберите проект** из списка или "All Projects" для всех
4. **Просматривайте логи** контейнеров выбранного проекта
#### Через переменные окружения:
1. **Укажите проекты в .env файле:**
```bash
LOGBOARD_PROJECTS=project1,project2,project3
```
2. **Перезапустите LogBoard+:**
```bash
make restart
```
#### API эндпоинты:
- `GET /api/projects` - получить список всех проектов
- `GET /api/services?projects=project1,project2` - получить контейнеры конкретных проектов
### Настройка Docker сетей
Для подключения к внешним Docker сетям (например, для работы с другими проектами):
1. **Укажите сети в .env файле:**
```bash
DOCKER_NETWORKS=iaas,infrastructure_iaas,myproject_network
```
2. **Сгенерируйте docker-compose.yml:**
```bash
make generate
```
3. **Убедитесь, что сети существуют:**
```bash
docker network ls
```
4. **Создайте сети, если их нет:**
```bash
docker network create iaas
docker network create infrastructure_iaas
```
### Настройка прав доступа к Docker
Приложение запускается с правами root для корректного доступа к Docker socket. Если вы хотите запускать без прав root, добавьте вашего пользователя в группу docker:
```bash
sudo usermod -a -G docker $USER
# Перезагрузите систему или перелогиньтесь
```
### Фильтрация контейнеров
LogBoard+ автоматически пропускает контейнеры с проблемными health check для предотвращения зависания приложения. Это особенно полезно в средах с множеством контейнеров, где некоторые могут быть нездоровыми.
**Настройки фильтрации:**
- `LOGBOARD_SKIP_UNHEALTHY=true` - пропускать нездоровые контейнеры
- `LOGBOARD_CONTAINER_LIST_TIMEOUT=10` - таймаут получения списка контейнеров
- `LOGBOARD_CONTAINER_INFO_TIMEOUT=3` - таймаут получения информации о контейнере
- `LOGBOARD_HEALTH_CHECK_TIMEOUT=2` - таймаут проверки health status
**Логирование:**
Приложение выводит в логи информацию о пропущенных контейнерах:
```
⚠️ Пропускаем нездоровый контейнер frontend-iaas (ID: 17c539b2e4dd)
⚠️ Таймаут при получении health status для контейнера problem-container (ID: abc123def456)
```
### Классический способ
```bash
# Распаковать проект
unzip logboard_plus_fanin_groups.zip
cd logboard_plus
# Настроить переменные окружения
cp env.example .env
# Отредактировать .env файл
# Запуск через docker-compose
docker compose up --build -d
# Открыть в браузере
http://localhost:9001
```
По умолчанию логин/пароль для Basic Auth задаются в `docker-compose.yml`:
```yaml
environment:
- LB_USER=admin
- LB_PASS=admin
```
---
## Интерфейс
### Верхняя панель
- **Тема** — переключатель тёмной/светлой темы
- **aggregate** — собирает все реплики сервиса в одну вкладку
- **group** — собирает несколько сервисов в один поток логов
- **snapshot** — сохраняет текущие логи этой панели в файл
- **tail** — количество строк истории при подключении
### Панель вкладок
- Вкладки по сервисам и репликам
- Клик по вкладке — открыть поток логов
- Цветной чип `[id]` — уникальная реплика, цвет закреплён
- Чекбоксы под вкладками — фильтр по репликам
### Логи
- Цвета в логах из ANSI-кодов
- Фильтрация по уровню (`debug`, `info`, `warn`, `error`)
- Пауза/возобновление стрима
- При выделении текста появляется кнопка "Копировать"
---
## Fan-in группировка
Позволяет объединить несколько разных сервисов в один поток:
1. Нажмите кнопку **group** вверху
2. Введите имена сервисов через запятую (например: `api, worker, scheduler`)
3. Откроется панель с логами всех указанных сервисов, с префиксом `[id service]`
4. Можно фильтровать по конкретным репликам внизу
---
## Советы
- Если контейнер перезапустился — поток автоматически переподключается
- Можно открыть несколько вкладок браузера с разными сервисами — всё работает параллельно
- Для больших проектов удобно держать одну панель с `aggregate`, вторую — с `group` по критическим сервисам
---
## Лицензия
MIT
## Скриншоты
Тёмная тема:
![Dark](screenshots/dark.png)
Светлая тема:
![Light](screenshots/light.png)