Grafana Mimir 术语表深度解析:Blocks storage、Hash ring、WAL 等核心概念全解
时序数据库后端数据存储可观测性云原生【免费下载链接】mimirGrafana Mimir provides horizontally scalable, highly available, multi-tenant, long-term storage for Prometheus.项目地址https://gitcode.com/gh_mirrors/mimir/mimir点击查看免费下载Grafana Mimir 是一套为 Prometheus 提供水平可扩展、高可用、多租户长期存储的时序数据库系统。本文以官方 Glossary术语表为骨架逐条拆解 Blocks storage、Chunk、Churn、Hash ring、Memberlist、HA tracker、WAL 等核心术语的准确定义并结合仓库源码与配置项给出底层实现依据帮助读者快速建立对 Mimir 数据模型与分布式架构的整体认知。为什么需要一份术语表Grafana Mimir 的文档、配置和源码中频繁出现一系列高度领域化的术语例如block、chunk、ring、WAL、tenant。这些术语之间往往存在衍生与互指关系例如 Ring 指向 Hash ringOrg 与 User 都指向 Tenant。对于刚接触 Mimir 的开发者而言准确理解这些概念是读懂架构图、排查分布式读写问题、解读告警与日志的前提。本文整理自 Mimir 官方 Glossary见 docs/sources/mimir/references/glossary.md并对每个术语补充了当前仓库中可验证的源码与配置依据力求一词一义、一词一证。Blocks storage块存储Blocks storage 是 Mimir 基于 Prometheus TSDB 构建的存储引擎。Mimir 将时序数据以 Prometheus 原生 TSDB 的 block数据块形式写入对象存储支持的后端包括AWS S3Google Cloud StorageGCSAzure Blob StorageOpenStack Object StorageSwift从源码结构看Mimir 的 ingest 侧直接依赖github.com/prometheus/prometheus/tsdb见 pkg/ingester/ingester.go 第 33 行的 import而对象存储相关的 bucket 抽象集中在 pkg/storage/bucket 目录存储配置项则定义在 pkg/storage/tsdb/config.go。这意味着 Mimir 并没有另起炉灶发明存储格式而是复用 Prometheus 久经生产验证的 block 格式将其从单机本地磁盘扩展到分布式对象存储。Chunk块Chunk 是包含一条 series序列的编码后时间戳-值timestamp-value对的对象。它是比 block 更细粒度的数据组织单位block是 TSDB 落盘/上传对象存储的目录级单元包含元数据、索引与多个 chunk 文件chunk则是 block 内部按序列组织、经过编码压缩的时间戳-值批量数据。写入路径上ingester 先在内存 TSDB head 中积累 chunk待达到压缩条件后固化到 block 中查询时 store-gateway 负责从 block 中读取并解压相关 chunk。因此 chunk 编码格式例如 float chunk encoding甚至被作为租户级限流/覆盖项暴露出来详见 pkg/util/validation/exporter/exporter.go 中的float_chunk_encoding相关逻辑。Churn流失/序列更替Churn 描述 series 进入 idle空闲状态的频率。一条 series 在被监控目标停止导出后即变为 idle典型场景是被监控的进程或节点被终止。Churn 之所以重要是因为它直接决定了时序数据量高 churn 意味着需要跟踪、索引和查询的 series 数量增长更快内存压力ingester 需要为不断新增的 series 维护索引与样本缓冲区存储成本store-gateway 需要加载更多 block 元数据来响应查询。Mimir 通过 pkg/ingester/activeseries 等模块跟踪活跃 series并依靠 TSDB head 的闲置压缩见下文 Flushing及时收敛失效数据的内存占用。Component组件Grafana Mimir 由多个组件component组成每个组件为系统提供一项特定功能。官方术语表列出的核心组件包括组件职责定位仓库对应目录Compactor压缩、去重、合并存储桶中的 blockpkg/compactorDistributor校验数据、对写入进行分片与复制pkg/distributorIngester接收写入在内存中积累数据并周期落盘pkg/ingesterQuery-frontend查询前端负责拆分、缓存与排队查询pkg/frontendQuery-scheduler调度查询请求到 query-frontendpkg/schedulerStore-gateway提供对长期存储中 block 的查询访问pkg/storegatewayAlertmanager可选多租户告警管理pkg/alertmanagerRuler可选周期评估告警/记录规则pkg/ruler组件既可按微服务模式独立部署也可按单进程模式monolithic mode合并运行开发环境示例见 development/mimir-monolithic-mode 下的 docker-compose 配置。Flushing刷盘Flushing 是 ingester 将时序数据从内存卸载offload并写入长期存储的操作。它是 Mimir 写入路径上内存 → 对象存储的关键转换环节。与 Flushing 相关的配置集中在 pkg/storage/tsdb/config.go 的 TSDBConfig 中blocks-storage.tsdb.head-compaction-idle-timeout默认1hTSDB head 闲置该时长后触发压缩compaction并附加最多 25% 的抖动以避免所有 ingester 同时压缩blocks-storage.tsdb.flush-blocks-on-shutdown默认false关闭时是否将未完成的 block 刷到存储若为false重启后会复用未完成的 block 而非立即上传blocks-storage.tsdb.wal-compression-enabled默认false是否对 TSDB WAL 进行压缩详见 WAL 一节。在 pkg/ingester/ingester.go 中ingester 的 lifecycler 会携带cfg.BlocksStorageConfig.TSDB.FlushBlocksOnShutdown与i.Flush回调从而在实例退出时协调刷盘动作保证数据不丢失。Gossip流言协议Gossip 是一种让组件之间无需集中式 key-value store 即可协调的协议。在 Mimir 中Gossip 被用于集群成员管理节点故障检测hash ring 状态在节点间的传播。Mimir 使用的 Gossip 协议具体实现是Memberlist见下节它允许在不部署 Consul/etcd 的情况下仅凭节点间相互通信维护一致的集群状态视图这对单二进制部署尤其友好。HA tracker高可用跟踪器HA tracker 是 Grafana Mimir distributor 的一项功能用于对两台及以上、配置为抓取相同目标的 Prometheus 服务器所上报的时序进行去重。它是 Prometheus 高可用HA双写场景的核心组件。HA tracker 的实现位于 pkg/distributor/ha_tracker.go关键配置与行为通过distributor.ha-tracker.enable对应HATrackerConfig.EnableHATracker启用需要 Prometheus 端附加 HA 专用标签cluster 与 replica集群内部通过选举election决定当前接受哪个 replica 的样本其他 replica 的样本被丢弃选出的 replica 状态通过elected_replica_status等指标对外暴露其中enable-elected-replica-metric默认关闭以避免高基数指标见 pkg/distributor/ha_tracker.go 中EnableElectedReplicaMetric的注释。值得注意的默认值HA tracker 的 KVStore 后端在未显式配置时默认设置为memberlist见HATrackerConfig.RegisterFlags中 Set the default to memberlist before registering flags 的注释支持的取值包括 consul、etcd、inmemory、memberlist、multi其中 memberlist 为官方推荐。Hash ring哈希环Hash ring 是 Mimir 用于分片sharding、复制replication与服务发现service discovery的分布式数据结构。组件通过 key-value store 或 Gossip 共享 hash ring 状态。底层机制依据 vendor/github.com/grafana/dskit/ring 的 dskit ring 实现Token 分配每个实例在环上认领若干 token默认通过RandomTokenGenerator生成见 basic_lifecycler.go 的注释token 将环划分为多个区间键到实例映射对每个数据键如 series 的 tenant ID 与 label 集合计算哈希得到 key再从 key 位置顺时针查找 tokenfindInstancesForKey见 ring.go依次收集 token 对应的实例形成副本集合复制与容错ReplicationStrategy.Filter见 replication_strategy.go基于minSuccess (replicationFactor / 2) 1的多数派quorum要求过滤心跳超时的病态实例并计算可容忍的最大失败数MaxErrors心跳健康检查实例通过BasicLifecycler定期向 KV store 写心跳读侧用HeartbeatTimeout判定实例是否健康区域感知zone awareness启用后副本集合会尽量跨不同可用区availability zone分布findInstancesForKey中按 zone 跟踪已查找/已命中实例数见 ring.go分片减容Shuffle shardingShuffleShard见 ring.go为每个租户从完整环中挑选固定大小的子环减少故障爆炸半径。写入路径上distributor 对每条 series 计算tokenForLabels(userID, labels)见 pkg/distributor/distributor.go通过 hash ring 确定由哪些 ingester 接收该 series。Key-value store键值存储Key-value store 是一种将键与值关联的数据库。在 Mimir 中它是 hash ring 状态与 HA tracker 选举状态的共享后端支持 consul、etcd、inmemory、memberlist、multi 等后端multi 表示多个后端组合。选择要点memberlist去中心化基于 Gossip无需额外基础设施适合中小规模与单二进制部署consul / etcd集中式 KV store适合大规模集群或已有此类基础设施的环境。成员管理与 Gossip 协议的具体实现来自 dskit 库的 vendor/github.com/grafana/dskit/kv/memberlist其中KVInitService见 kv_init_service.go负责在首次调用时初始化并启动 memberlist KV若 KV 服务失败会将错误上报给上层服务管理框架。MemberlistMemberlist 使用 Gossip 管理集群成员关系与成员故障检测。它源自 HashiCorp 的 memberlist 库被 dskit 封装为可承载 KV 数据的广播与合并机制见 vendor/github.com/grafana/dskit/kv/memberlist/memberlist_client.go 与 broadcast.go。在 Mimir 中memberlist 承担两类角色KV 后端作为 hash ring、HA tracker 等共享状态的存储与传播通道集群通信层节点间通过 TCP/UDP 相互探测存活状态当节点加入或离开时其他节点通过 Gossip 在秒级内感知变化。Mimir 的成员管理配置集中在-memberlist.*前缀下见 pkg/mimir/mimir.go 中的默认值如memberlist.packet-dial-timeout: 500ms、memberlist.max-concurrent-writes: 5等单二进制多实例部署可直接借助 memberlist 完成自动发现无需额外依赖。Org / User / TenantOrgOrganisation与 User 均指代同一个概念Tenant租户。在 Mimir 中tenant 与 Prometheus/Cortex 生态中的 Org、User 是历史命名差异语义完全相同。RingRing 即 Hash ring详见上文Hash ring小节。Sample样本Sample 是时间序列中单个带时间戳的值。以官方术语表给出的序列node_cpu_seconds_total{instance10.0.0.1,modesystem}为例其样本流可能如下# Display format: value timestamp 11775 1603812134 11790 1603812149 11805 1603812164 11819 1603812179 11834 1603812194每个样本由一个值如11775和一个 Unix 秒级时间戳如1603812134构成是 Mimir 存储与查询处理的最小数据单元。Series序列Series 是隶属于同一指标metric、且具有相同标签键值对集合的样本流。给定单一指标node_cpu_seconds_total可以存在多条 series每条 series 由指标名与唯一标签组合唯一标识node_cpu_seconds_total{instance10.0.0.1,modesystem} node_cpu_seconds_total{instance10.0.0.1,modeuser} node_cpu_seconds_total{instance10.0.0.2,modesystem} node_cpu_seconds_total{instance10.0.0.2,modeuser}series 是 Mimir 中标签索引、分片sharding、去重deduplication与计费cost attribution的基本单位。Mimir 的连续测试continuous test模块会在运行时写入并查询固定 series 集合以验证端到端正确性相关实现见 pkg/continuoustest。Tenant租户Tenant 是写入并查询 Mimir 的一组 series 的所有者。Mimir 对不同租户的 series 与告警进行隔离。多租户是 Mimir 的核心能力之一数据隔离每个租户的数据在存储桶中以租户 ID 为前缀分目录存放限流与配额每个租户可配置独立的 series 数量上限、活跃 series 上限、查询超时等限制见 pkg/util/validation 与 overrides exporter 的 per-tenant 指标导出逻辑认证授权租户通过请求中的身份信息如X-Scope-OrgID头部或认证中间件被识别Mimir 的 tenant 解析逻辑见 pkg/util/tenant含tenant.TenantIDs等辅助函数。Time series时间序列Time series 即 Series二者等价详见上文Series小节。Write-ahead logWAL预写日志WAL 是 ingester 存储在磁盘上的追加式append-only日志用于在进程重启后恢复其内存状态。它的设计目标与 Prometheus TSDB WAL 一致写入路径先把样本追加到 WAL再更新内存中的 TSDB head若 ingester 进程崩溃或重启内存数据丢失后通过回放replayWAL 恢复WAL 中的记录可压缩blocks-storage.tsdb.wal-compression-enabled默认false以减少磁盘占用与回放开销。相关源码佐证ingester 启动路径中明确在回放 WAL 期间不施加内存 series 限制见 pkg/ingester/ingester_http.go 的注释WAL 回放并发度是可测试的配置行为测试用例见 pkg/ingester/ingester_test.go 中expectedTSDBWALReplayConcurrency相关断言因此重启不丢已确认数据的持久性保障由 WAL Flushing落块共同承担。术语关系速查术语关联关系Org / User→ TenantRing→ Hash ringTime series→ SeriesMemberlist基于 Gossip可充当 Key-value store 后端Hash ring依赖 Key-value store 或 Gossip 共享状态HA tracker依赖 Key-value store推荐 memberlist记录选举状态Block / ChunkChunk 属于 Block 内部更细粒度的数据组织单元结语这份术语表覆盖了 Mimir 从数据模型Sample/Series/Chunk/Block、写入与持久化WAL/Flushing、分布式协调Hash ring/Key-value store/Gossip/Memberlist到多租户Tenant与高可用HA tracker的完整技术栈。建议读者在阅读架构文档、编写配置或排查告警时随时回到本文核对术语含义结合上文给出的源码与配置路径可以进一步深入 Mimir 的实现细节。相关概念在官方文档体系中的完整阐述可从 docs/sources/mimir/references/glossary.md 出发继续查阅对应的架构专题文档。赞分享时序数据库后端数据存储可观测性云原生【免费下载链接】mimirGrafana Mimir provides horizontally scalable, highly available, multi-tenant, long-term storage for Prometheus.项目地址https://gitcode.com/gh_mirrors/mimir/mimir点击查看免费下载相关推荐Cortex 术语表深度解读Series、Hash Ring、WAL 等核心概念与源码印证Cortex 术语表深度解读Series、Hash Ring、WAL 等核心概念与源码印证 导读 Cortex 是一个水平可扩展、高可用、多租户的长期 Pr可观测性时序数据库后端指标监控dep 术语表精讲Atom、Deduction、Solver 与 Sync 等核心概念全解析dep 术语表精讲Atom、Deduction、Solver 与 Sync 等核心概念全解析 本篇技术指南以 depGo dependency manageEASTL 术语表解析深入理解EASTL核心概念EASTL 术语表解析深入理解EASTL核心概念 前言 EASTLElectronic Arts Standard Template Library是游戏开发工具创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

