Acabei de instalar o haproxy no meu servidor de teste.

Existe uma maneira de fazê-lo gravar seus logs em um arquivo local, em vez de syslog?

Isso é apenas para teste, portanto, não quero começar a abrir ports / bagunçando o syslog com todos os meus dados de teste.

Infelizmente, a única informação que consigo encontrar gira em torno do registro em um servidor syslog.

Eu tentei usar:

log /home/user/ha.log local0 

em minha configuração. Mas isso me disse:

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

Quando reiniciei. Portanto, criei o arquivo com touch /home/user/ha.log e reiniciei e obtive:

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

Isso é possível ou terei que configurar o syslog etc. para ver meus dados de teste?

Comentários

  • Eu não ‘ Não acho que o HAProxy pode registrar em um arquivo, e suspeito que a razão para isso é que a gravação no disco é uma operação de bloqueio. Por que você realmente não quer usar o syslog? A configuração não é tão complicada. Você pode atribuir um recurso local ao HAProxy e configurar seu daemon syslog para gravar essas entradas em um arquivo diferente, e não em outros arquivos syslog (ou fluxos de rede), se você ‘ não estiver desejar que os logs do HAProxy não sejam misturados com todo o resto.

Resposta

O Haproxy simplesmente não oferece suporte registro em arquivos. Conforme declarado na documentação ( https://cbonte.github.io/haproxy-dconv/1.8/configuration.html#3.1-log ), a instrução “log” leva como primeiro parâmetro um endereço. Se esse “arquivo sa”, é um soquete unix e o HAProxy falará no formato syslog com esse soquete. O Haproxy foi projetado assim porque sua responsabilidade é fazer solicitações de proxy, não gravar arquivos, ele delega a gravação de arquivos de log para syslog . Se você não quiser bagunçar sua máquina, você pode, por exemplo, instalar o logstash e executar: logstash -e "input { unix { path => "/tmp/haprxoy_log.sock" } } output { stdout { } }" e adicionar: log /tmp/haprxoy_log.sock Em seu haproxy.cfg para testá-lo.

Comentários

  • I ‘ estou obtendo ” E: Não é possível localizar o logstash do pacote “. O logstash foi removido do ubuntu?
  • @ user568021 parece que o logstash não é fornecido no ubuntu, mas elástico (logstash ‘ mantenedor) fornece uma fonte apt. Além disso, o logstash é um software java, então você pode executá-lo baixando um arquivo jar executando-o com um JRE (que é fornecido pelo ubuntu)

Resposta

Você pode alterar o arquivo de configuração do log haproxy em /etc/rsyslog.d/ para apontar o arquivo para o caminho de sua preferência. Não tenho certeza sobre outra distribuição. Para mim, estou usando o Debian. Mudei /etc/rsyslog.d/49-haproxy.conf para apontar para /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 &~ 

Você também deve atualizar o caminho do log em /etc/logrotate.d/haproxy para o novo caminho. Para que ele gire e comprima o arquivo de log no caminho recém-configurado usando gzip.

Em seguida, reinicie rsyslog.service.

sudo systemctl restart rsyslog.service 

Agora haproxy.log.* o arquivo estará no diretório /var/log/haproxy/.

Comentários

  • Como faço para criar separadamente log para erros como /var/log/haproxy-errors.log sem afetar o haproxy.log original?

Resposta

Desde a versão 1.9, o HAProxy suporta registro em stdout e stderr.

Com isso em mente, é bastante trivial canalizá-lo para um arquivo.

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

E então você pode simplesmente executar o HAProxy assim:

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

Como você provavelmente sabe > tubos stdout ao arquivo haproxy.log e, em seguida, 2>&1 tubos stderr também para o mesmo arquivo. Termina com & que colocará o processo em segundo plano.

Você pode ficar mais elaborado e tentar configurar um script para matar a instância anterior de haproxy fazendo algo assim:

#!/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 você provavelmente pode dizer … não recomendado.

Editar: Registrar em arquivos costumava ser um evento de bloqueio e, portanto, não recomendado, especialmente para algo como HAProxy. A equipe do HAProxy deixou bem claro no post de lançamento no link acima que não é mais o caso .

Recebemos essa solicitação com frequência e passamos algum tempo planejando a melhor maneira de implementá-la – sem bloquear – e temos o prazer de anunciar que encontrou uma solução!

Comentários

  • por que está registrando em stdout / err ” não recomendado “? é esta a sua opinião ou existe documentação oficial sobre problemas com isso?
  • @Florian, você está correto. Eu estava enganado pelo comportamento anterior. Não bloqueia em lançamentos recentes, portanto, a frase foi opinativa (e errada). Editou a resposta. Obrigado!

Resposta

Você tentou configurar no diretório inicial do usuário, o haproxy não tem permissão para acessar o diretório inicial do usuário, o que causa o problema.

Em vez de tentar em outro local, crie o diretório em /var/<directory>

log /var/<directory>/ha.log 

Comentários

  • Tentei sudo touch /var/log/ha.log e adicionei log /var/log/ha.log local0 para minha configuração, mas obtive o mesmo erro acima connection refused.
  • No log, por que você forneceu local0 no final?
  • Tentei omitir, mas quando reiniciei recebi o erro 'log' expects <address> and <facility> as arguments. então solicitei algo lá. De acordo com as instruções <facility> must be one of the 24 standard syslog facilities (que eu acho que pode ser parte do problema)

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *