菜单
文档breadcrumb arrow Grafana Mimirbreadcrumb arrow 开始使用breadcrumb arrow Grafana Mimir 架构
开源

Grafana Mimir 架构

Grafana Mimir 采用微服务架构。该系统包含多个可水平扩展的微服务,可以独立并行运行。Grafana Mimir 微服务称为组件。

Grafana Mimir 的设计将所有组件的代码编译成一个单独的二进制文件。-target 参数控制该单一二进制文件作为哪个(或哪些)组件运行。

为了方便入门,您可以在单体模式下运行 Grafana Mimir,所有组件在一个进程中同时运行;或者在读写模式下运行,将组件分组为后端路径。

更多信息,请参阅部署模式

Grafana Mimir 组件

大多数组件是无状态的,不需要在进程重启之间持久化任何数据。一些组件是有状态的,需要依赖非易失性存储来防止进程重启时数据丢失。有关每个组件的详细信息,请参阅组件中的相应页面。

写入路径

Architecture of Grafana Mimir’s write path

Ingester 接收来自 distributor 的传入样本。每个推送请求都属于一个租户,ingester 将接收到的样本附加到存储在本地磁盘上的特定租户 TSDB 中。接收到的样本既保存在内存中,也写入到预写日志 (WAL)。如果 ingester 意外终止,WAL 可以帮助恢复内存中的序列。当接收到第一个样本时,会在每个 ingester 中为该租户延迟创建特定租户的 TSDB。

当创建新的 TSDB 块时,内存中的样本会定期刷新到磁盘,并且 WAL 会被截断。默认情况下,这每两个小时发生一次。每个新创建的块都会上传到长期存储中,并保留在 ingester 中,直到配置的 -blocks-storage.tsdb.retention-period 过期。这使得 querierstore-gateway 有足够的时间在存储中发现新块并下载其 index-header。

为了有效利用 WAL,并在 ingester 意外终止时能够恢复内存中的序列,请将 WAL 存储到可以抵御 ingester 故障的持久磁盘上。例如,在云中运行时,包括 AWS EBS 卷或 GCP 持久磁盘。如果在 Kubernetes 中运行 Grafana Mimir 集群,可以使用 StatefulSet 和 ingester 的持久卷声明。WAL 存储在文件系统上的位置与本地 TSDB 块(从头部压缩而来)存储的位置相同。WAL 和本地 TSDB 块的位置不能分离。

更多信息,请参阅块上传时间线Ingester

序列分片和复制

默认情况下,每个时间序列被复制到三个 ingester,每个 ingester 将自己的块写入长期存储。 Compactor 将来自多个 ingester 的块合并成一个块,并删除重复的样本。块压缩显著降低了存储利用率。更多信息,请参阅Compactor生产环境提示

读取路径

Architecture of Grafana Mimir’s read path

传入 Grafana Mimir 的查询到达 query-frontend。然后,query-frontend 会将较长范围的查询拆分成多个较小的查询。

接下来,query-frontend 会检查结果缓存。如果查询结果已缓存,query-frontend 会返回缓存的结果。无法从结果缓存中回答的查询会被放入 query-frontend 的内存队列中。

注意

如果您运行可选的 query-scheduler 组件,则由 query-scheduler 而非 query-frontend 维护队列。

querier 作为工作进程,从队列中拉取查询。

querier 连接到 store-gateway 和 ingester,以获取执行查询所需的所有数据。有关查询如何执行的更多信息,请参阅querier

querier 执行查询后,将结果返回给 query-frontend 进行聚合。然后,query-frontend 将聚合结果返回给客户端。

Prometheus 的作用

Prometheus 实例从各种目标中抓取样本,并使用 Prometheus 的远程写入 API 将其推送到 Grafana Mimir。远程写入 API 在 HTTP PUT 请求的正文中发出批量Snappy压缩的Protocol Buffer消息。

Mimir 要求每个 HTTP 请求都包含一个指定请求租户 ID 的标头。请求身份验证和授权由外部反向代理处理。

传入的样本(来自 Prometheus 的写入)由 distributor 处理,传入的读取(PromQL 查询)由 query frontend 处理。

长期存储

Grafana Mimir 的存储格式基于Prometheus TSDB 存储。Grafana Mimir 存储格式将每个租户的时间序列存储到自己的 TSDB 中,并将其持久化到磁盘块中。默认情况下,每个块具有两小时范围。每个磁盘块目录包含一个索引文件、一个包含元数据的文件以及时间序列块。

TSDB 块文件包含多个序列的样本。块内的序列通过块内索引进行索引,该索引将指标名称和标签都索引到块文件中的时间序列。每个序列的样本都组织在块中,这些块表示存储样本的特定时间范围。块的长度可能会因特定的配置选项和摄取速率而异,通常每个块存储约 120 个样本。

Grafana Mimir 需要以下任何一种对象存储来存储块文件:

更多信息,请参阅配置对象存储配置指标存储保留