ついに(?)、Zabbixでやってみた系の記事を書くことになりました。最近仕事でZabbixを使った記事を書いたりしてたもので、なんとなく思いついてやってみたのです。
Zabbix × RO公式ツール連携で露店情報を監視する
今回は、ガンホーのRO公式ツール・露店取引情報 http://rotool.gungho.jp/torihiki/ を、オープンソースの監視ツールとしては超有名な Zabbix を使って監視してみます。まさかこんなことにZabbixを使ってみようとか思いたつなんて思いもしませんでしたね。
この順番でかけ算するとあれか、Zabbix攻めのRO受け(ぇ
捗りますね!?
テンプレートとか整えたら、後日GitHubに置いておきます。
(2016/7/30追記 スクリプトとテンプレートを公開しました。https://github.com/miyo-kzz/ro_ten_zabbix)
連携用スクリプトでやっていること
連携スクリプトを使って管理できるZabbixの監視データとしては、ざっと書くとこんな(以下)感じです。
Zabbixの監視ホスト:ワールド単位でアイテムを監視する
Zabbixの監視アイテム:アイテムの精錬値別、かつマップ別に金額を保存する
ワールド名とアイテム番号を渡すと、RO公式ツールでの検索結果HTMLを拾ってきて、露店情報の記録日付と金額とマップ名を抽出して、ローレベルディスカバリを使ってアイテムの登録を行います。アイテムを販売していたマップが増えれば、それに従って監視アイテムも増えます。検索結果が出てこなくなるなどしてディスカバリできなくなったアイテムは、(Zabbixのデフォルト設定では)30日後に消えます。
デフォルトではすべての精錬値をまとめて拾います。RO公式ツールの表示上、どうしても取り出せるデータが最新5件だけになってしまうのですが、これはもうあきらめるしかないかなと。「もっと見る」で開けるデータも取れるか、もしくはRO公式ツール側に検索結果を一度に表示できる件数の設定があればいいんですけどね。
カード有無もまとめて検索しているため、カード付きの販売アイテムが最高値を叩き出す可能性もあります。一応、カードありかなしかを選択するためのオプションも作ってはいますが…。
ローレベルディスカバリで登録できたアイテムはこんな感じになります。
連携用スクリプトの配置
とりあえず作成したスクリプト ro_ten_zabbix.py を外部スクリプト配置するためのディレクトリに置いて実行権をつけます。
1 2 3 |
$ sudo cp ro_ten_zabbix.py /usr/lib/zabbix/externalscripts/ $ sudo chmod +x /usr/lib/zabbix/externalscripts/ro_ten_zabbix.py $ sudo chown zabbix:zabbix /usr/lib/zabbix/externalscripts/ro_ten_zabbix.py |
次にZabbixの管理画面で、ディスカバリルールとアイテムのプロトタイプ、アイテムを作ってLLDとZabbixトラッパータイプのアイテムを登録できるようにします。ここら辺はテンプレート template_jro_trade.xml をインポートすればすべて登録できるようにする予定です。
連携用スクリプト用の設定
ここもテンプレートで一発登録できるようにします。
アイテム
手動で設定する場合は、Zabbixの管理画面で[設定]-[ホスト]-[アイテム]-[アイテムの作成]でアイテムを作成します。
キー:ro_ten_zabbix.py[“-i”,{$ITEM},”-w”,”{HOST.HOST}”,”-r”,”{$REFINING}”,”-c”,”{$CARD}”,”-m”,”Send”]
タイプ:外部チェック
とりあえずポイントは連携用スクリプトを実行するためのキー。ここでアイテムの番号や精錬値なんかを指定できるようにマクロ名を書いておきます。
ホスト作成するときには、ホスト名をワールド名(Olrunとか)にします。そうすると {HOST.HOST} マクロでスクリプトにワールド名を渡せるようになります。データはすべてホスト名のワールド単位で監視できるようになります。
ディスカバリルール
手動で設定する場合は、Zabbixの管理画面で[設定]-[ホスト]-[ディスカバリルール]-[ディスカバリルールの作成]でルールを作成します。一緒にアイテムのプロトタイプも作成します。
ディスカバリルールのキー:ro_ten_zabbix.py[“-i”,”{$ITEM}”,”-w”,”{HOST.HOST}”,”-r”,”{$REFINING}”,”-c”,”{$CARD}”]
タイプ:外部チェック
アイテムのプロトタイプ
アイテム番号や精錬値、販売マップによってデータを分けるため、こんなプロトタイプを作ります。我ながらごちゃついてて汚らしいな(苦笑)
アイテムのプロトタイプのキー:ragnarok.item[{#TRADE.ITEM},r:{#TRADE.ITEMREFINING},c:{#TRADE.ITEMCARD},m:{#TRADE.MAPNAME}]
タイプ:Zabbixトラッパー
ホストのユーザマクロ定義
連携用スクリプトがRO公式ツールで露店情報を検索するためには、アイテム番号を渡す必要があります。ホストのマクロに必要なアイテムのアイテム番号を登録します。
白ポーションと濃縮サラマインジュースとヴァルキリーケープ[1]と怨恨の白の騎士カードを監視する場合のマクロ設定例
マクロ:{$ITEM}
値:504,12437,27010,20712
ここで指定するアイテム番号は、RO公式ツールで検索したいアイテムを一度検索して、URLのパラメータ item=XXXX に出ている番号を確認してください。マクロに指定する値は一つでもいいですし、複数アイテムをカンマ区切りで並べても検索できるようにしています。
データの収集状況
さて、こんな感じにすると大体動作するようになっているはず…。
ということで、とりあえずはZabbix-3.0で動作確認しています。
最新データの見え方はこんな感じ。露店情報は必ずしも毎日データが追加されるという保証がなく、下手をすれば数日以上データが更新されないこともあると思います。その場合、Zabbixの最新データの表示秒数を超えてしまって何も表示されなくなってしまいます。
そんなんときは ZBX_HISTORY_PERIOD の秒数を延ばしましょう。
1 2 3 4 |
$ sudo vi /usr/share/zabbix/include/defines.inc.php (snip) define('ZBX_HISTORY_PERIOD', 86400); ~~~~~ |
ZBX_HISTORY_PERIODの値を例えば 604800 に増やせば、過去1週間内のデータを最新データとして表示できるようになります。これで販売頻度の低いアイテムも最新データ内に見える可能性が出てきますね。
アイテムのデータはすべて販売価格(整数値)で取得しているので、このようにグラフで推移を眺めることもできます。
もちろん、複数のアイテムをまとめてグラフ化できるように、グラフ設定を作っておくことでこんな表示も可能です。
その他設定
RO公式ツールも定期メンテナンスあるんですかね。サーバメンテナンス時間帯はデータ検索できないみたいなので、Zabbixの設定でも、監視対象のホストにメンテナンス設定を割り当てておくといいかもです。
Zabbixの管理画面で[設定]-[メンテナンス]-[メンテナンス期間の作成]で、定期メンテナンスの時間帯をホストのメンテナンス期間として割り当てます。まぁ、実際にはこの時間通りに行われずに終了が遅れたり、祝祭日が重なると曜日がずれたりするので完璧にメンテナンス時間と一致させることはできませんが。
メンテナンスタイプ:データ収集なし
開始日時:2016/7/1 00:00:00
終了日時:2030/12/31 23:59:59
期間のタイプ:毎週 火曜
開始時間:10:00
メンテナンス期間:0日5時間0分
まとめ
なんでこんなこと頑張ってやっているんだろうか、とても謎です。公式ではない露店情報サイトの方が更新頻度やデータ量も多いとは思うのですが、HTMLパーサでうまくデータを拾い出せるかどうかはわかりません。Unitrixはなんとなく無理ゲーな感じに見えました。
これで過去に遡って推移を眺めたり、トリガーを設定して一定額以下のデータを発見したらメール通知するとか、そんなこともできるようになっちゃいそうで す。などと言っておきつつ、RO公式ツールでは露店情報の登録量自体がそんなになさそうなので、そこまで有用であるかはちょっと疑問ですが。とりあえず、露店サイトを定期的に自分の目で見に行くのではなくて、監視ツールを使って無駄にゴージャスな露店情報監視なんてやってみるのもいいのではないでしょうか!!とかまとめてみたりします。
取り扱うデータに関する権利表示
©Gravity Co., Ltd. & LeeMyoungJin(studio DTDS) All rights reserved.
©GungHo Online Entertainment, Inc. All Rights Reserved.