Jag har just installerat haproxy på min testserver.

Finns det ett sätt att få den att skriva sina loggar till en lokal fil snarare än syslog?

Detta är bara för testning så jag vill inte börja öppna portar / rörigt syslog med alla mina testdata.

Tyvärr, den enda informationen jag kan hitta handlar om att logga in på en syslog-server.

Jag försökte använda:

log /home/user/ha.log local0 

i min konfiguration. Men det berättade för mig:

[ALERT] 039/095022 (9528) : sendto logger #1 failed: No such file or directory (errno=2) 

När jag startade om. Så jag skapade filen med touch /home/user/ha.log och startade om vid vilken tidpunkt jag fick:

[ALERT] 039/095055 (9593) : sendto logger #1 failed: Connection refused (errno=111) 

Är det möjligt, eller måste jag konfigurera syslog etc. för att se mina testdata?

Kommentarer

  • Jag don ' t tror att HAProxy kan logga in i en fil, och jag misstänker att orsaken till detta är att skriv till disk är en blockeringsåtgärd. Varför vill du verkligen inte använda syslog? Config är inte så knepigt. Du kan tilldela en lokal anläggning till HAProxy och konfigurera din syslog-demon för att skriva dessa poster till en annan fil och inte till andra syslogfiler (eller nätverksströmmar) om du ' inte vill att HAProxy-loggarna inte ska blandas med allt annat.

Svar

Haproxy stöder helt enkelt inte logga till filer. Som anges i dokumentationen ( https://cbonte.github.io/haproxy-dconv/1.8/configuration.html#3.1-log ) tar ”log” -uttalandet som första parameter en adress. Om den ”sa-filen, den” är ett unix-uttag och HAProxy kommer att tala i syslog-formatet till detta uttag. Haproxy är utformad så här eftersom dess ansvar är att proxyförfrågningar, inte skriva filer, delegerar det skrivning av loggfiler till syslog . Om du inte vill röra med din maskin kan du till exempel installera logstash och köra: logstash -e "input { unix { path => "/tmp/haprxoy_log.sock" } } output { stdout { } }" och lägga till: log /tmp/haprxoy_log.sock I din haproxy.cfg för att testa den.

Kommentarer

  • Jag ' m får " E: Det går inte att hitta paketlogstash ". Har logstash tagits bort från ubuntu?
  • @ user568021 verkar logstash inte tillhandahålls i ubuntu, men elastisk (logstash ' s underhållare) ger en lämplig källa. Logstash är också ett Java-program, så du kan kanske köra den genom att ladda ner en jar-fil som kör den med en JRE (som tillhandahålls av ubuntu)

Svar

Du kan ändra haproxy-loggkonfigurationsfil under /etc/rsyslog.d/ för att peka filen till den sökväg du vill. Inte säker på annan distribution. För mig använder jag Debian. Jag ändrade /etc/rsyslog.d/49-haproxy.conf för att peka på /var/log/haproxy/haproxy.log,

# Create an additional socket in haproxy"s chroot in order to allow logging via # /dev/log to chroot"ed HAProxy processes $AddUnixListenSocket /var/lib/haproxy/dev/log # Send HAProxy messages to a dedicated logfile if $programname startswith "haproxy" then /var/log/haproxy/haproxy.log &~ 

Du bör också uppdatera loggvägen i /etc/logrotate.d/haproxy till den nya sökvägen. Så att den roterar och komprimerar loggfilen i nykonfigurerad sökväg med gzip.

Starta sedan om rsyslog.service.

sudo systemctl restart rsyslog.service 

Nu haproxy.log.* -filen finns i /var/log/haproxy/ -katalogen.

Kommentarer

  • Hur skapar jag separat logga in för fel som /var/log/haproxy-errors.log utan att påverka den ursprungliga haproxy.loggen?

Svar

Sedan version 1.9 HAProxy stöder loggning till stdout och stderr.

Med detta i åtanke är det ganska trivialt att leda det till en fil.

# change haproxy.cfg file with the following global log stdout local0 debug defaults log global option httplog 

Och sedan kan du helt enkelt köra HAProxy så här:

haproxy -f haproxy.cfg > haproxy.log 2>&1 & 

Som du säkert vet > rör stdout till filen haproxy.log och sedan 2>&1 rör stderr också till samma fil. Det slutar med & som kommer att sätta processen i bakgrunden.

Du kan bli snyggare och försöka ställa in ett skript för att döda den tidigare instansen av haproxy genom att göra något så här:

#!/bin/bash # mini launcher kill -9 `cat /home/user/haproxy.pid` /home/user/haproxy -f /home/haproxy.cfg > /home/user/haproxy.log 2>&1 & echo $! > /home/user/haproxy.pid 

Tufft, som du antagligen kan säga … rekommenderas inte.

Redigera: Logga in på filer brukade vara en blockerande händelse och därmed inte rekommenderas, speciellt för något som HAProxy. HAProxy-teamet gjorde det helt klart på släpppost ovan länkat att detta inte är .

Vi har fått den här begäran ganska mycket och har spenderat lite tid på att planera det bästa sättet att implementera den – utan att blockera – och vi är glada att meddela att vi har hittade en lösning!

Kommentarer

  • varför loggar du till stdout / err " rekommenderas inte "? är detta din åsikt eller finns det officiell dokumentation om problem med det?
  • @Florian, du har rätt. Jag blev vilseledd av tidigare beteende. Det blockerar inte de senaste utgåvorna, så meningen var meningsfull (och fel). Redigerade svaret. Tack!

Svar

Du har försökt konfigurera i användarens hemkatalog, haproxy har inte behörighet för att komma åt användarens hemkatalog, så att det orsakar problem.

Försök istället på en annan plats, skapa katalog i /var/<directory>

log /var/<directory>/ha.log 

Kommentarer

  • Jag försökte sudo touch /var/log/ha.log och lade till log /var/log/ha.log local0 till min konfiguration, men fick samma fel som ovan connection refused.
  • I logg varför ger du local0 till slut?
  • Jag försökte utesluta det, men när jag startade om fick jag felet 'log' expects <address> and <facility> as arguments. så krävde något där. Enligt instruktionerna <facility> must be one of the 24 standard syslog facilities (som jag tror kan vara en del av problemet)

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *