it-swarm.com.de

Haproxy protokolliert keine Anfragen?

Also habe ich Haproxy so konfiguriert, dass die Protokollierung über rsyslog erfolgt und vorerst alle in einer Datei gespeichert werden.

Es wird definitiv protokolliert, da ich diese "Start" -Nachrichten beim Start erhalte, aber überhaupt keine HTTP-Anforderungen protokollieren. Was ist falsch an meiner Konfiguration?

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

Protokolldatei:

[email protected]:/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.

Ich habe einige der Webserver-Seiten zwischen diesen Neustarts besucht und einige 404-Fehler ausgelöst. Warum taucht nichts auf?

Bearbeiten: rsyslog conf Datei.

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

local0.* -/var/log/haproxy_0.log
if ($programname == 'haproxy') then -/var/log/haproxy/haproxy.log
& ~
11
Silver Quettier

Sie müssen das Protokoll im Frontend angeben, wenn wirklich jede Anforderung protokolliert werden soll. Aber normalerweise ist dies ein Overkill für den Server und Ihre Festplatte ist in kürzester Zeit voll.

frontend webfront
  log /dev/log local0 debug
11
edlerd

die Protokollierung über das Unix-Socket-Protokoll funktioniert bei mir auf meinem Rhel 6.7 nicht. Sie können es mit dieser Conf versuchen. haproxy (arbeitet an 81) leitet die http-Anfrage an httpd weiter (arbeitet an 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

und Sie müssen das rsyslog udp-Modul aktivieren, um Syslog von haproxy zu empfangen.

/ etc/rsyslog.d/haproxy.conf

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

wenn Sie eine http-Anfrage an 81 senden, erhalten Sie einige Protokolle wie dieses

# 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"
7
ncowboy

Dies kann dadurch verursacht werden, dass es in einem Chroot-Gefängnis läuft. Sie müssen sicherstellen, dass rsyslog auch einen dgram-Socket im chroot-Gefängnis erstellt (z. B./var/lib/haproxy/dev/log). Zeigen Sie mit Ihrer Protokollanweisung auf den Socket/dev/log, und Sie sollten gut sein.

Ich habe ein paar Stunden damit verbracht, dies herauszufinden, da HAproxy Ihnen nicht sagt, dass etwas nicht stimmt, außer dass die Protokollierung nicht funktioniert.

5
Thomas

Dieser Link erklärt es perfekt.

Wenn Sie oben in /etc/haproxy/haproxy.cfg nachsehen, sehen Sie Folgendes:

global
log 127.0.0.1 local2
[...]

Dies bedeutet, dass HAProxy seine Nachrichten unter 127.0.0.1 an rsyslog sendet. Standardmäßig hört rsyslog jedoch keine Adresse ab, daher das Problem.

Bearbeiten wir /etc/rsyslog.conf und kommentieren Sie diese Zeilen aus:
$ModLoad imudp
$UDPServerRun 514

Dadurch überwacht rsyslog den UDP-Port 514 auf alle IP-Adressen. Optional können Sie auf 127.0.0.1 beschränken, indem Sie Folgendes hinzufügen:
$UDPServerAddress 127.0.0.1

Erstellen Sie nun eine Datei /etc/rsyslog.d/haproxy.conf mit:

local2.* /log/haproxy.log

Sie können natürlich spezifischer sein und separate Protokolldateien entsprechend der Nachrichtenebene erstellen:

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

Starten Sie dann rsyslog neu und stellen Sie sicher, dass Protokolldateien erstellt werden:
# service rsyslog restart

Wenn Sie manuell Protokolldateien erstellen /log/haproxy-allbutinfo.log und /log/haproxy-info.log, vergessen Sie nicht, den Besitzer in syslog:adm

3
carla