Hatohol Armプラグイン開発でダミーサーバを利用する
構成の概要
HAPI 2.0の概要でも説明したように、Armプラグインは、AMQPブローカーを介してHatoholサーバと接続されます。ダミーサーバは、次の図の様にHatoholサーバの代替として動作します。冒頭でも述べたとおり、Hatoholサーバを稼働させるには、DBのセットアップなどいつかの作業が必要になります。ダミーサーバを使用することでそれらの作業をスキップして、すぐにプラグインの開発に着手出来ます。
筆者は試しことがないのですが、RabbitMQの公式サイトによると、AMQPブローカであるRabbitMQ serverはOS Xでも動作するようなので、プラグインをPythonで記述する場合、Linuxではなく、Mac単体で開発することも出来るのではないかと思われます。あるいは、RabbitMQ serverをネットワーク接続可能などこか(クラウド含む)に配置して、ローカルではLL言語のみで開発ということもできるでしょう。このような柔軟性はHAPI2.0アーキテクチャの利点のひとつと言えます。
ダミーサーバの使用例
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サーバが行う動作をダミーサーバが行ったことが分かります。
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プラグインを煩雑な開発環境の構築なく、書き始められます。アイデアが浮んだときに、本稿を参考に取り組んでみてはいかがでしょうか。