Como lidei com mensagens do meu aplicativo personalizado no rsyslog?

1

Eu tenho um aplicativo Ruby no meu servidor, vamos chamá-lo de "alpha". O aplicativo emite mensagens do syslog com o nome do programa "alfa". Desejo separar minhas mensagens de log em arquivos separados com base no tipo de mensagem, por exemplo, mensagens "auth" (logins) ou avisos de recursos do sistema.

Eu não tenho nenhuma maneira de especificar "tipo de mensagem" para o syslog que não seja o nome do meu programa, por isso estou apenas adicionando "AUTH:", "SYSTEM:" etc. no início da minha mensagem.

Usando o Google e as páginas do manual, descobri estas condições:

:programname,isequal,"alpha"           /var/log/alpha.log

Isso registra todas as mensagens do aplicativo "alpha" no arquivo de log correto.

:msg,startswith," AUTH:"                /var/log/alpha-auth.log

Isso registra todas as mensagens iniciadas com "AUTH:" no arquivo de log correto.

Agora, obviamente, a última condição não se aplica apenas a "alfa", mas a todas as mensagens. Eu gostaria de combinar essas condições para uma que diz "todas as mensagens de alfa que começa com AUTH: ...". É possível combinar filtros com "e" assim?

"Blocos no estilo BSD" parecem perfeitos, pois eu posso definir um bloco para o meu aplicativo e todas as condições se aplicam apenas a mensagens daquele aplicativo. Infelizmente, de acordo com os documentos, o recurso não é mais suportado (obsoleto?) e não quero depender de um recurso obsoleto. O rsyslog v7 + introduz uma alternativa para esses blocos?

Usando um filtro com base em expressões, consegui obter o resultado desejado, mas sinto que estou usando uma bazuca para matar uma mosca:

if $programname == "alpha" and $msg startswith " AUTH:" then \
    /var/log/alpha-auth.log

Qual seria a maneira "correta" (ou seja, mais simples e menos propensa a erros) de fazer isso?

Eu estou usando o Debian Jessie, que atualmente significa rsyslog 8.4.2

    
por Hubro 17.05.2016 / 11:36

1 resposta

1

Primeiro, crie um arquivo de configuração em /etc/rsyslog.d, como 01-alpha.conf , para tornar as coisas organizadas. Desta forma, o seu 01-alpha.conf será lido primeiro que o 50-default.conf. O 50-default.conf tem uma regra para registrar tudo em / var / log / syslog, portanto, neste exemplo, iremos descartar a mensagem depois de escrevê-la nos logs do alpha.

No 01-alpha.conf:

:programname, isequal, "alpha" {
  *.* /var/log/alpha.log
  :msg, startswith, "AUTH:" {
    *.* /var/log/alpha-auth.log
  }
  stop
}

A mensagem só entra neste filtro se o nome do programa for alfa, então ele irá entrar em /var/log/alpha.log. Se for um log de autenticação, registre-o em /var/log/alpha-auth.log. No final, descarte a mensagem para que ela não seja escrita em outro lugar.

    
por 17.05.2016 / 20:18