¿HAProxy admite el registro en un archivo?

14

Acabo de instalar haproxy en mi servidor de prueba.

¿Hay alguna manera de hacer que escriba sus registros en un archivo local, en lugar de syslog?

Esto es solo para pruebas, así que no quiero comenzar a abrir puertos / saturar syslog con todos mis datos de prueba.

Desafortunadamente, la única información que puedo encontrar gira en torno al inicio de sesión en un servidor syslog.

Intenté usar:

log /home/user/ha.log local0

en mi config. Pero eso me dijo:

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

Cuando reinicié Así que creé el archivo touch /home/user/ha.logy reinicié en ese momento obtuve:

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

¿Es esto posible o tendré que configurar syslog, etc. para ver mis datos de prueba?

IGGt
fuente
2
No creo que HAProxy pueda iniciar sesión en un archivo, y sospecho que la razón de esto es que las escrituras en el disco son una operación de bloqueo. ¿Por qué realmente no quieres usar syslog? Config no es tan complicado. Puede asignar una instalación local a HAProxy y configurar su demonio syslog para escribir esas entradas en un archivo diferente, y no en otros archivos syslog (o secuencias de red), si no desea que los registros HAProxy no se mezclen con todo más.
Michael - sqlbot

Respuestas:

14

Haproxy simplemente no admite el registro en archivos. Como se indica en la documentación ( https://cbonte.github.io/haproxy-dconv/1.8/configuration.html#3.1-log ), la declaración "log" toma como primer parámetro una dirección. Si se trata de un archivo, es un socket Unix y HAProxy hablará en el formato syslog a este socket. Haproxy está diseñado de esta manera porque su responsabilidad es proxy de solicitudes, no escribir archivos, delega la escritura de archivos de registro en syslog. Si no desea meterse con su máquina, puede, por ejemplo, instalar logstash y ejecutar: logstash -e 'input { unix { path => "/tmp/haprxoy_log.sock" } } output { stdout { } }' y agregar: log /tmp/haprxoy_log.sock en su haproxy.cfg para probarlo.

usuario801247
fuente
Me aparece "E: no se puede encontrar el paquete logstash". ¿Se eliminó logstash de ubuntu?
user568021
@ user568021 parece que logstash no se proporciona en ubuntu, pero elastic (mantenedor de logstash) proporciona una fuente adecuada. Además, logstash es un software de Java, por lo que es posible que pueda ejecutarlo descargando un archivo jar que lo ejecute con un JRE (que es proporcionado por ubuntu)
user801247
7

Puede cambiar el archivo de configuración de registro de haproxy /etc/rsyslog.d/para apuntar el archivo a la ruta que desee. No estoy seguro acerca de otra distribución. Para mí, estoy usando Debian. He cambiado /etc/rsyslog.d/49-haproxy.confpara que apunte a /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
&~

También debe actualizar la ruta de registro en /etc/logrotate.d/haproxyla nueva ruta. Para que gire y comprima el archivo de registro en la ruta recién configurada usando gzip.

Luego reinicie rsyslog.service.

sudo systemctl restart rsyslog.service

Ahora el haproxy.log.*archivo estará en el /var/log/haproxy/directorio.

Fonzie
fuente
¿Cómo creo un registro separado para errores como /var/log/haproxy-errors.log sin afectar el haproxy.log original?
Khurshid Alam
0

Ha intentado configurarlo en el directorio de inicio del usuario, haproxy no tiene permiso para acceder al directorio de inicio del usuario, por lo que eso causa un problema.

En su lugar, intente en otra ubicación, cree el directorio en /var/<directory>

log /var/<directory>/ha.log
KKD
fuente
2
Intenté sudo touch /var/log/ha.logy agregué log /var/log/ha.log local0a mi configuración, pero obtuve el mismo error que el anterior connection refused.
IGGt
En el registro, ¿por qué le das local0 al final?
KKD
1
Intenté dejarlo fuera, pero cuando reinicié recibí el error, 'log' expects <address> and <facility> as arguments.así que requería algo allí. De acuerdo con las instrucciones <facility> must be one of the 24 standard syslog facilities(que creo que pueden ser parte del problema)
IGGt