ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Loki 3.3 版本发布详解:Bloom 查询加速重构、approx_topk 概率聚合与 Helm/Operator 生态升级

Loki 3.3 版本发布详解:Bloom 查询加速重构、approx_topk 概率聚合与 Helm/Operator 生态升级 Loki 3.3 版本发布详解Bloom 查询加速重构、approx_topk 概率聚合与 Helm/Operator 生态升级【免费下载链接】lokiLike Prometheus, but for logs.项目地址: https://gitcode.com/GitHub_Trending/lok/lokiLoki 3.3 是 Grafana Loki 在 2024 年 11 月发布的重大版本其核心亮点是 Bloom 过滤器功能从全文检索转向结构化元数据索引的重大架构调整、LogQL 新增基于概率数据结构的approx_topk聚合函数以及 Helm Chart、Mixins、Operator 三大生态组件的系统性增强。本文以仓库中的 v3.3 发布说明 为主线结合 pkg/bloombuild、pkg/logql/count_min_sketch.go、pkg/pattern/ingester.go 等源码实现带你逐项拆解本版本的特性、破坏性变更与升级注意事项读完即可准确评估升级影响并上手新能力。版本概览Grafana Labs 与 Loki 团队于2024-11-19正式发布 Loki 3.3.0随后在 3.3.x 分支上持续发布了 3.3.12024-12-04、3.3.22024-12-18、3.3.32025-02-14与 3.3.42025-02-14等补丁版本。完整变更清单可查阅仓库根目录的 CHANGELOG。本版本的功能焦点包括Bloom 过滤器查询加速实验特性——从自由文本检索转向结构化元数据索引并用 Bloom Planner / Bloom Builder 取代 Bloom CompactorExplore Logs——Grafana v11.3 起插件默认安装配套增强 pattern ingester 的追踪、行长度限制与按租户指标聚合LogQL 新增approx_topk——基于 Count-Min Sketch 的概率近似 Top K 聚合Helm、Mixins、Operator——三大部署/可观测性生态组件的批量改进大量涉及存储、distributor、ingester、promtail、logcli 的增强与缺陷修复。核心特性与增强Bloom 查询加速从全文检索到结构化元数据索引实验性自 Loki 3.0 引入的 Bloom 过滤器功能在 3.3 中仍保持实验状态但实现方向发生了重大转变从自由文本free-text搜索转向利用结构化元数据structured metadata的强大能力#14061。这一调整顺应了可观测性技术栈中 OpenTelemetry 采纳率不断上升的趋势——OTel 数据天然携带丰富的结构化元数据Bloom 索引这些元数据可以显著提升查询加速的效果。与方向调整配套的是组件架构的重构#13997Bloom Compactor 组件被移除由两个新组件取代Bloom Planner——负责规划 bloom 构建任务从源码结构看pkg/bloombuild/planner 下包含 20 个 Go 文件实现了任务调度与策略抽象发布说明中提及的 disk-backed queue、任务计算策略接口等改进均落在此组件Bloom Builder——负责实际执行构建pkg/bloombuild/builder 下包含 8 个 Go 文件Bloom block 引入新的块模式schemaV3#14038这是本版本的破坏性变更之一旧 schema 生成的 block 无法直接兼容。从仓库配置入口 pkg/bloombuild/config.go 可以推断bloombuild 相关配置与 Bloom Planner / Builder 的启用、任务队列、以及 TSDB 统计驱动的规划策略#14547 引入基于 chunk 大小 TSDB 统计的新 bloom 规划紧密相关。围绕 Bloom 的其余增强还包括为 bloom-planner 增加磁盘支持的队列disk-backed queuebackport k227bloom 中只写入 key 以及 keyvalue#14686减少索引体积不向 offsets 添加空 bloom#14577将任务计算抽取为策略接口#13690不再压缩.tar归档的 bloom block#14159简化读写路径规划时跳过多租户 TSDB、为ForSeries拷贝 chunks、planner 断开时不重启 builder、排除 label 名属于 series labels 的 label 过滤等大量健壮性修复见 3.3.0 的 bug fixes 列表。Explore LogsGrafana 默认插件与 pattern ingester 增强从 Grafana v11.3 开始Explore Logs 应用的插件随 Grafana 默认安装。为支撑该应用本版本对底层 pattern ingester 做了一系列增强pattern ingester 追踪tracing增强#14707便于排查模式检测链路将 patterns 行长度限制应用于 json message keys#14296新增配置项max-allowed-line-length用于限制参与模式检测的日志行最大长度#14070。源码证据在 pkg/pattern/ingester.go 中清晰可见MaxAllowedLineLength int yaml:max_allowed_line_length,omitempty doc:descriptionThe maximum length of log lines that can be used for pattern detection.其命令行参数为-pattern-ingester.max-allowed-line-length默认值来自 pkg/pattern/drain/drain.go 中的drain.DefaultConfig().MaxAllowedLineLength即3000 字节。该长度限制会作用于 JSON、logfmt、标点三类 tokenizer见 drain.go确保超长行不会拖垮模式检测。此外metric aggregation 迁移为按租户per-tenant配置#14709配置入口同样位于 pkg/pattern/ingester.go 的MetricAggregation aggregation.Config字段3.3.2 还回移backport了在 loki-local-config.yaml 中启用 metric aggregation 的改动。LogQL新增概率聚合函数 approx_topk本版本为 LogQL 新增了approx_topk函数#14243它采用概率技术返回输入中最频繁值的近似结果及近似频次。适用场景等价的topk查询触达最大 series 上限或超时需要更快得到响应、且可以接受近似答案的场景。从源码看approx_topk的实现建立在Count-Min SketchCMS概率数据结构之上语法层面操作符类型定义在 pkg/logql/syntax/ast.goOpTypeApproxTopK approx_topk并已接入语法解析器syntax.y与查询优化/分片路径pkg/logql/optimize.go、pkg/logql/downstream.go核心实现位于 pkg/logql/count_min_sketch.goCountMinSketchVectorcount_min_sketch.go用于跟踪一组指标标签值对的计数或求和其精度上界由epsilon与delta决定HeapCountMinSketchVectorcount_min_sketch.go在 sketch 之上叠加一个小顶堆将维护的标签数量限制在maxLabels以内超出时弹出最小元素从而控制内存占用常量epsilon 0.0001、delta 0.01注释给出了直观的代价估算delta 取 0.01 时 sketch 体积约为27183 * 7 * 4 761,124字节取 0.05 时约为 543,660 字节内部使用xxhash对标签做哈希去重并内嵌 HyperLogLogHLL以支持去重计数向量可通过 protobuflogproto.CountMinSketchVector在组件间传输与合并Merge方法会合并底层 CMS 与 HLL 并做标签去重。需要特别留意的是从测试用例 pkg/logql/count_min_sketch_test.go 的错误信息可以确认approx_topk只支持 instant query瞬时查询approx_topk error: count min sketches are only supported on instant queriesHelm Chart一批可配置性改进Helm Chart 在 3.3 中收获了大量增强主要包括将 Chart 中的 Loki 版本更新到 3.2.0#14281用 bloom planner 与 builder 替换 bloom compactor#14003与核心架构调整保持一致新增配置能力配置client_max_body_size#12924为分布式模式下各组件添加额外的 service annotations#14131为 admin-api 与 enterprise-gateway 增加可配置的extraEnvFrom#14533新增kubeVersionOverride#14434memcached 增加persistence 选项#13619pattern-ingester statefulset 增加tolerations#13605允许为tokengen和provisioner设置 node attributes#14311更新 Helm Chart 以适配受限环境#14440支持singleBinary 模式下的 ruler sidecar#13572。Mixins监控与告警增强Loki mixins位于 production/loki-mixin在本版本有以下改进为 mixins 补上缺失的cluster 标签#12870仪表盘支持partition ingester#14498新增Loki compaction 未成功告警#14239通过参数化 recording/alert 规则允许覆盖部分标签#11495允许禁用 bloom 仪表盘#14177允许在 loki-operational 中隐藏未使用的行#13646将 SSD 的 read-resources 与 write-resources 仪表盘合并为同时包含 backend-resources 的一个仪表盘#13471。OperatorOTLP 与工程化升级Loki Operator 的更新集中在支持Loki OTLP limits 配置#13446与默认 OTLP attribute 配置#14410并提供 OTLP 配置用户指南#14620将 Loki operand 依次更新到 v3.1.1#14042与 v3.2.1#14526重命名 Loki API go module#14568——破坏性变更引入1x.pico 规格#14407为小规模部署提供更细粒度的资源档位项目布局迁移到kubebuilder go/v4#14447——破坏性变更仅对 OpenShift 声明FIPS 支持#14308。文档与教程文档侧新增或修订的内容包括AWS 上的 Helm 部署指南、Fluent Bit 教程、OpenTelemetry Collector 入门教程以及查询文档的改进——新增Query Best Practices主题、重组的Query Template主题、修订的LogQL Simulator对应仓库中的 cmd/logql-analyzer主题。其他改进api新增返回 detected field values 的端点#14350distributor通过 usageTracker 跟踪被丢弃数据#14081允许在 service name 检测之前记录 stream selector#14154使用 worker 池向 ingester 推送#14245ingester使用Partition Ring计算 owned streams#14282并实现 partition shuffle sharding#14304labels将app_name作为 service label#13660logcli新增gzip 压缩选项#14598logqlIP 过滤微优化#14072在 executing query 日志行中加入 query user 与 query source#14320promtailpush API 支持结构化元数据#14153querierdetected field 逻辑迁移到 query frontend#14212ruler启用基于 thanos-io/objstore 客户端包的 ruler store#11713storage为 S3ObjectExists增加重试#14062、实现IsRetryableErr#14174、引入ObjectExistsWithSizeAPI后演进为GetAttributes#14268/#14329、AWS/Azure/GCS 后端迁移到thanos.io/objstore#11221/#11315/#11132structured metadata在 rate limit 判定中纳入 structured_metadata 大小#14571。弃用Deprecations本版本延续了 Loki 3.0 清理历史遗留代码的思路主要弃用领域包括存储选项弃用包括BoltDB store的弃用配置选项弃用参见配置文档API 端点弃用参见 API 参考中的 deprecated endpoints 一节。此外发布说明还提示关注 Alloy 相关的 agent 弃用通告。完整的破坏性变更说明请查阅 Upgrade Guide。升级注意事项Upgrade Considerations升级前务必逐项核对以下BREAKING CHANGE影响面变更内容关联 PRblooms引入新的 block schemaV3旧 block 不兼容#14038blooms将 structured metadata 索引进 blooms#14061docker从 Promtail 镜像中移除wget#15101operator项目布局迁移到 kubebuilder go/v4#14447operator重命名 Loki API go module#14568operator提供默认 OTLP attribute 配置#14410前两条意味着任何使用 Bloom 查询加速实验特性的用户在升级后都需要按新 schema 重新构建索引建议在测试环境先行验证后再对生产执行。缺陷修复Bug Fixes3.3.42025-02-14迁移到Go 1.23.7#16681更新 jwt 与 oauth2 依赖#17021安全更新golang.org/x/cryptov0.35.0#16590、golang.org/x/oauth2v0.27.0#16591文档在 docker configuration.md 中说明布尔类型的可接受取值#16746。3.3.32025-02-14修正发布构建的 build info#15939/#16214CVE 更新#15645修正架构名拼写amr64 → arm64#15715等。3.3.22024-12-18安全回移golang.org/x/cryptov0.31.0#15394修复docker driver 构建#15478在loki-local-config.yaml中启用 metric aggregation#15319。3.3.12024-12-04破坏性变更从 Promtail 镜像移除wget#15101Docker 基础镜像从 base-nossl 迁移到static大部分镜像不再包含 glibc#15203Promtail 基础镜像由 Debian 切换为 Ubuntu修复严重安全问题#15195。3.3.02024-11-19初版修复数量庞大重点领域包括blooms修复 planner/builder 初始化 panic#14110、多租户 TSDB 规划跳过#14888、planner 断开不重启 builder#14922、排除属于 series labels 的 label 过滤#14661、chunks 拷贝#14864、策略日志与任务测试#14921、min/max table offsets 文档改进#14929等detected_fields传解析器时返回解析后的标签#14047空数组始终返回null#14112distributor启用时始终写入 detected_level 即使未知#14464kafka 启用时校验 partition ring#14303warning 级别检测#14444helm补充 AzurechunkDelimiter参数#14011、修复 memcached persistence 配置#14049、bloom 组件多项修复#14128等logql修复空数组索引导致的 json 解析 panic#14393JSON 提取值若为 JSON 对象不再 unescape#14499允许重命名结构化元数据标签#13955mixins修复 loki-resources-overview 面板布局#14178、retention 仪表盘指标名#14617等operatorOpenShift 规则缺 groupBy 标签#14279、禁用 service name 自动发现#14506、size-calculator 构建修复#14573/#14551等querierquantile/topk 查询统计传播#13831、detected fields 的_extracted逻辑修正#14064、指标与日志查询状态码修正#12102promtail修复配置反序列化#14408、azureeventhubs 无 time 字段消息解析#14218、校验 scrape_config job 名不允许重复#13719storageS3 拥塞控制启用时禁用客户端重试#14588、GetObject检查取消的 context#14420、更新 AWS storage 超时错误以适配 Go 1.23#14226等。小结与升级建议Loki 3.3 是一次方向上重定向 生态面扩围的版本Bloom 查询加速从全文检索转向结构化元数据并伴随 Planner/Builder 组件更替与 V3 block schema 落地approx_topk为高频 Top N 分析提供了内存可控、支持 instant query 的概率近似方案Helm、Mixins、Operator 的可配置性全面提升为大规模生产部署与受限环境适配铺平了道路。给读者的三条行动建议若已启用 Bloom 查询加速优先阅读 pkg/bloombuild/config.go 与 pkg/bloombuild/planner、pkg/bloombuild/builder 源码按 V3 schema 规划重建索引并留意 disk-backed queue 等新能力若使用 LogQL 聚合把高频的topk查询评估替换为approx_topk注意仅瞬时查询可用并参考 pkg/logql/count_min_sketch.go 理解其精度与内存特性升级前逐条对照上文的破坏性变更清单尤其关注 operator 的 module 重命名与 kubebuilder go/v4 迁移对现有 CR 编排的影响。【免费下载链接】lokiLike Prometheus, but for logs.项目地址: https://gitcode.com/GitHub_Trending/lok/loki创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表