logboard/docs/remote-clients.md
Сергей Антропов 04dfe30d58 feat: Добавлена поддержка удаленных клиентов для LogBoard+
- Создан LogBoard клиент для отправки логов с удаленных серверов
- Добавлен API эндпоинт /api/logs/remote с аутентификацией
- Реализована структурированная система сохранения логов
- Исправлена совместимость Docker client библиотеки
- Добавлена полная документация и тестирование
2025-08-20 19:25:29 +03:00

301 lines
9.8 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 поддерживает работу с удаленными клиентами, которые могут отправлять логи с других серверов в центральный LogBoard сервер. Это позволяет централизованно собирать и анализировать логи с множества серверов.
## Архитектура
```
┌─────────────────┐ HTTP/JSON ┌─────────────────┐
│ Server A │ ──────────────► │ LogBoard │
│ (Client) │ │ Server │
│ │ │ │
│ ┌─────────────┐ │ │ ┌─────────────┐ │
│ │LogBoard │ │ │ │API │ │
│ │Client │ │ │ │Endpoint │ │
│ │Container │ │ │ │/logs/remote │ │
│ └─────────────┘ │ │ └─────────────┘ │
│ ▲ │ │ │ │
│ │ │ │ ▼ │
│ ┌─────────────┐ │ │ ┌─────────────┐ │
│ │Docker │ │ │ │File │ │
│ │Socket │ │ │ │Storage │ │
│ └─────────────┘ │ │ └─────────────┘ │
└─────────────────┘ └─────────────────┘
│ ▲
│ │
▼ │
┌─────────────────┐ │
│ Server B │ ──────────────────────────┘
│ (Client) │
│ │
│ ┌─────────────┐ │
│ │LogBoard │ │
│ │Client │ │
│ │Container │ │
│ └─────────────┘ │
│ ▲ │
│ │ │
│ ┌─────────────┐ │
│ │Docker │ │
│ │Socket │ │
│ └─────────────┘ │
└─────────────────┘
```
## Установка клиента
### 1. Клонирование репозитория
```bash
git clone <repository-url>
cd logboard/client
```
### 2. Настройка переменных окружения
```bash
cp env.example .env
# Отредактируйте .env файл
```
### 3. Запуск клиента
```bash
# Используя Makefile
make install
# Или вручную
docker-compose up -d
```
## Конфигурация
### Переменные окружения клиента
| Переменная | Описание | Обязательно | По умолчанию |
|------------|----------|-------------|--------------|
| `LOGBOARD_SERVER_URL` | URL сервера LogBoard | Да | `http://localhost:8000` |
| `LOGBOARD_API_KEY` | API ключ для аутентификации | Да | - |
| `HOSTNAME` | Имя хоста | Нет | Автоопределение |
| `LOGBOARD_INTERVAL` | Интервал отправки (сек) | Нет | `60` |
### Переменные окружения сервера
| Переменная | Описание | Обязательно | По умолчанию |
|------------|----------|-------------|--------------|
| `LOGBOARD_API_KEYS` | Список разрешенных API ключей | Нет | - |
| `LOGBOARD_DEFAULT_API_KEY` | Ключ по умолчанию для разработки | Нет | `dev-key-123` |
## API Endpoints
### POST /api/v1/logs/remote
Прием логов от удаленных клиентов.
**Заголовки:**
```
Authorization: Bearer <api_key>
Content-Type: application/json
```
**Тело запроса:**
```json
{
"hostname": "server-01",
"container_name": "nginx",
"logs": [
"2024-01-01T12:00:00.000Z nginx: [info] Server started",
"2024-01-01T12:00:01.000Z nginx: [info] Listening on port 80"
],
"timestamp": "2024-01-01T12:00:01.000Z"
}
```
**Ответ:**
```json
{
"status": "success",
"message": "Received 2 log lines",
"hostname": "server-01",
"container_name": "nginx",
"timestamp": "2024-01-01T12:00:01.000Z",
"log_file": "nginx-20240101.log"
}
```
## Структура хранения логов
Логи от удаленных клиентов сохраняются в следующей структуре:
```
logs/
├── remote/
│ ├── server-01/
│ │ ├── nginx-20240101.log
│ │ ├── mysql-20240101.log
│ │ └── app-20240101.log
│ └── server-02/
│ ├── nginx-20240101.log
│ └── redis-20240101.log
```
## Безопасность
### Аутентификация
- Все запросы от клиентов должны содержать валидный API ключ
- API ключи передаются в заголовке `Authorization: Bearer <key>`
- Сервер проверяет ключи против списка разрешенных ключей
### Настройка API ключей
1. **На сервере LogBoard:**
```bash
# В .env файле сервера
LOGBOARD_API_KEYS=key1,key2,key3
```
2. **На клиенте:**
```bash
# В .env файле клиента
LOGBOARD_API_KEY=key1
```
### Рекомендации по безопасности
- Используйте уникальные API ключи для каждого клиента
- Регулярно ротируйте API ключи
- Используйте HTTPS для передачи данных
- Ограничьте доступ к серверу LogBoard по IP адресам
## Мониторинг
### Логи клиента
```bash
# Просмотр логов клиента
docker-compose logs -f logboard-client
# Проверка статуса
docker-compose ps logboard-client
```
### Логи сервера
```bash
# Просмотр логов сервера
docker-compose logs -f logboard
# Проверка принятых логов
ls -la logs/remote/
```
## Устранение неполадок
### Проблемы подключения
1. **Ошибка аутентификации (401):**
- Проверьте правильность API ключа
- Убедитесь, что ключ добавлен в `LOGBOARD_API_KEYS` на сервере
2. **Ошибка подключения к серверу:**
- Проверьте URL сервера в `LOGBOARD_SERVER_URL`
- Убедитесь, что сервер доступен по сети
- Проверьте настройки firewall
3. **Ошибка доступа к Docker:**
- Убедитесь, что Docker socket доступен
- Проверьте права доступа к `/var/run/docker.sock`
### Отладка
```bash
# Тестирование подключения
cd client
python test_client.py
# Проверка переменных окружения
docker-compose exec logboard-client env
# Просмотр логов в реальном времени
docker-compose logs -f logboard-client
```
## Примеры использования
### Множественные серверы
```yaml
# docker-compose.yml на сервере A
services:
logboard-client:
environment:
- LOGBOARD_SERVER_URL=http://logboard.example.com:8000
- LOGBOARD_API_KEY=server-a-key
- HOSTNAME=production-server-a
```
```yaml
# docker-compose.yml на сервере B
services:
logboard-client:
environment:
- LOGBOARD_SERVER_URL=http://logboard.example.com:8000
- LOGBOARD_API_KEY=server-b-key
- HOSTNAME=production-server-b
```
### Настройка на центральном сервере
```bash
# .env на сервере LogBoard
LOGBOARD_API_KEYS=server-a-key,server-b-key,server-c-key
```
## Производительность
### Рекомендации
- Установите разумный интервал отправки логов (30-60 секунд)
- Используйте фильтрацию логов на стороне клиента
- Мониторьте размер логовых файлов
- Настройте ротацию логов
### Ограничения
- Максимальный размер запроса: 10MB
- Таймаут запроса: 30 секунд
- Максимальное количество строк в одном запросе: 1000
## Разработка
### Локальная разработка
```bash
# Запуск в режиме разработки
cd client
make dev
# Тестирование
python test_client.py
```
### Добавление новых функций
1. Расширьте API эндпоинты в `app/api/v1/endpoints/logs.py`
2. Обновите клиент в `client/app/main.py`
3. Добавьте тесты в `client/test_client.py`
4. Обновите документацию
## Поддержка
- **Автор:** Сергей Антропов
- **Сайт:** https://devops.org.ru
- **Issues:** Создавайте issues в репозитории проекта