Skip to content

lnav — 日誌檢視工具

終端機中的互動式日誌導覽工具,支援多格式解析、關鍵字高亮、SQL 查詢與自訂主題;適合在 Docker 容器環境中安裝供除錯使用。

概述

lnav(Log File Navigator) 是一款功能豐富的 CLI 日誌檢視器,相較於 tail -fgrep,lnav 提供即時高亮、多檔案合併時間線、正規表達式過濾與 SQL 語法查詢等進階功能,顯著提升在終端機中閱讀和分析日誌的效率。

在 Docker 容器化環境中,lnav 通常以 Dockerfile RUN 指令安裝,搭配自訂主題(JSON 設定檔)調整視覺風格。由於 lnav 官方提供靜態連結的 Linux musl 執行檔,安裝時只需下載單一 zip 檔,無需處理動態函式庫相依性。

核心內容

Dockerfile 安裝模式

lnav 的 Dockerfile 安裝遵循「下載 → 解壓 → 清理」三步驟:

  1. 安裝工具wget 下載 zip,unzip 解壓
  2. 下載執行檔:從 GitHub Releases 取得對應版本的 linux-musl-x86_64 靜態執行檔
  3. 清理:移除臨時檔案並以 apt-get purge 移除安裝工具,確保映像層精簡

透過 ENV LNAV_VERSION 定義版本號,方便未來升級時只改一處。

自訂主題

lnav 透過放置在 /etc/lnav/formats/local/ 目錄下的 JSON 設定檔載入主題。設定檔只需指定 ui.theme 欄位即可切換內建主題(如 night-owlmonocai 等)。自訂主題設定檔通常在 Dockerfile 中以 COPY 指令複製進容器。

關鍵要點

  • 使用 linux-musl-x86_64 靜態執行檔,無動態函式庫相依,適合各種 Linux 基礎映像
  • 版本透過 ENV LNAV_VERSION 管理,升級只需修改一個值
  • 清理步驟(purge wget/unzip + apt clean)可有效控制映像層大小
  • 自訂主題設定檔路徑:/etc/lnav/formats/local/config.theme.json

實際應用

在需要即時觀察應用程式日誌的除錯場景中,於容器映像中預裝 lnav,開發者進入容器後即可直接執行 lnav /var/log/app.log 進行互動式日誌分析,相較於 kubectl logs 的純文字輸出體驗更佳。

部署設定參考

以下為實際部署時使用的完整設定,供日後查詢與複製使用。

環境參數

項目
lnav 版本0.13.2
執行檔來源GitHub Releases(linux-musl-x86_64)
安裝路徑/usr/local/bin/lnav
主題設定路徑/etc/lnav/formats/local/config.theme.json
使用主題night-owl

Dockerfile 安裝段落

dockerfile
ENV LNAV_VERSION=0.13.2

RUN set -ex \
    && apt-get update \
    && apt-get install -y --no-install-recommends \
        wget \
        unzip \
    && echo "Downloading lnav version ${LNAV_VERSION}..." \
    && wget -O /tmp/lnav.zip "https://github.com/tstack/lnav/releases/download/v${LNAV_VERSION}/lnav-${LNAV_VERSION}-linux-musl-x86_64.zip" \
    && unzip /tmp/lnav.zip -d /tmp \
    && mv /tmp/lnav-${LNAV_VERSION}/lnav /usr/local/bin/lnav \
    && chmod +x /usr/local/bin/lnav \
    && rm -rf /tmp/lnav* \
    && apt-get purge -y --auto-remove wget unzip \
    && apt-get clean \
    && rm -rf /var/lib/apt/lists/*

RUN mkdir -p /etc/lnav/formats/local
COPY lnav/config.theme.json /etc/lnav/formats/local/config.theme.json

主題設定檔(config.theme.json)

json
{
  "ui": {
    "theme": "night-owl"
  }
}

相關概念

來源