AI率从92%降到0%!六个步骤彻底“去AI化”改写文本

AI率从92%降到0%!六个步骤彻底“去AI化”改写文本

“AI率92%”这个数字,我太熟了。 前阵子我用AI辅助写了篇文章,初稿检测出来AI率高达92%,基本就是一台无情的打字机。后来我花了一晚上打磨,再查的时候,AI率直接压到了0%,而且查重也顺利通过。 整个过程&…

2026/10/15 16:41:51 阅读更多 →
JSON实战样本:6类可直接运行的生产级JSON示例

JSON实战样本:6类可直接运行的生产级JSON示例

简介:本资源是一份面向初学者与Web开发者的JSON格式实践学习包,聚焦数据交换核心技能的掌握与工程化应用。内容以典型JSON结构示例为切入点,覆盖键值对、嵌套对象、数组、布尔与null等基础语法,并配套Java环境下的完整解析与生成实…

2026/10/15 16:41:51 阅读更多 →
用友UAP开发NC65主子表单据:向导链路与避坑指南

用友UAP开发NC65主子表单据:向导链路与避坑指南

简介:面向用友UAP NC65开发者的主子表单据开发资源包,提供向导式开发全流程的详细步骤讲解,帮助刚接触UAP平台的新手理解主表、子表、外键关联与一对多数据模型,并能在表单设计中完成控件绑定、查询条件设置、子表联动刷新以及增删…

