純規の暇人趣味ブログ

首を突っ込んで足を洗う

[Bukkit/Spigot]MinecraftサーバをZabbixで監視する

      HimaJyun

最近、サーバ監視に使うソフトウェアをMuninからZabbixに変更しました。

その際にMinecraft(Spigot)サーバを監視するプラグインをZabbix向けに書き直しました、せっかくなので公開しようと思います。

特徴

今回作成したプラグインは「Zabbigot」と言います。見ての通りZabbix+Spigotの造語ですね。

(名前はZabbigotですが、Spigot特有の機能みたいなのは使用していないのでBukkitでも動くと思います。)

以下のような特徴があります。

  • シンプル設計
  • 簡単動作

つまりとにかくシンプルなのが特徴です。

シンプル設計

私はシンプルが好きなのでシンプル設計に仕上げました。

不必要な機能は搭載せず、扱いやすく軽量にしたつもりです。

簡単動作

情報の送信にはzabbix_senderプロトコルを使用しており、簡単に使うことが出来ます。

このプラグインと情報を受け取るためのzabbix_serverがあれば、あとはWebからテンプレートなどの設定を行うだけで動作します。

zabbix_agentにUserParameterを設定したりする必要はありません。

取得できる情報

取得出来る情報は以下の4つです。

  1. オンラインユーザ数
  2. TPS
  3. 消費メモリ
  4. 空きメモリ

やろうと思えばもっと色々取得するようにプログラミング出来るのですが、意味がないので必要な物だけを取得しています。

グラフのサンプル

以下のようなグラフが作成出来ます。

TPS

TPSをウォッチする事で「重い」と言われたときに何が起こっていたのかを調べられると思います。

消費メモリと空きメモリ(カスタムグラフを使用)

メモリに関しては「OSから見たメモリ」ではなく「JVMから見たメモリ」が取得出来るので、より詳細な情報の収集が可能です。

例えば上のグラフを例にとると、OS上からでは「Javaプロセスに8G割り当てている」という事しか分かりませんが、JVM上からは「消費が4.4G、空きが3.5G」という風に情報が取得できます。

上のグラフでは空きが一番少ない時でも1.3Gあり、「余裕があるのでMinecraftへの割り当てを減らしてMySQLに割り当てよう」といった判断も可能です。

使い方

依存関係などはありません、プラグインをpluginsに入れて設定を行えば使えます。

  1. ZabbigotをGitHubからダウンロード
  2. サーバのpluginsに入れて一度起動して下さい
  3. 設定変更を行った後にリロード
  4. Zabbixサーバに監視項目を追加する

リロードは「/zabbigot reload」で構いません。

config.yml

config.yml日本語版は以下の通り。

# 送信間隔 (単位:秒)
# 0に設定すると送信を停止します。
# メンテナンスなどで送信を停止したい場合は0に設定してください。
Interval: 60

# 複数サーバを監視する場合に使用します。
# ここで設定した値を引数として送信します。
# 例:
# Identifier: "Minecraft" -> "minecraft.tps[Minecraft]"
# Identifier: "Zabbigot" -> "minecraft.tps[Zabbigot]"
Identifier: "Minecraft"

Zabbix:
  Server: "localhost"
  Port: 10051
  Hostname: "MinecraftServer"

最低限必要な設定はZabbixサーバのアドレス周りです。

Zabbixキー

タイプは全て「Zabbixトラッパー」です。

キーは以下の4つです。

キー 説明 データ型
minecraft.user オンラインユーザ数 数値 (整数)
minecraft.tps サーバのTPS 数値 (浮動小数)
minecraft.memory.free 空きメモリ 数値 (整数)
minecraft.memory.used 使用済みメモリ 数値 (整数)

実際には「minecraft.tps[Minecraft]」のように識別子を設定します。

識別子はconfig.ymlから設定できます。(デフォルト: Minecraft)

1つのマシンに複数サーバがあり、それらを監視する場合にはサーバ別に識別子を変えてください。(大抵はデフォルトで問題ありません)

zabbix_template.xml」をダウンロードしてインポートするのが一番確実で手っ取り早いかと思います。

コマンド/パーミッション

以下の3つのコマンドが使用できます。

コマンド パーミッション 説明 デフォルト
/zabbigot zabbigot.show 現在の状態を表示します OP
/zabbigot send zabbigot.send 情報を送信します OP
/zabbigot reload zabbigot.reload 設定をリロードします OP

「/zabbigot」コマンドでは現在の状態を表示出来ます。「重いなー」なんて時に使ってみると良いでしょう。

「/zabbigot send」は情報を手動で送信します。普段は使うことはあまりないと思います。

ソースコード

ソースコードはGitHub(HimaJyun/Zabbigot)にあります。

ライセンスはApache 2.0です、お好きなようにどうぞ。

 - サーバ運営 ,