菜单
开源

V2.3

Loki 团队很高兴宣布 Loki 2.3 版本发布!

自 2.2 发布以来已经过去了近 6 个月,我们充分利用了这段时间带来了一些重大的改进和备受期待的功能。

2.3 也是 Loki 在 AGPLv3 许可下发布的第一个版本。您可以在此处阅读有关我们许可的更多信息

Loki 仓库的某些部分将保留 Apache-2.0 许可(主要客户端和一些工具),更多详情请阅读LICENSING.md

特性和增强功能

  • Loki 现在可以根据流选择器应用自定义保留策略!这将允许对日志保留进行更精细的控制,所有这些现在都由 Loki 处理,不再需要使用对象存储配置进行保留。
  • 与长时间存储日志同步推出的是删除日志流的功能。初始实现允许您提交删除请求作业,这些作业将在 24 小时后处理。
  • LogQL 引入了一个非常令人兴奋的新解析器:pattern parser。对于具有一定结构(例如Common Log Format)的日志行,它比 regexp 更简单快捷。这是 Loki 目前最快的解析器,快来在您的日志行上试试吧!
  • 在告警规则的基础上,Loki 现在接受recording rules。这允许您将日志转换为指标并将其推送到 Prometheus 或任何与 Prometheus 兼容的 remote_write 端点。
  • LogQL 可以理解IP 地址!这使得能够按 IP 地址和子网范围进行过滤。

对于那些将 Loki 作为微服务运行的用户,以下功能将显著改进许多操作的性能。

  • 我们创建了一个索引网关 (index gateway),它负责下载 boltdb-shipper 索引文件,使您可以在不需要本地磁盘的情况下运行查询器,这在 Kubernetes 环境中非常有用,您可以将查询器从 Statefulset 移回 Deployment,并节省大量 PVC 成本和操作麻烦。
  • Ingester 查询器现在支持分片,这对于查询最近数据时的高流量日志流来说是一个显著的性能提升。
  • 即时查询现在可以被分割和分片,使其像范围查询一样快。

2.3 版本还包含了一个非常常见的功能请求:

  • 3919 github-vincent-miszczak:添加 ingester.autoforget-unhealthy-timeout 可选功能

在不重新讨论围绕“不健康” ingesters 具有争议行为的决定和讨论的情况下,您现在可以决定如何处理它们:手动或自动。

最后,LogQL 查询语言还增加了一些有用的功能

  • PR 3515 包含了更多用于 label_formatline_format 的文本/模板函数,更多信息请参阅模板函数文档
  • PR 3434 还包含了对 label_formatline_format 中数学函数的支持。
  • PR 3050 中增加了两个额外的指标函数 first_over_timelast_over_time,它们有一些有趣的用例。这些函数对于某些采样方法很有用,您可以在指标查询中选择该范围内的第一个或最后一个日志行进行使用,而不是计算范围内样本的平均值、最大值或最小值。

升级注意事项

从 2.2.1 到 2.3.0 的升级应该比较顺利,一如既往,请阅读升级指南以获取重要的升级指导。

然而,我们认为值得注意的一个变化是:

  • 3216 sandeepsukhani:检查流选择器是否包含至少一个等值匹配器。

此更改现在拒绝任何不包含至少一个等值匹配器的查询,一个示例可以更好地说明:

{namespace=~".*"}

此查询现在将被拒绝,但是有几种方法可以修改它以使其成功:

添加至少一个等值标签匹配器

{cluster="us-east-1",namespace=~".*"}

使用 .+ 代替 .*

{namespace=~".+"}

这种差异可能看起来很微妙,但如果我们分解它,. 匹配任何字符,* 匹配前一个字符的零个或多个,而 + 匹配前一个字符的一个或多个。.* 的情况将匹配空值,而 .+ 不会,这是重要的区别。{namespace=""} 是一个无效请求(除非您像上面的示例那样添加另一个等值标签匹配器)。

此更改的原因与 Loki 中索引查找的工作方式有关,如果您没有至少一个等值匹配器,Loki 就必须执行完整的索引表扫描,这是一个昂贵且缓慢的操作。

安全修复

2.3.x 的安全修复列表。

2.3.0 安全修复

2.3.0 包含一个重要的安全修复:

  • 4020 simonswine:限制 TenantID 中的路径段 (CVE-2021-36156 CVE-2021-36157)。

注意

利用此漏洞需要攻击者能够直接向 Loki 构建并发送 X-Scope-OrgID 头部,最终用户不应该有直接创建和发送此头部给 Loki 的能力,因为它控制着对租户的访问,并且控制此头部的设置对于正确的租户隔离和安全至关重要。我们始终建议由代理或网关负责设置 X-Scope-OrgID

Bug 修复

2.3.x 的 Bug 修复列表。

2.3.0 Bug 修复

  • 3733 修复了一个重要的资源泄漏问题,当查询被取消时,会留下一个 goroutine 运行,该 goroutine 会占用内存资源,导致内存泄漏。
  • 3686 修复了 frontend 在与下游 URL 一起使用时出现的 panic。注意,我们建议使用GRPC Pull Model,通过 GPRC Pull Model 可以获得更好的性能和租户间的公平调度。