首页/云/可观测性速查/Loki 架构与组件分工
日志平台52 条

Loki 架构与组件分工

Loki 只索引标签、内容压缩存块:distributor 校验分发、ingester 攒块下传、querier 查询、compactor 压缩清理;存储走对象存储。

可观测性速查云更新于 2026-10-13

Loki 架构是什么

Loki 是只索引标签、不索引日志正文的日志系统:写入路径由 distributor 校验并分发,ingester 在内存里攒块后周期性下传对象存储;读取路径由 querier 并行拉取索引与块内容,query-frontend 做查询拆分、排队与缓存。与 Elasticsearch 的核心差别就在这里——标签收敛查询范围,正文匹配靠暴力扫块加并行计算换成本,因此存储便宜,但模糊全文检索的代价高。

基本信息

适用平台Grafana Loki 2.x / 3.x,可单进程也可微服务拆分部署
数据真源对象存储(S3、MinIO、GCS 等),本地磁盘不是持久层
索引内容仅标签与块的元信息,正文压缩后存为块
查询入口HTTP 3100(读写同端口),前端组件做队列与缓存

典型使用场景

  • 成本敏感的日志集中:日志量大但检索以「按服务和标签筛 + 关键字」为主
  • 与 Grafana 生态联动:日志与指标、链路共享同一套数据源与看板
  • Kubernetes 容器日志采集:配合 Promtail 或采集 Agent 按标签落库
  • 多租户日志:用租户标识隔离不同团队的数据与配额
  • 长期留存:把冷数据留在对象存储,按保留周期自动压缩清理

组件分工与部署形态

组件分工与部署形态
distributor    → 校验限额、按标签哈希分发,拒绝超限请求
ingester       → 内存攒块,定时下传对象存储,查询时提供近实时数据
querier        → 并行查询索引与块,聚合、去重、排序后返回
query-frontend → 拆分查询、排队重试、结果缓存,减轻后端压力
compactor      → 压缩块、按保留策略清理过期数据

部署形态:单进程一体化(小规模与验证用)
          读、写、后端各自拆分(按负载独立扩展)

组件与常见瓶颈

组件关注指标瓶颈表现
distributor每秒写入量、被拒请求数超过限额时直接返回错误而不是排队
ingester内存中块数、下传延迟内存打满会触发重复下传与重启
querier查询并发、扫描块数模糊正则配大范围会拉满 CPU
compactor压缩任务积压积压时保留策略不生效,存储持续增长
对象存储请求延迟与错误率后端抖动直接放大为写入失败与查询超时
标签基数决定成败:标签只放低基数维度(服务、环境、级别),高基数信息(请求 ID、用户 ID)留在日志正文里,用检索条件过滤。
查询性能依赖并行度与块索引结构;同一条查询在 1 小时窗口和 7 天窗口的代价差异是数量级级别的,排障先从窄窗口开始定位。

易错点

  • 单进程一体化模式扩展维度少,规模上去后仍要重构成微服务形态,早期就应规划存储与网络
  • 把高基数字段放进标签会制造海量流,写入与索引同时恶化,这是 Loki 最常见的容量事故
  • 误以为本地磁盘是持久层,节点故障后数据不可恢复,必须确认对象存储与保留策略已就位
  • 只配保留策略不部署 compactor 时,过期数据不会被真正清理,存储成本持续上涨

数据来源与参考

  • Grafana 官方文档 · Loki architecture
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