日志分析不再难: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 都将成为你不可或缺的助手。
无颜色: https://no-color.org/
[2]AUR: https://aur.archlinux.org/packages/fblog/
[3]brew: https://formulae.brew.sh/formula/fblog