O HAProxy suporta o registro em um arquivo?

14

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, por isso não quero começar a abrir portas / sobrecarregar o syslog com todos os meus dados de teste.

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

Eu tentei usar:

log /home/user/ha.log local0

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

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

Quando eu reiniciei. Então, eu criei o arquivo touch /home/user/ha.loge reiniciei no momento em que 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?

IGGt
fonte
2
Eu não acho que o HAProxy possa fazer logon em um arquivo e suspeito que o motivo disso seja que as gravações no disco sejam uma operação de bloqueio. Por que você realmente não deseja usar o syslog? A configuração não é tão complicada assim. 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 não desejar que os logs HAProxy não sejam misturados a tudo outro.
Michael - sqlbot

Respostas:

14

O Haproxy simplesmente não suporta o log de arquivos. Conforme declarado na documentação ( https://cbonte.github.io/haproxy-dconv/1.8/configuration.html#3.1-log ), a instrução "log" usa como primeiro parâmetro um endereço. Se for um arquivo, é um soquete unix e o HAProxy falará no formato syslog para esse soquete. O Haproxy foi projetado assim porque sua responsabilidade é solicitar solicitações de proxy, não gravar arquivos, delegar a gravação de arquivos de log no syslog. Se você não quiser mexer com sua máquina, 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 No seu haproxy.cfg para testá-lo.

user801247
fonte
Estou recebendo "E: Não foi possível localizar o logstash do pacote". O logstash foi removido do ubuntu?
user568021
@ user568021 parece que o logstash não é fornecido no ubuntu, mas elastic (mantenedor do logstash) fornece uma fonte adequada. Além disso, o logstash é um software java, portanto você pode executá-lo baixando um arquivo jar executando-o com um JRE (fornecido pelo ubuntu)
user801247
7

Você pode alterar o arquivo de configuração do log haproxy /etc/rsyslog.d/para apontar o arquivo para o caminho desejado . Não tenho certeza sobre outra distribuição. Para mim, estou usando o Debian. Eu mudei /etc/rsyslog.d/49-haproxy.confpara 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 /etc/logrotate.d/haproxypara o novo caminho. Para que ele gire e comprima o arquivo de log no caminho recém-configurado usando gzip.

Em seguida, reinicie o rsyslog.service.

sudo systemctl restart rsyslog.service

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

Fonzie
fonte
Como criar log separado para erros como /var/log/haproxy-errors.log sem afetar o haproxy.log original?
Khurshid Alam 5/12
0

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

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

log /var/<directory>/ha.log
KKD
fonte
2
Eu tentei sudo touch /var/log/ha.loge adicionei log /var/log/ha.log local0à minha configuração, mas obtive o mesmo erro acima connection refused.
IGGt
No log, por que você está dando local0 no final?
KKD
1
Tentei deixar de fora, mas quando reiniciei, recebi o erro 'log' expects <address> and <facility> as arguments.e exigia 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)
IGGt