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 adicioneilog /var/log/ha.log local0
para minha configuração, mas obtive o mesmo erro acimaconnection 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)