- Создан LogBoard клиент для отправки логов с удаленных серверов - Добавлен API эндпоинт /api/logs/remote с аутентификацией - Реализована структурированная система сохранения логов - Исправлена совместимость Docker client библиотеки - Добавлена полная документация и тестирование
212 lines
6.5 KiB
Markdown
212 lines
6.5 KiB
Markdown
# 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 в репозитории проекта
|