nerdlog:一款高效的远程日志查看器
项目介绍
nerdlog 是一款快速、远程优先、支持多主机的 TUI(文本用户界面)日志查看器,具备时间线直方图功能,且无需中央服务器。它的设计灵感来源于 Graylog 和 Kibana,但避免了这些工具的膨胀特性。使用时几乎无需任何设置。
nerdlog 致力于在查询来自多个远程主机的日志时保持高效性,支持按时间范围和模式进行过滤,同时绘制时间线直方图,以便快速获取视觉洞察:
nerdlog 的主要应用场景是读取一个或多个远程主机的系统日志(如 /var/log/messages
或 /var/log/syslog
),即使在大型日志文件(如1GB以上)上也非常高效。
虽然它也支持其他一些日志格式并可以使用任何日志文件,但其设计和实现主要围绕上述用例展开:项目的原始需求是高效地读取运行在多个 Linux 实例上作为 systemd 服务的 web 服务后端的日志,并希望拥有类似于 Graylog 工具的时间线直方图功能。
项目技术分析
nerdlog 的设计亮点包括:
- 无需中央服务器;nerdlog 与用户想要收集日志的每个节点建立 ssh 连接,并在后台保持空闲状态(虽然在某些情况下,一个单独的服务器来存储日志文件可能会有所帮助,具体请参阅文章中的 要求和限制 部分);
- 日志不会完整下载到本地机器:所有日志分析都在远程节点上完成,每次查询时,只从每个节点下载以下数据:每个日志流最多 250 条消息(可配置),以及时间线直方图的数据。显然,可以分页浏览日志,以获取下一条消息等。nerdlog 然后将所有节点的响应合并在一起,以统一的格式呈现给用户;
- 大部分数据在传输过程中都进行了 gzip 压缩,从而节省了带宽。
项目技术应用场景
nerdlog 主要用于读取系统日志,尤其是在有大量日志输出的情况下,如1GB或更大的日志文件。它适用于需要同时查询多个远程主机日志的场景,支持通过 ssh 连接进行日志分析,且不需要将日志文件下载到本地。
项目特点
- 高效性:nerdlog 在处理大量日志时表现出色,通过仅下载必要的日志数据和压缩传输,减少了资源消耗。
- 灵活的日志源:支持多种日志格式,并且可以通过配置文件定义远程主机上的日志文件路径。
- 直观的界面:通过时间线直方图和表格形式展示日志数据,便于用户快速定位信息。
- 无需中央服务器:通过直接与远程主机建立 ssh 连接,无需维护额外的服务器基础设施。
以下是nerdlog的一个演示,展示了如何在四个远程节点上使用:
nerdlog 的历史可以追溯到2022年,最初是为了替代效率低下的 Splunk 设备。在2025年进行了清洁和开源。尽管目前仍处于概念验证阶段,代码可能较为混乱,测试覆盖不足,功能也有待完善,但它已经能够以令人惊讶的速度运行。
安装nerdlog需要Go语言环境。可以通过以下命令安装:
$ make && make install
或者在不安装的情况下构建和运行:
$ make && bin/nerdlog
使用nerdlog时,会显示一个查询编辑表单,包括时间范围、日志流和选择字段表达式等选项。用户可以通过ssh配置文件或nerdlog的配置文件定义日志流。
nerdlog的用户界面包括多个关键元素,如awk模式输入、编辑按钮、菜单按钮、时间范围直方图、日志表格和状态栏等。用户可以通过多种方式导航应用程序,包括使用Tab键切换小部件、箭头键在表格内移动,以及使用类似于Vim的键绑定等。
nerdlog是一款功能强大且实用的开源日志查看器,特别适合那些需要在多个远程主机上高效查看日志的用户。通过其独特的特点和设计,nerdlog无疑为日志管理领域带来了新的选择。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考