2026/10/15 16:41:51 阅读更多 →

最新新闻

Seldon Core 2 实战:用 Pipeline 把 CIFAR10 图像分类器与异常检测、漂移监控打包为生产级推理服务

Seldon Core 2 实战:用 Pipeline 把 CIFAR10 图像分类器与异常检测、漂移监控打包为生产级推理服务

人工智能大模型MLOpsLLMOps模型推理服务云原生后端 【免费下载链接】seldon-core An MLOps framework to package, deploy, monitor and manage thousands of production machine learning models 项目地址: https://gitcode.com/gh_mirrors/se/seldon-core 点击查看…

2026/10/15 17:32:52 阅读更多 →
树形DP实战:将功补过类问题的状态设计与转移方程

树形DP实战:将功补过类问题的状态设计与转移方程

1. 从标题拆解这道题到底在考什么 “将功补过”配上“树形DP”,这个组合一出来,有经验的选手基本就能嗅到味道了。这不是一道单纯的树上背包,也不是简单的最大独立集,它把“功”和“过”这两个对立的概念同时挂在树结构上&#xf…

2026/10/15 17:32:52 阅读更多 →
海波龙(Oracle 产品)实施商怎么选?7个评估维度+服务商能力对比

海波龙(Oracle 产品)实施商怎么选?7个评估维度+服务商能力对比

