regra rsyslog aplicada de forma inconsistente

5

Eu criei uma regra para redirecionar mensagens contendo {FILTER} no arquivo /etc/rsyslog.d/40-filter.conf

:msg,contains,"{FILTER}" /var/log/filter.log
& ~

Eu editei o arquivo /etc/rsyslog.conf para que ele aceite mensagens UDP remotas removendo o comentário de linhas

$ModLoad imudp
$UDPServerRun 514

A origem das minhas mensagens do syslog é o seguinte script python simples

#! /usr/bin/python

import logging
import logging.handlers

logger = logging.getLogger('LoggingTest')
logger.setLevel(logging.DEBUG)

formatter = logging.Formatter('{FILTER} %(message)s')
handler = logging.handlers.SysLogHandler()
handler.setFormatter(formatter)
logger.addHandler(handler)

logger.info("Test Message")

Eu reiniciei o rsyslog usando

sudo service rsyslog restart

Quando executo meu script, a seguinte linha aparece em / var / log / messages, / var / log / syslog e /var/log/user.log, mas ele não aparece em /var/log/filter.log, que existe, mas permanece vazio.

Jun 23 17:18:29 {FILTER} Test Message

Se eu usar a ferramenta de linha de comando 'logger' (exemplo de linha de comando abaixo), a regra será aplicada corretamente

$ logger "{FILTER} Test Message 2"
$ cat /var/log/filter.log
Jun 23 17:21:28 NDU1010 nick: {FILTER} Test Message 2

Por que a regra não é aplicada a mensagens do meu script python? Eu estou em uma perda para explicar isso.

    
por SuperMe 23.06.2011 / 18:26

1 resposta

1

A saída que você deu parece que o script python não está enviando todas as partes da mensagem syslog que o rsyslog está esperando. Parece que a parte "{FILTER}" é onde o host e o nome do aplicativo devem estar. Você pode facilmente provar isso executando rsyslogd com o sinalizador -d e enviando a mensagem do python e depois do logger. Você verá a mensagem bruta como ela vem do soquete dessa maneira e eu aposto que você verá que o agente de log está enviando mais campos na frente da parte "{FILTER}".

    
por 31.08.2011 / 22:11