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 tilllog /var/log/ha.log local0
till min konfiguration, men fick samma fel som ovanconnection 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)