Лёгкий и быстрый сервис для сбора, хранения и поиска логов с REST API. Поддерживает Elasticsearch, JWT-авторизацию, гибкую структуру логов и быстрый full-text поиск.
Технологии: Go, chi, Elasticsearch, zap, JWT, Docker
- Клонируйте репозиторий:
git clone https://github.com/trottling/Log-Stash-Lite.git cd Log-Stash-Lite - Запустите зависимости (Elasticsearch):
docker-compose up -d elasticsearch
- Соберите и запустите сервис:
или через Docker Compose:
go build -o app ./cmd/main.go ./app
docker-compose up --build
- Приём логов через REST API (POST /add_log, /add_logs)
- Поиск и фильтрация логов (GET /get_logs, /get_logs_count)
- JWT-авторизация для защищённых ручек
- Гибкая структура log entry (JSON)
- Быстрый full-text и паттерн-поиск (Elasticsearch)
- Swagger-документация
- Лёгкий запуск через Docker
- Healthcheck и системная статистика
Особенности:
- Минимум зависимостей, быстрый старт
- Легко расширять парсеры и хранилища
- Поддержка разных форматов логов (zap, logrus, pino, ...)
{
"parse_type": "default",
"log": {
"level": "info",
"msg": "hello"
}
}{
"status": "ok"
}GET /get_logs?level=info&limit=10
{
"logs": [
{
"level": "info",
"msg": "hello"
}
],
"count": 1
}- Swagger UI: http://localhost:8080/swagger/index.html
- Примеры curl:
curl -X POST http://localhost:8080/add_log \ -H "Authorization: Bearer <token>" \ -H "Content-Type: application/json" \ -d '{"parse_type":"default","log":{"msg":"test"}}'
curl http://localhost:8080/get_logs?level=info&limit=5 -H "Authorization: Bearer <token>"
| Флаг / Переменная | По умолчанию | Описание |
|---|---|---|
| LISTEN_ADDR | :8080 | Адрес для запуска API |
| ELASTIC_URL | http://localhost:9200 | URL Elasticsearch |
| ELASTIC_USERNAME | elastic | Пользователь Elasticsearch |
| ELASTIC_PASSWORD | change_me | Пароль Elasticsearch |
| LOG_LEVEL | info | Уровень логирования |
| JWT_SECRET | changeme | Секрет для JWT |
- Собрать образ:
docker build -t log-stash-lite . - Запустить через docker-compose:
docker-compose up --build
- Пробросить параметры:
- Через переменные окружения в docker-compose.yml
- Можно монтировать volume для логов/конфига
- Запуск всех тестов:
go test ./... - Проверка покрытия:
go test -cover ./... - Интеграционные тесты:
go test -tags=integration ./internal/api/integration
- Ошибка 401: Проверьте JWT-токен, используйте /auth/token для генерации.
- Elasticsearch не отвечает: Проверьте docker-compose, переменные окружения.
- Как добавить новый парсер? См. ниже.
- Как сменить хранилище? Реализуйте интерфейс storage.Storage и передайте в Handler.
- Создайте файл в
internal/parser/, например,mylogger.go:package parser func ParseMyLogger(log map[string]interface{}) (map[string]interface{}, error) { // Ваша логика парсинга return log, nil }
- Зарегистрируйте парсер в
parser.go:// ... case "mylogger": parseFunc = ParseMyLogger // ...
- Используйте
"parse_type": "mylogger"в своих API-запросах.