日志分析不再难:fblog工具全面解读

文摘   2024-07-18 09:31   江苏  

日志分析不再难:fblog工具全面解读

前言

在这个数据驱动的时代,日志文件成为了我们理解和优化系统的关键。它们不仅记录了系统的运行状态,还为我们提供了调试和分析的宝贵信息。然而,面对海量的日志数据,如何快速、准确地提取有用信息,成为了一个挑战。今天,我要向大家介绍一个强大的工具——fblog。它不仅能帮助我们查看和管理 JSON 格式的日志文件,还能通过各种高级功能,让我们的日志分析工作变得更加高效和直观。

fblog

一个查看 JSON 日志文件的小工具。



打印特定字段

fblog -a message -a "status > a" sample_nested.json.log

前缀日志

如果你通过 docker 或 kubectl 查询多个 pod,它会在日志行前加上前缀:PODNAME | {"message": "test"}fblog 可以解析这个并将其添加到消息中。只需使用 -p

过滤

可以使用 Lua 过滤日志消息。如果你不确定哪些变量可用,可以使用 --print-lua 查看 fblog 生成的代码。

fblog -f 'level ~= "info"' # 将打印所有级别不是 info 的消息
fblog -f 'process == "play"' # 将打印所有 process 是 play 的消息
fblog -f 'string.find(fu, "bow.*") ~= nil' # 将打印所有 fu 以 bow 开头的消息
fblog -f 'process == "play"' # 将打印所有 process 是 play 的消息
fblog -f 'process == "rust" and fu == "bower"'
fblog --no-implicit-filter-return-statement -f 'if 3 > 2 then return true else return false end'

# 不是有效的 Lua 标识符如 log.level 会被转换为 log_level。
# 任何不是 _ 或字母的字符都会被转换为 _
fblog -d -f 'log_level == "WARN"' sample_elastic.log

# 嵌套字段被转换为 Lua 记录
fblog  -d -f 'status.a == 100' sample_nested.json.log

# 数组字段被转换为 Lua 表(索引从 1 开始)
fblog  -d -f 'status.d[2] == "a"' sample_nested.json.log

自定义

fblog 尝试检测日志条目的消息、严重性和时间戳。这种行为可以自定义。更多信息请参阅 --help

你可以自定义 fblog 消息:格式化输出:

fblog -p --main-line-format "{{#if short_message}}{{ red short_message }}{{/if}}" sample.json.log

fblog 提供了以下经过清理的变量:

  • fblog_timestamp
  • fblog_level
  • fblog_message
  • fblog_prefix

默认格式请参阅 --help

嵌套值被注册为对象。因此你可以使用 nested.value 来访问嵌套值。

handlebar 助手:

  • bold
  • yellow
  • red
  • blue
  • purple
  • cyan
  • green
  • color_rgb 0 0 0
  • uppercase
  • level_style
  • fixed_size 10

NO_COLOR

如果存在 NO_COLOR 环境变量,fblog 将禁用颜色输出。

无颜色[1]

消息占位符替换

消息中的占位符(fblog_message)可以用上下文对象或数组中的相应值替换。要启用替换,传递 -s 标志或设置上下文键(-c context)或占位符格式(-F {key})。

注意,占位符格式应写成 <PREFIX>key<SUFFIX>,其中它将匹配键为 key 的占位符。

示例

给定以下日志(称为 example.log):

{"message""Found #{count} new items.""extra_data": {"count"556}, "level""info"}

使用以下参数运行:

fblog -c extra_data -F '#{key}' example.log

结果:


安装

cargo install fblog

在包管理器中可用:AUR[2],brew[3]

日志尾随

fblog 不支持原生日志尾随,但这很容易实现。

tail -f file | fblog

或者使用 kubernetes 工具,例如

kubectl logs -f ... | fblog

一般来说,你可以将任何无尽的流管道传输给 fblog。

shell 补全

fblog --generate-completions <shell>

配置文件

fblog 从名为 fblog.toml 的文件中读取其配置,该文件位于

Linux: $XDG_CONFIG_HOME$HOME/.config

Windows: {FOLDERID_RoamingAppData}

macOS: $HOME/Library/Application Support

如果文件不存在或为空,这是[4]默认配置。

日志级别

这些级别由 fblog 着色:

trace
debug
info
warn
error
fatal

你可以映射额外的级别值(用于输出和颜色):

[level_map]
10 = "trace"
20 = "debug"
30 = "info"
40 = "warn"
50 = "error"
60 = "fatal"
# 例如这些值被 https://www.npmjs.com/package/bunyan#levels 使用

k9s

在文件 ~/.config/k9s/plugin.yml 中添加此内容:

plugin:
  fblog-pod:
    shortCut: Shift-L
    confirm: false
    description: "fblog"
    scopes:
      - pods
    command: sh
    background: false
    args:
      - -c
      - "kubectl logs --follow -n $NAMESPACE $NAME | fblog"
  fblog-container:
    shortCut: Shift-L
    confirm: false
    description: "fblog"
    scopes:
      - containers
    command: sh
    background: false
    args:
      - -c
      - "kubectl logs  --follow -n $NAMESPACE $POD -c $NAME | fblog"
  fblog-pod-all:
    shortCut: Shift-A
    confirm: false
    description: "fblog -d"
    scopes:
      - pods
    command: sh
    background: false
    args:
      - -c
      - "kubectl logs --follow -n $NAMESPACE $NAME | fblog -d"
  fblog-container-all:
    shortCut: Shift-A
    confirm: false
    description: "fblog -d"
    scopes:
      - containers
    command: sh
    background: false
    args:
      - -c
      - "kubectl logs  --follow -n $NAMESPACE $POD -c $NAME | fblog -d"

结语

通过本文的介绍,相信大家已经对 fblog 工具的功能和使用方法有了深入的了解。它不仅能够提升我们处理日志文件的效率,还能帮助我们更深入地洞察系统的行为。无论你是系统管理员、开发人员还是数据分析师,fblog 都将成为你不可或缺的助手。

参考资料
[1]

无颜色: https://no-color.org/

[2]

AUR: https://aur.archlinux.org/packages/fblog/

[3]

brew: https://formulae.brew.sh/formula/fblog



编程悟道
自制软件研发、软件商店,全栈,ARTS 、架构,模型,原生系统,后端(Node、React)以及跨平台技术(Flutter、RN).vue.js react.js next.js express koa hapi uniapp Astro
 最新文章