filtragem de rsyslog baseada no conteúdo da mensagem

1

Eu tenho um aplicativo que está gravando no syslog. As mensagens gravadas no syslog são para vários intervalos que precisam ser filtrados. Cada mensagem começa com um número de balde, então as mensagens são escritas como:

1: Message for bucket 1
14: Message for bucket 14
123: Message for bucket 123

Eu quero filtrar essas mensagens com base no número do intervalo, que, suponho, pode ser feito com um regex. Esses depósitos são numéricos e podem estar no intervalo de 1 a 999. A saída desses buckets deve ir para arquivos diferentes, um para cada bucket. Para o exemplo acima, deve ser:

/var/log/myapp/1.log
/var/log/myapp/14.log
/var/log/myapp/123.log

Alguém pode me ajudar com como isso pode ser feito com o rsyslog?

    
por Lazylabs 31.05.2013 / 12:56

2 respostas

2

Eu faço um filtro simples na configuração do rsyslog.

Nas minhas ficaria assim:

:msg, contains, "123: Message for bucket 123" -/var/log/myapp/123.log

Isso irá procurar a propriedade msg das mensagens recebidas do syslog para aquela string e registrá-la no arquivo que eu especificar.

Se você quiser saber mais sobre como configurar o rsyslog aqui, é um excelente lugar para começar: link

    
por 31.05.2013 / 15:06
2

Acho que estou um pouco atrasado com essa resposta, mas, na verdade, o rsyslog permite criar nomes de arquivos de log dinamicamente, portanto, você pode criar um modelo que construa o nome do arquivo de log com base no conteúdo msg, usando o campo . número ou regex.submatch para extrair o número do intervalo - consulte link para detalhes.

No entanto, você está feliz com as 999 linhas, é certamente mais simples, e o assunto abordado por Ronaldo Nascimento pode ser resolvido usando contém_i ao invés de contém - contains_i é insensível a maiúsculas e minúsculas.

    
por 25.12.2014 / 12:06