海波龙(Oracle 产品)实施商怎么选?7个评估维度服务商能力对比海波龙(Oracle 产品)选型时,企业往往把注意力放在产品模块和功能演示上,等到项目进入第二年,真正决定体验的却是当初挑的…

2026/10/15 17:32:52 阅读更多 →
STM32F103C8T6驱动SG90舵机:PWM源码与调试避坑指南

STM32F103C8T6驱动SG90舵机:PWM源码与调试避坑指南

简介:这份源码面向嵌入式初学者与需要快速验证舵机控制的开发者,围绕STM32F103C8T6如何驱动SG90舵机展开,解决从PWM信号生成到角度精确控制的实际问题。资源包共4个文件,包含2个C源文件、1个头文件与1张舵机接口示意图&#xff0c…

2026/10/15 17:32:52 阅读更多 →
ZLG Python二次开发实战:CAN总线数据采集与避坑指南

ZLG Python二次开发实战:CAN总线数据采集与避坑指南

简介:这份资源是面向嵌入式与物联网开发者的ZLG DTU系列Python二次开发示例包,重点围绕DTU 200UWGR及CAN-DTU系列无线数据传输单元,帮助解决官方demo在特定环境下无法直接运行、功能不足等问题。包内共124个文件,以98个xml配置与接…

