Analisador de log simples Unix / Linux (desde, até)

5

Alguém já usou / criou um analisador de logs unix / linux simples que pode analisar logs como o seguinte:

timestamp log_message \n

Ordene as mensagens, analise o carimbo de data e hora e retorne:

  • Todas as mensagens
  • Mensagens após uma determinada data (--since)
  • Mensagens antes de uma determinada data (--until)
  • Combinação de - desde, - até

Eu poderia escrever algo assim, mas não tinha certeza se havia algo enlatado. Isso se encaixaria bem em alguns relatórios automatizados que estou planejando fazer.

    
por dpb 15.06.2010 / 20:49

3 respostas

3

Dê uma olhada no este programa em Python Eu escrevi para ver se chega perto do que você está procurando ou pode ser adaptado às suas necessidades.

    
por 15.06.2010 / 21:39
2

Mesmo que você encontre uma, não sei se confiaria nela. Por exemplo, como o registro de data e hora não é conhecido com antecedência, o único que poderia distinguir DD-MM-AAAA e MM-DD-AAAA seria ler adiante até que xx ou zz com xx-zz-YYYY seja maior que 12. Tenho certeza de que há outros problemas.

Escrever o seu próprio seria muito mais fácil e confiável, pois você pode usar a string padrão da sua linguagem para a biblioteca datetime e especificar explicitamente os especificadores do formato de data.

Por exemplo, com o Python:

    import re
    from datetime import datetime
    line_regex = re.compile(
        r'''
        \[
        (?P<day> \d{1,2} )
        /
        (?P<month> \w{3} )
        / 
        (?P<year> \d{4} )
        :
        (?P<hour> \d{2} )
        : 
        (?P<minute> \d{2} )
        : 
        (?P<second> \d{2} )
        \s
        (?P<timezone> -?\d{4} )
        \]
        ''', re.VERBOSE)


   new_entry['time'] = datetime.strptime(
        parsed_line['day'] +
        parsed_line['month'] +
        parsed_line['year'] +
        parsed_line['hour'] +
        parsed_line['minute'] +
        parsed_line['second']
        , "%d%b%Y%H%M%S"
   )

Se você quiser um módulo / biblioteca que tentará descobrir o formato que existe, uma opção para Perl é Date :: Parse .

    
por 15.06.2010 / 21:21
1

A única solução que eu já encontrei para isso, que era meio decente, era syslog-ng se conectando a um banco de dados (ponto no qual ele é reduzido a consultas SQL simples) - Supondo que você esteja registrando tudo centralmente, isso não causa muita dor adicional.

(Insira benefícios óbvios e advertências óbvias aqui)

    
por 15.06.2010 / 21:27