Prometheus はメトリクス収集のデファクトスタンダードですが、デフォルトのローカルストレージだけでは長期データの保存と水平スケールに限界があります。Grafana Mimir はその課題を解決する、オープンソースのスケーラブルな長期保存バックエンドです。
この記事では実際に grafana/mimir:latest(バージョン 3.1.1)を Ubuntu 24.04 の Docker 上で起動し、Prometheus からの remote_write 受け付けと Grafana からの PromQL クエリを動かすまでを確認しました。設定ファイルのひな形・起動コマンド・各 UI ページのスクリーンショットをそのまま載せています。
この記事のポイント
- Grafana Mimir 3.1.1 は Ubuntu 24.04 で
docker run1コマンドで起動できる - 単体バイナリ(all-in-one)モードなら設定ファイル 30 行以下で Prometheus
remote_writeを受け付けられる - 起動後は
/ready・/ingester/ring・/memberlistなど Web UI が自動で有効になる - Grafana からは「Prometheus 互換」データソースとして URL
http://localhost:8080/prometheusで接続できる - 本番に移すときは filesystem ストレージを S3/MinIO に切り替えるだけでよい
動作確認済み環境
| 項目 | バージョン・詳細 |
|---|---|
| OS | Ubuntu 24.04.4 LTS(noble)/ カーネル 6.8.0-83-generic |
| Docker | 29.6.0 |
| Grafana Mimir | 3.1.1(grafana/mimir:latest、Go 1.26.4 / linux/amd64) |
| Grafana | grafana/grafana:latest(Prometheus データソース接続確認用) |
| Prometheus(オプション) | apt: prometheus 2.45.3+ds-2ubuntu0.3(Ubuntu 公式パッケージ) |
| 確認日 | 2026-06-22 |
Grafana Mimir とは
Prometheus はスクレイプしたメトリクスをローカルディスクに書き込みます。シングルノード構成ではディスク容量と単一障害点の問題が避けられず、数ヶ月〜数年の保存には向きません。
Grafana Mimir は Prometheus の remote_write プロトコルを受け取り、水平スケーラブルに長期保存するバックエンドです。同じく長期保存を目的とした Thanos や VictoriaMetrics と同カテゴリですが、マルチテナント対応が標準で入っている点と、Grafana Labs が開発・サポートしている点が特徴です。

構成上は「Prometheus が収集 → Mimir が保存 → Grafana が表示」という流れになります。Mimir は PromQL 互換のクエリエンドポイント(/prometheus)を持つため、Grafana からは通常の Prometheus データソースと同じ操作感でクエリを書けます。
Mimir のインストール手順(Docker)
①イメージの取得とバージョン確認
まずイメージを pull してバージョンを確認します。私が実行した出力がそのまま下に出ています。
latest: Pulling from grafana/mimir
8acabc1b7129: Pull complete
Digest: sha256:2b49dca9ee4a121cc39bfb1e6f661c1e975cf52a7d14cc6b90de2e5e29caa92e
Status: Downloaded newer image for grafana/mimir:latest
$ docker run –rm grafana/mimir:latest –version
Mimir, version 3.1.1 (branch: HEAD, revision: a3d6c90f)
go version: go1.26.4
platform: linux/amd64

②設定ファイルを作成する
Mimir は YAML で設定します。最初の確認であれば、以下の 30 行前後の設定で十分です。target: all,overrides-exporter を指定すると、全コンポーネントを 1 プロセスで動かす「単体バイナリモード」になります。
# 単体バイナリモード(開発・検証向け)
target: all,overrides-exporter
multitenancy_enabled: false
blocks_storage:
backend: filesystem
filesystem:
dir: /tmp/mimir/blocks
tsdb:
dir: /tmp/mimir/tsdb
compactor:
data_dir: /tmp/mimir/compactor
sharding_ring:
kvstore:
store: memberlist
ingester:
ring:
instance_addr: 127.0.0.1
kvstore:
store: memberlist
replication_factor: 1
server:
http_listen_port: 8080
grpc_listen_port: 9095
log_level: warn
EOF

