Loki 分别显示日志消息和额外字段

Posted

技术标签:

【中文标题】Loki 分别显示日志消息和额外字段【英文标题】:Loki display log message and extra fields separately 【发布时间】:2021-12-14 01:45:34 【问题描述】:

在https://github.com/grafana/loki/issues/4249我发现了有趣的截图。

在此屏幕截图中,我看到日志级别和消息以粗体显示,白色文本和其他元数据(从日志消息中收集)以灰色显示在单独的行上。

我搜索了文档,但没有找到如何实现这一点。老实说,我正在 ELK 中寻找类似“短消息”的东西,以使开发人员仅在实际需要时才能看到元数据。 能否请您指出文档如何实现?

【问题讨论】:

在 Grafana 论坛上打开了具有相同问题的主题 - community.grafana.com/t/… 也尝试在 grafana slack 中提问,但没有得到任何帮助 - grafana.slack.com/archives/C0Y4TLW74/p1635456385131100 grafana.slack.com/archives/CEPJRLQNL/p1635418969204900 【参考方案1】:

简短回答: 我发现 Grafana UI 中没有这样的 UI 功能。 但是有两个功能可以帮助您实现这样的结果:

    行格式 - 允许您仅显示消息的选定部分 ANSI 转义序列渲染 - 允许您更改字体设置(粗体/斜体/颜色)

长答案:

这是我的初始测试查询(仅显示带有“HornetQ”的消息)appname=~".+" |= "HornetQ" 它产生以下输出。 我在查询中添加了行格式,默认情况下只显示消息字段
appname=~".+" |= "HornetQ"
  | json
  | line_format " .message "

但是,如果您打开消息详细信息,无论如何您都会看到所有 json 字段

让我们添加修改行格式以在单独的行上显示额外字段的预览。

我们将使用pattern '<_entry>' 来保存初始 json 以供进一步处理。我们还将在 line_formatif 中使用 gotpl 循环,这将跳过 message field

appname=~".+" |= "HornetQ"
  | pattern `<_entry>` 
  | json
  | line_format " .message \n range $k, $v := (fromJson ._entry)if ne $k \"message\"$k: $v  end  end "

让我们通过更改字体选项来提高消息的可读性。

为了实现这一点,我们将使用 ANSI 转义序列 (additional info)

appname=~".+"
  | pattern `<_entry>` 
  | json
  | line_format "\033[1;37m .message \033[0m\n range $k, $v := (fromJson ._entry)if ne $k \"message\"\033[1;30m$k: \033[0m\033[2;37m$v\033[0m  end  end "

您可以看到最后一个查询中缺少|= "HornetQ" 部分,因为它破坏了最后一个查询(带有着色),所以我跳过它。

附:所以现在我的解决方案不适用于全文搜索:(

【讨论】:

以上是关于Loki 分别显示日志消息和额外字段的主要内容,如果未能解决你的问题,请参考以下文章

密码字段中显示的额外字母

仅向某些用户或组显示 Joomla K2 额外字段

带有额外字段的 Django ManyToMany 字段不会显示在两个关系上

docker容器使用loki收集日志

运行时滚动视图中的额外空间(插图)

AWS AppSync GraphQL 输入验证 - 忽略额外字段?