Итак, я настроил Haproxy так, чтобы журнал проходил через rsyslog и на данный момент все сбрасывались в один файл.
Это определенно ведение журнала, поскольку я получаю эти "стартовые" сообщения при запуске, но вообще не регистрирую HTTP-запросы. Что не так с моей конфигурацией?
haproxy.cfg:
global
log /dev/log local0 debug
chroot /var/lib/haproxy
stats socket /run/haproxy/admin.sock mode 660 level admin
stats timeout 30s
user haproxy
group haproxy
daemon
defaults
log global
mode http
option httplog
option dontlognull
timeout connect 5000
timeout client 50000
timeout server 50000
errorfile 400 /etc/haproxy/errors/400.http
errorfile 403 /etc/haproxy/errors/403.http
errorfile 408 /etc/haproxy/errors/408.http
errorfile 500 /etc/haproxy/errors/500.http
errorfile 502 /etc/haproxy/errors/502.http
errorfile 503 /etc/haproxy/errors/503.http
errorfile 504 /etc/haproxy/errors/504.http
frontend webfront
option forwardfor
stats enable
stats uri /haproxy?statis
stats realm Haproxy\ Auth
stats auth user:password
bind *:80
timeout client 86400000
acl is_discourse hdr_end(host) -i discourse.mydomain.com
use_backend discourse if is_discourse
use_backend webserver if !is_discourse
backend discourse
balance source
option forwardfor
option httpclose
server server1 127.0.0.1:3080 weight 1 maxconn 1024 check inter 10000
backend webserver
balance source
option forwardfor
option httpclose
server server2 127.0.0.1:4080 weight 1 maxconn 1024 check inter 10000
Лог-файл:
root@kayak:/var/log/haproxy# tail haproxy.log
Nov 26 21:25:25 kayak haproxy[21646]: Proxy webfront started.
Nov 26 21:25:25 kayak haproxy[21646]: Proxy webfront started.
Nov 26 21:25:25 kayak haproxy[21646]: Proxy discourse started.
Nov 26 21:25:25 kayak haproxy[21646]: Proxy webserver started.
Nov 26 21:28:10 kayak haproxy[21868]: Proxy webfront started.
Nov 26 21:28:10 kayak haproxy[21868]: Proxy discourse started.
Nov 26 21:28:10 kayak haproxy[21868]: Proxy webserver started.
Nov 26 21:30:31 kayak haproxy[22045]: Proxy webfront started.
Nov 26 21:30:31 kayak haproxy[22045]: Proxy discourse started.
Nov 26 21:30:31 kayak haproxy[22045]: Proxy webserver started.
Я посетил некоторые страницы веб-сервера между этими перезагрузками и вызвал несколько ошибок 404. Почему ничего не появляется?
/etc/rsyslog.d/49-haproxy.conf:
local0.* -/var/log/haproxy_0.log
if ($programname == 'haproxy') then -/var/log/haproxy/haproxy.log
& ~
Вы должны указать журнал во внешнем интерфейсе, если вы действительно хотите, чтобы каждый запрос регистрировался. Но обычно это перебор для сервера, и ваш диск будет заполнен в кратчайшие сроки.
frontend webfront
log /dev/log local0 debug
ведение журнала через журнал сокетов unix не работает для меня на моем rhel 6.7. вы можете попробовать с этим конф. haproxy (работает на 81) пересылает http-запрос на httpd (работает на 80)
/etc/haproxy/haproxy.cfg
frontend web_front
log 127.0.0.1 local6
option httplog
bind *:81
default_backend web_back
backend web_back
server web1 127.0.0.1:80
и вы должны включить модуль rsyslog udp для получения syslog от haproxy с простой конфигурацией, подобной этой:
/etc/rsyslog.d/haproxy.conf
$ModLoad imudp
$UDPServerAddress 127.0.0.1
$UDPServerRun 514
local6.* /var/log/haproxy.log
сделайте http-запрос на 81, и вы получите несколько таких журналов
# tail -n 1 /var/log/haproxy.log
May 18 13:51:07 localhost haproxy[31617]: 127.0.0.1:38074 [18/May/2016:13:51:06.999] web_front web_back/web1 0/0/0/2/2 404 466 - - ---- 1/1/0/1/0 0/0 "GET /how-are-you HTTP/1.1"
Это может быть вызвано запуском в chroot jail. Вам нужно убедиться, что rsyslog также создает сокет dgram внутри chroot jail (например, / var / lib / haproxy / dev / log). Направьте свою директиву журнала на сокет / dev / log, и все будет хорошо.
Я потратил пару часов, пытаясь понять это, поскольку HAproxy не скажет вам, что что-то не так, кроме того, что журнал не работает.
Эта ссылка прекрасно это объясняет.
Если вы посмотрите на верхнюю часть /etc/haproxy/haproxy.cfg, вы увидите что-то вроде:
global
log 127.0.0.1 local2
[...]
Это означает, что HAProxy будет отправлять свои сообщения в rsyslog на 127.0.0.1. Но по умолчанию rsyslog не прослушивает ни один адрес, отсюда и проблема.
Давайте отредактируем /etc/rsyslog.conf и раскомментируем эти строки:
$ModLoad imudp
$UDPServerRun 514
Это заставит rsyslog прослушивать UDP-порт 514 для всех IP-адресов. При желании вы можете ограничить 127.0.0.1, добавив:
$UDPServerAddress 127.0.0.1
Теперь создайте файл /etc/rsyslog.d/haproxy.conf, содержащий:
local2.* /log/haproxy.log
Вы, конечно, можете быть более конкретными и создавать отдельные файлы журналов в зависимости от уровня сообщений:
local2.=info /log/haproxy-info.log
local2.notice /log/haproxy-allbutinfo.log
Затем перезапустите rsyslog и убедитесь, что файлы журнала созданы:
# service rsyslog restart
Если вы вручную создаете файлы журнала /log/haproxy-allbutinfo.log
и /log/haproxy-info.log
, не забудьте сменить владельца на syslog:adm