Zabbxi Iot の接点センサーとCloud Automatorを組み合わせて、自席に居るときだけサーバーが起動し、離席するとサーバーが停止する仕組みを作ってみます。
Zabbix IoT 接点センサー
まずはZabbixの接点センサーを設定します。
接点センサーのケーブルをA端子と+端子あるいは、B端子と+端子に接続します。(センサーの極性によっては+端子ではなく-端子に接続する場合もあります。)
今回利用しているセンサーの場合はA端子と+端子に接続しています。
FLS-CAB 接点センサー Amazon 購入ページ
磁気スイッチ Amazon 購入ページ
接点センサーの開閉回数は積算値です。
今回開閉回数のデータは利用しませんが、積算値をリセットしたい場合は、Hum/ADC Config で値を0にしてSubmit を行います。
Cloud Automatorジョブ作成
Cloud Automatorでサーバーの起動ジョブと停止ジョブを作成します。 ジョブ自体はZabbixのアクションで実行するため、HTTPトリガーで作成します。
ZabbixServer設定
アイテム設定
接点センサーの値は0,1の2値なので、ブール型の整数として登録します。
0,1の表示ではわかりづらいので、値のマッピングを利用する事をおすすめします。
トリガー設定
単純に1,0の最新値を判定すると、接点センサーがすこしズレただけでも敏感に反応してしまうので、300秒間の最小値を判定して5分間継続してセンサーが離れていた場合に検知する用に設定します。
アクション設定
停止アクション
初めに、障害=5分間以上の離席を検知したらServerを停止するアクションを作成します。
Cloud Automatorのジョブを実行するだけでメッセージ通知は考慮しないので名前だけつけてアクションの実行条件に進みます。
実行条件に先ほど作成したトリガーを追加します。
実行内容のタイプをリモートコマンド、ターゲットを現在のホスト、実行環境をZabbixサーバーに設定し、Cloud Automatorで作成した停止ジョブのサンプルコマンドをそのままコマンド欄に入力します。
起動アクション
続いて接点センサーが近づいたら、サーバーを起動するアクションを作成します。
停止アクションの時と同じように、名前だけつけて実行条件の設定に進みます。
実行条件を障害から正常に変更しトリガーを追加します。
こうすることで障害が回復したときに動作するアクションを作成することができます。
停止アクションの時と同じように、Cloud Automatorの起動ジョブのサンプルコマンドを登録します。
2つのアクションが登録できました。
動作確認
接点センサーを近づけたり離したりすることで、トリガーが変化し、Zabbixのアクションが実行されました。
このコマンドによってCloud Automatorでもインスタンスの起動停止のジョブが動作していることも確認出来ました。
まとめ
Zabbix IoTとCloud Automatorを組み合わせる事で簡単にセンサーによってサーバーを起動/停止できるようになりました。 現在は単純な起動停止ですが、スポットインスタンス用にリリースされたハイバーネーションエージェントを組み合わせる事で、作業状態を維持した停止もできるようになるかもしれません。
ただ、現在はWindowsインスタンスのハイバーネーションをSpotリクエスト以外で動作させる手段がないため、AWSの機能アップデートに期待です。
接点センサーの設置場所や形を工夫して扉の開閉検知以外にも、人の在席検知に利用すると面白いソリューションができそうです。
この記事は
Zabbix Advent Calendar 201716日目
Cloud Automator Advent Calendar 201716日目
の記事です。