lnav とは
lnav (Logfile Navigator) は、複数のソースのログファイルをひとつにまとめ、タイムスタンプ順に表示するターミナル向けのログビューアです。いくつかのファイルやディレクトリ、圧縮アーカイブを指定するだけで、フォーマット (syslog、systemd ジャーナル、Apache や nginx のアクセスログ、JSON Lines など多数) を自動で判別し、メッセージを時刻順に並べ、エラーと警告を色分けして目立たせ、ファイルが伸びていくのを追いかけ続けます。そこからフィルタ、検索、エラー間のジャンプができ、検索では足りない疑問には SQL でログメッセージを問い合わせられます。ssh 越しのリモートのログも、ローカルと同じ手軽さで開けます。lnav は Tim Stack が C++ で書いたもので、BSD-2-Clause ライセンスです。
apt upgrade でディストリビューションの lnav がその場で置き換わります。
⚡ lnav の主な機能
🔀 ひとつにまとまったタイムライン
syslog、アプリのログ、Web サーバーのログを一緒に開くと、lnav が各行をタイムスタンプ順に並べます。システム全体で何が起きたのかを、起きた順に読めます。
🔍 フォーマットの自動判別
syslog、journald の JSON、Apache と nginx のアクセスログ、JSON Lines、logfmt など数十のフォーマットを設定なしで認識します。レベル、タイムスタンプ、フィールドが解析され、エラーと警告が強調表示されます。
🗄️ ログに SQL を
認識されたフォーマットはそれぞれテーブルになります。; を押して SELECT クエリを実行すれば、ホストごとのエラー数、最も遅いリクエスト、ステータスコードの集計などが、同じ画面に表示されます。
🌐 ssh 越しのリモートログ
lnav user@host:/var/log/syslog で、別のマシンのログをいつもの ssh 設定と鍵で開けます。サーバー側にエージェントを入れる必要はありません。
📦 圧縮ファイルとアーカイブ
ローテートされた .gz や .bz2 のログをそのまま開け、.zip や .tar のアーカイブも同様です。サポートバンドルを展開せずに読めます。
👀 追従、フィルタ、検索
ファイルは伸びるそばから追いかけられ、フィルタはパターンで行を隠したり残したりし、検索はすべての一致を強調表示します。キーひとつで次のエラーや警告へジャンプできるので、大事なものを見逃しません。
apt upgrade を実行するだけで、常に最新版を使い続けられます。
📦 deb.griffo.io からインストールする
ステップ 1: リポジトリを追加する
sudo install -d -m 0755 /etc/apt/keyrings
curl -fsSL https://deb.griffo.io/EA0F721D231FDD3A0A17B9AC7808B4DD62C41256.asc | sudo gpg --dearmor --yes -o /etc/apt/keyrings/deb.griffo.io.gpg
echo "deb [signed-by=/etc/apt/keyrings/deb.griffo.io.gpg] https://deb.griffo.io/apt $(. /etc/os-release; echo ${DEBIAN_CODENAME:-${UBUNTU_CODENAME:-$VERSION_CODENAME}}) main" | sudo tee /etc/apt/sources.list.d/deb.griffo.io.list > /dev/null
sudo apt updateinstall -d -m 0755 /etc/apt/keyrings
curl -fsSL https://deb.griffo.io/EA0F721D231FDD3A0A17B9AC7808B4DD62C41256.asc | gpg --dearmor --yes -o /etc/apt/keyrings/deb.griffo.io.gpg
echo "deb [signed-by=/etc/apt/keyrings/deb.griffo.io.gpg] https://deb.griffo.io/apt $(. /etc/os-release; echo ${DEBIAN_CODENAME:-${UBUNTU_CODENAME:-$VERSION_CODENAME}}) main" | tee /etc/apt/sources.list.d/deb.griffo.io.list > /dev/null
apt updatesudo apt install extrepo
sudo extrepo enable griffo
sudo apt update🆓 ずっと無料のミラーがあります。 deb-free.griffo.io は、アカウントもサブスクリプションもなしでパッケージをずっと無料で配布しています。上流より最大2か月遅れ、セキュリティ修正は即座に公開されます。現在収録しているのは cliamp、Ghostty、lazydocker、Oh My Posh、Uncloud と Zed です。lnav は含まれていないため、今日入手する方法は上のリポジトリだけですが、ご要望があれば追加できます。
🧩 extrepo オプションについて。 extrepo は外部リポジトリを扱う Debian 標準のツールです。署名済みメタデータと照合して鍵を検証したうえで、sources ファイルの作成と署名鍵のインストールを代わりに行います。このリポジトリは griffo、ずっと無料のミラーは griffo-free という名前で登録されているので、Debian(bookworm、trixie、forky、sid)では上のコマンドだけで設定は完了です。
extrepo が用意するのは sources ファイルと鍵だけなので、サブスクリプションの認証情報は引き続き /etc/apt/auth.conf.d/deb.griffo.io.conf に書きます。extrepo は Debian のスイート向けメタデータしか公開していないため Ubuntu は対象外です。Ubuntu では sudo または root のコマンドを使ってください。
ステップ 2: lnav をインストールする
# 最新の lnav をインストール (ディストリビューションの古い lnav をその場で置き換えます)
sudo apt install lnav
# インストールを確認
dpkg -s lnav | grep Version# 最新の lnav をインストール (ディストリビューションの古い lnav をその場で置き換えます)
apt install lnav
# インストールを確認
dpkg -s lnav | grep Versionステップ 3: 最初の起動
# /var/log 以下のログは root と adm グループが読めます
sudo lnav /var/log
# rsyslog がない (Debian の既定) なら、systemd ジャーナルを JSON で読む
journalctl -o json | lnav
# 自分のログなら sudo は不要。フォーマットは自動判別されます
lnav ~/app/logs/
# lnav の中で ? を押すと組み込みヘルプ、q で終了# /var/log 以下のログは root と adm グループが読めます
lnav /var/log
# rsyslog がない (Debian の既定) なら、systemd ジャーナルを JSON で読む
journalctl -o json | lnav
# 自分のログなら は不要。フォーマットは自動判別されます
lnav ~/app/logs/
# lnav の中で ? を押すと組み込みヘルプ、q で終了🎯 基本的な使用例
ログを読んで追いかける:
# ローテートされた圧縮ログも、アーカイブもそのまま開けます
lnav /var/log/nginx/access.log.2.gz support-bundle.tar.gz
# 複数のソースを、タイムスタンプ順のひとつのタイムラインに
lnav /var/log/nginx/ ~/app/logs/app.log
# 別のマシンのログを、いつもの ssh 設定で
lnav user@host:/var/log/syslogフィルタと SQL:
# lnav の中で: e / E で次 / 前のエラーへ、w / W で警告へ
# :filter-in error 一致する行だけを残す
# :filter-out healthcheck 一致する行を隠す
# ;SELECT c_ip, count(*) AS hits FROM access_log GROUP BY c_ip ORDER BY hits DESC
# 同じクエリを UI なしで、スクリプト向けに
lnav -n -c ';SELECT sc_status, count(*) FROM access_log GROUP BY sc_status' /var/log/nginx/access.log最新に保つ:
# lnav はシステムの他の部分と一緒に更新されます
sudo apt update && sudo apt upgrade
# インストール済みのバージョンと、利用可能な最新バージョン
apt policy lnav
# アンインストール
sudo apt remove lnav# lnav はシステムの他の部分と一緒に更新されます
apt update && apt upgrade
# インストール済みのバージョンと、利用可能な最新バージョン
apt policy lnav
# アンインストール
apt remove lnav🔧 ツール連携
lnav はテキストを出すものなら何でも読めます。ファイルからも、パイプからも、他のマシンからも:
- ssh:
user@host:/var/log/syslogのようなリモートパスは、既存の ssh 設定と鍵を通して開かれます。パッケージはこのためにopenssh-clientを推奨しています - systemd ジャーナル:
journalctl -o json(追従するなら-fを追加) を lnav にパイプすれば、ジャーナルのすべてのフィールドを検索でき、クエリにも使えます - コンテナ:
docker logs -f app 2>&1 | lnavやkubectl logs -f pod | lnavで、コンテナの出力にも同じ強調表示と SQL が使えます - クリップボード: 行をマークして
cを押すとコピーできます。パッケージは Wayland と X11 向けにwl-clipboardまたはxclipを提案しています - 独自フォーマット: 社内のログフォーマットを JSON ファイルに記述し、
lnav -i myformat.jsonでインストールすれば、判別、強調表示、専用の SQL テーブルが使えるようになります - スクリプトと CI:
lnav -n -cはコマンドとクエリを UI なしで実行するので、対話的に答えを出した SQL を、そのまま cron ジョブやパイプラインで動かせます - ドキュメント: man ページはパッケージに含まれており (
man lnav)、完全なマニュアルは docs.lnav.org にあります
🚀 deb.griffo.io を選ぶ理由
- 公式 Debian: trixie では lnav 0.12.4、Bookworm では 0.11.1 を収録しており、いずれもリリースの期間中は固定されたままです
- 上流からのダウンロード: GitHub のリリースページにある静的バイナリの zip を手動で PATH にコピーする形で、man ページは付かず、リリースのたびに取得し直す必要があります
- ソースからビルド: C++ ツールチェーンに加え、SQLite、PCRE2、ncurses、libarchive、libcurl の開発パッケージ、そして長いコンパイル時間が必要です
- deb.griffo.io: 最新版を自動更新でお届け
- ✅ Debian と同じパッケージ名: パッケージ名は Debian のアーカイブと同じ
lnavなので、apt upgradeで標準の lnav がその場でアップグレードされ、後でapt removeしても何も残りません - ✅ 公式の静的ビルド: 上流自身による musl の静的バイナリなので、実行時の依存関係はまったくなく、どのバージョンでも同じように動作します
- ✅ 完全なパッケージ:
lnavバイナリと man ページ。リモートログ用にopenssh-clientを推奨し、行のコピー用にwl-clipboardまたはxclipを提案しています - ✅ 自動更新: 上流のリリースから数時間以内にパッケージを更新
- ✅ 2 つのアーキテクチャ: すべてのバージョンで amd64 と arm64。サーバーでも、ノート PC でも、Raspberry Pi のような ARM ボードでも同じ lnav が動きます
- ✅ マルチディストリビューション: Bookworm、Trixie、Forky、Sid で動作
- ✅ 手間のかからない運用: 更新は通常の apt コマンドだけ
📦 パッケージのビルドリポジトリ
Debian パッケージは、この GitHub リポジトリで自動的にビルド・管理されています:
- 🪵 lnav-debian - 最新リリースのビルド
🔗 関連パッケージ
deb.griffo.io では、こちらも配布しています:
- lazydocker - Docker 向けのターミナル UI。ログを見たいコンテナを探すのに
- k9s - Kubernetes クラスターと Pod のためのターミナル UI
- ripgrep - 高速な再帰検索。ログのツリー全体を一度に grep するのに
- bottom - ターミナル向けのシステムモニター。ログでは分からないことのために
- fzf - 開くログファイルを選ぶためのファジーファインダー