1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

lnavで行うログファイルの分析

Posted at

はじめに

Linux環境で出力するログファイルの分析を行うにあたってシンプルな方法は、コマンドを使用する方法です。

しかし、大量のログファイルを効率的に分析する場合は、シェルスクリプトやPythonなどプログラミングの手段が必要になってきます。

LinuxではMultiTailやGoAccessなどコマンドラインで使用できる便利なツールが存在します。MultiTailについては、以前書いたMultiTailで効率的にログを見るをご参照ください。

本記事では効率的にログファイルの分析を可能とするlnavについて記載しています。

lnav

lnavは、ターミナル用のログファイルビューアです。

ログファイルを簡単にマージ、追跡、検索、フィルターできます。また、SQLクエリを使用した分析も可能です。セットアップも不要なため、パッケージをインストールするだけですぐに使用できます。

lnavのインストール

Linux環境(Debian/Ubuntu Linux)の場合は、以下のコマンドでインストールできます。

$ sudo snap install lnav

その他のOSについてはDownloadsをご確認ください。また、GitHubでも公開されているため、パッケージが取得できない環境でもダウンロードして使用できます。

使用方法

lnavの引数にログファイルを渡すだけで、簡単に実行できます。

lnav <ログファイル名>

ログファイルは複数まとめて処理することができるため、globパターンであるワイルドカードを使用することができます。また、.gzなど圧縮したファイルも対応しているたため、圧縮ファイルの展開も不要です。

なお、大量のファイルを高速に開くにあたって、次の条件を満たすファイルは自動的に非表示になり、インデックスが作成されません。

  • バイナリファイル
  • 128KBを超えるプレーンテキストファイル
  • 重複したログファイル

例として、syslogを分析する場合は以下の様なコマンドを実行します。

lnav /var/log/syslog

スクリーンショット 2024-08-30 20.44.28.png

viの様なキーバインド感覚で実行できるため、ログファイルの先頭に移動したい場合はgを押します。末尾に行きたい場合はshift + gを押します。また、/で検索やeを押すことでエラーメッセージ(Error/error)に移動できます。

lnavはテキストファイルだけでなく、journalctlやdockerが出力するログなども処理することができます。

$ journalctl | lnav
$ docker logs -f <container-id> | lnav

SQLite

lnavは、SQLiteインターフェースを用いてSQLクエリも使用できます。

以下は、Webサーバで出力された複数のアクセスログを基にSQLクエリを使用して、特定のユーザーエージェントを抽出する例です。

アクセスログのファイル名は、access.log.1の様なファイル名になっていますが、アクセスログの中のタイムスタンプを基にソートされるため、ログファイル名は気にすることなく処理できます。

$ lnav access.log*

スクリーンショット 2024-08-30 20.45.48.png

;を入力後、SQLが入力できます。カラムは構造化されたログのフィールドから抽出され、テーブル名はログファイル名となります。

スクリーンショット 2024-08-30 22.01.54.png

特定のユーザーエージェントを抽出するために、where句を使用しています。

select log_line, log_time, c_ip, cs_method, cs_uri_stem, cs_user_agent from access_log where cs_user_agent like '%GPT%'

ユーザーエージェントがGPTBotであるAIクローラーからのアクセスログを抽出しました。

スクリーンショット 2024-08-30 22.02.11.png

AIクローラーのアクセスをブロックしているため、robots.txtファイルのみのアクセスが確認できます。AIクローラーのアクセスをブロックする方法については以前書いたrobots.txtファイルを使用してAIクローラーをブロックする方法をご参考にください。

おわりに

lnavはトラブルシューティングやアクセスログ解析などさまざまな目的で使用することができます。

セキュリティの観点ではSIEMにも勝るとも劣らない機能によりインシデント対応の調査にも活用できると思います。

参考

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?