2026/10/15 17:32:52 阅读更多 →
herdr-gpui Teleport 深度解析:带着未提交改动、运行中进程和 Agent 会话跨主机迁移工作树

herdr-gpui Teleport 深度解析:带着未提交改动、运行中进程和 Agent 会话跨主机迁移工作树

【免费下载链接】herdr-gpui Native client for Herdr on macOS, Linux, and Windows, built with Rust and GPUI. View terminal sessions, workspaces, Git worktrees, and agent activity through your local Herdr daemon. 项目地址: https://gitcode.com/gh_mi…

2026/10/15 17:31:51 阅读更多 →

日新闻

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

1. 为什么选择容器化方式部署 LoRa 网络服务LoRa 物联网项目落地时,网络服务器是整个链路的核心枢纽。它负责接收网关上报的数据包、完成去重与解密、再把有效载荷分发给上层应用。早期大家习惯把网络服务器直接装在物理机上,依赖一堆系统库和特定版本的…

2026/10/15 0:00:46 阅读更多 →
共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

1. 共享推理服务里,扩缩容到底难在哪做过大模型推理服务部署的人,大概都经历过这样的场景:一个团队共用一套推理集群,A 业务跑的是 7B 的小模型,B 业务跑的是 72B 的大模型,C 业务白天流量高、晚上几乎归零…

2026/10/15 0:00:46 阅读更多 →
Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

1. 引子:一次内核恐慌引发的追查先从一个真实场景说起。某次我给一台老旧的嵌入式设备折腾系统裁减,为了把启动时间压进两秒以内,我手贱地把一串自认为“没用”的 systemd 服务给 disable 了,其中就包括systemd-remount-fs.servic…

2026/10/15 0:00:46 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/15 16:18:54 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/14 16:30:29 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/15 13:48:15 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 0:14:36 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 9:49:14 阅读更多 →