価格は 2026 年 10 月 27 日、バージョンは 2026 年 10 月 25 日に、各公式のサイトで確認したものです。価格は米ドルで、税の扱いは各サービスによります (AWS は表示の価格に消費税が加わります)。
段階の全体像
| 段階 | 主な | 費用 | 向いている |
|---|---|---|---|
| 1. 費用をかけずに始める | spark、/tick query、無料の死活監視、Discord への通知 | 無料 | 1 台のサーバー、短期の企画 |
| 2. 自分で立てる | Prometheus、Grafana、Alertmanager、Loki | 無料 (動かす機械の費用のみ) | 複数のサーバー、常設のサーバー |
| 3. クラウドのサービス | Grafana Cloud、AWS CloudWatch、New Relic、Datadog | 無料の範囲から有料 | 管理の手間を減らしたい場合、AWS で動かしている場合 |
| 4. 詳しく調べる | Java Flight Recorder、async-profiler、GC のログ、ボットでの参加の確認 | 無料 | 原因の分からない重さの調査、止められない企画 |
段階 1: 費用をかけずに始める
サーバーに入っている計測
- spark: Paper に 1.21 から組み込まれている。
/spark healthで TPS、MSPT、CPU、メモリ、ディスクを、/spark gcで Java のメモリの回収の履歴を確認できる。処理の記録 (プロファイラー) は、既定で常に裏で動いている /tick query: 1.20.3 から。1 回のティックの平均の時間と、P50・P95・P99 を確認できる- Paper の Watchdog: サーバーが止まりかけると、10 秒後からメインのスレッドの状態をログに出す
止まったことに気付く (死活監視)
サーバーが止まったことに、参加する方からの連絡で気付くのでは遅すぎます。外部から定期的に接続を確かめる死活監視を置きます。
UptimeRobot
無料50 の監視まで
外部のサービスから、サーバーのポートに接続できるかを 5 分ごとに確かめます。無料のプランでも、商用での利用が認められています。有料のプランは、年払いで月 $9 相当、月払いで月 $10 からです。
Uptime Kuma
無料自分で動かす
オープンソースの死活監視です。ポートの確認のほか、ゲームのサーバーの状態を確かめる仕組み (GameDig) で、Minecraft のサーバーの応答と人数も確かめられます。
通知は、Discord の Webhook に送ると、運営のチームの連絡の場所でそのまま受け取れます。Webhook の URL は、知られると誰でも投稿できるため、秘密の値として扱います。
公式の管理の API の通知
1.21.9 からの公式の管理の API (Minecraft Server Management Protocol) は、サーバーの起動・停止・保存、プレイヤーの参加と退出、定期的な状態の通知を送れます。WebSocket に接続する仕組みを用意する必要がありますが、サーバーの状態を外部の仕組みに知らせる、公式の方法です (管理画面とダッシュボード)。
Minecraft の数字を外から取得する
Minecraft のサーバーには、プラグインや Mod を入れなくても、外から数字を取得できる仕組みが 4 つあります。どれも Minecraft の公式の機能です。
| 仕組み | 取れる | 外からの |
|---|---|---|
| JMX (1.16 から) | ティックの平均の時間 (averageTickTime) と、直近のティックの時間の一覧 (tickTimes)。単位はミリ秒 | Prometheus の JMX Exporter で、Prometheus の形式に変えて取得する |
| サーバーの一覧の応答 | 参加中の人数、最大の人数、バージョン、応答の速さ | Uptime Kuma (GameDig) や、Python のライブラリ mcstatus で、定期的に問い合わせる |
| クエリ (UDP) | 人数、参加中のプレイヤーの名前、ワールド、バージョン | 同上。enable-query=true が必要 |
| Server Management Protocol (1.21.9 から) | 起動・停止の状態、参加中のプレイヤー、参加と退出の通知 | WebSocket で接続し、状態の取得と通知の受け取りを行う (RCON と遠隔の管理) |
このうち、ティックの時間 (サーバーの重さ) を、プラグインなしで継続して取得できるのは JMX だけです。人数と、サーバーが応答しているかは、サーバーの一覧の応答で足ります。エンティティやチャンクの数など、もっと細かい数字を継続して取得するには、次の段階 2 のプラグインや Mod を使います。
JMX から Prometheus に送る
JMX は、Java のアプリケーションの状態を外から見るための仕組みです。enable-jmx-monitoring=true にすると、Minecraft のサーバーは、ティックの時間を net.minecraft.server:type=Server という名前で公開します。これを、Prometheus の公式の JMX Exporter で、Prometheus が読める形式に変えます。
# 1. server.properties
enable-jmx-monitoring=true
# 2. exporter.yaml(JMX Exporter の設定。ルールに合うものだけを集める)
rules:
- pattern: 'net.minecraft.server<type=Server><>averageTickTime'
name: minecraft_average_tick_time_milliseconds
type: GAUGE
# 3. 起動のコマンド(JMX Exporter を Java のエージェントとして組み込む)
# HTTP の出口は、プライベートなアドレス(例: 10.0.0.11)の 9404 番で待ち受ける
java -javaagent:jmx_prometheus_javaagent-1.7.0.jar=10.0.0.11:9404:exporter.yaml \
-jar paper.jar --nogui
# 4. prometheus.yml(Prometheus から取得する)
scrape_configs:
- job_name: minecraft
static_configs:
- targets: ["10.0.0.11:9404"]
- 1 回のティックは 50 ミリ秒に収まる必要があります。
minecraft_average_tick_time_millisecondsが 50 に近づいたら、通知するようにします (何を通知するか、ティックとスレッドの仕組み) - JMX Exporter は、Java のメモリやガベージコレクションの数字も、同じ仕組みで取得できます。必要なものだけをルールに足します
- エージェントの出口のアドレスを省いてポートだけにすると、すべてのアドレス (
0.0.0.0) で待ち受けます。プライベートなアドレスを指定し、ファイアウォールで Prometheus からの接続だけを許可します - JMX のリモートの接続 (
com.sun.management.jmxremote) は使いません。認証のないリモートの JMX は、外部からコードを実行される危険があります。JMX Exporter をエージェントとして組み込めば、リモートの JMX のポートを開ける必要はありません
人数と応答を外から確かめる
サーバーの一覧の応答は、サーバーの一覧の画面に表示する情報で、どのサーバーも既定で返します (enable-status=true)。死活監視のツールや、短いスクリプトで定期的に取得し、人数のグラフや、応答がないときの通知に使えます。
# Python のライブラリ mcstatus の例(pip install mcstatus)
from mcstatus import JavaServer
server = JavaServer.lookup("play.example.jp")
status = server.status()
print(status.players.online, status.latency) # 参加中の人数と、応答の速さ(ミリ秒)
- 参加中のプレイヤーの名前を応答に含めたくない場合は、
hide-online-players=trueにします - クエリは、プレイヤーの名前などを UDP で外に返します。使う場合は、ファイアウォールで、問い合わせる監視のサーバーからの接続だけを許可します (ポートと通信)
段階 2: 自分で立てる
複数のサーバーや、常設のサーバーでは、数字を記録してグラフで見られるようにします。もっとも広く使われているのは、Prometheus と Grafana の組み合わせです。
どれも
| 道具 | 役割 | メモ |
|---|---|---|
| minecraft-prometheus-exporter | Paper のプラグイン。TPS、ティックの時間 (平均・中央値・最大)、プレイヤーの数、チャンク、エンティティ、Java のメモリを出す | 既定では自分のサーバーの中 (localhost:9940) だけで待ち受ける。Grafana のダッシュボードの例が付く |
| node_exporter | サーバーの機械の CPU、メモリ、ディスク、通信 | ワールドとバックアップのディスクの残りを見る |
| Prometheus | 数字を集めて保存し、通知の条件を判断する | インターネットに公開しないよう、公式のドキュメントが案内している |
| Alertmanager | 通知の送り先と、まとめ方を決める | Discord に直接送れる。既定では認証がない |
| Grafana | グラフとダッシュボード | 初期のログインは admin/admin のため、最初に必ず変える |
| Loki と Grafana Alloy | ログの収集と検索 | 以前使われた Promtail は 2026 年 3 月に提供を終えた。Alloy を使う |
Velocity 用の出力のプラグインもありますが、2023 年から更新されていないものが多いため、使う前に対応のバージョンを確かめます。
段階 3: クラウドのサービス
監視の仕組みそのものの保守を減らしたい場合は、クラウドのサービスを使います。小さなサーバーなら、無料の範囲で足りることもあります。
Grafana Cloud
無料Free プラン
数字の系列 1 万まで、ログ 50 GB、保存は 14 日。1 台のサーバーなら無料の範囲で足ります。有料の Pro は月 $19 からで、量に応じた料金が加わります。
New Relic
無料月 100 GB まで
無料で月 100 GB までのデータを送れます。全機能を使えるユーザーは 1 人です。上限を超えると受け付けが止まります。
AWS CloudWatch
$0.30/ 数字 1 つ / 月
東京のリージョンの、独自の数字 (カスタムメトリクス) の料金です。10 までは無料。通知は 1 つ月 $0.10、ログの取り込みは 1 GB あたり $0.76 です。AWS でサーバーを動かしている場合に向いています。
Datadog
$15/ ホスト / 月
Infrastructure Pro の年契約の価格です。多くの機能がありますが、小さなサーバーには費用がかかりすぎます。
AWS には、Prometheus と Grafana をそのまま使えるマネージドのサービス (Amazon Managed Service for Prometheus、Amazon Managed Grafana) もあります。多くのサーバーを動かす規模で検討します。
段階 4: 詳しく調べる
数字を見ても原因が分からない重さや、止められない企画では、Java と参加の仕組みそのものを調べます。
- Java Flight Recorder (JFR): Java に組み込まれた記録の仕組み。Oracle は、負担がとても小さく本番で使えると説明している。
jcmdで動いているサーバーの記録を始められ、JDK Mission Control で結果を見る - async-profiler: CPU、メモリの確保、ロックの待ちを、偏りなく記録する。spark の記録の仕組みにも使われている
- GC のログ:
-Xlog:gc*で、Java のメモリの回収で止まった時間を記録する。ファイルの数と大きさを決めて、古いものから消す - ボットでの参加の確認: Mineflayer などのボットで、定期的に実際にログインして参加できるかを確かめる。ポートが開いていても、ログインできない障害に気付ける
- 当番と呼び出し: 企画の当日など、すぐに対応が必要な時間は、PagerDuty (5 人まで無料) や Grafana Cloud の IRM で、運営スタッフに確実に知らせる
長い期間の記録を残す仕組み (Mimir、Thanos) は、多くのサーバーを何年も記録する規模で検討します。
何を通知するか
通知が多すぎると、本当に大切な通知を見落とします。次の項目に絞り、一定の時間続いたときだけ通知します。
- サーバーに接続できない (外部からの死活監視、Prometheus の
up == 0) - TPS が下がっている、または MSPT が 50 ミリ秒を超えている状態が、数分続く (ティックとスレッドの仕組み)
- Java のメモリが、回収のあとも上限の近くに張り付いている
- ワールドとバックアップのディスクの残りが少ない
- バックアップが、決まった時刻に終わっていない
企画の当日は、通知の基準を厳しめにし、運営スタッフが画面を見ながら待機します (バックアップと更新)。
安全に運用する
- 監視の画面と、数字の出力 (Prometheus、exporter、Alertmanager) は、インターネットから誰でも接続できる状態にしない。運営スタッフが見る画面は、Cloudflare Zero Trust などで、許可した人だけが開けるようにする
- Grafana の初期のパスワードを変え、運営スタッフごとにアカウントを分ける
- 公式の管理の API は、自分のサーバーの中だけで待ち受け、秘密の値と TLS を使う
- spark の結果は、既定で外部のサーバーにアップロードされ、URL を知っている人なら見られる。共有したくない結果は、手元に保存する (
/spark profiler stop --save-to-file) - Discord の Webhook の URL は、秘密の値として扱う
参考にした資料
- Server.properties (Minecraft Wiki)
- JMX Exporter (Prometheus)
- mcstatus (GitHub)
- Profiling (PaperMC)
- Command Usage (spark)
- Configuration (spark)
- Minecraft Server Management Protocol (Minecraft Wiki)
- Pricing (UptimeRobot)
- Uptime Kuma (GitHub)
- minecraft-prometheus-exporter (GitHub)
- node_exporter (GitHub)
- Security (Prometheus)
- Sign in to Grafana (Grafana)
- Promtail (Grafana Loki)
- Pricing (Grafana Cloud)
- Amazon CloudWatch の料金 (AWS)
- Pricing (New Relic)
- Pricing (Datadog)
- Diagnostic Tools (Oracle)
- async-profiler (GitHub)
- Mineflayer (GitHub)
- Pricing (PagerDuty)
サーバーの監視の仕組みづくりは、KEY SELECT に
企画の規模とご予算に合わせて、監視の道具を選び、ダッシュボードと通知を整え、障害のときの対応まで、KEY SELECT がお引き受けできます。
- 記事や技術資料の内容についてのご質問とサポートは、保守・サポートのご契約、またはスポットでのご契約をいただいたうえでお受けしています。無償でのサポートは行っておりません。
- 記事や技術資料の内容は、公開の時点の情報にもとづいて作成しています。内容の正確性、完全性、最新性を保証するものではなく、内容にもとづいて行った作業の結果について、弊社は責任を負いかねます。設定や変更は、ご自身の責任で、検証用の環境で確かめてから行ってください。
- 記事や技術資料の内容について、ご指摘や誤りにお気づきの点がありましたら、その他のお問い合わせからお知らせください。
- 技術資料の内容は、引用元として資料の名前と URL を明記していただければ、ご自身の動画や資料としてご利用いただけます。全文の Web サイトでの引用はご遠慮ください。