v3.1
Grafana Labs 和 Loki 团队很高兴宣布 Loki 3.1 发布。以下是新增强功能和重要修复的摘要。
有关所有更改和修复的完整列表,请参阅 更新日志 (CHANGELOG)。
功能和增强
Loki 3.1.0 的主要功能包括:
使用 Bloom 过滤器进行查询加速 (实验性):持续改进在 Loki 3.0 中引入的新 Bloom 过滤器功能。此功能旨在加快过滤查询速度,对于查找特定文本字符串(例如错误消息或 UUID)的查询效果最佳。有关更多信息,请参阅使用 Bloom 过滤器进行查询加速。
Helm: 更新 Helm chart 以支持分布式模式和 3.0 ( #12067) ( 79b876b)。在 SSD 模式下添加 pattern ingester 支持 ( #12685) ( 19bfef4)。在 Helm 中默认启用日志卷端点 ( #12690) ( e39677f)。允许 extraObject 项作为多行字符串 ( #12397) ( af5be90)。支持非分布式模式下的 PVC 注解 ( #12023) ( efdae3d)。
LogQL: 支持 LogQL 中的负数 ( #13091) ( 6df81db)。通过分片提高
first_over_time
和last_over_time
查询的性能 ( #11605) ( f66172e)。改进 pattern 的语法解析器 ( #12489) ( 48dae44)。lokitool: 添加
lokitool
以替换cortextool
。( #12166) ( 7b7d3d4)。在lokitool
中引入index audit
命令 ( #13008) ( 47f0236)。Explore Logs: Explore Logs 现已提供公开预览,它允许您无需编写 LogQL 查询即可探索 Loki 数据。如果您是 Grafana Cloud 用户,可以在 Grafana Cloud 主导航菜单中访问 Explore Logs。如果您不是 Grafana Cloud 用户,可以安装 Explore Logs 插件。有关更多信息,请参阅 Explore Logs 文档。
文档: 在“入门指南”演示中添加了视频,并更新了 Grafana Alloy 相关内容。在 Loki 快速入门教程中添加了交互式沙盒。更新了使用 Helm chart 的 SSD 和微服务部署模式的文档。记录了新的元监控 Helm chart。
其他改进包括:
- API: 在 Patterns Query API 中添加 step 参数 ( #12703) ( 7b8533e)。
- API: 为 label names API 暴露可选的标签匹配器 ( #11982) ( 8084259)。
- 缓存: 为 Loki 即时查询添加
Cache-Control: no-cache
支持。( #12896) ( 88e545f)。 - canary: 添加测试以检查带缓存和不带缓存的查询结果。( #13104) ( 71507a2)。
- distributor: 使用 unsafe package 优化日志解析性能 ( #13223) ( 9f31b25)。
- 默认启用日志卷端点 ( #12628) ( 397aa56)。
- ingester: 为 flush op 添加 backoff (退避) ( #13140) ( 9767807)。
- ingester: 添加 ingester_chunks_flush_failures_total 指标 ( #12925) ( cc3694e)。
- ingester: 为 ingester 添加 profile 标签 ( #13068) ( 00d3c7a)。
- ingester: 如果环发生变化,添加 recalculateOwnedStreams 来检查流所有权 ( #13103) ( e7689b2)。
- ingester: 为 ingester 添加 profile 标签 ( #13068) ( 00d3c7a)。
- ingester: 在 stream limit 错误消息中包含创建失败的 stream ( #12437) ( ec81991)。
- ingester: 新的 stream 计数限制器 ( #13006) ( 1111595)。
- Lambda-Promtail: 为 Lambda-Promtail CloudFormation 模板添加 MaximumEventAgeInSeconds、LogGroupName 和 IAMRoleName 参数 ( #12728) ( 8892dc8)。
- loki/main.go: 记录启动时使用的配置文件路径 ( #12985) ( 7a3338e)。
- metamonitoring: 为元监控添加一个 mixin 仪表盘版本 ( #12700) ( ec1a057)。
- Promtail: 添加了在 Promtail docker 镜像上安装 wget 以支持 docker healthcheck 的功能 ( #11711) ( ffe684c)。
- Promtail: 支持 RFC3164 (即 BSD Syslog) ( #12810) ( be41525)。
- querier: 将 gRPC 客户端拆分为两个。( #12726) ( 7b6f057)。
- 报告: 报告 CPU 使用情况 ( #12970) ( 87288d3)。
- 拆分检测到的字段查询 ( #12491) ( 6c33809)。
- TSDB: 为
inversePostingsForMatcher
添加快速路径 ( #12679) ( 402d1d7)。
已弃用项
Loki 3.0 的重点之一是清理未使用的代码以及之前已弃用但未移除的旧功能。Loki 3.0 移除了许多先前的弃用项,并引入了一些新的弃用项。主要更改领域包括:
要了解此版本中的破坏性更改,请参阅升级指南。
注意
Grafana Alloy 是我们发行的 OTel collector 的新名称。Grafana Agent 已被弃用,并将提供长期支持 (LTS) 直到 2025 年 10 月 31 日。Grafana Agent 将于 2025 年 11 月 1 日终止服务 (EOL)。阅读更多关于为什么我们建议迁移到 Grafana Alloy 的信息。
升级注意事项
从 2.9 到 3.0 的路径包含多项破坏性更改。有关重要的升级指导,请参阅升级指南和单独的Helm 升级指南。
- 破坏性更改 更新 Helm chart 以支持分布式模式和 3.0 ( #12067)。
重要
出于谨慎考虑,我们建议在 AWS 上部署 Loki 或 Grafana Enterprise Logs (GEL) 的用户升级其 Helm chart 或更改其存储桶名称,具体操作请参阅这篇博客文章的解决方案和缓解措施部分。
Bug 修复
3.1.2 (2024-10-17)
- 配置: 从 common 复制阿里云和 IBM 对象存储配置 ( #14316) ( 7184d45)。
- docker-compose: 将 loki 和 grafana 生产镜像标签升级到 3.1.1 ( #14025) ( 36fe29e)。
- logql: 更新了 JSONExpressionParser,如果提取的值是 JSON 对象,则不进行 unescape。(回溯 release-3.1.x)( #14503) ( 759f9c8)。
- promtail: 将构建镜像回退到 Debian Bullseye,以修复 Promtail 中的 libc 版本问题 ( #14387) ( 05b6a65)。
- 存储: 让 GetObject 检查 context 是否已取消(回溯 release-3.1.x)( #14421) ( f3d69ff)。
3.1.1 (2024-08-08)
3.1.0 (2024-07-02)
- blooms: 修复同步下载时 bloom 下载队列中重复入队项的问题 ( #13114) ( f98ff7f)。
- blooms: 在 fuse 中添加缺失的
continue
,这可能导致 bloom 测试结果不正确 ( #12650) ( 0d1ebeb)。 - blooms: 允许在 bloom 仪表盘中覆盖集群标签 ( #13012) ( 987e551)。
- blooms: bloomshipper 在 fetch 时不再返回空的 metas ( #13130) ( ad279e5)。
- blooms: 在启动时递归清理块目录 ( #12895) ( 7b77e31)。
- blooms: 正确返回未映射到任何块的 series 的未过滤块 ( #12774) ( c36b114)。
- blooms: 对过滤后的 series 和 chunks 进行去重 ( #12791) ( 3bf2d1f)。
- blooms: 在 bloom gateway 上禁用 metas 缓存 ( #12959) ( 00bdd2f)。
- blooms: 当从缓存获取 metas 失败时,请求不失败 ( #12838) ( 667076d)。
- blooms: 不破坏迭代器约定 ( #12808) ( 1665e85)。
- blooms: 修复
partitionSeriesByDay
函数 ( #12900) ( 738c274)。 - blooms: 修复 #12774 引入的回归问题 ( #12776) ( ecefb49)。
- blooms: 修复当所有权达到 MaxUInt64 并被现有 meta 覆盖时 findGaps 的问题 ( #12558) ( 0ee2a61)。
- blooms: 从 FilterChunkRef 响应中完全去除 chunks 的重复项 ( #12807) ( a0f358f)。
- blooms: 优雅地处理未找到的 metas ( #12853) ( 37c8822)。
- blooms: 在 LazyBloomIter.Seek 上重置错误 ( #12806) ( 76ba24e)。
- blooms: 在检查 loadWorkForGap 的错误后延迟关闭 blocks iter ( #12934) ( cb1f5d9)。
- blooms: 合并后修复 bloom deleter PR ( #13167) ( c996349)。
- blooms: 修复 bloom 过滤响应中 chunks 排序不正确的问题,因为
ChunkRef.Cmp
方法被反向使用 ( #12999) ( 670cd89)。 - blooms: 移除导致 lint 错误的未使用参数 ( #12801) ( 33e82ec)。
- downstream roundtripper 中
codec
未初始化 ( #12873) ( b6049f6)。 - 更改日志级别,因为这是一个已知情况 ( #13029) ( ca030a5)。
- 关闭 res body ( #12444) ( 616977a)。
- 修正部分 slices 的初始化 ( #12674) ( 0eba448)。
- distributor: 当日志消息中出现 info 词时,添加 detected_level 信息 ( #13218) ( c9bfa3e)。
- 文档: 入门指南 readme 中的链接损坏 ( #12736) ( 425a2d6)。
- 文档: 将 Promtail 配置移至正确的文档 ( #12737) ( 1161846)。
- 文档: 更新了 Loki OTLP Ingest Configuration ( #12648) ( ff88f3c)。
- Explore logs: 使 detected fields 同时支持 json 和 proto 格式 ( #12682) ( f68d1f7)。
- 修复竞态检测器报告的错误 ( #13174) ( 2b19dac),关闭 #8586。
- 修复循环同步方式的问题 ( #12941) ( 5cd850e)。
- 修复日志级别检测 ( #12651) ( 6904a65)。
- 修复尝试从日志行检测级别时设置信息日志级别的问题 ( #12635) ( 0831802)。
- lokitool: 修复 lokitool 导入 ( #12673) ( 6dce988)。
- Helm: 修复 Helm 中查询范围值的缩进问题 ( #12577) ( 9823f20)。
- Helm: 添加缺失的 Helm 助手 loki.hpa.apiVersion ( #12755) ( 3070ea7)。
- Helm: 在 nginx 配置中添加缺失的 OTLP 端点 ( #12709) ( 8096748)。
- Helm: 修复读取和后端副本设置 ( #12828) ( d751134)。
- Helm: 为分布式模式设置 compactor 地址。( #12748) ( 521d40a)。
- Helm: 修复 GEL 镜像标签、桶名称和代理 URL ( #12878) ( 67ed2f7)。
- Helm: 修复 Service 模板中 query-frontend 和 ruler 的 targetPort 'http-metrics' ( #13024) ( 1ab9d27)。
- Helm: 修复 queryScheduler servicemonitor ( #12753) ( 8101e21)。
- Helm: 修复 ingress 路径映射 ( #12932) ( 5ada92b)。
- Helm: 仅在使用 MinIO 时设置默认桶名称 ( #12548) ( 2e32ec5)。
- Helm: 从文档中删除重复的 bucketNames 并修复键名
deploymentMode
( #12641) ( 0d8ff9e)。 - Helm: Ingester zoneAwareReplication ( #12659) ( 9edb0ce)。
- Helm: 当 loki.auth_enabled 为 true 时,Loki-Canary 缺少密码 ( #12411) ( 68b23dc)。
- indexstats: 不从其他查询类型的“IndexStats”查找中收集统计信息 ( #12978) ( 1f5291a)。
- ingester: 在 tailer.send() 中用原子布尔替换通道检查 ( #12976) ( 4a5edf1)。
- ingester: 非自有流计数 ( #13030) ( 4901a5c)。
- ingester: 为 RPC 函数调用正确地从 ingester 返回 HTTP 状态码给 querier ( #13134) ( 691b174)。
- ingester: 跟踪 ingester 丢弃的字节数。( #12981) ( 88c6711)。
- 引入 [last|first]_over_time 分片的功能标志。( #13067) ( 6e45550)。
- 禁用管道包装器时使缓存失效 ( #12903) ( a772ed7)。
- ksonnet: 如果您使用 memberlist,则不为 consul 生成 RBAC ( #12688) ( 2d62fca)。
- Lambda-Promtail: 更新 s3 文件名正则表达式以允许查找来自 AWS GovCloud 区域的日志文件 ( #12482) ( 7a81d26)。
- Lambda-Promtail: 从 EventBridge 示例 CloudFormation 模板中删除硬编码的桶名称 ( #12609) ( 8c18463)。
- LogQL: 修复多个 or 过滤器会获得错误的 filtertype ( #13169) ( 9981e9e)。
- Makefile 中的 Loki 版本前缀 ( #12514) ( dff72d2)。
- 使 TSDB 文件名可以从标识符正确重现 ( #12536) ( ec888ec)。
- metamonitoring: 在 meta monitoring 仪表盘中添加缺失的括号 ( #12802) ( 151d0a5)。
- mixins: loki-operational.libsonnet ( #12789) ( 51a841f)。
- mixins: loki-deletion 仪表盘 mixin 中不正确的 compactor 匹配器 ( #12567) ( 006f88c)。
- mixins: 修复 loki-deletion 仪表盘中的 compactor 匹配器 ( #12790) ( a03846b)。
- mixin: 更改集群标签时生成 Mixin ( #12613) ( 1ba7a30)。
- mixin: 仪表盘 $__auto 修复 ( #12707) ( 91ef72f)。
- mixins: 在 loki-deletion 上添加缺失的日志数据源 ( #13011) ( 1948899)。
- mixins: 使 loki-writes mixins 与 loki-reads 对齐 ( #13022) ( 757b776)。
- mixins: 删除 SSD 读取路径不必要的磁盘面板 ( #13014) ( 8d9fb68)。
- mixins: 升级 loki-operational 仪表盘的旧插件。( #13016) ( d3c9cec)。
- nix: Lambda-Promtail vendor hash ( #12763) ( ae180d6)。
- OTLP: 修复解析每个租户默认 OTLP 配置的问题 ( #12836) ( 7cc9a93)。
- operator: 向 ruler 模板添加 alertmanager 客户端配置 ( #13182) ( 6148c37)。
- operator: 将 golang builder 升级到 1.21.9 ( #12503) ( f680ee0)。
- operator: 配置 Loki 为 S3 AWS 端点使用虚拟主机风格的 URL ( #12469) ( 0084262)。
- operator: 改进 schema version 的 API 文档 ( #13122) ( 3a9f50f)。
- operator: 对 replay memory ceiling 使用最小值 ( #13066) ( 4f3ed77)。
- 优化常规初始化 ( #12926) ( a46d14f)。
- OTel: 将 500 错误映射到 503 ( #13173) ( b31e04e)。
- packaging: 在 Loki 和 Promtail 的 systemd unit 文件中要求在线网络 ( #12741) ( 57f78b5)。
- 修复 ingester 响应为 nil 时发生的 panic ( #12946) ( 3cc28aa)。
- Promtail: Promtail 竞态条件修复 ( #12656) ( 4e04d07)。
- Promtail: 配置重新加载后清理从日志生成的指标。( #11882) ( 39a7181)。
- Promtail: 修复 Promtail 配置重新加载无限期卡住的错误 ( #12795) ( 4d761ac)。
- Promtail: 修复 syslog 传输中的 UDP 接收器 ( #10708) ( a00f1f1)。
- Promtail: 处理日志被分成多个帧时的 Docker 日志 ( #12374) ( c0113db)。 这改变了当前 Promtail 的行为。Loki 默认
max_line_size
为 256kb,但此修复后,如果 Promtail 中的max_line_size
配置有值,Docker 服务发现现在将遵循该配置,否则将使用 Loki 默认的 256kb。 - querier: 为“受限”查询 roundtripper 添加重试中间件 ( #13161) ( bb864b3)。
- query sharding: 使用现有的 binop mapper 泛化 avg -> sum/count 分片 ( #12599) ( 11e7687)。
- regression: 回退 grafana/loki #13039 以防止 use-after-free 损坏 ( #13162) ( 41c5ee2)。
- spans: 修正了几个 span 的提前关闭问题 ( #12887) ( 93aaf29)。
- stores: 当
From==Through
和From==start
时,不为 store 过滤掉 chunks ( #13117) ( d9cc513)。 - structured metadata: 为 symbolizer 添加 copyString 函数以避免内存驻留 ( #13146) ( 86b119a)。
- 临时从 alloy 切换到 alloy dev ( #13062) ( 7ffe0fb)。
- 更新构建镜像到 0.33.2,修复了 Promtail Windows DNS 解析的错误 ( #12732) ( 759f42d)。
- 更新所有 dockerfile 到 go1.22 ( #12708) ( 71a8f2c)。
- 在警告消息中使用正确的配置名称 ( #12114) ( 4a05964)。
- workflows: 在 GitHub workflow 中使用一个中间环境变量 ( #12905) ( 772616c)。
- workflows: 不要在 fork 上运行指标收集器 ( #12687) ( 7253444)。