監視とメトリクス

サーバーの監視は、重くなる前に気付き、止まったときにすぐ知るための仕組みです。小さなサーバーなら費用をかけずに始められ、規模が大きくなるにつれて、記録と通知を充実させていけます。
この資料では、監視とメトリクスの管理を 4 つの段階に分け、道具、費用、手間を説明します。

価格は 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-exporterTPS、ティックの時間、人数、エンティティ、チャンク
node_exporterCPU、メモリ、ディスク、通信
Grafana Alloyサーバーのログ
Prometheus数字を集めて保存する
Lokiログを保存する
Grafanaグラフ、ダッシュボード
Alertmanager通知 (Discord など)

どれもオープンソースで、費用は動かす機械の分だけです。インターネットに公開しないネットワークの中で動かします。

道具役割メモ
minecraft-prometheus-exporterPaper のプラグイン。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 は、秘密の値として扱う

参考にした資料

サーバーの監視の仕組みづくりは、KEY SELECT に

企画の規模とご予算に合わせて、監視の道具を選び、ダッシュボードと通知を整え、障害のときの対応まで、KEY SELECT がお引き受けできます。

  • 記事や技術資料の内容についてのご質問とサポートは、保守・サポートのご契約、またはスポットでのご契約をいただいたうえでお受けしています。無償でのサポートは行っておりません。
  • 記事や技術資料の内容は、公開の時点の情報にもとづいて作成しています。内容の正確性、完全性、最新性を保証するものではなく、内容にもとづいて行った作業の結果について、弊社は責任を負いかねます。設定や変更は、ご自身の責任で、検証用の環境で確かめてから行ってください。
  • 記事や技術資料の内容について、ご指摘や誤りにお気づきの点がありましたら、その他のお問い合わせからお知らせください。
  • 技術資料の内容は、引用元として資料の名前と URL を明記していただければ、ご自身の動画や資料としてご利用いただけます。全文の Web サイトでの引用はご遠慮ください。

ご相談・お問い合わせ

内容が固まっていない段階からご相談いただけます。各分野のプロフェッショナルがご対応いたします。ご相談・お見積もりは無料です。