Назад | Перейти на главную страницу

HAProxy обрезает часть host_header некоторых сообщений журнала

У меня есть экземпляр HAProxy, настроенный для входа в специальный самодельный демон, который загружает файлы журнала в базу данных. Я видел некоторые проблемы в некоторых сообщениях журнала, где host_header поле усечено без особой причины. Например, вместо:

56:34 haproxy[892]: 1.2.3.4:17907 [14/May/2012:13:56:33.999] app.prod app.prod/webp01 0/0/0/161/524 200 33627 - - --NI 0/0/0/0/0 0/0 {application.example.com} "GET /?feed=rss2 HTTP/1.0"

Я вижу:

56:34 haproxy[892]: 1.2.3.4:17907 [14/May/2012:13:56:33.999] app.prod app.prod/webp01 0/0/0/161/524 200 33627 - - --NI 0/0/0/0/0 0/0 {application.examp} "GET /?feed=rss2 HTTP/1.0"

Обратите внимание, что host_header был усечен из application.example.com к application.examp.

Это заставляет задуматься о попытках фармить эти журналы, так есть ли какая-то причина, почему это происходит?

Версия HAProxy 1.4.18-0ubuntu1 работает на Ubuntu 12.04.

Поскольку они имеют одинаковые отметки времени и тайминги, я предполагаю, что вы не включаете реальные примеры.

Лучшее, что я могу придумать без этих примеров, - это попытаться вручную установить длину этого поля заголовка, например:

capture request header Host len 50

Также обратите внимание, что, поскольку трафик системного журнала является UDP, следует ожидать определенного количества повреждений (хотя это звучит более конкретно). В HAProxy также есть настройка максимальной длины. Я никогда не увеличивал это, но если вы хотите попробовать, вот моя переписка с автором HAProxy:

> Can I increase the length of syslog messages sent out by HAProxy?
>
> Would it be as simple as changing:
> #define MAX_SYSLOG_LEN          1024
> In
> include/types/log.h
>
> Or is there more to it than that?

You can try, but it may do anything depending on your syslog server.
Some accept those messages, some do truncate the lines, YMMV."

Судя по тому, что я вижу в коде, это вообще должно быть невозможно (проверьте capture_headers () в proto_http.c). Заголовки обрезаются до запрошенной длины. По этой причине, если вы уверены, что видите такое поведение при запросах одного и того же хоста, проходящих через один и тот же интерфейс, единственная возможность, о которой я могу думать, это то, что у вас иногда есть два поля заголовка, одно с сокращенным значением и другой с обычным, и этот haproxy регистрирует только первый, в то время как сервер использует последний.