Анализ логов Windows на Python

Анализ логов Windows на Python

Вчера возникла задача проанализировать лог Windows с расширением evtx для поиска определенной ошибки. Сразу подумал просто просмотреть глазами последовательно и найти нужные события. Однако файл оказался огромным (50 Мб) и задача перестала казаться такой уж простой. Так как я имел представление, что мне необходимо искать, то было решено написать небольшой скрипт на Python который сможет проанализировать все записи в файле и найти совпадение.

Для работы с логами в формате evtx был установлен модуль python-evtx. Данный парсер совершенно бесплатный и весь его исходный код находится на GitHub.

Весь исходный код моего анализатора умещается в 30 строк кода, при этом участок кода, который и ищет совпадения занимает всего 8 строчек.

import optparse
import Evtx.Evtx as evtx

def main():
    opts = get_options()
    search(opts)


def get_options():
    option_list = [
        optparse.make_option("-f", "--file", dest="file", help="the path to log file"),
        optparse.make_option("-p", "--pattern", dest="pattern", help="the search pattern")
    ]
    usage = "usage: %prog [options]"
    parser = optparse.OptionParser(usage=usage, option_list=option_list)
    opts, args = parser.parse_args()
    if not opts.file or not opts.pattern:
        raise ValueError("Path is required")
    return opts


def search(opts):
    with evtx.Evtx(opts.file.strip()) as log:
        for chunk in log.chunks():
            for record in chunk.records():
                xml = record.xml()
                pattern = opts.pattern.strip()
                if(pattern in xml):
                    print(xml)


main()

Как видно, я не разрабатывал сложные алгоритмы для анализа а просто искал вхождение нужной мне строки в весь xml события. Это не совсем корректный способ, так как при некоторых заданных параметрах поиска программа может находить просто элементы/аттрибуты по имени а не искомые данные. Однако для моего случая это не было столь критично.

Комментарии

Оставить комментарий