Nagios · 2 min read · Nov 18, 2025

カスタムNagiosチェックプラグインの書き方

このチュートリアルは、Debian 9.2上のNagios Core 4.3.4を使用してテストされました

Nagios Exchangeには、自由にダウンロードできるプラグインが数千ありますが、時には必要なステータスが特定のシナリオに非常に特化していることがあります。

考慮事項

以下が前提とされています:

  • Nagiosがインストールされ、実行中であること(もしそうでない場合は、このチュートリアルに従ってください)。
  • Nagios管理の基本を理解していること。

この例のNagiosサーバーは192.168.0.150にホストされており、例のクライアントはIP 192.168.0.200にホストされています。

終了コード

監視対象サービスのステータスを特定するために、Nagiosはその上でチェックプラグインを実行します。Nagiosはチェックの終了コードを読み取ることでサービスのステータスを判断できます。

Nagiosは以下の終了コードを理解します:

  • 0 - サービスは正常です。
  • 1 - サービスに警告があります。
  • 2 - サービスはクリティカルなステータスです。
  • 3 - サービスのステータスは不明です。

プログラムは、Nagiosチェックプラグインとして機能するために任意の言語で書くことができます。チェックされた条件に基づいて、プラグインはNagiosに故障しているサービスを認識させることができます。

例のプラグイン

私はシンプルな例を使用します。現在の警告をチェックするためにbashスクリプトでプラグインを書きました。Nagiosサーバーがクリティカルなステータスでのみアラートを送信するように設定されていると仮定し、警告ステータスのサービスが多すぎる場合にアラートが欲しいと思います。

以下のスクリプトを考えてみましょう(check_warnings.sh):

#!/bin/bash

countWarnings=$(/usr/local/nagios/bin/nagiostats | grep "Ok/Warn/Unk/Crit:" | sed 's/[[:space:]]//g' | cut -d"/" -f5)

if (($countWarnings<=5)); then
                echo "OK - $countWarnings services in Warning state"
                exit 0
        elif ((6<=$countWarnings && $countWarnings<=30)); then
            # このケースは意味がありません。なぜなら、ただ1つの警告を追加するだけだからです。
            # これはすべての可能な終了を示す例です。
                echo "WARNING - $countWarnings services in Warning state"
                exit 1
        elif ((30<=$countWarnings)); then
                echo "CRITICAL - $countWarnings services in Warning state"
                exit 2
        else
                echo "UNKNOWN - $countWarnings"
                exit 3
fi

nagiostatsツールから提供される情報に基づいて、警告状態のサービスが5つ以下であればすべてが正常であると仮定します。

このスクリプトは、他のNagiosプラグインと同様に、/usr/local/nagios/libexec/内に置いておきます(このディレクトリは、設定によって異なる場合があります)。

すべてのNagiosプラグインと同様に、設定ファイルに追加する前にコマンドラインからチェックしたいと思います。

スクリプトの実行を許可することを忘れないでください:

sudo chmod +x /usr/local/nagios/libexec/check_warnings.sh

その後、他のスクリプトと同様に実行します:

結果はテキストメッセージと終了コードです:

新しいチェックコマンドとサービスを設定する

このステップは、独自のプラグインでも、インターネットからサードパーティのプラグインをダウンロードした場合でも同じです。

まず、commands.cfgファイルにコマンドを定義する必要があります。このファイルの場所は、あなたが行った設定によって異なります。私の場合は、/usr/local/nagios/etc/objects/commands.cfgにあります。

したがって、ファイルの最後に次のブロックを追加します:

# カスタムプラグインコマンド...
define command{
    command_name check_warnings
    command_line $USER1$/check_warnings.sh
}

$USER1$変数は、resource.cfgファイルで設定されたローカルNagios変数であり、私の場合は/usr/local/nagios/libexecを指しています。

