ウェブサイト検索

クライアント側の監視のためにNRPEを設定する方法


NRPE、またはNagios Remote Plugin Executorは、監視設定のクライアントサイドサービスです。監視サーバーはクライアントにコマンドを送信し、クライアントは作業がないときに受動的に待機します。受信したコマンドがあると、nrpeはローカル設定を確認し、コマンドに構成されたプラグインを実行し、結果をサーバーに戻して処理します。サーバーサイドのインストールについてはNagiosのインストールガイドを参照できますが、このガイドはクライアントサイドに焦点を当てます。

このチュートリアルでは、あなたは学びます:

  • Debian/Red Hat ベースのディストリビューションに NRPE をインストールする方法
  • NRPEを設定してサーバーからのコマンドを受け入れる方法
  • サーバーとクライアント側でカスタムチェックを構成する方法

NRPE - Nagiosリモートプラグインエグゼキュータ

ソフトウェアの要件と使用される規約

Debian/Red HatベースのディストリビューションにNRPEをインストールする

必要なソフトウェアのインストールは簡単です。Ubuntu、openSUSE、Fedora、そしてRHELについて説明します。

UbuntuにNRPEをインストールする

Ubuntuでは、このプロセスはワンライナーです。nrpeデーモンのパッケージ、nagios-nrpe-serverはデフォルトのリポジトリにあります。

apt-get install nagios-nrpe-server

Ubuntuの場合、主な設定ファイルは/etc/nagios/nrpe.cfgです。デフォルトで含まれているディレクトリは/etc/nagios/nrpe.d/で、ドロップイン設定に使用できます。このパッケージは便利のために空のローカル設定ファイル/etc/nagios/nrpe_local.cfgも追加します。この最後のファイルはrpmベースのディストリビューションには含まれていません。

openSUSEにNRPEをインストールする

最近のopenSUSEバージョンでは、nrpeソフトウェアもデフォルトのリポジトリにパッケージされています。したがって、インストールは1つのLinuxコマンドで行えます。

zypper in nrpe

他のディストリビューションとは異なり、openSUSEはメインの設定ファイルをパス/etc/nrpe.cfgに配置します。

FedoraにNRPEをインストールする

フェドラプロジェクトはnrpeもパッケージ化しているため、デフォルトのリポジトリからアクセスできるはずです。インストールにはdnfを使用するだけです。

dnf install nrpe

主要な設定ファイルは/etc/nagios/nrpe.cfgであり、デフォルトの含まれるディレクトリは/etc/nrpe.d/です。

Red Hat Enterprise Linux に NRPE をインストールする

RHELの場合、nrpeパッケージはデフォルトのリポジトリにはありません。そこからパッケージをインストールするには、EPELリポジトリを有効にする必要があります。

ガイドに記載されている手順に従ってEPELリポジトリを有効にするか、内部ソフトウェア配布のある閉じた環境でEPELリポジトリの内容をインポートして公開することができます。どちらの場合でも、リポジトリがクライアントマシンで利用可能になった後のインストールプロセスは、上記とほぼ同じです。

yum install nrpe

設定ファイルは、Fedoraの場合と同じ場所にあります。

警告
新しいリポジトリを本番環境で有効にする前に、必ず慎重なテストを行ってください。この場合、EPELにはRed Hatパッケージの更新と見なされる可能性のあるパッケージが含まれており、フルアップデートを実行する際にシステム上で予期しないソフトウェアの変更が発生する可能性があります。

サーバーからのコマンドを受け入れるためにNRPEを構成する

クライアントサービスを設定するには、主要な設定ファイルを使用することもできますが、カスタムファイルを使用し、メイン設定ファイルに含まれるディレクトリに配置することをお勧めします。このようにすることで、nrpe.cfgのパッケージアップグレードからの更新を、カスタム設定に変更を加えることなく適用できます。

私たちは、カスタムパッケージに独自のカスタム構成ファイルを含めることもでき、これによってクライアント監視の構成を中央集権的かつ自動的に更新できます。それを考慮に入れて、次の例ではすべてのディストリビューションの/etc/nrpe.d/custom.cfgでクライアントを構成します。

