Введение: эффективная работа со сжатыми логами
При расследовании инцидентов и сопровождении Linux-серверов инженерам регулярно приходится разбирать журналы, упакованные архиватором bzip2. Традиционный подход с предварительной декомпрессией таких архивов создает избыточную нагрузку на дисковую подсистему и отнимает много времени. Утилита bzegrep решает эту задачу иначе: она производит контекстный поиск прямо внутри сжатых файлов .bz2, поддерживая расширенный синтаксис регулярных выражений (ERE). Ниже представлены базовые и продвинутые приемы работы с этой командой на наглядных примерах.
Подготовка тестового стенда и пакета bzip2
Инструмент bzegrep поставляется в составе пакета bzip2. При необходимости развернуть его в системе выполните установку через пакетный менеджер APT:

Чтобы изолировать практические опыты, выделим отдельный рабочий каталог /tmp/bzegrep-lab и перейдем в него с помощью цепочки mkdir -p /tmp/bzegrep-lab && cd /tmp/bzegrep-lab:

Сформируем тестовый файл журнала app.log, содержащий записи различных уровней важности:

Для создания сжатого файла с сохранением исходного журнала вызовем архиватор с ключом -k: bzip2 -k app.log.

Проверим корректность создания архивного файла app.log.bz2, просмотрев подробные сведения командой ls -lh app.log.bz2:

Базовый поиск строк внутри архивов bz2
Для выполнения следующих шагов подтвердим рабочую директорию вызовом cd /tmp/bzegrep-lab:

С помощью bzegrep извлечем строки с маркером ERROR непосредственно из архива app.log.bz2. Утилита разворачивает поток на лету и сразу транслирует совпадения в терминал без записи распакованных данных на накопитель:

Если регистр символов в логах неоднороден, параметр -i позволяет игнорировать разницу между заглавными и строчными буквами при фильтрации по слову warn:

Чтобы точно знать, в каком месте исходного документа зафиксировано событие, укажем опцию -n. В выводе для фрагмента Database перед текстом строки отобразится ее порядковый номер (3):

Фильтрация с помощью расширенных регулярных выражений (ERE)
Перейдем в каталог стенда командой cd /tmp/bzegrep-lab:

Спецификатор bzegrep поддерживает синтаксис egrep. Оператор дизъюнкции (|) дает возможность отбирать события категорий ERROR или FATAL в рамках одного запроса:

Для более строгой локализации можно задать структурный шаблон. Найдем только те строки, которые стартуют с даты в формате ISO и продолжаются метками WARN или ERROR:
![bzegrep ‘^[0-9]{4}-[0-9]{2}-[0-9]{2}.*(WARN|ERROR)’ app.log.bz2](/ubuntu/20261015_012037_72/captures/s03_c03_bzegrep____0-9__4_-_0-9__2_-_0-9__2____WARN_ERROR.png)
Для подавления стандартных информационных сообщений и выделения сбойных ситуаций пригодится ключ инвертирования -v, исключающий все вхождения маркера INFO:

Пакетное сканирование множества архивов и агрегация результатов
Убедимся в нахождении в тестовой папке вызовом cd /tmp/bzegrep-lab:

Для моделирования многофайловой рабочей среды сформируем дополнительный лог-файл worker.log:

Выполним сжатие нового журнала командой bzip2 worker.log:

При поиске слова ERROR по шаблону *.bz2 добавим ключ -H, чтобы имя конкретного архива всегда предшествовало найденной строке:

Если подробный текст событий не требуется, а нужно быстро составить реестр сбойных архивов, аргумент -l выведет исключительно список файлов с найденным совпадением:

Для быстрой количественной оценки инцидентов можно применить ключ -c, который возвращает итоговое количество совпадений по каждому архиву отдельно:

Освоив команду bzegrep в Ubuntu, системный администратор получает мощное средство оперативной диагностики. Отсутствие необходимости во временной распаковке тяжелых дампов экономит дисковое пространство и ощутимо ускоряет локализацию неисправностей.