Haproxy protokolliert keine Anfragen?


10

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 beim Start diese "Start" -Nachrichten 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 :

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.

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
& ~

1
Haben Sie dieses Problem gelöst?
Terence Chow

Antworten:


11

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

Ah danke. Ich werde es so schnell wie möglich versuchen. Ich muss Verbindungsprobleme mit der Discourse-Instanz beheben, damit sie nur vorübergehend sind. Scheint, ich kann es nicht vertreten, egal was ich versuche. ( serverfault.com/questions/645031/… )
Silver Quettier

2
Ich habe versucht, dies hinzuzufügen, aber es wird nichts extra protokolliert. Vielleicht rsyslogist nicht richtig konfiguriert? Würde es einen Weg geben, das zu sagen?
Silver Quettier

Bei mir hat es funktioniert.
Dima Medwedew

rsyslog in Ubuntu 14.0.4 scheint konfiguriert zu sein, obwohl es nicht in /var/log/haproxy.log protokolliert wird. Standardmäßig werden meine Installationsprotokolle in / var / log / syslog gespeichert.
Lee

2
Was ist/dev/log
Miranda

7

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"

5

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.


2

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.

Lassen Sie uns /etc/rsyslog.conf bearbeiten und diese Zeilen auskommentieren:
$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.logund /log/haproxy-info.logvergessen Sie nicht, den Eigentümer zu ändernsyslog:adm

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.