# LogBoard Клиент

Клиент для отправки логов Docker контейнеров на удаленный сервер LogBoard.

**Автор:** Сергей Антропов  
**Сайт:** https://devops.org.ru

## Описание

LogBoard клиент - это легковесное приложение, которое:
- Мониторит Docker контейнеры на удаленном сервере
- Собирает логи контейнеров
- Отправляет их на центральный сервер LogBoard
- Работает в Docker контейнере

## Возможности

- ✅ Автоматический мониторинг всех Docker контейнеров
- ✅ Сбор логов stdout и stderr
- ✅ Асинхронная отправка на сервер
- ✅ Аутентификация по API ключу
- ✅ Настраиваемый интервал отправки
- ✅ Подробное логирование
- ✅ Graceful shutdown

## Установка и запуск

### 1. Клонирование репозитория

```bash
git clone <repository-url>
cd logboard/client
```

### 2. Настройка переменных окружения

```bash
cp env.example .env
# Отредактируйте .env файл
```

### 3. Запуск с Docker Compose

```bash
docker-compose up -d
```

### 4. Проверка работы

```bash
# Просмотр логов клиента
docker-compose logs -f logboard-client

# Проверка статуса
docker-compose ps
```

## Конфигурация

### Переменные окружения

| Переменная | Описание | Обязательно | По умолчанию |
|------------|----------|-------------|--------------|
| `LOGBOARD_SERVER_URL` | URL сервера LogBoard | Да | `http://localhost:8000` |
| `LOGBOARD_API_KEY` | API ключ для аутентификации | Да | - |
| `HOSTNAME` | Имя хоста | Нет | Автоопределение |
| `LOGBOARD_INTERVAL` | Интервал отправки (сек) | Нет | `60` |

### Пример .env файла

```env
LOGBOARD_SERVER_URL=http://logboard.example.com:8000
LOGBOARD_API_KEY=your_secret_api_key_here
HOSTNAME=production-server-01
LOGBOARD_INTERVAL=30
```

## Архитектура

```
┌─────────────────┐    HTTP/JSON    ┌─────────────────┐
│   Docker Host   │ ──────────────► │  LogBoard Server│
│                 │                 │                 │
│ ┌─────────────┐ │                 │                 │
│ │LogBoard     │ │                 │                 │
│ │Client       │ │                 │                 │
│ │Container    │ │                 │                 │
│ └─────────────┘ │                 │                 │
│         ▲       │                 │                 │
│         │       │                 │                 │
│ ┌─────────────┐ │                 │                 │
│ │Docker       │ │                 │                 │
│ │Socket       │ │                 │                 │
│ └─────────────┘ │                 │                 │
└─────────────────┘                 └─────────────────┘
```

## 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"
}
```

## Мониторинг

### Логи клиента

```bash
# Просмотр логов в реальном времени
docker-compose logs -f logboard-client

# Просмотр последних 100 строк
docker-compose logs --tail=100 logboard-client
```

### Проверка здоровья

```bash
# Статус контейнера
docker-compose ps logboard-client

# Проверка здоровья
docker inspect logboard-client | grep Health -A 10
```

## Устранение неполадок

### Проблемы подключения

1. **Ошибка аутентификации:**
   - Проверьте правильность API ключа
   - Убедитесь, что ключ активен на сервере

2. **Ошибка подключения к серверу:**
   - Проверьте URL сервера
   - Убедитесь, что сервер доступен
   - Проверьте сетевые настройки

3. **Ошибка доступа к Docker:**
   - Убедитесь, что Docker socket доступен
   - Проверьте права доступа

### Отладка

```bash
# Запуск в режиме отладки
docker-compose run --rm logboard-client python -u app/main.py

# Просмотр переменных окружения
docker-compose exec logboard-client env
```

## Разработка

### Локальная разработка

```bash
# Установка зависимостей
pip install -r requirements.txt

# Запуск клиента
python app/main.py
```

### Тестирование

```bash
# Запуск тестового контейнера
docker-compose up test-container

# Проверка отправки логов
docker-compose logs logboard-client
```

## Безопасность

- API ключи хранятся в переменных окружения
- Docker socket монтируется в режиме read-only
- Клиент работает под непривилегированным пользователем
- Все HTTP соединения используют HTTPS (рекомендуется)

## Лицензия

MIT License

## Поддержка

- **Автор:** Сергей Антропов
- **Сайт:** https://devops.org.ru
- **Issues:** Создавайте issues в репозитории проекта
