跳至主要内容

Grafana Mimir — 架構

metrics · TSDB blocks · 水平擴展

寫入路徑寫入 · 寫出讀取路徑查詢 · 取得背景 · 儲存壓實 · rules · buckets虛線 = 流量 · 會流動 寫入: remote_write :8080 /api/v1/push查詢: PromQL · 經 query-frontendGRAFANA MIMIRWRITE PATHREAD PATHBACKGROUNDdistributoringester×3 RFquery-frontendquerierstore-gatewaycompactorruler→ alertmanagerbucket: mimir-blocksTSDB blocks · 每 2h 寫出寫出 blocks讀取 blocks壓實 · 保留期

寫入路徑

Mimir distributor

remote_write 的無狀態入口。驗證、套用每 tenant 限制,並透過 hash ring 把 series 分片到 ingesters。

  • 對複製的 Prometheus/Alloy 配對做 HA 去重
  • 每 tenant 的速率與 series 限制
  • 每個 series 複製到 3 個 ingesters(RF=3)
protocolin :8080 /api/v1/push · out gRPC :9095 → ingesters
tenancy讀取 X-Scope-OrgID;套用每 tenant 寫入限制

Mimir ingester

有狀態;近期 series 放在 WAL 保護的記憶體 TSDB head,之後把 2 小時的 blocks 送到物件儲存。

  • StatefulSet 搭配持久卷(WAL)
  • 向 queriers 提供最近約 12h 的資料
  • 每 2h 將 TSDB blocks 寫出/上傳到 mimir-blocks bucket
protocolgRPC :9095 · uploads blocks → S3/GCS
tenancy記憶體中每個 tenant 一個 TSDB

讀取路徑

Mimir query-frontend

所有 PromQL 讀取的前端:把長區間查詢按天切分、快取結果,並在 tenants 之間公平排隊。

  • 查詢切分 + 結果快取(memcached)
  • 重試並分片重的查詢
  • Grafana 的 Prometheus 資料來源指向這裡
protocolin :8080 /prometheus/api/v1/* · out → queriers
tenancy每 tenant 的查詢佇列公平性

Mimir querier

無狀態 PromQL 引擎。從 ingesters 取近期資料、經 store-gateways 取歷史 blocks,然後合併。

  • 向 ingesters 扇出取得 head block
  • 更舊的資料一律走 store-gateways
  • 水平擴展以提高讀取吞吐
protocolgRPC → ingesters + store-gateways

Mimir store-gateway

把物件儲存中的 blocks 提供給 queriers。下載並 mmap block index;透過 ring 把 blocks 分片到各實例。

  • 延遲載入 index headers;快取 chunks(memcached)
  • Blocks 在 store-gateways 之間分片 + 複製
  • 查詢時唯一會讀冷 blocks 的元件
protocolgRPC :9095 · reads mimir-blocks bucket

背景工作

Mimir compactor

把 ingesters 上傳的小 2h blocks 合併成更大、已去重的 blocks,並套用保留期。

  • 把 3 份 RF 複本去重成一個 block
  • 壓實 2h → 12h → 24h blocks
  • 刪除超過每 tenant 保留期的資料
protocolreads/writes mimir-blocks bucket
tenancy每 tenant 的保留期限制

Mimir ruler

對 Mimir 自身評估 recording 與 alerting rules,並把告警送到 Alertmanager。

  • Rules 依 tenant 存在物件儲存
  • Recording rules 經寫入路徑把 series 寫回
  • 告警 → Alertmanager API
protocolPromQL eval → alert notify :9093
tenancyrule groups 依 tenant 分命名空間