0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Kompira Enterpriseを使って、簡単な死活監視を行う。

Last updated at Posted at 2023-05-30

本記事は「運用自動化プラットフォーム Kompira Enterprise」で、簡単なサーバーの死活監視を行うジョブフロー(スクリプト)を作成していきます。

「ジョブフロー」とは

Kompira Enterpriseでサーバー機やネットワーク機器の操作を行う手順を記載したプログラムです。いわゆる”バッチ処理”をイメージしていただいても良いかと思います。
Kompira Enterpriseでは、専用のジョブフロー言語を用いてジョブフローを記載していきます。

「ジョブフロー」の作成

ここでは、指定したアドレスに対して定期的にPing送信を行い、応答が無い場合にはメールで通知する想定です。ジョブフローでは実行したいコマンドを[ ]で囲んで記載します。コマンドが続く場合には矢印でつなげていきます。

一番シンプルなジョブフローは次のようになります。

| target = "192.168.1.1" |

["ping -c1 $target] ->
print("終了します")

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

また、ping には “-c1” オプションをつけています。繰り返し回数を指定しないと、pingコマンドが Ctrl + C などで中断するまで継続的に実行されます。ジョブフローでは投入したコマンドの終了を待って次の処理に進みますので、ブレイクを入れないと止まらないコマンドは投入しないようにします。

続いて、pingの応答が正常の場合は"OK"、異常の場合に"NG"と表示するように条件文を追加します。

| 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="サーバーの反応がありません。至急対応してください。"
)

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

| 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="サーバーの反応がありません。至急対応してください。"
    )
}

これを無限に繰り返して常駐プロセスのように動かします。while文などを用います。ping送信のタイミングとして60秒間隔とするため、sleep(60) を追加しています。

| target = "192.168.1.1" |
{ while(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="サーバーの反応がありません。至急対応してください。"
      )
  } 
  -> sleep(60)
}

本稿では、簡単なジョブフローの作成例として、pingコマンドによるサーバー死活監視のジョブフローを作りました。while文を入れる前のジョブフローでしたら、Kompira Enterprise のスケジューラを利用してこのジョブフローを定期的に実行することで、サーバーがダウンした際に指定のアドレスに通知することができます。

while文を追加した後のものは、サーバー停止が継続する場合、60秒ごとにメールが送信されます。これを抑制したい場合には、送信した後はジョブフロー自体を停止する、送信後、一定回数は継続しても送信しないなどのロジックを追加するなどの改良が考えられます。

上記の例では、メールの送信先やメッセージの内容は固定ですが、これらをジョブフローとは切り離して管理したい場合には、環境変数オブジェクトやメールテンプレートオブジェクトなどを利用することができます。
また通知手段をメール以外にurlopen関数を使ってSlackなどのメッセンジャーアプリのAPIで連携することも可能です。

Kompira Enterpriseの製品情報

https://www.kompira.jp/
サーバーやネットワーク機器などの運用を自動化するための連携処理基盤ソフトウェアです。
運用手順書の操作作業の自動化、監視ツールやメールなどをトリガーにした保守作業の自動実行など、独自のKompiraジョブフロー言語を用いたスクリプトを用意する事で、個々の機器やワークフローにきめ細かく対応する事が可能です。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?