今回は Nagios から Windows Server を監視する方法について書いてみます。
Nagios のような死活監視ツールは、パッシブな方法で監視するのが一般的ですが、監視対象システムの内部状況を調べるには、エージェントをインストールする必要があります。

ここでは、CPUの負荷・メモリーやハードディスクの使用状況を調べ、閾値を越えると管理者へ通報する方法について、やり方と検証した結果を紹介します。

 環 境
  • Nagios が動作するサーバ
    Debian GNU/Linux 8 Jessie
    nagios3 3.5.1

  • 検証対象のサーバ
    Windows Server 2008 R2
    NSClient++ 0.5.0.62

※上記どちらもESXi 6.0上で仮想化された状態で稼働中。

【追記】2017/11/02
CHECK_NRPE: Error - Could not complete SSL handshake.

このようなエラーがでる場合は、telnet 等で NRPE が動いている監視先のサーバへ接続してみてください。その時、IPv6 で接続しようとしていると、それが原因です。
※NRPE が動いているサーバの Allowed hosts の指定が IPv4 なので…

/etc/gai.conf を編集して、下記の様にIPv4を優先にします。

precedence ::1/128        50
precedence ::/0           40
precedence 2002::/16      30
precedence ::/96          20
precedence ::ffff:0:0/96 100

 1.Windows Server へエージェントをインストール

Nagios と連携するエージェントはいろいろあるのですが、ドキュメントの豊富さから今回は NSClient++ を使うことにしました。まずはここから Windows 用のエージェントをダウンロードします。
※2017/11/02 現在の最新バージョンは 0.5.1.44 です。
※Windows Server 2008 以降であれば x64 を選んでください。
※Windows で使うコマンドは、ここに詳細があります。昔使ってた checkcpu とか、まだ使えるみたいです。

ダウンロードしたエージェントを、監視対象の Windows Server にインストールします。
LAN内で監視するので、通信の暗号化や認証は OFF にしますが、接続を許可する IPアドレスは指定します。

無事インストールが終わりましたら、C:\Program Files\NSClient++にある、nsclient.ini に、下記4行を追加します。

[/settings/external scripts/alias]
 alias_cpu  = check_cpu "warn=load > 80" "crit=load > 90"
 alias_disk = check_drivesize "crit=free < 10%" drive=*
 alias_mem  = check_memory "warn=used > 80%" "crit=used > 90%"

nsclient.ini の編集が終わりましたら、NSClient++ (x64) のサービスを再起動します。
これで Windows Server 側の準備は終了です。

 2.Nagios側の設定

/etc/nagios3/conf.d/services_nagios2.cfg に以下を追加します。

/etc/nagios3/conf.d/hostgroups_nagios2.cfg に下記を追加します。
上記編集作業が終わりましたら、Nagios3 を再起動します。

 3.動作検証

1 と 2 の作業が終われば Nagios から Windows Server を監視できます。
監視対象の閾値については 1 で追加した内容を見れば直感的に理解出来ると思います。動作に関しては、Nagios の通常監視と同様に、エラー状態(or ワーニング状態)が連続で5分続くと通知メールが飛びます。

負荷をかける為に、今回は Microsoft 純正の検査ツールを使ってみます。
https://blogs.msdn.microsoft.com/vijaysk/2012/10/26/tools-to-simulate-cpu-memory-disk-load/
※CPU負荷を擬似的に発生させたり、メモリー使用量を増やしたり…といった試験ができます。

  • 3-1.CPUSTRES.EXE
    試験対象機は仮想2コアなので、Thread Priority は Normal、Activity は bussy にします。3つのスレッドを ON にすると、約80%の負荷になりました。これで5分経過すると管理者へ Warning の通知メールが送られます。

    同じ設定で4つスレッドを ON にすると、ほぼ100%で負荷が張り付きます。5分経過後、今度は Critical の通知メールが送られます。

    ※Nagios のログはこんな感じです。

  • 3-2.Testlimit64.exe
    このプログラムはコマンドラインから起動します。
    まずは、Testlimit64 -d -c 6144 と、6Gのメモリー負荷をかけます。ゆっくりとメモリー使用量が増えていき、約7GBで増加が止まります。これで5分経過後、管理者へ Warning の通知メールが送られます。

    Testlimit64 -d -c 7168 では、物理メモリー8GBをほぼ使い切ります。5分経過後、今度は Critical の通知メールが送られます。

    試験が終わったら ^C でメモリー負荷試験を終了します。