Haproxy nie rejestruje żądań?

13

Skonfigurowałem więc Haproxy, aby rejestrowanie przebiegało przez rsyslog i, na razie, zostało zrzucone do jednego pliku.

To zdecydowanie rejestrowanie, ponieważ dostaję te komunikaty „startowe” przy starcie, ale w ogóle nie rejestruję żądań HTTP. Co jest nie tak z moją konfiguracją?

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

Plik dziennika :

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.

Odwiedziłem niektóre strony serwera między restartami i spowodowałem kilka błędów 404. Dlaczego nic się nie pojawia?

Edycja: plik conf rsyslog.

/etc/rsyslog.d/49-haproxy.conf:

local0.* -/var/log/haproxy_0.log
if ($programname == 'haproxy') then -/var/log/haproxy/haproxy.log
& ~
Srebrny Quettier
źródło
1
rozwiązałeś ten problem?
Terence Chow

Odpowiedzi:

11

Musisz określić dziennik w interfejsie, jeśli naprawdę chcesz, aby każde żądanie było rejestrowane. Ale zwykle jest to nadmiar dla serwera, a dysk zostanie zapełniony w mgnieniu oka.

frontend webfront
  log /dev/log local0 debug
edlerd
źródło
Ach, dzięki. Spróbuję jak najszybciej. Rzecz w tym, że muszę rozwiązać problemy z połączeniem z instancją Discourse, więc będzie to tylko tymczasowe. Wygląda na to, że nie mogę tego zrobić bez względu na to, czego spróbuję. ( serverfault.com/questions/645031/… )
Silver Quettier
2
Próbowałem dodać to, ale nie rejestruje żadnych dodatkowych. Być może rsyslognie jest odpowiednio skonfigurowany? Czy byłby sposób, aby powiedzieć?
Silver Quettier
Dla mnie to zadziałało.
Dima Miedwiediew
rsyslog w Ubuntu 14.0.4 wydaje się być skonfigurowany, chociaż nie loguje się do /var/log/haproxy.log, domyślnie moje logi instalacyjne do / var / log / syslog.
Lee
2
co to jest/dev/log
Miranda,
7

logowanie przez dziennik gniazd unix nie działa dla mnie na mojej wersji 6.7. możesz spróbować z tym conf. haproxy (działa na 81) przekazuje żądanie http do httpd (działa na 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

i musisz włączyć moduł uds rsyslog, aby otrzymywać syslog od haproxy, takie proste conf:

/etc/rsyslog.d/haproxy.conf

$ModLoad imudp
$UDPServerAddress 127.0.0.1
$UDPServerRun 514
local6.* /var/log/haproxy.log

zrób żądanie http do 81, a otrzymasz logi takie jak ten

# 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"
ncowboy
źródło
5

Może to być spowodowane uruchomieniem go w więzieniu chroot. Musisz upewnić się, że rsyslog tworzy również gniazdo dgram w więzieniu chroot (np. / Var / lib / haproxy / dev / log). Skieruj dyrektywę dziennika do gniazda / dev / log, a powinieneś być dobry.

Spędziłem kilka godzin, próbując to rozgryźć, ponieważ HAproxy nie powie ci, że coś jest nie tak, jak nieudane logowanie.

Tomasz
źródło
5

Ten link wyjaśnia to doskonale.

Jeśli spojrzysz na górę /etc/haproxy/haproxy.cfg, zobaczysz coś takiego:

global
log 127.0.0.1 local2
[...]

Oznacza to, że HAProxy wyśle ​​swoje wiadomości do rsyslog na 127.0.0.1. Ale domyślnie rsyslog nie nasłuchuje pod żadnym adresem, stąd problem.

Edytujmy /etc/rsyslog.conf i odkomentujemy następujące linie:
$ModLoad imudp
$UDPServerRun 514

Spowoduje to, że rsyslog nasłuchuje na porcie UDP 514 dla wszystkich adresów IP. Opcjonalnie możesz ograniczyć do 127.0.0.1, dodając:
$UDPServerAddress 127.0.0.1

Teraz utwórz plik /etc/rsyslog.d/haproxy.conf zawierający:

local2.* /log/haproxy.log

Możesz oczywiście być bardziej szczegółowy i tworzyć osobne pliki dziennika zgodnie z poziomem komunikatów:

local2.=info /log/haproxy-info.log
local2.notice /log/haproxy-allbutinfo.log

Następnie uruchom ponownie rsyslog i sprawdź, czy pliki dziennika są tworzone:
# service rsyslog restart

Jeśli ręcznie tworzysz pliki dziennika /log/haproxy-allbutinfo.logi /log/haproxy-info.lognie zapomnij zmienić właściciela nasyslog:adm

carla
źródło