O registro em log não funciona após o upgrade do rsyslog

2

Eu tenho vários aplicativos django diferentes sob o apache em um servidor Red Hat. Esses aplicativos usam SysLogHandler para enviar mensagens de log ao serviço rsyslog local. Para canalizar mensagens de log de diferentes aplicativos django para arquivos diferentes, estamos usando rsyslog tagging (baseado em syslogtag ). Aqui está o que temos em /etc/rsyslog.conf :

...
$template myFormat,"%msg%\n"
if $syslogfacility-text == 'local2' and $syslogtag == 'dev:'  then /var/log/ap/dev/ws.log;myFormat
if $syslogfacility-text == 'local2' and $syslogtag == 'rel:'  then /var/log/ap/rel/ws.log;myFormat
...

Funciona assim: se a mensagem de log for dev:Hello World! , Hello World! será gravado em /var/log/ap/dev/ws.log .

Tudo funcionou bem até ontem. Nosso sistema foi atualizado de 6.2 para 6.3. De acordo com yum history , rsyslog foi atualizado de 4.6.2-12 para 5.8.10-2 version.

Depois de depurar um pouco, descobri que a condição $syslogtag == 'dev:' não funciona na nova versão rsyslog . $syslogtag agora come parte de uma mensagem até o primeiro espaço e contém dev:Hello em vez de apenas dev: .

Você poderia me indicar o que fazer com isso e como fazer o rsyslog analisar a tag corretamente? (Alterar o formato da mensagem de log que vem dos aplicativos django não é uma opção)

Deixe-me saber se você precisar de alguma informação adicional. Obrigado.

    
por alecxe 02.10.2013 / 23:41

3 respostas

2

Se os aplicativos tiverem nomes diferentes, você poderá usar o filtro $ programname.

Se não, você pode usar if $msg contains 'rel: ' then ....

Gostaria de sugerir que você analisasse o link

    
por 08.10.2013 / 21:34
2

Já faz um tempo que eu migrei, mas acredito que você deveria usar

$syslogtag startswith 'rel: '

em vez de ==

    
por 10.10.2013 / 14:45
0

Graças a outras respostas para ajudar a fazer a condição if funcionar, mas o problema é que $msg não contém a mensagem de log real enviada de um aplicativo, pois $syslogtag "come" a parte da mensagem até o primeiro espaço nele.

Como solução alternativa, posso alterar o modelo de registro e concatenar a parte da mensagem ausente de %syslogtag% e %msg% :

$template myFormat,"%syslogtag:F,58:2%%msg%\n"

Leva a parte de %syslogtag% após os dois pontos (código 58 ascii) e adiciona o %msg% depois.

Felizmente, isso funciona para as versões 4.6.2-12 e 5.8.10-2 rsyslog. Mas eu não acho que isso seja uma solução boa e limpa, parece mais um hack. Além disso, não tenho certeza se isso funcionará para futuras versões do rsyslog.

Espero que haja outras respostas ou comentários.

    
por 14.10.2013 / 10:47