v3.2
Grafana Labs 和 Loki 团队激动地宣布 Loki 3.2 版本发布。Explore Logs 现在也已正式发布 (GA)。升级到 Loki/GEL 3.2 以获得 Explore Logs 的最佳体验。以下是新增增强功能和重要修复的摘要。
有关所有更改和修复的完整列表,请参阅 CHANGELOG。
功能与增强
Loki 3.2.0 的主要功能包括以下内容
*API: Loki API 已更新,以确保在即时查询端点上执行日志查询时失败 (#13421) (ce71f1c),在
/detected_fields
API 中添加结构化元数据 (#13604) (ce02cc2),并在 Volume API 期间避免查找不必要的 TSDB 符号 (#13960) (7c1a849)。使用布隆过滤器进行查询加速 (实验性): Loki 3.0 中引入的布隆过滤器功能仍处于实验阶段。请注意,Bloom Compactor 组件已被移除 (#13969) (b75eacc),并由 Bloom Planner 和 Bloom Builder 组件取代 (#13997) (be9eb50)。
distributor: 如果所有条目都未通过验证,则在 distributor 中忽略空流 (#13674) (6c4b062),并将块摄取限制到配置日期 (#13958) (b5ac6a0)。
Explore Logs 现已正式发布 (GA)。为了获得最佳体验,您应使用 Grafana 11.2 或更高版本以及 Loki 3.2。此版本包含的增强功能包括:为冲突的 detected fields 添加 _extracted 后缀 (#13993) (ab1caea),收集并提供预聚合的字节数和计数 (#13020) (467eb1b),以及移除 cardinality 过滤器 (#13652) (4f534d7)。
Helm: 此版本包含对 Helm charts 的更新,以使 gateway 容器端口可配置。( #13294) (05176e4) 并支持 Helm chart 中的 alibabacloud oss (#13441) (3ebab6f)。它还包含一个破坏性更改,用于支持分布式模式和 3.0 (#12067)。
ingester: Ingester 流限制改进:Ingester 流限制现在考虑“自有流”,并在 Ingester 环更改时定期更新。非自有流现在也会在此更新发生时被 flush。流限制计算也已更新,以提高多区域 ingester 部署的准确性。( #13532) (ec34aaa)。
lambda-promtail: 为 AWS GuardDuty 添加 S3 日志解析器支持 (#13148) (2d92fff),使用 zip 文件构建 lambda (#13787) (9bf08f7),并通过重构 KinesisEvent 的解析方式使其与 CWEvents 的解析方式匹配并进行代码清理,确保发送到 Kinesis 的消息可用 (#13098) (dbfb19b)。
loki: 添加禁用 AWS S3 dualstack 端点使用的能力 (#13785) (bb257f5),在 limited tripperware 中不强制执行 max-query-bytes-read 和 max-querier-bytes-read (#13406) (47f6ea5),以及升级 Prometheus (#13671) (b88583d)。
operator: 添加关于丢弃样本的告警 (#13512) (5f2a02f),添加对 volume API 的支持 (#13369) (d451e23),启用 leader-election (#13760) (1ba4bff),以及将 Loki operand 更新至 v3.1.0 (#13422) (cf5f52d)。
storage: 将 WalSegmentWriter 转换为 io.ReadSeeker (#13340) (19c0509) 并对失败的块编码/解码进行插桩 (#13684) (5a87ccb)。
其他改进包括以下内容
- chunks-inspect: 支持结构化元数据 (#11506) (1834065)。
- exporter: 在 limit exporter 中包含布尔值 (#13466) (4220737)。
- mempool: 使用
sync.Once
替换sync.Mutex
(#13293) (61a9854)。 - metrics: 收集重复的日志行指标 (#13084) (40ee766)。
弃用
Loki 3.0 的重点之一是清理未使用的代码和先前已弃用但未移除的旧功能。Loki 3.0 移除了许多先前的弃用功能,并引入了一些新的弃用功能。主要更改的领域包括
要了解有关此版本中的破坏性更改的更多信息,请参阅升级指南。
注意
出于谨慎考虑,我们建议在 AWS 上部署 Loki 或 Grafana Enterprise Logs (GEL) 的用户升级其 Helm charts 或更改其存储桶名称,详情请参阅此博客文章的解决方案和缓解措施部分。Grafana Alloy 是我们发布的 OTel Collector 的新名称。Grafana Agent 已被弃用,并将获得长期支持 (LTS) 至 2025 年 10 月 31 日。Grafana Agent 将于 2025 年 11 月 1 日达到生命周期结束 (EOL)。阅读更多关于我们为何建议迁移到 Grafana Alloy 的信息。
升级注意事项
有关重要的升级指导,请参阅升级指南和单独的Helm 升级指南。
- 破坏性更改 - API: 在即时查询端点上执行日志查询时失败 (#13421)。
- 破坏性更改 - blooms: 移除 bloom compactor 组件 (#13969)。
- 破坏性更改 - docker: 从 Promtail docker 镜像中移除 wget (#15101)。
- 破坏性更改 - Helm: 更新 Helm chart 以支持分布式模式和 3.0 (#12067)。
- 破坏性更改 - Helm: 修复 enterprise-gateway 和 admin-api 的 imagePullSecrets 设置方式。( #13761) (3be5a45)。
- 破坏性更改 - jsonnet: 将 loki-simple-scalable 的 read statefulset 转换为 deployment (#13977)。
重要提示
出于谨慎考虑,我们建议在 AWS 上部署 Loki 或 Grafana Enterprise Logs (GEL) 的用户升级其 Helm charts 或更改其存储桶名称,详情请参阅此博客文章的解决方案和缓解措施部分。
Bug 修复
3.2.2 (2024-12-04)
- 破坏性更改 - docker: 从 Promtail docker 镜像中移除 wget (#15101)。
- docker: 从 base-nossl 迁移到 static。此 PR 移除了大多数由 Loki 构建系统创建的 Docker 镜像中对 glibc 的包含。( #15203)。
- logql: 更新了 JSONExpressionParser,使其在提取的值是 JSON 对象时不再进行 unescape。( #14499)。
- promtail: 将 Promtail 基础镜像从 Debian 切换到 Ubuntu 以修复关键安全问题 (#15195)。
- storage: 让 GetObject 检查被取消的上下文。当提供的上下文已被取消时,S3ObjectClient.GetObject 错误地返回 nil, 0, nil (#14420)。
3.2.1 (2024-10-17)
- config: 从 common 复制 Alibaba 和 IBM 对象存储配置 (#14315) (32a9bc0)。
- logql: 更新了 JSONExpressionParser,使其在提取的值是 JSON 对象时不再进行 unescape。(向后移植 release-3.2.x) (#14502) (e9bbaf3)。
- promtail: 将构建镜像恢复到 Debian Bullseye 以修复 Promtail 中的 libc 版本问题 (#14386) (1e913df)。
- storage: 让 GetObject 检查被取消的上下文 (向后移植 release-3.2.x) (#14422) (1b7dd95)。
3.2.0 (2024-09-19)
- blooms: 清理 bloom compactor 中的临时 blockdir (#13622) (64215e1)。
- blooms: 在规划期间删除过期的 metas (#13363) (11e1976)。
- blooms: 确保 tokenizer 缓存在系列之间重置 (#13370) (04bc3a4)。
- blooms: 修复多个 blockcache 条目的逐出问题 (#13573) (c9950e3)。
- blooms: 修复 bloom gateway 中的 panic (#13303) (66f97b2)。
- blooms: 忽略有界分片查询规划中的布隆过滤错误 (#13285) (ede6941)。
- blooms: 改进错误包装,使获取块时 ignoreNotFound 生效 (#13656) (bd20171)。
- blooms: 改进 mempool 指标 (#13283) (d36e1d5)。
- blooms: dev 环境测试的小修复和改进 (#13341) (d0f56ee)。
- blooms: 从 notify planner 中移除退避 (#13506) (e506995)。
- blooms: 移除未使用的参数 (#13343) (fcb9b28)。
- blooms: 在任务 payload 中发送 chunkrefs (#13677) (450bbce)。
- blooms: 为空的布隆添加日志 (#13502) (c263a68)。
- blooms: 在读取时跳过空的布隆 (#13500) (bfa6955)。
- blooms: 抑制解析块服务器地址时的错误 (#13385) (3ac2317)。
- blooms: 使用正确的 key 在启动时填充 blockscache (#13624) (2624a4b)。
- blooms: 修复 fingerprint 未找到的日志行 (#13555) (aeb23bb)。
- blooms: 修复 BloomStore 初始化中的 panic (#13457) (5f4b8fc)。
- blooms: 不稳定的测试 blockPlansForGaps (#13743) (37e33d4)。
- blooms: 保留被更新的 metas 引用的块 (#13614) (784e7d5)。
- blooms: 合并到 main 后出现的 lint 问题 (#13326) (7e19cc7)。
- blooms: 在 gapsBetweenTSDBsAndMetas 测试中使用 elements match (#13722) (4cbe2a6)。
- ci: 在 job
dist
中添加 cleanup 步骤 (#13801) (217f928)。 - ci: 修复了 release-please manifest (#13810) (f253db5)。
- deps: 更新 github.com/axiomhq/hyperloglog digest 为 af9851f (#13806) (67295e0)。
- deps: 更新 github.com/c2h5oh/datasize digest 为 aa82cc1 (#13807) (a93f38c)。
- deps: 更新 github.com/docker/go-plugins-helpers digest 为 45e2431 (#13808) (e5a3994)。
- deps: 更新 github.com/grafana/jsonparser digest 为 ea80629 (#13814) (d5718eb)。
- deps: 更新模块 github.com/aliyun/aliyun-oss-go-sdk 至 v2.2.10+incompatible (#13861) (6f79194)。
- deps: 更新模块 github.com/azure/go-autorest/autorest/adal 至 v0.9.24 (#13862) (8041bd2)。
- deps: 更新模块 github.com/azure/go-autorest/autorest/azure/auth 至 v0.5.13 (#13863) (71c4421)。
- deps: 更新模块 github.com/baidubce/bce-sdk-go 至 v0.9.186 (#13864) (3c0e3e2)。
- deps: 更新模块 github.com/baidubce/bce-sdk-go 至 v0.9.187 (#13933) (56af84d)。
- deps: 更新模块 github.com/baidubce/bce-sdk-go 至 v0.9.188 (#14000) (79039a2)。
- deps: 更新模块 github.com/cespare/xxhash/v2 至 v2.3.0 (main) (#13615) (cfc7b34)。
- deps: 更新模块 github.com/datadog/sketches-go 至 v1.4.6 (#13865) (1f3c467)。
- deps: 更新模块 github.com/docker/docker 至 v25.0.5+incompatible [security] (main) (#12279) (960c034)。
- deps: 更新模块 github.com/docker/docker 至 v27.1.1+incompatible [security] (main) (#13762) (f8bf3bb)。
- deps: 更新模块 github.com/docker/docker 至 v27.1.2+incompatible (#13872) (8ab4c20)。
- deps: 更新模块 github.com/efficientgo/core 至 v1.0.0-rc.3 (#14001) (90f7e5f)。
- deps: 更新模块 github.com/felixge/fgprof 至 v0.9.4 (#13870) (c68848f)。
- deps: 更新模块 github.com/fsouza/fake-gcs-server 至 v1.47.7 (#13935) (d43b2de)。
- deps: 更新模块 github.com/gogo/googleapis 至 v1.4.1 (#13871) (6da7eb5)。
- deps: 更新模块 github.com/gorilla/mux 至 v1.8.1 (main) (#13618) (19b288e)。
- deps: 更新模块 github.com/gorilla/websocket 至 v1.5.3 (#13873) (1eb8342)。
- deps: 更新模块 github.com/hashicorp/consul/api 至 v1.29.4 (#14002) (e11b244)。
- deps: 更新模块 github.com/ibm/go-sdk-core/v5 至 v5.17.4 (#13892) (b6991f2)。
- deps: 更新模块 github.com/ibm/ibm-cos-sdk-go 至 v1.11.0 (#13893) (9b7e7e9)。
- deps: 更新模块 github.com/klauspost/pgzip 至 v1.2.6 (#13874) (fdea7a1)。
- deps: 更新模块 github.com/mattn/go-ieproxy 至 v0.0.12 (#13876) (775bf8e)。
- deps: 更新模块 github.com/ncw/swift 至 v2 (#13951) (246a1df)。
- deps: 更新模块 github.com/oschwald/geoip2-golang 至 v1.11.0 (#13934) (3bebba5)。
- deps: 更新模块 github.com/schollz/progressbar/v3 至 v3.14.6 (#13884) (fb9cae4)。
- deps: 更新模块 github.com/tonistiigi/fifo 至 v1 (#13952) (96b5c79)。
- deps: 更新模块 github.com/workiva/go-datastructures 至 v1.1.5 (#13885) (d817aee)。
- deps: 更新模块 golang.org/x/text 至 v0.17.0 (main) (#13794) (df61482)。
- deps: 更新模块 golang.org/x/time 至 v0.6.0 (#13910) (dff00bd)。
- detected fields: Detected fields 类型错误 bug (#13515) (f6a94d3)。
- detected fields: 移除 detected fields 的查询大小限制 (#13423) (1fa5127)。
- detected labels: 存储标签值为空时的响应 (#13970) (6f99af6)。
- detected_labels: 添加 matchers 以从存储中获取标签" (#14012) (25234e8)。
- detected_labels: 移除
detected_labels
的限制中间件 (#13643) (2642718)。 - docs: 修复 ruler URL 中的拼写错误 (#13692) (1476498)。
- docs: 移除 Loki 3.0 verify-config 中的尾随反引号 (#13640) (498f29a)。
- Helm: 修复 HPA ingester 中的拼写错误 (#13158) (4ca9785)。
- Helm: 修复 extraObjects (#13107) (b7fcf2b)。
- Helm: 修复 statefulset-results-cache 的 imagePullSecrets (#13051) (8434b2f)。
- Helm: 修复 memcached 和 provisioner 模板 (#13788) (1bf9791)。
- Helm: 移除 helm test (#13651) (ef03476)。
- Helm: 更新 yaml 文件
./production/helm/loki/Chart.yaml
(+1 其他) (#13392) (b5b861c)。 - Helm: 更新 yaml 文件
./production/helm/loki/values.yaml
(+1 其他) (#13426) (fc3904e)。 - Helm: SingleBinary 模式下的 Querier 地址 (#13297) (29f1ea9)。
- Helm: 更新 Loki v3 Helm statefulset-ingester.yaml 模板 (#13118) (5b4e576)。
- 索引网关: 不保留在查询时使用索引集初始化的 span logger (#14027) ( bd25ac2)。
- 索引网关: 修复在 ring 模式下使用 ruler 时出现的 nil pointer dereference panic (#13436) ( 304db10)。
- 摄取器: 修复 ingester.go 中的 panic (#13557) ( dbff69a)。
- 摄取器: 重做摄取器 profile tagging (#13239) ( 32097c8)。
- 摄取器: 从 profiles 中移除租户标签标记以减少基数 (#13270) ( f897758)。
- 摄取器: 流所有权检查 (#13314) ( 5ae5b31)。
- 摄取器: 支持多区域摄取器,用于在 limiter.go 中将全局限制转换为本地流限制 (#13321) ( e28c15f)。
- 摄取器: 在重新检查流所有权后更新固定限制 (#13231) ( 7ac19f0)。
- LogQL: AST 左循环引用导致内存不足 (#13501) ( 6dd6b65)。
- LogQL: 提高带有标签过滤器的查询执行速度 (#13922) ( 40f4f14)。
- LogQL: 解析和提取 JSON 键值时发生 panic (#13790) ( 5ef83a7)。
- LogQL: 从 quantile 下游传播 headers/warnings/stats (#13881) ( a0c7598)。
- LogQL: 记录 datasample 查询是受限查询类型 (#13930) ( ae938d0)。
- LogQL: 对于空 evaluator 返回空向量而不是 nil (#13485) ( 08615bf)。
- LogQL: 对分片 first/last_over_time 查询的返回值进行特殊处理 (#13578) ( 29a37d5)。
- 日志结果缓存: 在缓存键中包含 pipeline wrapper disabled 状态 (#13328) ( 221491c)。
- loki: 与 loki 的服务器实例一起初始化内部服务器日志 (#13221) ( 66b8c9b)。
- loki-mixin: 修复 Index Gateway 的延迟面板 (#13629) ( f586c0)。
- loki-mixin: 操作仪表盘中的各种延迟面板应使用毫秒单位类型而非秒 (#13260) ( f5a9905)。
- loki-mixin: 将 OTLP 路由正确归因于写入路径 (#13943) ( b91b782)。
- loki-mixins: 在使用 ssd 模式时,mixin 中 compactor 的 pod 匹配器不正确 (#12846) ( 515e13c)。
- operator: 仅在提供了 V13 schema 时才允许结构化元数据 (#13463) ( 3ac130b)。
- operator: 不要覆盖 LokiStack ingress 资源的 annotations (#13708) ( f523530)。
- operator: 从 status 中移除重复的 conditions (#13497) ( 527510d)。
- operator: 使用保留策略时,为删除请求设置对象存储 (#13562) ( 46de4c1)。
- operator: 跳过更新 serviceaccounts 的 annotations (#13450) ( 1b9b111)。
- operator: 支持 OpenShift 仪表盘中的 v3.1.0 (#13430) ( 8279d59)。
- operator: 仅监视 CCOAuthEnv 上的 CredentialsRequests (#13299) ( 7fc926e)。
- 查询器: 为所有 stats handlers 添加重试中间件 (#13584) ( 7232795)。
- 查询器: 调整 tailer 循环条件以便实际重新测试 (#13906) ( dabbfd8)。
- 查询器: 修复重试代码以处理 grpc 状态码。更新了新的 stats 重试以包含 spans (#13592) ( d3e1edb)。
- 查询器: 修复 serializeRounTripper 的 span name (#13541) ( 4451d56)。
- 查询器: 移除 stats handlers 上的重试,因为它们已经重试了 (#13608) ( 1008315)。
- 查询引擎: 在执行 range aggregations 时,包含时间戳等于查询范围结束时间戳的行 (#13448) ( e0ca67d)。
- 重试: 修复使用 protobuf 编码时的重试问题 (#13316) ( a457c5d)。
- ruler: 在创建新的 appenders 时使用 mutex 保护 ruler remote-write overrides map (#13676) ( e9a9c60)。
- 分片: 合并
avg_over_time
分片结果时使用 without() 分组 (#12176) ( eb8a363)。 - 存储: 处理 memchunk.go 中 block offset 超出 chunk length 的情况 (#13661) ( d42476a)。
- 存储: 将“404”解读为对象不存在 (#13901) ( 3c9c647)。
- 存储: 将目录创建与权限检查分开 (#13248) ( 1086783)。
- 存储: 尝试读取 block offset 不正确的 chunks (#13720) ( 7e224d5)。
- 结构化元数据: 在查询时清洗结构化元数据 (#13983) ( 3bf7fa9)。
- WAL: 修复 AppendRequest 没有 entries 会触发 flush 的 bug (#13672) ( 8a3ae22)。
- WAL: 正确重置 wal segment writer (#13468) ( 6ea83b4)。