• fblog-一款强大的日志分析工具
  • 发布于 1个月前
  • 91 热度
    0 评论
前言
在这个数据驱动的时代,日志文件成为了我们理解和优化系统的关键。它们不仅记录了系统的运行状态,还为我们提供了调试和分析的宝贵信息。然而,面对海量的日志数据,如何快速、准确地提取有用信息,成为了一个挑战。今天,我要向大家介绍一个强大的工具——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 将禁用颜色输出。

消息占位符替换
消息中的占位符(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 都将成为你不可或缺的助手。
用户评论