注意
replication_factor: 1 は検証用の設定です。本番では 3 以上に設定し、複数ノードで Ingester を起動してください。また blocks_storage.backend: filesystem はホスト再起動でデータが消える可能性があります。永続保存には S3 / GCS / MinIO への切り替えが必要です。
③コンテナを起動する
–name mimir \
-p 8080:8080 -p 9095:9095 \
-v ~/mimir/mimir.yaml:/etc/mimir/mimir.yaml:ro \
grafana/mimir:latest \
-config.file=/etc/mimir/mimir.yaml
86839ba144df8b9c4e41d6f2a04b3a5c1f7e2d09
$ curl http://localhost:8080/ready
ready
起動直後に /ready が ready と返ってきたら成功です。私の環境では docker run から 15 秒ほどで ready になりました。
組み込み UI の確認
Mimir は起動するだけで複数の Web UI エンドポイントが使えるようになります。Prometheus のようにダッシュボードは付いていませんが、クラスタ状態の確認には十分な情報が揃っています。

①/ready — ヘルスチェック
ロードバランサやヘルスチェックスクリプトから叩く想定のエンドポイントです。HTTP 200 かつ ready という文字列が返れば起動完了を意味します。

②/ingester/ring — Ingester Ring の状態
分散構成でどの Ingester がどのリングスロットを保持しているかを可視化するページです。単体バイナリモードでも 1 ノードのリング状態が確認できます。起動直後は ACTIVE ステータスになるまで数秒かかります。

③/memberlist — クラスタメンバー一覧
Gossip プロトコル(memberlist)で管理されるクラスタノードの状態を HTML テーブルで表示します。実際に確認したところ、このページは 15 KB ほどの HTML でノードのアドレス・状態・通信ポートを一覧表示していました。

Prometheus との連携設定
Prometheus が Mimir に書き込むには、prometheus.yml に remote_write セクションを追加します。Mimir の受付エンドポイントは /api/v1/push です。
global:
scrape_interval: 15s
evaluation_interval: 15s
remote_write:
– url: http://localhost:8080/api/v1/push
# マルチテナント無効の場合はヘッダー不要
# headers:
# X-Scope-OrgID: tenant1
scrape_configs:
– job_name: “prometheus”
static_configs:
– targets: [“localhost:9090”]
multitenancy_enabled: false(この記事の設定)では X-Scope-OrgID ヘッダーは不要です。将来マルチテナントに切り替える場合は anonymous または任意の文字列を指定します。
apt でインストールした Prometheus(Ubuntu 24.04 では prometheus 2.45.3+ds-2ubuntu0.3 が利用可能)でも同じ設定で動作します。
Reading package lists… Done
The following NEW packages will be installed:
prometheus
Setting up prometheus (2.45.3+ds-2ubuntu0.3) …
$ systemctl status prometheus
● prometheus.service – Monitoring system and time series database
Loaded: loaded (/lib/systemd/system/prometheus.service; enabled)
Active: active (running)
Prometheus を Docker で動かす場合の注意
Prometheus も Docker コンテナで動かす場合、localhost は Mimir コンテナを指しません。--network host を使うか、Docker ネットワークを共有して http://mimir:8080/api/v1/push のようにコンテナ名で指定してください。
Grafana からクエリする
Mimir は /prometheus パスに Prometheus 互換のクエリ API を持ちます。Grafana のデータソースには「Prometheus」タイプを選んで URL を http://localhost:8080/prometheus にするだけで接続できます。
①Grafana にデータソースを追加する

Grafana にログイン後、左メニュー「Connections → Add new connection」から「Prometheus」を選択し、HTTP URL に http://localhost:8080/prometheus を入力して「Save & Test」を押します。

| python3 -m json.tool | head -20
{“status”:”success”,”data”:[“cortex_build_info”, …]}
# Prometheus remote_write が届いていればメトリクス名が返る
②接続が「Data source connected」と表示されれば成功
「Save & Test」で「Data source connected and labels found!」と表示されれば、Grafana → Mimir の接続は完了です。Explore からは通常の PromQL(例:up、prometheus_tsdb_head_series)でメトリクスを参照できます。
Mimir vs Thanos vs VictoriaMetrics — 何が違うか

