Como manter as mensagens de log haproxy fora de / var / log / syslog

29

Configurei o haproxy logging via rsyslogd usando as dicas deste artigo , e tudo parece estar funcionando bem. Os arquivos de log recebem as mensagens de log.

No entanto, todas as mensagens de log do haproxy também são exibidas em /var/log/syslog. Isso significa que quando o servidor entrar no ar, o syslog será bastante inútil, pois será atropelado por mensagens de log haproxy.

Gostaria de filtrar essas mensagens de /var/log/syslog. Depois de revisar a documentação do rsyslogd, tentei alterar o arquivo /etc/rsyslog.d/50-default.confassim:

*.*;auth,authpriv.none;haproxy.none     -/var/log/syslog

Eu simplesmente adicionei a ;haproxy.nonepeça. Após reiniciar o rsyslogd, ele parou de funcionar completamente até eu reverter minhas alterações.

O que estou fazendo errado?

itsadok
fonte

Respostas:

26

Você também pode fazer o seguinte, para que eles não entrem em nenhum outro registro:

local0.*                        -/var/log/haproxy.log
& ~

Os & ~meios para não colocar o que corresponde na linha acima em qualquer outro lugar para o restante das regras.

Kyle Brandt
fonte
Obrigado. Isso parece fazer mais sentido do que ter que editar a configuração principal.
itsadok
13
Vale ressaltar que, se você fizer isso, sua linha local0. * Deverá ser processada antes da linha " . " Em /etc/rsyslog.d/50-default.conf. Criei um arquivo chamado /etc/rsyslog.d/haproxy.conf para conter minha configuração de log específica para haproxy, mas ele registrou no syslog apesar de ter um "& ~" no final. Isso ocorre porque (é claro) o 50-default.conf é carregado antes do haproxy.conf, de modo que o catchall " . " Foi correspondido antes da minha linha "local0. *". A solução foi mudar o nome de meu arquivo específico do haproxy para /etc/rsyslog.d/49-haproxy.conf
Giles Thomas
1
FYI uma pequena atualizaçãorsyslogd-2307: warning: ~ action is deprecated, consider using the 'stop' statement instead [try http://www.rsyslog.com/e/2307 ]
KCD 15/04
Isso discute o uso de, em & stopvez de & ~: rsyslog.com/doc/v8-stable/compatibility/v7compatibility.html .
Slm
14

O uso de & ~foi preterido na v7 do rsyslogd, e você é incentivado a usá-lo & stop. Você pode ler mais sobre isso nesta seção da página de compatibilidade da v7 .

A ação omruleset e descarte (~) foi descontinuada

Ambos continuam a funcionar, mas foram substituídos por melhores alternativas.

A ação de descarte (caractere til) foi substituída pela diretiva RainerScript "stop". É considerado mais intuitivo e oferece um desempenho um pouco melhor.

O módulo omruleset foi substituído pela diretiva RainerScript "call". A chamada permite executar um conjunto de regras como uma sub-rotina e o faz com desempenho muito maior do que o omruleset. Observe que omruleset pode ser executado em uma fila assíncrona. Este foi mais um lado do que um efeito desejado e não é suportado pela instrução de chamada. Se esse efeito foi necessário, ele pode ser simplesmente simulado executando as ações chamadas de conjuntos de regras de forma assíncrona (que, em qualquer caso, é a maneira correta de lidar com isso).

Observe que os módulos reprovados emitem mensagens de aviso ao serem usados. Eles dizem que a construção está obsoleta e qual instrução deve ser usada como substituição. Isso não afeta as operações: os dois módulos ainda estão totalmente operacionais e não serão removidos no período v7.

Então, para o HAProxy, algo assim:

$ more /etc/rsyslog.d/haproxy.conf
local2.*    /var/log/haproxy.log
& stop

Quanto ao funcionamento, o & stopcomando diz ao rsyslogd para descartar quaisquer mensagens adicionais que correspondam às regras correspondidas anteriormente até este ponto. Para garantir que essa regra seja cumprida desde o início, você pode alterar o nome do arquivo de /etc/rsyslog.d/haproxy.confpara /etc/rsyslog.d/00-haproxy.conf.

slm
fonte
3

Ok, eu descobri. É assim que minha /etc/rsyslog.d/20-haproxy.confaparência é:

$ModLoad imudp
$UDPServerRun 514

local0.* -/var/log/haproxy_0.log
local1.* -/var/log/haproxy_1.log

Alterei a linha 50-default.confpara:

*.*;auth,authpriv,local0,local1.none     -/var/log/syslog

E agora parece estar fazendo o que eu quero.

itsadok
fonte
Geralmente é preferível NÃO modificar os arquivos de configuração criados por outros pacotes, pois isso cria problemas de atualização / propriedade. Se este for um servidor único de floco de neve, tudo bem, exceto para implantações automatizadas, modificar 50-default.conf geralmente é uma "coisa ruim".
Bruce Borda
2

Existe uma solução melhor para o log haproxy.

  • O HAproxy é executado no chroot, por isso não pode acessar /dev/log
  • De acordo com o manual oficial, o rsyslog precisa ser configurado para ouvir o soquete de rede:

    # to have these messages end up in /var/log/haproxy.log you will
    # need to:
    #
    # 1) configure syslog to accept network log events.  This is done
    #    by adding the '-r' option to the SYSLOGD_OPTIONS in
    #    /etc/sysconfig/syslog
    #
    # 2) configure local2 events to go to the /var/log/haproxy.log
    #   file. A line like the following can be added to
    #   /etc/sysconfig/syslog
    

Mas você pode usar apenas soquetes rsyslog para isso:

rsyslog.d / haproxy.conf:

    # HAproxy local socket
    $AddUnixListenSocket /var/lib/haproxy/dev/log
    :programname, contains, "haproxy" /var/log/haproxy.log
    & stop

haproxy.cfg:

    global
          log         /dev/log daemon
          chroot      /var/lib/haproxy
          .......
user320813
fonte
1

Eu prefiro não mexer com a ordem do arquivo, então, em vez disso, adiciono um local0.none ao arquivo . entrada de linha. O Config se parece com:

*.info;mail.none;authpriv.none;cron.none;local2.none     /var/log/messages

local2.*                                                 /var/log/haproxy.log

(Testado no CentOS 7)

Espero que ajude!

mgna20
fonte