lnav 工具有哪些独特的功能?
- 你可以根据需要实时解压缩日志文件,类似于 Linux 和 Unix 上的 z* 工具。
- 自动检测日志文件格式。
- 按时间合并多个文件,形成一个统一的视图。
- 终端颜色支持,让你更容易发现错误和警告。
- 支持通过 SSH (SFTP) 查看远程 Linux 和 Unix 机器上的日志文件。
- 在日志文件轮换时,自动跟踪文件重命名,并在目录中查找新文件,方便你进行故障排查。
- 可以构建错误和警告的索引。
- 如果需要,可以漂亮地打印 JSON 格式的日志。
- 快速跳转到上一个/下一个错误。
- 使用正则表达式进行搜索。
- 使用正则表达式高亮文本。
- 使用正则表达式或 SQLite 表达式过滤消息。
- 漂亮地打印结构化文本。
- 查看消息的时间分布直方图。
- 使用 SQLite 查询消息。
- 简而言之,一个工具涵盖了 grep、cat、tail 等核心工具的功能。
安装
根据你的 Linux 或 Unix 发行版,输入相应的安装命令。
Debian/Ubuntu Linux
使用 apt
或 apt-get
命令:
$ sudo apt install lnav
CentOS/RHEL/Fedora/Rocky/Alma/Oracle Linux
首先启用 EPEL 仓库(Fedora 除外),然后使用以下 dnf 命令安装 lnav:
$ sudo dnf install lnav
Arch Linux
使用 pacman 命令:
$ sudo pacman -S lnav
Alpine Linux
使用以下 apk 命令:
# apk add lnav
OpenSUSE / SUSE Linux
可以尝试以下 zypper 命令:
$ sudo zypper install lnav
macOS 安装 lnav
首先启用并安装 homebrew,然后输入 brew 命令:
$ brew install lnav
或者尝试 port 命令:
$ sudo port install lnav
FreeBSD Unix 安装 lnav
使用 pkg 命令:
$ pkg install lnav
如何使用 lnav 这个基于终端的日志文件导航工具?
语法很简单:
# 日志文件 $ lnav /path/to/file.log $ lnav /path/to/file1.log /path/to/file2.log # 目录名 $ lnav /path/to/your/app/log/dir1/ $ lnav /path/to/your/app/log/dir1/ /var/log/ # 通配符 $ lnav /var/log/nginx/app_*_error*log $ lnav /var/log/nginx/app_*_error*log /var/log/*.err ############################## # 使用 ssh 查看远程主机的日志 # ############################## $ lnav user@server-name-here:/var/log/file.log $ lnav vivek@server1.cyberciti.biz:/var/log/ $ lnav vivek@server1.cyberciti.biz:/var/log/*.err ######################################### # 使用 systemd-journald 的 Linux 系统 # 可以将 lnav 作为分页器 ######################################### $ journalctl | lnav $ journalctl -f | lnav $ journalctl -u ssh.service | lnav
要查找错误,按 e
会跳转到下一个错误。按 Shift+E
可以跳转到上一个错误。同样,w
和 Shift+W
用于跳转到下一个或上一个警告。按 q
或 CTRL+c
退出 lnav 会话或命令提示符。当打开 SFTP URL 时,如果没有为远程主机提供密码,可以使用 SSH 代理进行身份验证。要在文件中搜索文本,可以按 /
进入搜索提示符。按 TAB
可以自动补全搜索字符串。
查看 Docker 容器日志
最简单的语法如下:
$ docker logs container-id | lnav $ docker logs -f container-id | lnav
如果容器 ID 是 611ac85cc97d 或者它叫 “app”,那么:
$ docker logs 611ac85cc97d | lnav $ docker logs -f app | lnav
最新版本的 lnav 还支持以下 docker:// URL 语法:
$ lnav docker://{container_id_or_name}/path/to/log/file $ lnav docker://{container_id_or_name}/var/dir1 $ lnav docker://app/var/log/ $ lnav docker://app/var/log/nginx/nginx.app.log
监视任何命令的输出
许多命令在工作时会生成输出和日志。例如,以下是如何在编译时监视 make 命令的输出:
$ lnav -e 'make -j8'
-e command1
用于执行名为 command1 的 shell 命令。
使用 SQLite 接口
在 lnav 中,可以使用 SQLite 接口进行日志分析。这是一个杀手级功能。所有日志消息都可以通过为每种日志格式生成的虚拟表访问。这些表以日志格式命名,每条日志消息表示为单独的一行。例如,以下是一个来自 Nginx 访问日志的日志消息:
$ lnav /var/log/nginx/www.cyberciti.biz_https_access.log
现在你会看到
点击放大
你可以按 ;
键激活 SQL 提示符。现在你可以编写一个简单的查询。例如:
SELECT * FROM logline LIMIT 10
然后你会得到结果:
点击放大
别担心,帮助窗口会解释 SQL 字段和示例。只要你懂 SQL 语句,就可以构建查询。你可以提取并保存这些数据。有许多选项,包括命令和高级 SQL 语法,可以满足你的需求,因此建议你收藏文档 URL。
总结
lnav 不仅仅是一个简单的日志文件查看器。它提供了高级功能,可以使用 SQLite 运行 SQL 查询,并根据日志文件生成报告,用于故障排查或从日志文件中获取应用程序使用信息。TUI 界面易于使用。除了 SQL 支持外,你还可以使用正则表达式搜索、对重要数据进行彩色高亮、支持各种流行的日志文件、Linux 容器以及通过 SSH 查看远程文件。我发现这个工具非常实用,强烈推荐给 Linux/Unix 系统管理员和开发者。你可以尝试以下命令启动 lnav,或者访问项目主页:
# 开始基础教程: $ ssh -o PubkeyAuthentication=no -o PreferredAuthentications=password tutorial1@demo.lnav.org # 游乐场: $ ssh -o PubkeyAuthentication=no -o PreferredAuthentications=password playground@demo.lnav.org