現在位置: ホーム / みらくるブログ / Hatohol Armプラグイン開発でダミーサーバを利用する

Hatohol Armプラグイン開発でダミーサーバを利用する

HAPI2.0の特徴のひとつは、ユーザー作成のプラグインによって、任意のシステムから監視データをHatoholに集約できることです。最終的なプラグインの動作確認には、もちろん、Hatoholサーバと接続してのテストが必須ですが、そのためのセットアップには、DB設定などやや煩雑な作業が必要です。本稿では、Hatoholサーバのかわりに、ダミーサーバを用いて、複雑なセットアップなしにプラグイン開発を始める方法を紹介します。

構成の概要

HAPI 2.0の概要でも説明したように、Armプラグインは、AMQPブローカーを介してHatoholサーバと接続されます。ダミーサーバは、次の図の様にHatoholサーバの代替として動作します。冒頭でも述べたとおり、Hatoholサーバを稼働させるには、DBのセットアップなどいつかの作業が必要になります。ダミーサーバを使用することでそれらの作業をスキップして、すぐにプラグインの開発に着手出来ます。

SimpleServerを使った場合のデータフロー

 

筆者は試しことがないのですが、RabbitMQの公式サイトによると、AMQPブローカであるRabbitMQ serverはOS Xでも動作するようなので、プラグインをPythonで記述する場合、Linuxではなく、Mac単体で開発することも出来るのではないかと思われます。あるいは、RabbitMQ serverをネットワーク接続可能などこか(クラウド含む)に配置して、ローカルではLL言語のみで開発ということもできるでしょう。このような柔軟性はHAPI2.0アーキテクチャの利点のひとつと言えます。

ただし、simple_serverは、その名のとおり、最低限の実装に留まっています。厳密な動作が必要な場合は、Hatoholサーバーを立ち上げる必要があります。

ダミーサーバの使用例

Hatoholのソースコードにsimple_server.pyというプログラムが同梱されています。基本的には、AMQPブローカー用のパラメータを指定するだけで起動します。

$ cd hatohol/server/hap2/hatohol 
$ HAPI_AMQP_PASSWORD=hatohol ./simple_server.py --amqp-broker localhost --amqp-vhost hatohol --amqp-queue q01 --amqp-user hatohol
Simple Server for HAPI 2.0
deamonized: 31357 (Dispatcher)
deamonized: 31358 (Receiver)

ここでは、Armプラグインとして、以前このブログで紹介したFluentdプラグインを例として使用します。別の端末で次のように、ダミーサーバと同じAMQPブロカー、Queueを指定して起動します。

$ sudo HAPI_AMQP_PASSWORD=hatohol ./hap2_fluentd.py --amqp-broker localhost --amqp-vhost hatohol --amqp-queue q01 --amqp-user hatohol --fluentd-launch "td-agent -c syslog-read.conf -q"

すると、ダミーサーバ側の端末では次の様に出力が現れるはずです。

method: exchangeProfile
{u'procedures': [u'exchangeProfile', u'updateMonitoringServerInfo'], u'name': u'Hap2FluentdMain'}
method: getMonitoringServerInfo

これは、HAPI 2.0の標準シーケンスで規定されるExchangeProfileプロシージャの交換が行われたことを示しています。本来、Hatoholサーバが行う動作をダミーサーバが行ったことが分かります。

HAPI 2.0において、起動時のExchangeProfileの要請は、対向プログラム(Hatoholサーバや本稿で紹介しているダミーサーバ)なしでのArmプラグイン開発を難しくしている要因のひとつです。しかしながら、これは、送信側・受信側がそれぞれの存在やスペックを認識して、監視が確実に行われるようにするという設計思想に起因しています。

MonitoringServerInfoの指定

Armプラグインの動作パラメータ、例えば、監視対象システムのIPアドレスなどは、通常Hatoholサーバーに格納されています。これらのデータはMonitoringServerInfoと呼ばれ、HAPI2.0では、getMonitoringServerInfoプロシージャでサーバーから取得することができます。ダミーサーバsimple_server.pyは、引数を使うことで任意のMonitoringServerInfoをプラグインに渡すことができます。

具体的には、次のように--ms-infoオプションとMonitoringServerInfoを格納したファイルを指定して起動します。拡張子からも推測されるようにオプションで渡すファイルには、JSON形式でパラメータを記載します。

 $ HAPI_AMQP_PASSWORD=hatohol  ./simple_server.py --amqp-broker localhost --amqp-vhost hatohol --amqp-queue q01 --amqp-user hatohol --ms-info misc/ms-info-zabbix-example.json 

まとめ

ダミーサーバを使用すると、Armプラグインを煩雑な開発環境の構築なく、書き始められます。アイデアが浮んだときに、本稿を参考に取り組んでみてはいかがでしょうか。