Grafana Mimir on Ubuntu — スケーラブルなPrometheus長期保存バックエンド

モニタリング

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 run 1コマンドで起動できる
  • 単体バイナリ(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 が開発・サポートしている点が特徴です。

Mimir スタック構成図(Prometheus → Mimir → Grafana)
Mimir スタック構成図(Prometheus → Mimir → Grafana)

構成上は「Prometheus が収集 → Mimir が保存 → Grafana が表示」という流れになります。Mimir は PromQL 互換のクエリエンドポイント(/prometheus)を持つため、Grafana からは通常の Prometheus データソースと同じ操作感でクエリを書けます。

Mimir のインストール手順(Docker)

①イメージの取得とバージョン確認

まずイメージを pull してバージョンを確認します。私が実行した出力がそのまま下に出ています。




ubuntu@linuxlab: ~
$ docker pull grafana/mimir:latest
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 インストールログ(実測)
Mimir インストールログ(実測)

②設定ファイルを作成する

Mimir は YAML で設定します。最初の確認であれば、以下の 30 行前後の設定で十分です。target: all,overrides-exporter を指定すると、全コンポーネントを 1 プロセスで動かす「単体バイナリモード」になります。




ubuntu@linuxlab: ~
$ mkdir -p ~/mimir && cat > ~/mimir/mimir.yaml <<‘EOF’
# 単体バイナリモード(開発・検証向け)
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
Mimir 設定ファイル(mimir.yaml)(実測)
Mimir 設定ファイル(mimir.yaml)(実測)

注意

replication_factor: 1 は検証用の設定です。本番では 3 以上に設定し、複数ノードで Ingester を起動してください。また blocks_storage.backend: filesystem はホスト再起動でデータが消える可能性があります。永続保存には S3 / GCS / MinIO への切り替えが必要です。

③コンテナを起動する




ubuntu@linuxlab: ~
$ docker run -d \
–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

起動直後に /readyready と返ってきたら成功です。私の環境では docker run から 15 秒ほどで ready になりました。

組み込み UI の確認

Mimir は起動するだけで複数の Web UI エンドポイントが使えるようになります。Prometheus のようにダッシュボードは付いていませんが、クラスタ状態の確認には十分な情報が揃っています。

Mimir 組み込みエンドポイント一覧(実測)
Mimir 組み込みエンドポイント一覧(実測)

①/ready — ヘルスチェック

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

Mimir /ready ページ(実撮影)
Mimir /ready ページ(実撮影)

②/ingester/ring — Ingester Ring の状態

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

Mimir Ingester Ring UI(実撮影)
Mimir Ingester Ring UI(実撮影)

③/memberlist — クラスタメンバー一覧

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

Mimir Memberlist UI(実撮影)
Mimir Memberlist UI(実撮影)

Prometheus との連携設定

Prometheus が Mimir に書き込むには、prometheus.ymlremote_write セクションを追加します。Mimir の受付エンドポイントは /api/v1/push です。




ubuntu@linuxlab: ~/prometheus
$ cat prometheus.yml
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 が利用可能)でも同じ設定で動作します。




ubuntu@linuxlab: ~
$ sudo apt install prometheus
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 ログイン画面(実撮影)
Grafana ログイン画面(実撮影)

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

Grafana データソース追加画面(実撮影)
Grafana データソース追加画面(実撮影)



Grafana データソース設定(CLI での確認例)
$ curl http://localhost:8080/prometheus/api/v1/label/__name__/values \
| 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(例:upprometheus_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 からバイナリを取得する手順です。




ubuntu@linuxlab: ~
$ MIMIR_VERSION=”3.1.1″
$ 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 ユニットファイルを作ります。




ubuntu@linuxlab: ~
$ sudo useradd –system –no-create-home mimir
$ 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 枚で起動でき、/readyready を返すまで 15 秒ほどでした。

  • Prometheus の remote_write 受け付けは URL http://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 常駐化まで進めてみてください。

コメント

タイトルとURLをコピーしました