6 个版本 (2 个稳定版)

1.1.0 2019 年 10 月 28 日
1.0.0 2019 年 7 月 10 日
1.0.0-rc62019 年 6 月 12 日
0.1.0 2019 年 6 月 12 日

#9#log-viewer

MIT 许可证

185KB
5K SLoC

woodchipper

CircleCI

从终端跟随、转换和探索所有难以管理的微服务日志。

  • 实时摄入任何格式的日志
  • 将所有日志转换为几种统一的格式之一
    • 格式化的纯文本以便分享
    • 样式化并包装以便易于阅读
    • JSON 以便机器处理
  • 交互式终端界面添加了无痛苦的搜索、过滤、文本重排和剪贴板支持
  • 内置 Kubernetes 支持,可同时跟踪多个 pod 和容器
  • 用户可自定义输出样式和自定义日志格式(见 自定义

快速入门

  1. 发布页面 获取预构建的二进制文件或运行

    cargo install woodchipper
    

    查看 安装页面 获取详细说明。

  2. 跟踪一些日志

    tail -f /var/log/my-app.log | woodchipper
    
  3. 使用 kubectl 插件 包装脚本并监视一些 pod

    kubectl woodchipper -n my-namespace app=my-app
    

用法

将任何日志管道传输到 woodchipper

cat my-log.txt | woodchipper

这将默认打开交互式查看器。使用上箭头、下箭头、翻页上、翻页下、主页和结束键进行导航。

woodchipper 还会跟踪任何流式输出

./some-long-running-script.sh | woodchipper

在管道传输时,woodchipper 会自动输出漂亮的格式化纯文本,适合分享

./some-hard-to-read-json-logs.sh | woodchipper | cat

或者,如果您只想将着色日志打印到您的终端

./logs.sh | woodchipper -r styled

如果您不喜欢交互式查看器但仍然需要分页器,请尝试 less

cat logs.txt | woodchipper -r styled | less

(如果您的 less 默认不传递 ANSI 转义,请尝试 less -R

交互式查看器

交互式查看器提供了一个改进的分页器,具有正则表达式搜索和过滤功能。如果将woodchipper连接到tty,则默认启用。

提供了一些键盘快捷键

  • 向上, 向下:逐条消息移动光标
  • 向上翻页, 向下翻页:逐屏滚动
  • home, end:移动到所有消息的开始或结束
  • f, |:向堆栈添加过滤器
    • 可以自由输入过滤器正则表达式
    • 无效的过滤器正则表达式将以红色突出显示
    • 在您输入时突出显示匹配的消息
    • enter:将过滤器添加到堆栈并删除所有非匹配消息
    • esc:取消过滤器
  • p:从堆栈中弹出最后一个过滤器
  • /, ctrl-f:搜索特定消息;在过滤器模式下
    • 可以自由输入搜索正则表达式
    • 无效的搜索正则表达式将以红色突出显示
    • 所有匹配的消息都会被突出显示;在您输入时,光标将跳转到最近的向前匹配项
    • enter:下一个匹配项
    • ctrl-p:上一个匹配项
    • esc:结束搜索;如果突出显示了一个结果,它将保持突出显示
  • c:将选定的消息复制到剪贴板作为可共享的纯文本
  • shift-c:将当前屏幕复制到剪贴板作为可共享的纯文本
  • q:退出

交互式查看器与将鼠标滚轮输入视为在替代屏幕模式下上/下按键的终端模拟器配合使用效果最佳。KDE的Konsole默认就是这样做的,您可以在iTerm2中通过“首选项”->“高级”->“鼠标”->“在替代屏幕模式下滚动轮发送箭头键”启用此功能。将来可能添加捕获所有终端鼠标事件的选项,但这样做将禁用文本选择,这不是最佳选择。

kubectl 插件

对于 kubectl 1.13+,了解更多

为了充分利用Kubernetes集成

  • 确保 kubectl 可用并在您的 $PATH
  • 在您的 $PATH 上安装 包装脚本

Woodchipper使用 kubectl proxy 访问Kubernetes API,因此如果 kubectl 可以连接到集群,它也可以连接。

要跟踪名为 my-pod-1234 的Pod,请运行

kubectl woodchipper -n my-namespace my-pod-1234

或者,如果您不想使用kubectl插件,这与此等效

woodchipper --reader=kubernetes -n my-namespace my-pod-1234

Woodchipper通过子字符串持续匹配Pod,因此在重启或部署升级之间,部分Pod名称也会跟随Pod

woodchipper --reader=kubernetes -n my-namespace my-pod

可以使用多个子字符串

kubectl woodchipper -n my-namespace my-pod my-other-pod

或者,如果您提供类似于标签的选择器,它将执行标签查询

kubectl woodchipper -n my-namespace app=my-app

注意,一次只能使用一个标签选择器。

Woodchipper会尊重您配置的kubectl默认命名空间,所以如果kubectl已经配置使用它,您就可以省略-n my-namespace。或者,可以将环境变量WD_NAMESPACE设置以覆盖默认值。

支持的日志格式

Woodchipper可以解析、格式化和美化以下任意日志,可以混合使用

  • 多种JSON日志格式,例如:{"time": "...", "msg": "hello world"}
  • logrus风格的键值对日志,例如:time="..." msg="hello world"
  • klog日志,用于Kubernetes组件
  • 带推断时间戳和日志级别的纯文本日志
  • 使用正则表达式解析器用户指定的自定义格式

类似项目

  • stern具有类似的Kubernetes日志功能
  • logrus在连接到TTY时具有内置的格式化打印功能
  • slog提供结构化格式化打印
  • less支持分页、搜索和输入跟随

贡献

欢迎提交错误报告、功能请求和拉取请求!请务必阅读行为准则以了解如何开始。

请注意,如行为准则中所述,代码贡献必须表明您接受开发者证书,这本质上表明您有权贡献的代码,并且您同意项目的许可协议(MIT)。使用Git CLI,只需将-s传递给git commit

git commit -s [...]

... Git将自动将所需的Signed-off-by: ...添加到您的提交信息末尾。

此外,设计文档可能是了解Woodchipper工作原理的有用资源。

依赖项

~29MB
~582K SLoC