Acabo de instalar haproxy en mi servidor de prueba.

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

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

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

Intenté usar:

log /home/user/ha.log local0 

en mi configuración. 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 con touch /home/user/ha.log y lo reinicié, momento en el que obtuve:

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

¿Es esto posible, o ¿Voy a tener que configurar syslog, etc. para ver mis datos de prueba?

Comentarios

  • No ‘ 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 quiere usar syslog? La configuración no es tan complicada. 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 flujos de red), si ‘ no queriendo que los registros de HAProxy no se mezclen con todo lo demás.

Responder

Haproxy simplemente no es compatible 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 un dirección. Si ese «archivo sa, 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 hacer solicitudes de proxy, no escribir archivos, delega la escritura de archivos de registro en syslog . Si no quiere 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.

Comentarios

  • Yo ‘ obtengo » E: No puedo ubicar el paquete logstash «. ¿Logstash se eliminó de ubuntu?
  • @ user568021 parece que logstash no se proporciona en ubuntu, pero elástico (logstash ‘ s mantenedor) proporciona una fuente adecuada. Además, logstash es un software de Java, por lo que es posible que pueda ejecutarlo descargando un archivo jar ejecutándolo con un JRE (proporcionado por ubuntu)

Respuesta

Puede cambiar el archivo de configuración de registro haproxy en /etc/rsyslog.d/ para apuntar el archivo a la ruta que desee. No estoy seguro de otra distribución. Para mí, «estoy usando Debian. Cambié /etc/rsyslog.d/49-haproxy.conf para 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/haproxy a la nueva ruta. De modo que rotará y comprimirá el archivo de registro en la ruta recién configurada usando gzip.

Luego reinicie rsyslog.service.

sudo systemctl restart rsyslog.service 

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

Comentarios

  • ¿Cómo puedo crear log para errores como /var/log/haproxy-errors.log sin afectar el haproxy.log original?

Respuesta

Desde la versión 1.9, HAProxy admite el registro en stdout y stderr.

Con eso en mente, es bastante trivial canalizarlo a un archivo.

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

Y luego simplemente puede ejecutar HAProxy así:

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

Como probablemente sepa, > pipe stdout al archivo haproxy.log y luego 2>&1 tuberías stderr también al mismo archivo. Termina con & que pondrá el proceso en segundo plano.

Puede ser más elegante e intentar configurar un script para eliminar la instancia anterior de haproxy haciendo algo como esto:

#!/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 

Difícil, como probablemente pueda ver … no recomendado.

Editar: el registro de archivos solía ser un evento de bloqueo y, por lo tanto, no recomendado, especialmente para algo como HAProxy. El equipo de HAProxy dejó muy claro en la publicación de lanzamiento vinculada anteriormente que este ya no es el caso .

Hemos recibido esta solicitud bastante y hemos pasado algún tiempo planificando la mejor manera de implementarla, sin bloquear, y nos complace anunciar que hemos encontré una solución!

Comentarios

  • por qué se está iniciando sesión en stdout / err » no recomendado «? ¿Es esta su opinión o hay documentación oficial sobre problemas con eso?
  • @Florian, tiene razón. Me engañó el comportamiento pasado. No bloquea los lanzamientos recientes, por lo que la oración fue opinativa (e incorrecta). Editó la respuesta. ¡Gracias!

Responder

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

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

log /var/<directory>/ha.log 

Comentarios

  • Probé sudo touch /var/log/ha.log y agregué log /var/log/ha.log local0 a mi configuración, pero obtuve el mismo error que el anterior connection refused.
  • En el registro, ¿por qué da local0 al final?
  • Traté de omitirlo, pero cuando reinicié obtuve el error 'log' expects <address> and <facility> as arguments. así que necesitaba algo allí. De acuerdo con las instrucciones <facility> must be one of the 24 standard syslog facilities (que creo que puede ser parte del problema)

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *