Jeg har lige installeret haproxy på min testserver.
Er der en måde at få den til at skrive sine logfiler til en lokal fil snarere end syslog?
Dette er kun til test, så jeg vil ikke begynde at åbne porte / rod i syslog med alle mine testdata.
Desværre er de eneste oplysninger, jeg kan finde, alt om logning til en syslog-server.
Jeg prøvede at bruge:
log /home/user/ha.log local0
i min konfiguration. Men det fortalte mig:
[ALERT] 039/095022 (9528) : sendto logger #1 failed: No such file or directory (errno=2)
Da jeg genstartede. Så jeg oprettede filen med touch /home/user/ha.log
og genstartede på hvilket tidspunkt jeg fik:
[ALERT] 039/095055 (9593) : sendto logger #1 failed: Connection refused (errno=111)
Er dette muligt, eller bliver jeg nødt til at konfigurere syslog osv. for at se mine testdata?
Kommentarer
- Jeg don ' t tror, at HAProxy kan logge på en fil, og jeg formoder, at årsagen til dette er, at skrivning til disk er en blokering. Hvorfor vil du virkelig ikke bruge syslog? Config er ikke så vanskelig. Du kan tildele en lokal facilitet til HAProxy og konfigurere din syslog-dæmon til at skrive disse poster til en anden fil og ikke til andre syslog-filer (eller netværksstrømme), hvis du ' ikke er ønsker, at HAProxy-logfiler ikke blandes med alt andet.
Svar
Haproxy understøtter simpelthen ikke logge på filer. Som angivet i dokumentationen ( https://cbonte.github.io/haproxy-dconv/1.8/configuration.html#3.1-log ), tager “log” -sætningen som første parameter en adresse. Hvis denne “sa-fil, den” er en unix-sokkel, og HAProxy vil tale i syslog-formatet til denne sokkel. Haproxy er designet således, fordi dens ansvar er at proxyanmodninger, ikke skrive filer, den delegerer skrivning af logfiler til syslog . Hvis du ikke vil rode med din maskine, kan du f.eks. Installere logstash og køre: logstash -e "input { unix { path => "/tmp/haprxoy_log.sock" } } output { stdout { } }"
og tilføje: log /tmp/haprxoy_log.sock
I din haproxy.cfg for at teste det.
Kommentarer
- I ' m får " E: Kan ikke finde pakkelogstash ". Blev logstash fjernet fra ubuntu?
- @ user568021 synes logstash ikke findes i ubuntu, men elastisk (logstash ' s vedligeholder) giver en passende kilde. Logstash er også en java-software, så du kan muligvis køre den ved at downloade en jar-fil, der kører den med en JRE (som leveres af ubuntu)
Svar
Du kan ændre haproxy-logkonfigurationsfil under /etc/rsyslog.d/
for at pege filen på den sti, du kan lide. Ikke sikker på anden distribution. For mig bruger jeg Debian. Jeg ændrede /etc/rsyslog.d/49-haproxy.conf
for at pege 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 skal også opdatere logstien i /etc/logrotate.d/haproxy
til den nye sti, så den roterer og komprimerer logfilen i den nyligt konfigurerede sti ved hjælp af gzip
.
Genstart derefter rsyslog.service.
sudo systemctl restart rsyslog.service
Nu haproxy.log.*
-filen findes i /var/log/haproxy/
-mappen.
Kommentarer
- Hvordan opretter jeg separat logge på fejl som /var/log/haproxy-errors.log uden at påvirke det oprindelige haproxy.log?
Svar
Siden version 1.9 understøtter HAProxy logning til stdout
og stderr
.
Med det i tankerne er det ret trivielt at pibe det til en fil.
# change haproxy.cfg file with the following global log stdout local0 debug defaults log global option httplog
Og så kan du bare køre HAProxy sådan:
haproxy -f haproxy.cfg > haproxy.log 2>&1 &
Som du sikkert ved >
rør stdout
til filen haproxy.log
og derefter 2>&1
rør stderr
også til den samme fil. Det slutter med &
, der sætter processen i baggrunden.
Du kan blive mere avanceret og prøve at opsætte et script til at dræbe den tidligere forekomst af haproxy
ved at gøre noget som dette:
#!/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
Hård, som du sikkert kan fortælle … anbefales ikke.
Rediger: Logning til filer plejede at være en blokerende begivenhed og dermed ikke anbefales, specielt til noget som HAProxy. HAProxy-teamet gjorde det meget tydeligt på det frigivelsesindlæg, der er linket ovenfor, at dette er ikke tilfældet længere .
Vi har modtaget denne anmodning en hel del og har brugt noget tid på at planlægge den bedste måde at implementere den på – uden at blokere – og vi er glade for at kunne meddele, at vi har fundet en løsning!
Kommentarer
- hvorfor logger du på stdout / err " anbefales ikke "? er dette din mening, eller er der officiel dokumentation om problemer med det?
- @Florian, har du ret. Jeg blev vildledt af tidligere opførsel. Det blokerer ikke for nylige udgivelser, så sætningen var meningsfuld (og forkert). Redigerede svaret. Tak!
Svar
Du har forsøgt at konfigurere i brugerens hjemmekatalog, haproxy har ikke tilladelse for at få adgang til brugerens hjemmekatalog, så det forårsager problem.
Prøv i stedet på en anden placering, opret katalog i /var/<directory>
log /var/<directory>/ha.log
Kommentarer
- Jeg prøvede
sudo touch /var/log/ha.log
og tilføjedelog /var/log/ha.log local0
til min konfiguration, men fik den samme fejl som ovenforconnection refused
. - I log hvorfor giver du local0 i sidste ende?
- Jeg forsøgte at udelade det, men da jeg genstartede, fik jeg fejlen
'log' expects <address> and <facility> as arguments.
så krævede noget der. I henhold til instruktionerne<facility> must be one of the 24 standard syslog facilities
(som jeg tror kan være en del af problemet)