Простой парсер логов Unix/Linux (с, до)

Простой парсер логов Unix/Linux (с, до)

Кто-нибудь когда-нибудь использовал/создавал простой парсер журналов unix/linux, который может анализировать журналы, подобные следующим:

timestamp log_message \n

Упорядочить сообщения, проанализировать временную метку и вернуть:

  • Все сообщения
  • Сообщения после определенной даты (--since)
  • Сообщения до определенной даты (--until)
  • Комбинация --since, --until

Я мог бы написать что-то вроде этого, но не был уверен, есть ли что-то готовое. Это хорошо вписалось бы в какую-то автоматизированную отчетность, которую я планирую сделать.

решение1

Взгляни наэта программа на Python, которую я написалчтобы увидеть, соответствует ли это тому, что вы ищете, или может ли быть адаптировано к вашим потребностям.

решение2

Даже если вы найдете один, я не знаю, буду ли я ему доверять. Например, поскольку временная метка неизвестна заранее, единственное, что он может отличить DD-MM-YYYY и MM-DD-YYYY, это читать вперед, пока xx или zz с xx-zz-YYYY не станет больше 12. Я уверен, что есть и другие проблемы.

Я думаю, написать свой собственный формат было бы гораздо проще и надежнее, поскольку вы можете использовать стандартную библиотеку string для datetime вашего языка и явно указывать спецификаторы формата даты.

Например, с 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"
   )

Если вам нужен модуль/библиотека, которая попытается определить формат, который они имеют, один из вариантов для Perl —Дата::Анализ.

решение3

Единственное решение, которое я когда-либо находил, которое было хотя бы наполовину приличным, былоsyslog-ngрегистрация в базе данных (в этом случае все сводится к простым SQL-запросам) — если предположить, что вы ведете все журналы централизованно, это не добавит особых проблем.

(Вставьте здесь очевидные преимущества и очевидные оговорки)

Связанный контент