akishin999の日記

調べた事などを書いて行きます。

Monit でお手軽に外部のサーバを監視する

Monit はサーバ内のプロセスやリソースの使用率などを監視する為に使われる事が比較的多いようですが、実は外部の Web サーバに対する URL 監視や Ping 監視などもとても簡単に設定できるため非常に便利です。

というわけで、Monit を使用して外部のサーバの監視を行う方法について簡単にまとめてみました。

インストール

まずは Monit をインストールします。
いろいろと方法はありますが、CentOS 6 では EPEL で RPM が提供されているので、以下を実行するだけでインストールできます。

# yum install -y http://ftp.riken.jp/Linux/fedora/epel/6/x86_64/monit-5.1.1-4.el6.x86_64.rpm

EPEL の RPM を入れた場合、設定ファイルは「/etc/monit.conf」になります。
監視設定は「/etc/monit.conf」を直接編集するか、もしくは 「/etc/monit.d/」 以下にファイルを作成してそこに記述します。

今回の設定例ではエラー検知時にアラートメールを送信しているので、以下のような行を追記しておきます。

set alert [email protected]

URL 監視

URL 監視を行う場合の設定は以下のようになります。

check host example-web with address 192.0.2.0
     if failed url http://192.0.2.0/urlcheck.txt
     then alert

この場合、「http://192.0.2.0/urlcheck.txt」にアクセスできない場合、アラートメールが送信されます。

レスポンスに特定の文字列が含まれているかどうかをチェックするには、以下のようにします。

check host example-web with address 192.0.2.0
     if failed (url http://192.0.2.0/urlcheck.txt
        and content == 'OnService')
     then alert

この場合、「http://192.0.2.0/urlcheck.txt」のレスポンス内容に文字列「OnService」が含まれていなかったらアラートメールが送信されます。

もし監視対象ページに BASIC 認証がかかっている場合は、以下のようにサーバアドレスの前に BASIC 認証のユーザ名とパスワードを指定します。

check host example-web with address 192.0.2.0
     if failed (url http://exampleuser:[email protected]/auth/urlcheck.txt
        and content == 'OnService')
     then alert

Ping 監視

Ping 監視を実行するには、以下のような設定を記述します。

check host example-web with address 192.0.2.0
      if failed icmp type echo with timeout 4 seconds
      then alert

Ping 監視の場合、raw socket を扱うため、 monit を root ユーザで実行している必要があります。

ポート監視

この他、ポート番号を指定して監視することもできます。
以下は http(80) と https(443) を監視する例です。

check host example-web with address 192.0.2.0
      if failed port 80 proto http then alert
      if failed port 443 type TCPSSL proto http then alert

DNS(53) を監視するには以下のように設定します。

check host example-dns with address 192.0.2.1
      if failed port 53 type udp proto dns then alert

マニュアルによれば、現時点で以下のプロトコルに対応しているようです。


これらの設定は複数定義可能なので、一台のサーバを監視サーバとして、お手軽に複数のサーバ監視を行う事ができます。
導入・設定共に非常に簡単で気軽に始められるので、サービスのリリース直後など、『とりあえず監視しておきたい』といった状況では特に便利なんじゃないでしょうか。