コマンドを定義した後、そのコマンドをサービスに関連付け、次にホストに関連付けることができます。この例では、サービスを定義し、localhostに割り当てます。なぜなら、このチェックはNagios自体に対して行われるからです。

/usr/local/nagios/etc/objects/localhost.cfgファイルを編集し、次のブロックを追加します:

# 例 - 現在の警告をチェック...
define service{
    use local-service
    host_name localhost
    service_description Nagios Server Warnings
    check_command check_warnings
}

これで準備が整いました。残るのは、Nagiosを再読み込みして設定ファイルを再度読み込むことだけです。

Nagiosを再読み込みする前に、設定にエラーがないことを確認することを常に忘れないでください。これは、rootとしてnagios -vコマンドを使用して行います:

sudo /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg

次のような結果が得られるはずです:

Nagios設定の確認

エラーが0件、警告が0件であることを確認し、サービスを再読み込みします:

sudo systemctl reload-or-restart nagios.service

サービスを再読み込みした後、localhostで関連するチェックが表示されます。最初は保留中です:

実行後、その結果と共に:

クライアントでNRPEを使用する

リモートクライアントでスクリプトを実行するには、Nagios Remote Plugin Executor(NRPE)を設定する必要があります。

このチュートリアルはDebian 9に基づいているため、インストール方法を例として示しますが、他のディストリビューションの指示も見つけることができます。

Debianベースのクライアントでの一般的なインストール

このセクションのすべての設定は、チェックされるクライアントで行われることに注意してください。Nagiosサーバーではありません。

NRPEとNagiosプラグインをインストールします:

sudo apt-get install libcurl4-openssl-dev nagios-plugins nagios-nrpe-server nagios-nrpe-plugin --no-install-recommends  
sudo ln -s /usr/lib/nagios/plugins/check_nrpe /usr/bin/check_nrpe

Nagiosサーバーがクライアントでコマンドを実行できるように、/etc/nagios/nrpe.cfgのallowed_hostsエントリに追加します。行は次のようになります:

allowed_hosts=127.0.0.1,::1,192.168.0.150

NRPEで各クライアントで実行する標準チェックを定義します。/etc/nagios/nrpe_local.cfgでチェックを定義します。たとえば、ファイルのモデルは次のようになります:

######################################
# ここに任意のローカルnrpe設定を行います
######################################
#-----------------------------------------------------------------------------------
# ユーザー
   command[check_users]=/usr/lib/nagios/plugins/check_users -w 5 -c 10

# 負荷
   command[check_load]=/usr/lib/nagios/plugins/check_load -w 15,10,5 -c 30,25,20
   command[check_zombie_procs]=/usr/lib/nagios/plugins/check_procs -w 5 -c 10 -s Z
   command[check_total_procs]=/usr/lib/nagios/plugins/check_procs -w 150 -c 200

# ディスク
   command[check_root]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p /
   command[check_boot]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p /boot
   command[check_usr]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p /usr
   command[check_var]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p /var
   command[check_tmp]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p /tmp
   # 非標準のマウントポイントを追加したい場合:
   # command[check_mnt1]=/usr/lib/nagios/plugins/check_disk -w 4% -c 1% -p /export
#-----------------------------------------------------------------------------------

この一般的なファイルを持つアイデアは、すべてのクライアントで同じことをチェックできるようにすることです。

ローカルファイルと.dディレクトリがメイン設定ファイルに含まれていることを確認します:

cat /etc/nagios/nrpe.cfg | grep include | grep -v ^#

サービスを再起動します:

sudo systemctl restart nagios-nrpe-server.service

NRPEサービスが実行中であることを確認します:

cat /etc/services | grep nrpe  
netstat -at | grep nrpe

次に、Nagiosサーバーから以前に定義したNRPEコマンドの1つをチェックします:

check_users NRPEコマンドは、/etc/nagios/nrpe_local.cfgファイルで/usr/lib/nagios/plugins/check_users -w 5 -c 10を実行するように定義されていることに注意してください。