NRPEはデフォルトでlocalhost以外のコマンドを受け付けません。これはセキュリティ上の理由です。サーバーからコマンドを実行できるようにするには、サーバーのIPアドレスを許可されたアドレスとして設定する必要があります。私たちの場合、サーバーはNagiosサーバーで、IPアドレスは10.101.20.34です。次の設定をクライアントの構成に追加します:

allowed_hosts=10.101.20.34

複数のアドレスまたはホスト名をコンマで区切って追加できます。上記のロジックは、監視サーバーには静的アドレスが必要であることに注意してください。ここでIPアドレスを使用している場合、監視サーバーでdhcpを使用すると、確実に設定が壊れてしまいます。ホスト名を使用するシナリオにも同様のことが当てはまり、クライアントがサーバーのホスト名を解決できない場合でも同様です。

サーバーとクライアント側でカスタムチェックを設定すること

私たちの監視設定の能力を示すために、ローカルのpostfixシステムがユーザーrootのクライアントにメールを配信するかどうかを知りたいとしましょう。そのメールにはcronjobの出力、何らかのレポート、またはSTDERRに書き込まれる何かが含まれており、デフォルトでメールとして配信されます。たとえば、abrtは、プロセスがクラッシュしたときにデフォルトでrootにクラッシュレポートを送信します。私たちはメールリレーを設定していませんが、メールが届くかどうかを知りたいと考えています。それを監視するためのカスタムチェックを書きましょう。

  1. パズルの最初のピースは、チェックそのものです。次のシンプルなbashスクリプト check_unread_mail を考えてみてください:

    #!/bin/bash
    
    USER=root
    
    if [ "$(command -v finger >> /dev/null; echo $?)" -gt 0 ]; then
            echo "UNKNOWN: utility finger not found"
            exit 3
    fi
    if [ "$(id "$USER" >> /dev/null ; echo $?)" -gt 0 ]; then
            echo "UNKNOWN: user $USER does not exist"
            exit 3
    fi
    ## check for mail
    if [ "$(finger -pm "$USER" | tail -n 1 | grep -ic "No mail.")" -gt 0 ]; then
            echo "OK: no unread mail for user $USER"
            exit 0
    else
            echo "WARNING: unread mail for user $USER"
            exit 1
    fi

    この簡単なチェックは、fingerユーティリティを使用して、ユーザーrootの未読メールを確認します。finger -pmの出力はバージョンやディストリビューションによって異なる場合があるため、いくつかの調整が必要な場合があります。

  2. 例えば、Fedora 30では、finger -pm <username>の出力の最後の行は「No mail.」ですが、openSUSE Leap 15.1では「No Mail.」になります(大文字のMailに注意)。この場合、grep -iがこの違いに対処してくれますが、異なるディストリビューションやバージョンで作業する際には、追加の作業が必要になる場合があることを示しています。

  3. このチェックを動作させるにはfingerが必要です。パッケージの名前はすべてのディストリビューションで同じなので、apt、zypper、dnf、またはyumを使用してインストールできます。
  4. チェック実行可能ファイルを設定する必要があります。

    chmod +x check_unread_mail
  5. チェックを/usr/lib64/nagios/pluginsディレクトリに配置します。これはnrpeチェックの一般的な場所です。後でこれを参照します。
  6. 私たちはコマンドをcheck_mail_rootと呼びます。受け入れるコマンドと、特定のコマンドが到着したときに何を行う必要があるかをnrpeに伝えるカスタムクライアント設定に別の行を追加しましょう:

    command[check_mail_root]=/usr/lib64/nagios/plugins/check_unread_mail
  7. これでクライアントの設定は完了です。systemdを使用して、クライアントでサービスを開始できます。サービス名はDebian系ではnagios-nrpe-serverであり、他のディストリビューションでは単にnrpeです。

    systemctl start nagios-nrpe-server
    systemctl status nagios-nrpe-server
    ● nagios-nrpe-server.service - Nagios Remote Plugin Executor
       Loaded: loaded (/lib/systemd/system/nagios-nrpe-server.service; enabled; vendor preset: enabled)
       Active: active (running) since Tue 2019-09-10 13:03:10 CEST; 1min 51s ago
         Docs: http://www.nagios.org/documentation
     Main PID: 3782 (nrpe)
        Tasks: 1 (limit: 3549)
       CGroup: /system.slice/nagios-nrpe-server.service
               └─3782 /usr/sbin/nrpe -c /etc/nagios/nrpe.cfg -f
    
    szept 10 13:03:10 mail-test-client systemd[1]: Started Nagios Remote Plugin Executor.
    szept 10 13:03:10 mail-test-client nrpe[3782]: Starting up daemon
    szept 10 13:03:10 mail-test-client nrpe[3782]: Server listening on 0.0.0.0 port 5666.
    szept 10 13:03:10 mail-test-client nrpe[3782]: Server listening on :: port 5666.
    szept 10 13:03:10 mail-test-client nrpe[3782]: Listening for connections on port 5666
  8. さて、サーバーサイドを設定できます。まだ持っていない場合は、コマンドを定義して、リモートのnrpeインスタンスを、コマンドを唯一の引数として呼び出すことができます。

    this command runs a program $ARG1$ with no arguments
    define command {
            command_name    check_nrpe_1arg
            command_line    $USER1$/check_nrpe -H $HOSTADDRESS$ -t 60 -c $ARG1$ 2>/dev/null
    }
  9. クライアントをホストとして定義します:

    define host {
            use                     linux-server
            host_name               mail-test-client
            alias                   mail-test-client
            address                 mail-test-client
    }
  10. アドレスはIPアドレスまたはホスト名である可能性があります。後者の場合、監視サーバーによって解決できることを確認する必要があります。

  11. 上記のホストでNagiosサイドコマンドとクライアントサイドコマンドを使用してサービスを定義できます:

    define service {
            use                        generic-service
            host_name                  mail-test-client
            service_description        OS:unread mail for root
            check_command              check_nrpe_1arg!check_mail_root
    }
  12. これらの調整は、Nagiosサーバーが起動時に読み込む任意の設定ファイルに配置できますが、設定ファイルを整頓しておくことは良い慣習です。

  13. 新しいNagios設定を確認します。

    nagios -v /etc/nagios/nagios.cfg

    「状況が問題なければ」、サーバーの再読み込みで設定を適用できます:

    systemctl reload nagios

