Icinga 2 · 1 min read · Nov 18, 2025

Icinga 2で監視する新しいホストとサービスを追加する

このチュートリアルでは、Icinga 2で監視される新しいホストを追加する方法と、ウェブHTTPサーバーなどのホストのサービスがIcingaによってどのように監視されるかを示します。また、ネットワークインフラストラクチャ内のUDPサービスを監視するために独自のカスタムIcingaプラグインコマンドを作成する方法も示します。

Icinga 2は、サーバーおよびサービスチェックや通知を簡単に実装できるプラグインインフラストラクチャを提供します。この事実により、システム管理者やプログラマーはIcinga 2の新しい機能を構築し、ホスト、ネットワークサービス、またはネットワーク機能のさまざまな側面を検証するための特別なコマンドを作成できます。

Icinga 2は、サービスルール、通知、依存関係、およびスケジュールされたダウンタイムオブジェクトに使用されるオブジェクト属性を持つホスト定義をhosts.confファイルに保存します。このファイルは、/etc/icinga2/conf.d/ディレクトリにあります。このファイルに新しいホスト定義を追加して、Icinga2の監視プロセスによってチェックされるようにします。以下の例では、デフォルトゲートウェイルーターがICMPチェックを介してオンラインかどうかをIcinga2によって定期的にチェックされるように、新しい定義を追加します。

nano /etc/icinga2/conf.d/hosts.conf

ファイルの最後に移動し、新しいホスト定義を追加するために以下の行を追加します。

object Host "Router" {  
  address = "192.168.1.1"  
  check_command = "hostalive"  
}

たとえば、メインルーターでは、認証と設定に使用されるHTTPウェブサーバーの状態もチェックしたいと考えています。以下の行は、ルーター上のウェブサーバーが生きていて、適切なHTTPコードで応答するかどうかをチェックします。

object Service "http" {  
  host_name = "Router"  
  check_command = "http"  
}

Icinga 2でウェブサーバーを監視する

Icinga 2が新しいホスト定義を取得し、新しいリソースを定期的に監視を開始するためには、以下のコマンドを発行してプロセスを再起動する必要があります。

systemctl restart icinga2.service

新しく追加されたホスト、つまりルーターの状態を確認するには、Icinga 2 Webパネルにログインし、Overview -> Hostsに移動します。右側のペインには、新しく追加されたホストの状態が表示されるはずです。以下の画像は、私たちのルーターの状態を示しています。ホストチェックは基本的にICMPプロトコルを介して実行され、Icinga2はウェブパネルにホストのラウンドトリップ平均時間を表示します。

Icinga 2ホストの状態

ホストのHTTPサービスチェックの状態を表示したい場合は、Overview -> Servicegroupsに移動し、HTTP Checksをクリックします。右側のペインには、ルーターのHTTPサービスの状態が表示されるはずです。以下のスクリーンショットに示されています。

ホストサービスの状態

Icinga 2には、幅広いサービスを監視するために使用できる一連の事前定義されたコマンドが付属しています。しかし、これらのデフォルトコマンドは、カスタムサービスをチェックするには不十分な場合があります。この場合の1つのアプローチは、Icinga 2によってサービスを監視するために呼び出される独自のカスタムコマンドスクリプトを作成することです。以下の例では、ネットワーク上のさまざまなUDPサービスの状態を確認するために、新しいカスタムコマンドスクリプトを追加する方法を示します。カスタムコマンドはパラメータ化されている必要があり、–H hostname または IP–p port numberの形式で少なくとも2つのパラメータを含む必要があります。UDPサービスポートを確認するためのカスタムコマンドスクリプトは、/usr/lib/nagios/plugins/ディレクトリに配置され、以下のサンプルに示すように内容を持つ必要があります。

nano /usr/lib/nagios/plugins/check_udpport

check_udpportファイルの抜粋。

#!/bin/bash  
while getopts H:p: option  
do  
 case "${option}"  
in  
H) addr=${OPTARG};;  
p) port=${OPTARG};;  
esac  
done  
  
/bin/nc -vz -u "$addr" "$port" > /dev/null 2>&1  
  
stat=`echo $?`  
  
if test $stat -eq 0; then  
echo "Port $port is opened on $addr"  
exit 0  
else  
echo "Port $port is not opened on $addr"  
exit 2  
fi

IcungaカスタムUDPプラグイン