Nagiosサーバーにプラグインがない場合は、次のコマンドでインストールできます:

sudo apt-get install nagios-nrpe-plugin

要約すると、NRPEはリモートホストでスクリプトを実行し、終了コードをNagiosサーバーに返します。

カスタムスクリプトの設定

NRPEを介してリモートで実行するためのプラグインとしてカスタムスクリプトを使用するには、まずサーバー上にスクリプトを書かなければなりません。たとえば、/usr/local/scripts/check_root_home_du.shに次のように書きます:

#!/bin/bash

homeUsage=$(du -s /root/ | cut -f1)

if (($homeUsage<=$((1024*1024)))); then
                echo "OK - Root home usage is $(du -sh /root/ | cut -f1)"
                exit 0
        elif (($((1024*1024))<$homeUsage && $homeUsage<=$((3*1024*1024)))); then
                echo "WARNING - Root home usage is $(du -sh /root/ | cut -f1)"
                exit 1
        elif (($((3*1024*1024))<$homeUsage)); then
                echo "CRITICAL - Root home usage is $(du -sh /root/ | cut -f1)"
                exit 2
        else
                echo "UNKNOWN - Value received: $homeUsage"
                exit 3
fi

スクリプトの実行を許可します:

sudo chmod +x /usr/local/scripts/check_root_home_du.sh

前のスクリプトは非常にシンプルな例で、/rootディレクトリのディスク使用量をチェックし、正常、警告、クリティカルと見なすための閾値を設定しています。

クライアントのNRPE設定ファイル(/etc/nagios/nrpe_local.cfg)にコマンドを追加します:

# カスタム
   command[check_root_home_du]=/usr/local/scripts/check_root_home_du.sh

そして、NRPEリスナーを再起動します:

sudo systemctl restart nagios-nrpe-server.service

これで、サーバーにアクセスして、標準プラグインのようにテストできます。

サーバー設定ファイルでNRPEチェックを設定する

カスタムプラグインがクライアントとサーバーで動作しており、NRPEが正しく通信していることがわかったので、リモートデバイスをチェックするためのNagiosファイルを設定できます。サーバーでファイルを設定します:

/usr/local/nagios/etc/objects/commands.cfg:

#...
define command{
    command_name check_nrpe
    command_line /usr/lib/nagios/plugins/check_nrpe -H $HOSTADDRESS$ -c $ARG1$
}

/usr/local/nagios/etc/objects/nrpeclient.cfg:

define host{
    use          linux-server
    host_name    nrpeclient
    alias        nrpeclient
    address      192.168.0.200
}

define service{
    use                 local-service
    host_name           nrpeclient
    service_description Root Home Usage
    check_command       check_nrpe!check_root_home_du
}

!マークは、check_commandエントリでコマンドと引数を区切ります。これにより、check_nrpeがコマンドであり、check_root_home_duが$ARG1$の値であることが定義されます。

また、設定によっては、この最後のファイルをメインファイル(/usr/local/nagios/etc/nagios.cfg)に追加する必要があります:

#...
cfg_file=/usr/local/nagios/etc/objects/nrpeclient.cfg
#...

設定を確認し、エラーや警告がない場合は、サービスを再読み込みします:

/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg
sudo systemctl reload-or-restart nagios.service

これで、ホストに新しいカスタムチェックがあります:

結論

Nagiosには、Nagios Exchangeで利用可能な膨大なプラグインライブラリがあります。しかし、大規模な環境では、特定の用途のためにカスタムチェックが必要になることが非常に多いです。たとえば、特定のタスクの結果をチェックしたり、社内で開発されたアプリケーションを監視したりすることです。

Nagiosが提供する柔軟性は、これらのケースシナリオに最適です。

Share: X/Twitter LinkedIn

新しい投稿を受信箱で受け取る

スパムはありません。いつでも購読を解除できます。