こんにちは、SCSKの坂木です。
Zabbixでモンハン、したくないですか?
そんな思いつきから、本ブログではZabbixダッシュボード上で遊べる「3Dハンティングアクションゲーム」を実際に作ってみました。
さらに、ただ遊ぶだけでなく、その「クエスト結果」をそのままZabbixで監視・障害検知してみたという内容をお届けします。
ゲーム紹介
解説に入る前に、自腹でclaudeに課金してまでして作ったゲームなので少しだけ語らせてください。
私はモンハンシリーズで愛用している武器が 弓 のため、今回のゲームも弓に特化したハンティングアクションとして作成しました。
画像からは伝わりにくいですが、弓使いには嬉しい以下のようなシステムをしっかりと実装しています。
ジャスト回避
敵の攻撃をタイミングよく回避するとダメージを無効化。さらに、ジャスト回避成功時のみ溜めモーションを短縮できるクイック一矢も実装しております。
多彩な射撃アクション
通常の溜め攻撃はもちろん、空から矢を降らせる 曲射 や、通常矢よりも高威力な 剛射 も搭載しています。
スタミナ管理が狩猟の鍵を握る、本格的な仕様です。
ちなみに、オトモは爆弾攻撃でハンターを支援してくれます。
全体構成
| 構成要素 | 概要 |
|---|---|
| フロントエンド(ゲーム) | Three.jsを用いた1ファイル完結型の自作モンハン (index.htmlという名前で作成) |
| ダッシュボード埋め込み | Zabbixの「URLウィジェット」を使用し、ダッシュボード上にWebゲームを表示 |
| データ送信 | クエスト終了時、ゲーム内のJavaScriptからZabbix APIの history.push メソッドを叩き、トラッパーアイテムへモンスター討伐結果(成功: 1 / 失敗: 0)を直接POST |
| 障害検知 | 0(失敗)が送信されると、Zabbix側で「重度の障害」を発報されるようトリガーを設定 |
Zabbixダッシュボードでゲームを実行する方法
まずは、Zabbixのダッシュボード上にゲームを埋め込んで実行できるように設定します。
Webサーバーへゲームファイルを配置
Zabbixサーバー(または同一ネットワークのWebサーバー)に ゲームファイルを配置します。
(例:/var/www/html/game01/index.html)
ダッシュボードにURLウィジェットを追加
- Zabbixの [ダッシュボード] > 右上の [ダッシュボードの変更] をクリック。
- [ウィジェットの追加] を選び、タイプに [URL] を選択。
- URL を入力: http://XX.XX.XX.XX/game01/index.html
セキュリティ設定の確認
デフォルトではiframeのセキュリティが強化されているため、ウィジェット内でゲームや通信を正しく動作させるために以下の設定を確認します。
Zabbix管理画面 [管理] > [一般設定] > [その他の設定パラメータ] を開く。
[iframeサンドボックスを使用する] のチェックを外す。
Zabbix側の監視設定
ゲームから送られてくるクエストの成功失敗情報(1 or 0)を受け取り、判定するためのアイテム・トークン・トリガーを作成します。
トラッパーアイテムの作成
[データ収集] > [ホスト] > 対象ホストの [アイテム] を開く。
以下の内容で新規作成します。
名前: 【MH】クエスト結果 タイプ: Zabbixトラッパー キー: game.result データ型: 数値 (整数)
※作成後、アイテム設定画面のURLに含まれる itemid(例: 68887)をメモしておきます。
APIトークンの発行
ブラウザ(ゲーム)からZabbix API経由でデータを直接送るための認証キーを発行します。
- [ユーザー設定] > [APIトークン] > [APIトークンの作成] をクリック。
- 名前を入力し、有効期限を設定して保存。
- 発行された 認証トークン(英数字の長い文字列) をコピーしてメモします。
ゲーム側からZabbix API (history.push) へのデータ送信
Zabbix 7.0で追加された history.push メソッドを利用すれば、zabbix_sender コマンドを使わずにHTTPリクエスト(API)経由でトラッパーアイテムへ直接データを送信できます。
ゲームのJavaScript内に、以下の通信ロジックを組み込んでいます。
// Zabbix API 連携設定
const ZABBIX_API_URL = "...";
const ZABBIX_API_TOKEN = "YOUR_API_TOKEN";
const ZABBIX_ITEM_ID = 68887;
let isResultSent = false;
function reportResultToZabbix(success){
~
}
トリガー設定:クエスト失敗で障害発報
クエストに失敗した場合に「障害」として検知されるよう、トリガーを設定してみます。
トリガーの作成内容
名前: クエスト失敗 深刻度: 重度の障害 障害の条件式: last(/Zabbix server/game.result)=0 復旧条件式: last(/Zabbix server/game.result)=1
これで、ハンターが力尽きてゲームオーバー(0 送信)になると即座に障害が発生し、次回プレイで見事モンスターを討伐(1 送信)すると障害が自動復旧するロジックが完成しました!
一狩りいってみた(動作確認)
実際にダッシュボード上でゲームをプレイしてみます!
討伐成功時
最新データを確認すると、しっかりと 1(成功)が記録されています。
クエスト失敗時
直後にZabbixの [監視データ] > [障害] を確認すると……
見事に「重度の障害」として発報されました!
これで「仕事をサボってクエストに失敗すると、監視アラートが飛んで運用チームにバレる」というスリリングなダッシュボードの完成です。
まとめ
今回はZabbixのダッシュボード上でモンハンをし、history.push APIを使ってリアルタイムに結果を監視するWeb連携を実装してみました。
単なるお遊びに見えて、
- ダッシュボードのURLウィジェット活用
- Zabbix API(history.push)の実装
- トラッパーと復旧条件式を用いたステート管理
など、Zabbixの機能をしっかり活用した実用的な(?)構成となっています。
みなさんもぜひ、ダッシュボードに「一狩り」取り入れてみてはいかがでしょうか!
▼弊社ではZabbix関連サービスを展開しています。以下ページもご参照ください。
★Zabbixの基礎をまとめたeBookを公開しております!★

★SCSK Plus サポート for Zabbix★

★SCSK Zabbixチャンネル★

★X(旧Twitter)に、SCSK Zabbixアカウントを開設しました!★