このスクリプトがどのように機能するかを理解してみましょう。プラグインは、単純なBashスクリプトに他なりません。while制御式を使用して、Hおよびpの2つのパラメータをループします。Hとpのシェル変数はパラメータ化され、case文を使用してコマンドライン引数として解析されます。case文は、パラメータが存在するかどうかをテストし、それらをaddrおよびport変数として宣言します。次に、$ addrおよび$ port変数がnetcatコマンドのコマンドオプションとして追加され、これにより、$addr変数で定義されたIPアドレスのホストに対して、$port変数で定義されたポート番号が開いているかどうかを調べます。netcatコマンドの出力と最終的なエラーは、このプラグインには関心がないため、Linuxのブラックホール/dev/nullファイルに破棄されます。必要なのは、netcatコマンドの終了コードです。netcatがホストのポートをチェックした後、調べられたUDPポートが開いている場合は常に0の終了コードを返します。コマンドの残りは非常にシンプルです。if-elseの条件文は、次のように印刷します。指定されたIPアドレスでUDPポートが開いている場合、そのホストのIPアドレスに対して「ポートが開いている」という内容の文字列を印刷し、終了コード0を付加します。終了コード0は、Linuxのプロセスによって返される成功またはエラーなしのコードです。UDPポートが開いていない場合(netcatの終了コードが0以外の場合)、ホストの「ポートが開いていない」という文字列を印刷し、終了コード2を付加します。このスクリプト内の各echo印刷文字列の後に追加された終了コードは、以下に説明するようにIcinga2チェックにとって重要な意味を持ちます。

Icinga 2におけるサービス状態またはホスト状態のコマンドプラグイン戻りコード:

0 = サービスのOKおよびホストのUP

1 = サービスのWARNINGおよびホストのUPまたはDOWN/UNREACHABLE(ホストがフラッピングしているか、状態が頻繁に変わる)

2 = サービスのCRITICALおよびホストのDOWN/UNREACHABLE

3 = UNKNOWN DOWN/UNREACHABLE

基本的に、Icinga 2はこのスクリプトをホストおよびポートパラメータで実行し、UDPポートが到達不能であるか、ホストのUDPサービスがクリティカルであることを警告するか、UDPポートが到達可能であり、UDPサービスが良好な状態で実行されていることを通知します。

スクリプトファイルを編集した後、保存して閉じ、以下のコマンドで実行権限を追加してファイルが実行可能であることを確認します。

chmod +x /usr/lib/nagios/plugins/check_udpport

次に、スクリプトが期待通りに動作しているかどうかをテストするために、ネットワーク内のホストに対してUDPが開いているポートとUDPが閉じているポートに対してコマンドを実行します。以下の構文を発行します。

ここでは、TFTPサーバーが192.168.1.2ホストでチェックされます。

/usr/lib/nagios/plugins/check_udpport –H 192.168.1.2 –p 69 

閉じていることが確実なUDPポートに対してチェックをシミュレートします。

/usr/lib/nagios/plugins/check_udpport –H 192.168.1.2 –p 68

UDPポートのテスト

この新しいカスタムプラグインをIcinga 2で広く使用するために、Icinga 2コマンドの設定ファイルに新しいコマンド定義を追加します。以下の例に示すように。

nano /etc/icinga2/conf.d/commands.conf

このファイルの一番下に移動し、次のようにコマンド定義を追加します。

object CheckCommand "myudp" {  
  command = [ PluginDir + "/check_udpport" ]  
    
    arguments = {  
    "-H" = "$addr$"  
    "-p" = "$port$"  
}  
  vars.addr = "$address$"  
}

Icingaコマンド定義の追加

Icinga 2の設定でckeck_udpportコマンドを呼び出すために使用されるコマンドの名前は「myudp」になります。サービスホスト定義のためにコマンドを呼び出すときにアドレスを指定する必要はありません。なぜなら、それはIcinga 2マクロ$address$変数によってハードコーディングされているからです。

コマンドが期待通りに動作しているかどうかを確認するために、特定のUDPサービスがそのホストで開いているかどうかをチェックするためにホストの新しいサービス定義を追加します。たとえば、192.168.1.2ホストのDHCPポートが開いているかどうかをチェックするには、Icinga2のhosts.confファイルに以下の定義を追加します。

object Service "dhcp" {  
  host_name = "Pi.hole"  
  check_command = "myudp"  
vars.port = "67"  
}

Icinga 2でUDPポートチェックを追加

その後、Icinga 2を再起動して変更を反映させ、Icinga 2 Webパネルに移動し、Overview -> Hostsをクリックし、特定のホストをクリックしてUDPサービスの状態を確認します。以下のスクリーンショットに示されています。

UDPサービスの状態

以上です!ホストを正常に追加し、そのサービスはIcinga 2ネットワーク監視アプリケーションによって定期的にチェックされます。Icinga 2監視エンジンおよびカスタムコマンドスクリプトに関する他のカスタム設定については、以下のアドレスのドキュメントページを訪れてください:https://www.icinga.com/docs/icinga2/latest/doc/03-monitoring-basics/#check-commands

Share: X/Twitter LinkedIn

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

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