Prometheus + Grafana で自宅の監視基盤を構築したので、実際のサービスを監視してみることにしました。
監視というと CPU やメモリなどのリソース監視を思い浮かべることが多いと思います。
しかしそれだけでは
「サーバは動いているがユーザーは使えない」
という状況を見逃す可能性があります。
そこで今回は自宅の Minecraft Bedrock サーバ を監視対象に追加し、プレイヤー数などのメトリクスを取得することで「ユーザーが実際に使えているか」を確認できる監視を作ってみました。
Observabilityへの道シリーズ
このシリーズでは、監視スタックを段階的に構築しながら「見える化」から「使える監視」へと進めていきます。
1.Prometheusでメトリクス監視を構築
https://qiita.com/KanshiKun/items/1176246d27e52be652eb
2.AlertmanagerでSlack通知
https://qiita.com/KanshiKun/items/c56754fa6baaffec5de0
3.Grafanaでメトリクス可視化
https://qiita.com/KanshiKun/items/5979d2aaed5221ce0a1e
4.Minecraftサーバ監視
https://qiita.com/KanshiKun/items/65446702d765ec580d7a
5.Mincraftサーバの障害を定義(アラートルール作成)
https://qiita.com/KanshiKun/items/8f8239b65639e9d3c749
6.AWSを監視拠点にした外形監視の実装
https://qiita.com/drafts/5002eb89d4019ed96ccc/edit
7.Loki × Promtail × Grafanaでログを可視化する
https://qiita.com/KanshiKun/items/4b768d00433d1b5f700b
8.ログから監視を設計する 〜「何が起きているか」を捉える〜
https://qiita.com/drafts/6642323ec0b45368e932/edit
環境
| 項目 | 内容 |
|---|---|
| OS | Ubuntu |
| Minecraft | Bedrock Edition |
| 監視 | Prometheus |
| 可視化 | Grafana |
| Exporter | mc-monitor |
| コンテナ | Docker |
構成
今回の自宅サーバ監視構成です。
Prometheus を中心に、node-exporter や mc-monitor からメトリクスを収集し、
Grafana で可視化しています。
なぜMinecraftを監視するのか
通常のサーバ監視では
- CPU
- メモリ
- プロセス
などを監視することが多いと思います。
しかしこれだけでは
サーバは動いているが
ユーザーは使えていない
という状況を見逃す可能性があります。
そこで今回は
プレイヤー数(アクティブユーザー)
をメトリクスとして監視してみました。
これはSREで言われる
User Visible Monitoring
に近い考え方です。
Minecraftメトリクス取得
Minecraftのメトリクス取得には
mc-monitor を使用します。
docker-compose設定
mc-monitorを追加します。
mc-monitor:
image: itzg/mc-monitor:latest
container_name: mc-monitor
command:
- export-for-prometheus
- -port
- "9150"
- -bedrock-servers
- host.docker.internal:19132
ports:
- "9150:9150"
extra_hosts:
- "host.docker.internal:host-gateway"
restart: unless-stopped
Prometheus設定
Prometheusの設定に以下を追加します。
- job_name: minecraft
static_configs:
- targets: ['mc-monitor:9150']
Prometheusを再起動します。
docker compose restart prometheus
メトリクス確認
以下のURLでメトリクスが取得できます。
http://localhost:9150/metrics
例
minecraft_status_healthy 1
minecraft_status_players_online_count 0
minecraft_status_players_max_count 10
minecraft_status_response_time_seconds 0.00039
取得できる主なメトリクス
| メトリクス | 説明 |
|---|---|
| minecraft_status_healthy | サーバ死活 |
| minecraft_status_players_online_count | オンラインプレイヤー数 |
| minecraft_status_players_max_count | 最大プレイヤー数 |
| minecraft_status_response_time_seconds | 応答時間 |
Grafanaダッシュボード
Grafanaで以下のメトリクスを可視化します。
サーバ状態
minecraft_status_healthy
プレイヤー数
minecraft_status_players_online_count
応答時間
minecraft_status_response_time_seconds
CPU使用率
100 - (avg by(instance)(rate(node_cpu_seconds_total{mode="idle"}[2m])) * 100)
メモリ使用率
(1 - (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes)) * 100
ダッシュボード
作成したダッシュボード例です。
- Bedrock Server Status
- Online Players
- Response Time
- CPU Usage
- Memory Usage
- GPU Usage
Minecraftのプレイヤー数をそのまま可視化できるので
利用状況が分かりやすくて面白いです。
ユーザー視点の監視
今回一番面白かったのはここです。
通常の監視では
CPU
メモリ
プロセス
などを監視します。
しかしこれだけでは
サーバは動いているが
ユーザーは使えていない
状況を見逃す可能性があります。
そこで
プレイヤー数
をメトリクスとして監視すると
ユーザーが実際に利用できているか
を確認できます。
これはSREで言われる
User Visible Monitoring
に近い考え方だと感じました。
まとめ
Prometheus + Grafana を使うことで
自宅の Minecraft サーバでも簡単に監視環境を作ることができました。
特に
プレイヤー数をメトリクスとして監視する
ことで
システムが動いているか
↓
ユーザーが使えているか
という観点の監視を体験できました。
小さな環境ですが、SREの思想を感じられて面白い取り組みでした。
おわりに
Minecraftは
- 実ユーザー
- 実トラフィック
- 実サービス
があるため
SREの練習環境としてかなり優秀
だと思います。
自宅ラボとしてもおすすめです。