3つのプロダクトはいずれも「Prometheus の長期保存+水平スケール」を解決しますが、切り口が違います。
- Grafana Mimir:マルチテナント標準対応、Grafana Labs 製(同社スタックとの統合が容易)、AGPL-3.0
- Thanos:Prometheus Sidecar 経由の統合、Apache-2.0、構成は複雑になりがち
- VictoriaMetrics:圧縮効率が高く単体インストールがシンプル、クラスタ版はエンタープライズ機能も多い
Grafana Prometheus スタックをすでに使っているなら Mimir が自然な選択です。一方、ライセンスや独自のアーキテクチャ要件がある場合は VictoriaMetrics や Thanos も検討に値します。
Ubuntu に systemd サービスとして登録する
本番では Docker ではなくバイナリを直接インストールして systemd で管理する構成が多いです。以下は GitHub Releases からバイナリを取得する手順です。
$ wget -q “https://github.com/grafana/mimir/releases/download/mimir-${MIMIR_VERSION}/mimir-linux-amd64”
$ chmod +x mimir-linux-amd64 && sudo mv mimir-linux-amd64 /usr/local/bin/mimir
$ mimir –version
Mimir, version 3.1.1
go version: go1.26.4
platform: linux/amd64
バイナリを配置したら systemd ユニットファイルを作ります。
$ sudo mkdir -p /etc/mimir /var/lib/mimir
$ sudo cp ~/mimir/mimir.yaml /etc/mimir/mimir.yaml
$ sudo chown -R mimir:mimir /etc/mimir /var/lib/mimir
$ sudo tee /etc/systemd/system/mimir.service <<‘EOF’
[Unit]
Description=Grafana Mimir
After=network.target
[Service]
User=mimir
ExecStart=/usr/local/bin/mimir -config.file=/etc/mimir/mimir.yaml
Restart=on-failure
RestartSec=5s
[Install]
WantedBy=multi-user.target
EOF
$ sudo systemctl daemon-reload
$ sudo systemctl enable –now mimir
$ systemctl status mimir
● mimir.service – Grafana Mimir
Active: active (running)
よくあるエラーと解決策
①「level=error msg=”failed to start ring memberlist”」
設定ファイルで ingester.ring.kvstore.store: memberlist を指定しているのに instance_addr が未設定の場合に出ます。instance_addr: 127.0.0.1 を設定に加えると解消します。
②Prometheus からの push が「400 Bad Request」になる
最も多い原因は Content-Type の不一致です。remote_write の URL が正しく /api/v1/push になっているか確認してください。Prometheus 2.x と 3.x では remote_write のプロトコルバージョンが異なる場合があります。設定に remote_write_receiver: true を追加すると明示的に有効化できます。
③/ready が「not ready」のまま
起動直後は Ingester がリングに参加するまで 30 秒ほどかかります。ログ(docker logs mimir)に level=error がなければ待つだけで解消します。エラーがある場合は設定ファイルの YAML 記法ミス(インデントのズレ)を疑ってください。
④ポート 9095 が使われているエラー
gRPC ポートの競合です。server.grpc_listen_port を 9096 等に変更するか、競合しているプロセスを終了させてください。
まとめ
Grafana Mimir 3.1.1 を Ubuntu 24.04 の Docker で動かしました。単体バイナリモードなら設定ファイル 1 枚で起動でき、/ready が ready を返すまで 15 秒ほどでした。
- Prometheus の
remote_write受け付けは URLhttp://localhost:8080/api/v1/pushのみで有効 - Grafana からは Prometheus タイプ・URL
http://localhost:8080/prometheusで即時接続できる - 組み込み UI(
/ingester/ring、/memberlist)でクラスタ状態をブラウザから確認できる - スケールアウトは
blocks_storage.backendを filesystem から S3/GCS/MinIO に切り替えるだけでよい
まずは手元の Docker で動かして感触を掴み、本番投入する際は VPS の初期設定と合わせて systemd 常駐化まで進めてみてください。


コメント