Rsyslog unix timestamps no RHEL6

2

Estou tentando obter o rsyslog no RHEL 6 para processar a hora em que a mensagem foi registrada como um registro de data e hora unix. Comecei lendo a documentação no link . Como existem opções de propriedade de estilo antigo e de estilo novo, eu verifiquei o número da minha versão:

[root@sourwood remote]# rpm -qa | grep rsyslog
rsyslog-pgsql-5.8.10-6.el6.x86_64
rsyslog-5.8.10-6.el6.x86_64
[root@sourwood remote]# 

Isso implica para mim que estou usando a versão 5.8. Os documentos dizem para usar as opções de propriedade de novo estilo em versões maiores que 6, portanto, eu deveria usar as opções de propriedade de estilo antigo.

O topo da seção descrevendo as opções de estilo antigo afirma que as opções listadas abaixo existem em versões maiores que 5.5.3, já que 5.8.10 é maior que 5.5.3 e isso não deve ser um problema.

Com base nos documentos, criei o seguinte modelo (truncado um pouco para clareza):

$template proxyTemplate,"%timegenerated:::date-unixtimestamp%|%timegenerated:::date-rfc3339%|...\n"

Eu então uso este modelo da seguinte maneira:

if \
        $programname contains 'squid' \
then    /var/log/remote/squid.log;proxyTemplate

As mensagens do Squid são registradas, e a formatação do rfc3339 está funcionando, mas o timestamp do unix não está. Aqui está uma amostra truncada dos logs:

Apr 29 14:59:09|2013-04-29T14:59:09.443172+01:00|...

Estou fazendo algo errado? Talvez eu tenha perdido alguma sutileza? Ou eu encontrei um bug?

Para ter certeza de que também tentei com as opções de propriedade de novo estilo, mas sem sucesso.

    
por Bart B 29.04.2013 / 16:03

1 resposta

3

Infelizmente (porque eu queria isso também), a documentação está errada e o recurso apareceu na versão 6.3.8. O texto a seguir explica minhas descobertas.

De acordo com o repositório git do projeto, a primeira menção de unixtimestamp ocorre no commit b88ba94, que está presente apenas na tag v6.3.8:

$ git clone git://git.adiscon.com/git/rsyslog.git
$ cd rsyslog
$ git log --reverse  -S 'unixtimestamp' --oneline | head -1
b88ba94 added "date-unixtimestamp" property replacer option to format as a unix timestamp
$ git tag --contains b88ba94
v6.3.10
v6.3.11
v6.3.12
v6.3.8
v6.3.9
v6.4.0
...
$

Eu então verifiquei novamente a presença de unixtimestamp no SRPM no caso de ser backported - mas não tive essa sorte.

Finalmente, se você depurar a configuração com o comando rsyslogd -c 5 -d -N 1 -f /etc/rsyslog.conf , poderá ver um aviso de que o rsyslog não sabe sobre unixtimestamp :

$ rsyslogd -c 5 -d -N 1 -f /etc/rsyslog.conf
...
8913.783769999:7f45539b3700: cfline: '$template NagiosPassiveServiceCheck, "%TIMESTAMP:::date-unixtimestamp% PROCESS_SERVICE_CHECK_RESULT;%hostname%;FOO;3;%msg:2:$%\n"'
8913.783783726:7f45539b3700: Invalid field option 'date-unixtimestamp' specified - ignored.
$

Verifique o valor do argumento de compatibilidade -c que seu sistema está usando. Este argumento pode mudar radicalmente como o rsyslog interpreta o arquivo de configuração, portanto, certifique-se de desenvolver e depurar a configuração com o mesmo nível que você usará na produção (veja /etc/sysconfig/rsyslog para defini-lo).

Como uma alternativa ao rsyslog, pode valer a pena olhar para o syslog-ng (disponível nos repositórios do EPEL) - que permite a saída de mensagens com timestamps representados como segundos-de-época.

    
por 25.09.2013 / 16:38

Tags