- Go 95.9%
- Dockerfile 4.1%
| .vscode | ||
| lib | ||
| rest | ||
| structs | ||
| .dockerignore | ||
| .drone.yml | ||
| .gitignore | ||
| Dockerfile | ||
| go.mod | ||
| go.sum | ||
| main.go | ||
| README.md | ||
Логирующее зеркалирование HTTP
Приложение предназначено для получения запросов и их парсинга для дальнейшего анализа. Система получает запрос, раскладывает его на заголовки и тело запроса, переводит в JSON и отправляет в следующую точку по HTTP, например, в БД или в другой узел для дальнейшей обработки.
Отправка в другую точку
В другую точку выполняет POST-запрос по указанному адресу и пути (url-у). Отправка записей может быть по одному, а может быть пачкой по мере набора буфера либо таймаута.
Например для отправки готовых логов в ClickHouse конечная точка будет следующей:
http://10.25.200.243:8123/?user=<login>&password=<password>&database=logs&query=INSERT%20INTO%20http_mirror_log%20FORMAT%20JSONEachRow&input_format_skip_unknown_fields=1
Структура таблицы,например, будет следующая:
CREATE TABLE logs.http_mirror_log
(
`eventTime` DateTime,
`eventTimeMillis` UInt64,
`remoteAddr` String,
`method` String,
`host` String,
`scheme` String,
`requestUri` String,
`contentEncoding` String,
`contentLength` UInt64,
`contentType` String,
`headers` Map(String, String),
`queryArgs` Map(String, Array(String)),
`body` String
)
ENGINE = ReplacingMergeTree
PARTITION BY toDate(eventTime)
ORDER BY (eventTime, eventTimeMillis, host)
TTL eventTime + toIntervalMonth(6)
SETTINGS index_granularity = 8192
Дополнительные заголовки
Web-сервер должен дополнять заголовки в запросе для дальнейшего анализа
X-Request-Uri - Оригинальный URI запроса, который запрашивает клиент X-Method - метод запроса X-Forwarded-For - Адрес удаленного клиента