Введение

Когда дело доходит до поиска определенных текстовых шаблонов в большом количестве файлов, ручной поиск может оказаться трудной задачей. Сегодня мы углубимся в скрипт Python, который автоматизирует этот процесс, способен рекурсивно искать в каталогах и даже выполнять сложные поисковые запросы. В довершение всего, скрипт использует многопоточность для быстрого выполнения и имеет аккуратный индикатор выполнения!

Загрузите скрипт здесь:



Что делает сценарий?

Скрипт просматривает каждый файл в заданном каталоге в поисках строк, соответствующих определенным критериям поиска. Вот краткое изложение его особенностей:

  1. Сканирование нескольких каталогов. Скрипт использует os.walk() для навигации по каждому каталогу и подкаталогу, начиная с корневого каталога.
  2. Сложные запросы. Он может обрабатывать запросы AND и OR, например «Ошибка AND 404» или «Ошибка OR Exception».
  3. Параллельное выполнение. Использует Python concurrent.futures для многопоточности, что ускоряет поиск.
  4. Индикатор выполнения. Индикатор выполнения в реальном времени для отслеживания процесса.
  5. Вывод в формате JSON. Результаты можно вывести в файл JSON.
  6. Вывод на консоль. Если результаты не выводятся в файл JSON, они будут выведены на консоль.

Как это использовать

1. Клонируйте репозиторий:

git clone https://github.com/mikensec/logsearcher.git
 

2. Перейдите в папку, содержащую файл log_searcher.py.

3. Сделайте скрипт исполняемым:

В Linux или macOS:

chmod +x log_searcher.py

В Windows:
Нет необходимости делать его исполняемым. Просто запустите Python.

4. Запустите скрипт:

В Linux или macOS:

 ./log_searcher.py /path/to/logs “string1” “string2” --output my_results.json

В Windows:

python log_searcher.py C:\path\to\logs “string1” “string2” --output my_results.json
 

Шаблоны поиска

Для простого поиска строки просто заключите строку в кавычки:
”строка”

Чтобы объединить несколько поисковых запросов, используйте `and` (без учета регистра):
”string1” and “string2”

Для поиска нескольких альтернатив используйте `или` (без учета регистра):
”string1” или “string2”

Если вы укажете термины без `and` или `or`, скрипт будет искать каждый термин индивидуально во всех файлах журналов.

Примеры

Найдите IP-адреса в диапазоне 10.254.0.0/24:

 ./log_searcher.py /path/to/logs “¹⁰\.254\.0\.([0–9]{1,2}|[01][0–9]{2}|2[0–4][0–9]|25[0–5])$”
 

Найдите журналы, содержащие как «ошибки», так и «успешные»:

 ./log_searcher.py /path/to/logs “error” and “successful”
 

Сохраните результаты поиска в файл:

 
 ./log_searcher.py /path/to/logs “error" --output results.json
 

Заключение

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

Оригинально опубликовано на http://github.com.