読者です 読者をやめる 読者になる 読者になる

NRPEでリモートホストを監視する

Nagios

「日本一の技術ブログ」ことウノウラボさんから拾ったネタ。

また、 Nagios などを使用して監視体制を組んでいるのであれば ethtool コマンドを利用したシェルスクリプトをプラグインとして作成することで定期的な監視が可能です。

http://labs.unoh.net/2009/10/post_136.html

「そうかー、ethtoolでネットワークインターフェイスの状態も監視しないといけないなぁ。でも、どうやってNagiosで監視しよう・・・」と一瞬思って、ありとあらゆる選択肢を考えてしまったけど、やっぱりNRPEしかないよね。

NRPEというとxinetd等の設定が面倒かなぁと思ってスルーしていたけど、xinetdなしでいけることが分かったので、これしかないっていう感じが強まった。常識だと思うけど、トーシローでサーセン。

前提。

  • 監視元サーバーにはNagiosがインストール済みとする。
  • 監視対象サーバーには対象サーバーのリソースをチェックするNagiosプラグインが設置済みとする。(今回の場合は仮に、/usr/{lib,lib64}/nagios/plubins/check_ethtoolとします。)
  • 監視元サーバーから監視対象サーバーにポート5666番経由でアクセスできる(iptables等で制限されていない)。
  • OSは共にRedhat系。

監視元サーバーにnagios-plugins-nrpeを入れる

監視元サーバーにはnagios-plugins-nrpeを入れる。前述の通り、このサーバーでは既にNagiosが稼動しているものとする。

$ sudo yum install nagios-plugins-nrpe

NRPEをインストールする

まず、監視対象にNRPEをインストールする。

$ sudo yum nrpe

Fedoraならば上のコマンドでいけると思うが、CentOSでは標準のライブラリではないかもしれない。僕の場合はepelを使った。

あと、多くのチュートリアルで、nagiosnagios-plugins-allを同時にインストールしているが、これはnrpeの標準の設定がnagios-plugins-*のNagiosプラグインを要求しているからだと思う。

Nagiosを同時にいれるにせよ、いれないにせよ、監視対象サーバーでNagiosサービスを動かす必要はない。

監視対象サーバーの設定

/etc/nagios/nrpe.cfgを設定する。

まずNRPEサーバーがbindするアドレスの設定。標準では127.0.0.1になっていて、かつコメントアウトされているので0.0.0.0に変更した。

# SERVER ADDRESS
# Address that nrpe should bind to in case there are more than one interface
# and you do not want nrpe to bind on all interfaces.
# NOTE: This option is ignored if NRPE is running under either inetd or xinetd

#server_address=127.0.0.1
server_address=0.0.0.0

次に、NRPEサーバーに接続できるホスト(監視元サーバー)のIPアドレスを設定。例えば、監視元サーバーのアドレスが192.168.0.1ならば、

# ALLOWED HOST ADDRESSES
# This is an optional comma-delimited list of IP address or hostnames
# that are allowed to talk to the NRPE daemon.
#
# Note: The daemon only does rudimentary checking of the client's IP
# address.  I would highly recommend adding entries in your /etc/hosts.allow
# file to allow only the specified host to connect to the port
# you are running this daemon on.
#
# NOTE: This option is ignored if NRPE is running under either inetd or xinetd

#allowed_hosts=127.0.0.1
allowed_hosts=127.0.0.1,192.168.0.1

とりあえず上記の通り設定したならば、

$ sudo /sbin/service nrpe start

でNRPEデーモンを起動。監視元サーバーから、試しに以下のようなコマンドを実行してみて動作を確認する。

$ /usr/lib64/nagios/plugins/check_nrpe -H <監視対象のホスト名/IPアドレス> -c check_load
OK - load average: 0.04, 0.01, 0.00|load1=0.040;15.000;30.000;0; load5=0.010;10.000;25.000;0; load15=0.000;5.000;20.000;0;

自作Nagiosプラグインの設定

最初の自作プラグインの話に戻ると、監視対象サーバーのような場所に/usr/{lib,lib64}/nagios/plugins/check_ethtoolを置いて、NRPEの設定に、

command[check_ethtool]=/usr/lib64/nagios/plugins/check_ethtool

を追記して、

$ sudo /sbin/service nrpe reload

で設定ファイルを読み込み、Nagiosの設定ファイルので、

define command{
        command_name check_nrpe
        command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$
        }
define service{
        use                 my-service
        host_name           myhost
        service_description Check ether
        check_command       check_nrpe!check_ethtool
        }

のような感じでコマンドと監視対象サービスを定義する。

epelのNRPEは/etc/nrpe.dのようなディレクトリを用意してくれているので、そこに監視対象の種別ごとにコマンドの定義を書いておくと楽かも。

そういば、VarnishのNagiosプラグインも以前見た時には、NRPE経由で使うことが前提だった気がするな・・・NRPEを入れるのが面倒でcheck_httpでお茶を濁してしまったのだが、ちゃんとやればすぐできるもんだな。きっかけを与えてくれた「日本一の技術ブログ」ことウノウラボさんに感謝。