Navigation Menu

dimonomid/nerdlog

master BranchesTags Go to file Code

Folders and files

Name| Name| Last commit message| Last commit date
---|---|---|---

Latest commit

History

314 Commits
blhistory| blhistory
clhistory| clhistory
cmd| cmd
core| core
images| images
log| log
shellescape| shellescape
util| util
.gitignore| .gitignore
LICENSE| LICENSE
Makefile| Makefile
README.md| README.md
benchmark| benchmark
go.mod| go.mod
go.sum| go.sum
View all files

Repository files navigation

Nerdlog

Nerdlog 是一个快速的、远程优先的、多主机的 TUI 日志查看器,具有时间线直方图,且无需中央服务器。它在设计上受到了 Graylog/Kibana 的启发,但避免了它们的臃肿。基本上不需要任何设置。

它专注于高效地从多个远程机器同时查询日志,按时间范围和模式进行过滤,并绘制时间线直方图,以便快速进行可视化分析: Nerdlog 主要用例:从一个或多个远程主机读取系统日志(/var/log/messages/var/log/syslog)。即使对于大型日志文件(例如 1GB 或更大),也非常高效。

它确实支持其他一些日志格式,并且可以使用任何日志文件,但驱动实现的主要用例是:我们的 Web 服务后端作为 systemd 服务在一堆 Linux 实例上运行,打印大量日志,我们希望能够有效地读取这些日志,并拥有像 Graylog 这样的工具的时间线直方图。

设计亮点

演示

这是一个快速演示,展示了 Nerdlog 如何在四个远程节点上工作: Nerdlog

项目历史

了解项目的历史可能有助于理解项目动机和总体方向,您可以在完整文章中阅读。

项目状态

最初在 2022 年拼凑在一起,以取代速度慢得令人痛苦的 Splunk 设置。 在 2025 年重新审视,以在一定程度上清理它并开源。

但这仍然有点像概念验证阶段。 以最快的速度实施,意大利面条代码比比皆是,可以用更多的测试来覆盖,可以实施更多的功能等等。 仅在 Linux 上进行了真实测试,并且使用 Linux 主机来获取日志。

但是它有效。 它非常可用并且速度惊人。

安装

要构建它,您需要 Go。 安装后: 要将 nerdlog 二进制文件安装到您的 /usr/local/bin 中:

$ make && make install

或者构建并运行而不安装:

$ make && bin/nerdlog

使用

当您打开应用程序(nerdlog 二进制文件)时,它将显示一个带有几个字段的查询编辑表单: Nerdlog 时间范围是不言自明的。

下一个是 “Logstreams”:简而言之,logstream 指的是一个或多个_连续的_日志文件,例如 /var/log/syslog/var/log/syslog.1 等,位于可通过 SSH 访问的特定服务器上。 如果您有一个像 myserver.com 这样的服务器,可以通过端口 22 上的 SSH 访问,那么读取其 /var/log/syslog (或 /var/log/messages) 文件的 logstream 可以是:

myuser@myserver.com

如果您需要不同的端口和/或不同的日志文件,那么更明确的形式是:

myuser@myserver.com:1234:/some/other/logfile

多个 logstream 可以用逗号分隔提供,像这样:

myuser@myserver.com, myuser@myserver.com:1234:/some/other/logfile

Nerdlog 还会读取 SSH 配置 (~/.ssh/config),并可以从中获取端口、用户名和主机名。 它也支持 globs,因此例如在您的 SSH 配置中,您有两个主机,例如 myhost-01myhost-02,那么与其将您的 logstream 指定为 myhost-01,myhost-02,不如简单地指定为 myhost-*

显然,我们无法在 SSH 配置中指定日志文件,因此如果您需要为某些主机上的非默认日志文件配置 logstream,则可以使用 Nerdlog 自己的 logstream 配置文件 ~/.config/nerdlog/logstreams.yaml,该文件可能如下所示:

