a atualização do rsyslog no Amazon Linux repentinamente trata as mensagens do nível INFO como EMERG

5

Estou tendo um problema estranho com o rsyslog em algumas das instâncias do EC2 que executam o Amazon Linux 2012.3. Ao atualizar o rsyslog 4.6 para 5.8.10, parece que cada mensagem de log no nível INFO é subitamente tratada como um problema no nível EMERG e está sendo transmitida para todos os lugares. Comentar o *.emerg * do /etc/rsyslog.conf limita as mensagens, mas obviamente isso não é muito uma solução.

As mensagens são assim:

Message from syslogd@hostname at Jul 13 19:35:07 ...
¿<14>processname[1696]: INFO <yadayadayada>

A maior parte do meu log está vindo de um logger do Python 2.6 com um logging.handler.SysLogHandler, cuja configuração eu publiquei abaixo. Não tive sorte em encontrar qualquer outra informação sobre este problema específico on-line, e a única coisa que parece resolver o problema para mim é revertendo para o rsyslog 4.6, que instantaneamente resolve o problema. Não é uma tragédia se eu estou preso com o 4.6, mas esse problema é muito desconcertante e me faz pensar se eu configurei mal algo que apenas demorei até que eu atualizasse para levantar a cabeça.

Aqui está o meu rsyslog.conf:

#### MODULES ####
$ModLoad imuxsock # provides support for local system logging (e.g. via logger command)
$ModLoad imklog   # provides kernel logging support (previously done by rklogd)

#### GLOBAL DIRECTIVES ####
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
$IncludeConfig /etc/rsyslog.d/*.conf # this directory is empty

#### RULES ####
kern.*                                                 /dev/console

# Log anything (except mail) of level info or higher.
# Don't log private authentication messages!
*.info;mail.none;authpriv.none;cron.none                /var/log/messages

# The authpriv file has restricted access.
authpriv.*                                              /var/log/secure
# Log all the mail messages in one place.
mail.*                                                  -/var/log/maillog
# Log cron stuff
cron.*                                                  /var/log/cron
# Everybody gets emergency messages
*.emerg                                                 *
# Save news errors of level crit and higher in a special file.
uucp,news.crit                                          /var/log/spooler
# Save boot messages also to boot.log
local7.*                                                /var/log/boot.log

E esta é a configuração para o logger do Python:

[handler_syslog]
formatter = syslog
class = handlers.SysLogHandler
args = ('/dev/log',handlers.SysLogHandler.LOG_USER)
level = INFO

[formatter_syslog]
format = %(name)s[%(process)d]: %(levelname)s %(message)s

Não tenho certeza se forneci informações suficientes sobre a minha pergunta, e esta é a primeira vez que eu postei no serverfault, então peço desculpas por qualquer violação de etiqueta. Muito obrigado.

    
por slucidi 13.07.2012 / 22:37

1 resposta

4

Provavelmente você está correndo para um bug / limitação do SysLogHandler que leva a uma BOM inserida no lugar errado. Isso confunde o analisador rsyslog e leva à mensagem que está sendo atribuída a prioridade EMERG.

Isso foi "consertado" no Python 2.7 removendo completamente a inserção da lista de materiais.

Você tem duas opções:

  1. Atualizar para o Python 2.7
  2. Codifique a mensagem em str durante a formatação para contornar o código de inserção da lista de materiais. Uma maneira de fazer isso é implementar um pequeno formatador personalizado como este:

    class BOMLessFormatter(logging.Formatter):
        def format(self, record):
          return logging.Formatter.format(self, record).encode('utf-8')
    
por 17.07.2012 / 14:10