概要
Linuxサーバーの保守やトラブルシューティングにおいて、bzip2で圧縮保存された膨大なログファイルを調査する機会は少なくありません。通常であれば解凍処理にディスク容量と待機時間を奪われますが、bzegrepを活用すればアーカイブを展開することなく目的の文字列を瞬時に検索できます。本稿では、基礎的なキーワード抽出から拡張正規表現を駆使した高度なパターンマッチングまで、実務ですぐに役立つコマンド操作をステップバイステップで解説します。
検証環境のセットアップとbzip2パッケージの準備
動作検証に必要なユーティリティ群を揃えるため、まずはbzip2パッケージをシステムへ導入します。

他のファイルへの影響を防ぐため、独立した作業ディレクトリを作成してカレントパスを切り替えます。以下のmkdir -p /tmp/bzegrep-lab && cd /tmp/bzegrep-labを実行してください。

テストデータとして、複数のログレベル(INFO、WARN、ERROR、FATAL)を含んだダミーログファイルapp.logを生成します。

元のプレーンテキストを残したまま圧縮アーカイブを作成するため、-k(keep)オプションを付与してbzip2 -k app.logを実行します。

アーカイブファイルが想定通り生成されているかを確かめるため、ls -lh app.log.bz2でファイルサイズや属性をチェックします。

アーカイブを展開せずbz2ファイル内の文字列を検索する
以降の操作を確実に行うため、念のため作業場所を再確認しつつcd /tmp/bzegrep-labで検証ディレクトリに留まります。

bzegrepを呼び出し、圧縮状態のapp.log.bz2からERRORを含むログレコードをダイレクトに抽出します。
一時的な解凍ファイルをディスクに書き出すオーバーヘッドなしに、障害メッセージを即座にターミナルへ表示できます。

英大文字・小文字の表記揺れを無視したい場合は、-iフラグを併用してwarnを検索対象に指定します。
小文字指定であっても、ログ内部に記録された大文字のWARN行が漏れなくヒットします。

該当メッセージが元のファイル上でどの位置にあるかを把握するには、行番号を付与する-nオプションを付けてDatabaseを探索します。
出力の先頭に対象行を示す番号(この場合は3)が付加され、前後の文脈特定がスムーズになります。

拡張正規表現(ERE)を用いた柔軟なパターンマッチング
引き続き正規表現を用いた検証を行うため、作業ディレクトリに留まった状態で進めます(cd /tmp/bzegrep-lab)。

bzegrepは標準で拡張正規表現(ERE)を解釈するため、パイプ記号(|)を用いたOR検索がそのまま利用できます。ERRORまたはFATALのいずれかに該当する深刻なイベント行を一度に抜き出してみましょう。

日付プレフィックスで始まり、かつ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コマンドで圧縮し、テスト用のbz2ファイルを2種類揃えます。

ワイルドカード(*.bz2)を用いて複数の圧縮ファイルを対象にERRORを検索します。この際、結果がどのファイルに由来するものかを明確化するため、-Hオプションを併用してファイル名を明示的にプレフィックス表示させます。

ログの内容自体は出力せず、対象キーワードを含んでいるファイル名だけを一覧取得したい場合は-lオプションが便利です。
エラーが発生したアーカイブのみをリスト形式で素早く特定できます。

各アーカイブ内に該当パターンが何件出現しているかを集計したいときは、-cオプションを指定します。
ファイル単位でマッチした行数がカウントされ、エラー発生頻度の比較や傾向把握に役立ちます。

このようにbzegrepを使いこなせば、ストレージを消費することなく、巨大なbz2アーカイブから必要なインシデントログを瞬時に抽出できます。日々のサーバー運用やログ監査の効率化にぜひ取り入れてみてください。