lnav - Linux ターミナルから Apache ログを監視および分析する
2 週間も経たないうちに、Wannacry ランサムウェア攻撃により数千台のコンピュータが侵害され、大企業と個人に同様に多大な損失が発生しました。これは、近年発見された他の広範囲にわたる脆弱性 (Shellshock バグなど) と合わせて、ミッションクリティカルなシステムを常に最新の状態に保つことの重要性を浮き彫りにしています。
脆弱性は特定のオペレーティング システムやソフトウェア コンポーネントをターゲットにすることがよくありますが、ネットワークに出入りするトラフィックを調査することは、担当する資産を保護するために非常に役立ちます。
推奨読書: Linux 用の 4 つの優れたオープンソース ログ監視および管理ツール
すでにご存じかと思いますが、この情報を探す最初の場所はシステム ログです。このタスクを簡単にするために、この記事では高度なログ ファイル ビューアであるlnav をインストールして使用する方法を説明します。 lnav を使用すると、複数の種類のログを同時に監視し、ホットキーを使用してファイル内を移動し、アクセスとエラーの要約ヒストグラムを生成できます。それでは、読み続けてください!
Linux での lnav のインストールと起動
lnav をインストールするには、ディストリビューションのパッケージ管理システムを使用します。
aptitude install lnav [Debian and derivatives]
yum install epel-release lnav [CentOS 7 and similar]
インストールが完了したら、lnav を起動し、その後に調査するログが配置されているディレクトリへの絶対パスを指定します。通常、これは /var/log
であるため、次のようにしましょう。
lnav /var/log/httpd
CentOS 7 で Apache Web サーバーのログを検査するには:
前の図に示されている出力を簡単に調べてみましょう。
- 右上隅には、現在検査されているファイル (access_log-20170519 と access_log) が表示されます。上下にスクロールすると、ファイル名が変更される可能性があることがわかります。
- 40x HTTP 応答 (Not Found または Forbidden など) は太字で表示され、20x 応答は太字で表示されます。通常のテキストで。
- IP アドレスは緑色の太字で表示されます。
確かに素敵ですね。しかし、ここでもう少し深く掘り下げてみましょう。lnav が単にきれいな色の出力を提供するだけではないことがわかります。
エラー ログが表示されない理由について知りたい場合は、この記事の後半で答えを見つけます。それでは、読み続けてください!
オプションとホットキーを使用して出力を変更する
先に進む前に、lnav の出力と利用可能なビューをより簡単に移動できるようにするいくつかのホットキーをリストしてみましょう。
e
またはE
を使用して、次または前のエラー メッセージにジャンプします。w
またはW
を使用して、次または前の警告メッセージにジャンプします。b
またはBackspace
を押して前のページに移動します。- 次のページに移動するためのスペース。
g
またはG
を使用して、現在のビューの上部または下部に移動します。
ログがローテーションされると、logrotate 構成ファイルで指定された設定に応じて、古いファイルが圧縮される (または圧縮されない) 場合があります。圧縮ファイルを出力に含めるには、次のように lnav を起動します。
lnav -r /var/log/httpd
lnav の動作方法を詳しく調べたい場合は、次のように -d
オプションの後にデバッグ情報が書き込まれるファイル名を指定してプログラムを起動できます。
lnav /var/log/httpd -d lnav.txt
この例では、lnav の起動時に生成されるデバッグ情報が、現在の作業ディレクトリ内のlnav.txt という名前のファイルに書き込まれます。
そのファイルの最初の数行を次の図に示します。
強調表示されたテキストは、lnav がデフォルトの形式ファイル、具体的には Apache アクセス ログを解析するためのaccess_log 形式をロードしたことを示しています。さらに、lnav を使用すると各出力行を解析できるため、出力が視覚化され理解しやすくなります。
推奨読書: GoAccess (リアルタイム Apache および Nginx) Web サーバー ログ アナライザー
この機能を使用するには、プログラムを起動し、解析する行を選択します。選択された行は常にウィンドウの上部にある行になります。次に、p
を押すと、次の結果が表示されるはずです。
通常モードに戻るには、もう一度 p
を押します。
ここで、日付と時刻ごとにログの概要を表示したい場合は、i
を押します。たとえば、強調表示されたテキストは、4 月 10 日月曜日の午後 10 時から 11 時までの間に 37 件の HTTP リクエストがあり、そのうち 14 件でエラーが発生したことを示しています。
上に示したヒストグラムに基づいて潜在的な問題を特定したら、i
を押してビューを終了し、前に説明したようにパーサーを使用して問題をさらに詳しく調べることができます。または、セミコロンを入力して標準クエリを作成することで、組み込みの SQL 機能を使用することもできます。たとえば、次のようにします。
;.schema
データベース スキーマ内の使用可能なテーブルを表示します。適切なテーブル (この場合は access_log) を特定したら、q
を押して、次のクエリを使用して、195.154.230.31 からのリクエストに関する利用可能な情報をすべて返します。
;SELECT * FROM access_log WHERE c_ip='195.154.230.31'
log_time で結果をフィルタリングすることもできることに注意してください。重要なのは、少し SQL を追加すると、lnav でできることは無限にあるということです。
Apache のデフォルトのログ形式
多くのログ形式はデフォルトで lnav を使用して読み込まれるため、私たちが介入しなくても解析されます。公式ドキュメントの「ログ形式」セクションでリストを表示できます。
デフォルトの形式は ~/.lnav/formats/default/default-formats.json.sample で指定されており、その他の形式は < を使用して ~/.lnav/formats に追加できます。.json 拡張子。
ただし、これらのファイルを編集するには、JSON (Javascript Object Notation) および PCRE (Perl 互換正規表現) ライブラリにある程度の知識が必要です。
では、なぜ lnav は Apache エラー ログ ファイルを表示しなかったのでしょうか?その理由は、これらのログが既存の形式ファイルの正規表現に一致しないため、通常のテキスト ファイル (特定のログ形式のないファイル) として扱われるためです。
推奨読書: Apache Web サーバーの負荷とページ統計を監視する方法
前述したように、JSON と PCRE に少なくともある程度慣れれば、独自の形式を作成できます。これは、たとえばカスタム Apache ログを定義している場合に便利です。
まとめ
lnav の使用方法を説明するために Apache アクセス ログを使用しましたが、このツールを使用して表示および解析できる他の種類のログがいくつかあることに留意してください。ツールが特定のログを認識しない場合は、ここで示されている指示に従って追加の形式を作成し、インストールできます。
この記事に関してご質問やコメントはありますか?いつものように、以下のフォームを使用してお気軽にお知らせください。お返事おまちしております!