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

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

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

timestamp log_message \n

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

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

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

Responder1

Dê uma olhadaeste programa Python que escrevipara ver se chega perto do que você procura ou se pode ser adaptado às suas necessidades.

Responder2

Mesmo se você encontrar um, não sei se confiaria nele. Por exemplo, como o carimbo de data e hora não é conhecido com antecedência, a única coisa que poderia distinguir DD-MM-AAAA e MM-DD-AAAA seria ler adiante até que xx ou zz com xx-zz-AAAA seja maior que 12. Tenho certeza de que existem outras questões.

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

Por exemplo com 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ê deseja um módulo/biblioteca que tente descobrir o formato em que existe, uma opção para Perl éData::Analisar.

Responder3

A única solução que encontrei para isso que era meio decente foisyslog-ngregistrar em um banco de dados (ponto em que é reduzido a consultas SQL simples) - Supondo que você esteja registrando tudo centralmente, isso não adiciona muita dor adicional.

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

informação relacionada