sintaxe de configuração do rsyslog

2

Eu preciso tomar várias ações para algumas mensagens de log. Por exemplo, quero registrá-los em arquivos diferentes de acordo com a gravidade.

Tudo está ok se eu usar isso:

if $programname == 'myprog'                                       then -/var/log/myprog.log
if $programname == 'myprog' and $syslogseverity-text >= 'warning' then -/var/log/myprog-alert.log
if $programname == 'myprog' ~

Isto registra todas as mensagens emitidas por 'myprog' para /var/log/myprog.log
Este aviso somente de log e mensagem de erro emitido por 'myprog' para - / var / log / myprog-alert.log
E o processamento é interrompido (graças a '~')

Eu gosto de ter algo mais sexy:

if $programname == 'myprog' then {
    *.*         -/var/log/myprog.log
    *.warning   -/var/log/myprog-alert.log
    ~
}

Mas esta construção posterior, embora aceita pelo rsyslog, não filtra contra o programname.
Por exemplo, todas as mensagens são gravadas em /var/log/myprog.log, mesmo quando originadas de qualquer processo.

Alguém pode explicar onde está o meu erro ou mal-entendido?

Método final, a partir das respostas abaixo:

use um rsyslogd "moderno". Versão > 7.x.y
use esta sintaxe:

if $programname == 'myprog' then {
    *.warning   -/var/log/myprog-alert.log
    *.*         -/var/log/myprog.log
    *.*         stop
}

ou este aqui:

if $programname == 'myprog' then {
    *.warning   -/var/log/myprog-alert.log
                -/var/log/myprog.log
                stop
}
    
por Gregory MOUSSAT 05.10.2014 / 22:39

2 respostas

1

Sua linha contendo apenas '~' está errada. Deve ser "*. * ~".

Eu sei que você usa principalmente o Debian estável. Sua versão do rsyslog é 5.x.y e não aceita o RanierScript.
Você pode atualizar para a versão de backports (7.6.3 atualmente), então seu segundo exemplo deve funcionar.

    
por 09.10.2014 / 01:47
2

Por os documentos do rsyslog para filtros e RanierScript , a sintaxe de várias linhas {..} não é suportada. O analisador do Rsyslog não costuma dar erros, preferindo apenas ignorar os problemas ou interpretá-los de uma maneira que você não pretendia. Seu exemplo "mais sexy" provavelmente está executando a ação { para eventos correspondentes a "myprog" (e não consigo encontrar essa ação, então suspeito que significa "não fazer nada"). A segunda e terceira linhas estão sendo tratadas como configuração de syslog estilo legado, e a quarta e a quinta são inválidas (então, novamente, provavelmente "não faça nada")

    
por 06.10.2014 / 00:56