Назад | Перейти на главную страницу

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

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

timestamp log_message \n

Закажите сообщения, проанализируйте метку времени и верните:

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

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

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

Я думаю, что написать свой собственный будет намного проще и надежнее, поскольку вы можете использовать стандартную строку вашего языка для библиотеки 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 является Дата :: Разбор.

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

(Вставьте сюда очевидные преимущества и очевидные предостережения)