pingを使って簡単なサーバーの死活監視をする

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


動作確認環境

本稿は、以下の環境で検証しています。

ソフトウェア バージョン
Kompira Enterprise 1.5.5.post7
OS CentOS 7.8.2003

または

ソフトウェア バージョン
Kompira Enterprise 1.6.2.post4
OS CentOS 8.2.2004

または

ソフトウェア バージョン
Kompira Enterprise 1.6.8
OS CentOS Stream 8

まず、対象とするサーバーはパラメータ “target” で指定することにします。そのサーバー上で ping コマンドを実行するジョブフローは、次のように書けます。

| target = "192.168.1.1" |

["ping -c1 $target"]

| | で挟んだ部分はパラメータで、実行時に動的に指定することができます。= の右辺 “192.168.1.1” は初期値となります。

また、ping には “-c1” オプションをつけています。これは、繰り返し回数を指定しないと、 ping コマンドが Ctrl + C で中断するまで継続的に実行されつづけるからです。

Kompira Enterprise は [ ] で囲った処理に関して、ssh でログインしてコマンドを実行し、終了して戻り値が得られるまで実行完了を待ちます。そのため繰り返し表示を続けるタイプのコマンドは明示的に回数を指定しないと、ジョブフローが「実行中」のまま完了しません。

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

{ if (条件文) |
  then:
    (条件を満たす場合の処理)
  else:
    (条件を満たさない場合の処理)
}

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

| target = "192.168.1.1" |

["ping -c1 $target"] =>
{ if $STATUS == 0 |
  then:
    print("OK")
  else:
    print("NG")
}

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

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

mailto(
    to="info@kompira.jp",
    from="alert@kompira.jp",
    subject="server is DEAD",
    body="サーバーの反応がありません。至急対応してください。"
)

ここでは to のアドレスは通知先、from は送信元のアドレスを記載します。
これをジョブフローに組み込むと次のようになります。

| target = "192.168.1.1" |

["ping -c1 $target"] =>
{ if $STATUS == 0 |
  then:
    print("OK")
  else:
    print("NG") -> 
    mailto(
        to="info@kompira.jp", 
        from="alert@kompira.jp", 
        subject="server is DEAD", 
        body="サーバーの反応がありません。至急対応してください。"
    )
}

本稿では、簡単ですがサーバー監視のジョブフローを作りました。Kompira Enterprise のスケジューラを利用してこのジョブフローを定期的に実行することで、サーバーがダウンした際に指定のアドレスに通知することができます。

メールの送信先やメッセージの内容をジョブフローとは切り離して管理したい場合には、環境変数オブジェクトやメールテンプレートオブジェクトなどを利用することができます。

TOP