Technical information

ジョブフローの簡単な例 pingを使って簡単なサーバーの死活監視をする

ここでは指定のIPアドレスに対して、pingコマンドでICMPパケットを送り、サーバーが生きているか死んでいるかの確認を行うジョブフローを作ります。

まず指定のサーバーはパラメータ”target”で指定することにして、pingコマンドを実行するところまでは次のように書けます。

| | で挟んだ部分はパラメータで、実行時に動的に指定することが出来ます。= の右辺は初期値となります。ping には “-c1″オプションをつけています。これはpingコマンドの出力はCtrl+Cで中断するまで継続的に実行しつつけるため、繰り返し回数を明示的に指定する必要があります。
Kompiraは[ ] で囲った処理は、sshでログインして、コマンドを実行し、終了して戻り値が得られるまで実行完了を待ちます。繰り返し表示を続けるタイプのコマンドは明示的に回数を指定しないと、ジョブフローが「実行中」のまま完了しません。

続いて、pingの結果、正常の場合には”OK”、異常の場合には”NG”を表示するように条件文を書いてみましょう。
if文は次のような記述となります。

ジョブフローは次のようになります。

$STATUS変数は直前の処理の戻り値(終了ステータス)で、この場合にはpingコマンドの実行結果となります。if文の直前の矢印は “->”ではなくて、”=>”になることに注意してください。”->”では処理エラーが発生した場合にジョブフローが中断されますので、pingの応答がなかった場合にはif文が実行される前にジョブフローが異常終了します。

最後にpingの応答がなかった場合に、指定のメールアドレスに通知してみましょう。メールを送信するにはmailto()関数を利用します。ここでは簡単のために固定のアドレスに固定メッセージを送信します。

ここではtoのアドレスは通知先、fromは送信元のアドレスを記載します。

これをジョブフローに組み込むと次のようになります。

ここまで簡単ですがサーバー監視のジョブフローを作りました。Kompiraのスケジューラを利用してこのジョブフローを定期的に実行することで、サーバーがダウンした際に指定のアドレスに通知されるようになります。メールの送信先やメッセージの内容をジョブフローとは切り離して管理したい場合には、環境変数オブジェクトやメールテンプレートオブジェクトなどを利用することが出来ます。