Skip to content

EugeneTasks/logs-generator-for-log-agregation-practice-

Repository files navigation

Load-test logging playground

Краткий обзор

  • Этот репозиторий содержит набор небольших сервисов для отработки корелляции логов и нагрузочного эмулятора:
    • go-service — простая Go служба с логированием в plain-text (stdout/stderr).
    • python-service — FastAPI эмулятор/сервис с тем же текстовым форматом логов.
    • java-service — Spring Boot сервис (Java 21) с фильтром логирования.
    • emulator — оркестратор + генератор нагрузки + UI (one-shot + continuous generator).
  • Все сервисы логируют одну INFO-строку на входящий запрос; при 5xx также печатается ERROR в stderr. Формат логов и правила описаны в logging.md и в соответствующих S*_SPEC.md.

Структура проекта (важные пути)

  • go-service/ — сервис S1 (Go)
  • python-service/ — сервис S2 (FastAPI)
  • java-service/ — сервис S3 (Spring Boot)
  • emulator-service/ — сервис эмулятор + UI + генератор
  • docker-compose.yml — локальный стек и настройки логирования/healthchecks
  • logging.md, S2_SPEC.md, S3_SPEC.md, EMULATOR_SPEC.md — спецификации

Подготовка (локально, требуется Docker и локальные образы)

  • Убедитесь, что в локальном докере есть базовые образы (offline build): golang, python:3.11-slim, maven/eclipse-temurin:21, eclipse-temurin:21-jdk.
  • Сборка и поднятие стека: docker compose up -d --build
  • Остановить и вывести: docker compose down

Сервисы и доступ

  • Доступ с хоста только к эмулятору:
    • UI: http://localhost:8083/ (emulator)
    • /v1/health — проверка здоровья каждого сервиса локально
    • /v1/run — one-shot orchestration (emulator)
    • /v1/config, /v1/control, /v1/stats — управление генератором нагрузки
  • S1–S3 доступны внутри docker-сети backplane (не опубликованы наружу).

Логирование и ротация

  • Формат логов: plain-text одна строка в порядке: ts level service method path status latency_ms req_id [user_id] [action] msg=... (подробности в logging.md)
  • Docker Compose настраивает driver: json-file с:
    • max-size: 10m
    • max-file: 3 Проверка: docker inspect | jq '.[0].HostConfig.LogConfig'

Healthchecks

  • Каждый сервис имеет HEALTHCHECK внутри контейнера:
    • go-service: /hc бинарник, вызывающий local /v1/health
    • python-service: python stdlib проверка
    • java-service: jshell/Java HTTP check
    • emulator: internal health endpoint
  • docker compose показывает STATE=healthy после успешной проверки.

Emulator: UI и генератор

  • UI доступен на /:
    • Конфиг генератора (users, rps, randomness, actions, targets, jitter_ms, payload_bytes)
    • Управление: Apply, Start, Stop, Reset Stats
    • One‑shot секция: выбрать targets, mode (sequential/parallel), action, delay_ms, payload JSON или автоген payload_bytes, Stop on error; кнопка Send once вызывает POST /v1/run и отображает результаты в таблице.
  • Фоновый генератор:
    • Пул из users горутин, целевой суммарный RPS = rps.
    • Интервалы: смешение fixed/exponential по параметру randomness, плюс jitter_ms.
    • Для каждого запроса: новый X-Request-ID (UUIDv4), тело {user_id:"emulator", action, payload, delay_ms?}.
    • Статистика в памяти: sent, ok, errors_by_code, per_service с latency (avg/p50/p95).
    • Контролируется через /v1/config и /v1/control.

Примеры запросов (smoke)

  • Health: curl -s http://localhost:8083/v1/health | jq .
  • One-shot через UI или curl: curl -s -X POST http://localhost:8083/v1/run -H "Content-Type: application/json" -d '{"mode":"parallel","steps":["go","python"],"payload":{"k":"v"}}' | jq .
  • Управление генератором: curl -X POST http://localhost:8083/v1/control -H "Content-Type: application/json" -d '{"state":"start"}' curl -X POST http://localhost:8083/v1/config -H "Content-Type: application/json" -d '{"users":2,"rps":10,"randomness":0.5,"actions":["ping"],"targets":["go-service","python-service"],"jitter_ms":50,"payload_bytes":128}'

DoD (быстрая проверка)

  • docker compose up -d --build; убедиться, что все контейнеры healthy.
  • UI доступен по http://localhost:8083/.
  • One-shot: отправка по выбранным сервисам → ответ содержит request_id и results для каждого сервиса.
  • Генератор: Start → через 10-15s stats.sent_requests > 0, per_service.sent > 0.
  • Логи:
    • Для каждого входящего запроса к эмулятору — ровно одна INFO строка (stdout).
    • Для 5xx ответов — дополнительная ERROR строка в stderr.
    • S1–S3 логируют свои строки с тем же req_id (корреляция).

Оффлайн/CI заметки

  • При отсутствии доступа к интернету необходимо заранее загрузить базовые образы (golang, python, maven/eclipse-temurin, eclipse-temurin:jdk).
  • Для сборки Java образов требуется локальный maven cache / артефакты.

Полезные файлы

  • logging.md — правила и шаблон строк логов.
  • S2_SPEC.md, S3_SPEC.md, EMULATOR_SPEC.md — детальные спецификации поведения сервисов.

Контакты / дальнейшие шаги

  • Тесты нагрузкой и наблюдение p95/p50 — добавить скрипты E2E, экспорт логов для анализа.
  • При необходимости расширить UI (grafana, prometheus) — сохранить совместимость формата логов.

Конец README.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published