結論

すべてが正常に動作すれば、数分以内に新しいクライアントがNagiosのウェブページに表示されるはずです。その新しいサービスは「OS: root用の未読メール」で、状態は緑の「OK」と表示されます(つまり、rootに未読メールがなければ)。

上記のスクリプトは、新しいメールが故意に届いた場合のみ警告を報告します:例の環境では、重要な問題とは見なされず、アプリケーションクラッシュはメールが届くずっと前に重大なエラーを生成する必要があります。バックグラウンドでは、Nagiosサーバーが「check_mail_root」コマンドをクライアントに送信し、そこでnrpeが私たちのカスタムスクリプトを実行し、「OK: ユーザーrootには未読メールがありません」と出力し、終了コード0(これはNagiosによって「OK」状態として翻訳されます)を返します。

この簡単なセットアップは、Nagios+nrpe構成におけるコマンドとデータの流れを示すことを目的としており、監視機能を拡張する基本的な手段を説明します。一般的な用途のために、ログファイルの解析、データベースのチェック、ウェブサーバのステータス情報など、さまざまな言語で数え切れないほどのチェック(プラグインと呼ばれる)が書かれています。

多くのものは上記のリポジトリにパッケージ化されており、さらに公式のNagiosページでも見つけることができます。これらは新しいものを監視する必要があるときに素晴らしいリソースですが、最初から自分の必要に合った機能をそのまま実行すると思ってはいけません。この場合も設定の調整や慎重なテストが必要ですし、少しの修正が素晴らしい機能やバグ修正を追加するかもしれないと感じた場合は、遠慮せずに監視コミュニティに貢献してください。結局のところ、これは最初に作られる方法です。

関連記事: