Современный веб-сервер на Go с полной системой observability, включающей аутентификацию, RBAC, 2FA, логирование, трассировку и мониторинг.
git clone <repository-url>
cd poirot# База данных
POSTGRES_URL=postgres://postgres:postgres@localhost:5432/poirot?sslmode=disable
REDIS_ADDR=localhost:6379
# Безопасность
SESSION_SECRET=your-32-byte-secret-key-here
COOKIE_SECURE=false
COOKIE_SAMESITE=lax
# Observability
JAEGER_ENDPOINT=http://localhost:14268/api/traces
METRICS_ENABLED=true
TRACING_ENABLED=true
LOG_LEVEL=info# Запуск полного стека с мониторингом
make full-up
# Или только приложения
make devПроект включает полную систему observability:
- Elasticsearch - хранение и индексация логов
- Logstash - обработка и парсинг логов
- Kibana - визуализация и поиск логов
Доступ: http://localhost:5601
- Prometheus - сбор и хранение метрик
- Grafana - дашборды и визуализация
- Node Exporter - системные метрики
- Redis/PostgreSQL Exporters - метрики БД
Доступ:
- Prometheus: http://localhost:9090
- Grafana: http://localhost:3000 (admin/admin123)
- Jaeger - распределенная трассировка
- OpenTelemetry - стандартизированная инструментация
Доступ: http://localhost:16686
- Alertmanager - управление уведомлениями
- Настроенные правила для критических событий
Доступ: http://localhost:9093
# Observability
make observability-up # Запуск стека мониторинга
make observability-down # Остановка стека мониторинга
make observability-logs # Просмотр логов
# Полный стек
make full-up # Запуск приложения + observability
make full-down # Остановка всего
# Разработка
make dev # Запуск только приложения
make run # Запуск локально
make build # Сборка приложения
# База данных
make migrate-up # Применение миграций
make migrate-down # Откат миграций
# Тестирование
make test # Запуск тестов
make test-coverage # Тесты с покрытием
make lint # Линтинг кода
make fmt # Форматирование
# Очистка
make clean # Очистка всех данныхПолная документация API доступна по адресу: http://localhost:8080/swagger/index.html
POST /api/v1/user/register- Регистрация пользователяPOST /api/v1/user/login- Вход в системуPOST /api/v1/user/logout- Выход из системыGET /api/v1/user/me- Информация о текущем пользователе
GET /api/v1/user/2fa/setup- Настройка двухфакторной аутентификацииPOST /api/v1/user/2fa/verify- Верификация TOTP кода
GET /api/v1/user/users- Список пользователей (требует права user.list)
GET /register- Форма регистрацииGET /auth/login- Форма входаGET /auth/logout- Форма выходаGET /password/reset- Форма сброса пароля
GET /healthz- Проверка состояния сервераGET /metrics- Prometheus метрики
- Сессии в Redis с настройками безопасности
- RBAC система с ролями:
user,moderator,admin - TOTP двухфакторная аутентификация
- Rate Limiting по IP и пользователю
- Пароли хешируются с помощью Argon2id
- CSRF защита с токенами
- Secure Headers для защиты от XSS, clickjacking
- Session Security с HttpOnly, Secure, SameSite cookies
- Отслеживание неудачных попыток входа
- Мониторинг rate limiting
- Алерты на подозрительную активность
http_requests_total- Общее количество запросовhttp_request_duration_seconds- Время ответаhttp_request_size_bytes- Размер запросовhttp_response_size_bytes- Размер ответов
user_registrations_total- Регистрации пользователейuser_logins_total- Входы в системуactive_users_current- Активные пользователиtotp_setups_total- Настройки TOTPtotp_verifications_total- Верификации TOTP
database_connections_active- Активные соединения с БДredis_connections_active- Активные соединения с Redisrbac_permission_checks_total- Проверки разрешенийrate_limit_hits_total- Срабатывания rate limiting
- Poirot Application Overview - Обзор приложения
- System Metrics - Системные метрики
- Security Metrics - Метрики безопасности
- Автоматическая трассировка HTTP запросов
- Трассировка операций с базой данных
- Трассировка Redis операций
- Корреляция с логами через Request ID
- Визуализация трассировок
- Анализ производительности
- Поиск по трассировкам
- Анализ зависимостей
- JSON формат для легкого парсинга
- Request ID для корреляции запросов
- Уровни логирования: DEBUG, INFO, WARN, ERROR, FATAL
- Ротация логов с сжатием
- Поиск по логам
- Фильтрация по уровням, сервисам, пользователям
- Визуализация трендов
- Алерты на ошибки
- Недоступность сервиса
- Высокий уровень ошибок (>10%)
- Проблемы с базой данных
- Проблемы с Redis
- Высокое время ответа (>1s)
- Высокое использование CPU (>80%)
- Высокое использование памяти (>85%)
- Много неудачных попыток входа
- Аномально высокая регистрация
- Низкая активность пользователей
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ Application │ │ Observability │ │ Infrastructure│
│ │ │ │ │ │
│ • Gin HTTP │ │ • Prometheus │ │ • PostgreSQL │
│ • Auth/RBAC │ │ • Grafana │ │ • Redis │
│ • TOTP │ │ • Jaeger │ │ • Docker │
│ • Rate Limiting │ │ • ELK Stack │ │ • Makefile │
└─────────────────┘ └─────────────────┘ └─────────────────┘
- Recovery - обработка паник
- RequestID - генерация уникальных ID
- Security Headers - защитные заголовки
- Tracing - трассировка запросов
- Metrics - сбор метрик
- Sessions - управление сессиями
- CSRF - защита от CSRF
- Rate Limiting - ограничение запросов
make test # Все тесты
make test-coverage # С покрытием кода- Хеширование паролей
- Валидация TOTP
- RBAC кеширование
- HTTP handlers
HTTP_ADDR- Адрес HTTP сервера (по умолчанию: :8080)GIN_MODE- Режим Gin (debug/release)LOG_LEVEL- Уровень логирования
POSTGRES_URL- URL подключения к PostgreSQLREDIS_ADDR- Адрес Redis сервераREDIS_PASSWORD- Пароль RedisREDIS_DB- Номер базы данных Redis
SESSION_SECRET- Секретный ключ для сессийSESSION_NAME- Имя cookie сессииSESSION_TTL- Время жизни сессииCOOKIE_DOMAIN- Домен для cookiesCOOKIE_SECURE- Безопасные cookiesCOOKIE_SAMESITE- SameSite для cookies
RATE_LIMIT_IP- Лимит по IP (формат: количество-период)RATE_LIMIT_USER- Лимит по пользователю
JAEGER_ENDPOINT- Endpoint Jaeger для трассировкиMETRICS_ENABLED- Включить метрикиTRACING_ENABLED- Включить трассировку
# Полный стек
make full-up
# Только observability
make observability-up
# Только приложение
make dev- Настройте переменные окружения
- Используйте внешние сервисы (PostgreSQL, Redis)
- Настройте SSL/TLS
- Используйте reverse proxy (nginx)
- Настройте мониторинг и алерты
- Grafana: http://localhost:3000
- Prometheus: http://localhost:9090
- Jaeger: http://localhost:16686
- Kibana: http://localhost:5601
- Swagger: http://localhost:8080/swagger/index.html
- Fork репозитория
- Создайте feature branch
- Внесите изменения
- Добавьте тесты
- Создайте Pull Request
MIT License