log_streams:
 myhost-01:
  hostname: actualhost1.com
  port: 1234
  user: myuser
  log_files:
   - /some/custom/logfile
 myhost-02:
  hostname: actualhost2.com
  port: 7890
  user: myuser
  log_files:
   - /some/custom/logfile

该查询表单上的最后一件事是 “Select field expression”,它看起来像这样:

time STICKY, lstream, message, *

它仅影响日志在 UI 中的显示方式。 该语法有些类似于 SQL SELECT 语法,尽管限制更多。

此处的 STICKY 只是意味着当表向右滚动时,这些粘滞列将保持在左侧可见。

此处支持的另一个关键字是 AS,因此例如 message AS msg 是有效的语法。

有关 logstream 和其他核心概念的更广泛的讨论,请考虑阅读文章中的核心概念部分。

要求

有关这些要求、随之而来的限制以及解决这些问题的可能方法的更广泛的讨论,请参阅文章中的“要求和限制”部分。

UI

UI 由几个关键元素组成:

导航

有多种导航应用程序的方式,您可以根据需要混合使用它们。

最传统的方法是只使用 Tab 和 Shift+Tab 在小部件(日志表、查询输入、编辑和菜单按钮、时间线直方图)之间切换,使用箭头和 Home/End/PgUp/PgDn 等键在小部件内移动,使用 Enter 应用事物,使用 Escape 取消事物。

如果您了解 Vim,那么您也会在 Nerdlog 中感到宾至如归,因为它支持一堆类似 Vim 的按键绑定:

在输入字段(命令行、查询输入等)中时,您可以使用 Up/DownCtrl+P/Ctrl+N 浏览输入历史记录。

在查询编辑表单中(UI 上的 Edit 按钮,或 :e[dit] 命令),Ctrl+K/Ctrl+J 迭代 “full” 查询历史记录(不仅影响一个字段(如查询),而且影响所有字段:时间范围、logstream 过滤器、查询)。

命令

除了可以自我发现的 UI 之外,还有一个类似 Vim 的命令行,支持几个命令。

:xc[lip] 将命令字符串复制到剪贴板,该字符串将使用当前的 logstream 过滤器、时间范围和查询打开 Nerdlog。 这也可以从菜单完成(菜单 -> 复制查询命令)

这相当于用于基于 Web 的日志记录工具的 URL 共享:当您通常复制 Graylog URL 并将其粘贴到 Slack 中的某个位置时,使用 Nerdlog,您可以通过共享此字符串来执行相同的操作。

该字符串将如下所示:

nerdlog --lstreams 'localhost' --time -3h --pattern '/something/'

它可以在 shell 中使用(这将打开 Nerdlog 的新实例),或者也可以在当前正在运行的 Nerdlog 实例中使用:只需键入 : 进入命令模式,复制粘贴上面的命令,Nerdlog 将对其进行解析并应用查询。

:back:prev 转到上一个查询,就像在浏览器中一样。 这也可以从菜单完成(菜单 -> 返回)

:fwd:next 转到下一个查询,就像在浏览器中一样。 这也可以从菜单完成(菜单 -> 前进)

:e[dit] 打开查询编辑表单; 如果您只是使用 Tab 导航到 UI 中的 “Edit” 按钮,则可以执行相同的操作。

:w[rite] [filename] 将所有当前加载的日志行写入文件名。 如果省略文件名,则使用 /tmp/last_nerdlog

:reconnect 重新连接到所有 logstream

:disconnect 与所有 logstream 断开连接

:set option=value 将选项设置为新值

:set option? 获取选项的当前值

当前支持的选项是:

:q[uit] 退出应用程序。

更多详情

查看 Nerdlog 文章,以更深入地了解核心概念、限制和解决方法以及实施细节。

关于

Nerdlog: fast, remote-first, multi-host TUI log viewer with timeline histogram and no central server

Resources

Readme

License

BSD-2-Clause license Activity

Stars

117 stars

Watchers

3 watching

Forks

1 fork Report repository

Releases

No releases published

Packages 0

No packages published

Languages

Footer

© 2025 GitHub, Inc.

Footer navigation

You can’t perform that action at this time.