2026年6月30日
2026年6月30日
Nagios Coreで死活監視とメール通知を設定する方法|Ubuntuへの導入から確認まで
Nagios Core は、サーバーやサービスを決まった間隔で調べ、応答が無い・異常があるときに通知する監視ソフトです。この記事では、Ubuntu のサーバーに Nagios Core を入れ、WordPress を動かしている Web サーバーの死活(ping)と HTTPS の応答、証明書の期限を監視し、障害をメールで受け取るまでを説明します。
手順は Nagios の公式のインストール手順と、Nagios Core のソースコードに含まれる設定例に沿っています。2026年11月時点の最新版は Nagios Core 4.5.14、Nagios Plugins 2.5 です。
監視用のサーバーは、監視される Web サーバーとは別に用意します。同じサーバーで監視すると、サーバーが止まったときに通知も止まります。
Nagios Core を入れる(Ubuntu 22.04・24.04)
必要なパッケージ
sudo apt-get update
sudo apt-get install -y autoconf gcc libc6 make wget unzip apache2 php libapache2-mod-php libgd-dev openssl libssl-dev
メールで通知するため、mail コマンドも先に入れておきます。Nagios Core の configure は、このとき見つかった mail コマンドのパスを通知の設定に書き込みます。
sudo apt-get install -y mailutils
mailutils を入れると、メールを送るための MTA(多くは Postfix)も一緒に入ることがあります。Postfix の設定画面が出たら、環境に合わせて選びます。
ソースを取得してインストールする
cd /tmp
wget -O nagioscore.tar.gz https://github.com/NagiosEnterprises/nagioscore/releases/download/nagios-4.5.14/nagios-4.5.14.tar.gz
tar xzf nagioscore.tar.gz
cd /tmp/nagios-4.5.14
sudo ./configure --with-httpd-conf=/etc/apache2/sites-enabled
sudo make all
configure の最後に表示される一覧で、Mail program: が /usr/bin/mail などになっていることを確かめます。
# nagios ユーザーとグループを作り、Apache のユーザーを nagios グループに入れる
sudo make install-groups-users
sudo usermod -a -G nagios www-data
# 本体・起動用の設定・外部コマンド用のディレクトリ・設定例を入れる
sudo make install
sudo make install-daemoninit
sudo make install-commandmode
sudo make install-config
# Web 画面用の Apache の設定を入れる
sudo make install-webconf
sudo a2enmod rewrite
sudo a2enmod cgi
新しい版が出ている場合は、URL とディレクトリ名の版番号を、Nagios Core のリリース一覧にある最新のものに置き換えます。
Web 画面のログイン用アカウントを作る
sudo htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin
-c はファイルを新しく作るオプションです。2人目以降を追加するときに付けると、既存のアカウントが消えます。
Nagios Plugins を入れる
実際の検査(ping や HTTP の確認)は、Nagios Plugins の各コマンドが行います。
sudo apt-get install -y autoconf gcc libc6 libmcrypt-dev make libssl-dev wget bc gawk dc build-essential snmp libnet-snmp-perl gettext iputils-ping
cd /tmp
wget -O nagios-plugins.tar.gz https://github.com/nagios-plugins/nagios-plugins/releases/download/release-2.5/nagios-plugins-2.5.tar.gz
tar zxf nagios-plugins.tar.gz
cd /tmp/nagios-plugins-2.5
sudo ./configure
sudo make
sudo make install
プラグインは /usr/local/nagios/libexec/ に入ります。
起動する
sudo systemctl restart apache2
sudo systemctl enable --now nagios
ファイアウォール(ufw)を使っている場合は、Apache への接続を許可します。
sudo ufw allow Apache
sudo ufw reload
ブラウザで http://監視サーバーのIPアドレス/nagios を開き、nagiosadmin と設定したパスワードでログインします。最初から、監視サーバー自身(localhost)の監視が設定されています。
Web 画面は BASIC 認証で守られていますが、HTTP のままだとパスワードが暗号化されずに送られます。インターネットに公開する場合は HTTPS にするか、接続できる IP を限定します。
設定ファイルの場所
ソースから入れた場合、設定は /usr/local/nagios/etc/ にあります。
| ファイル | 内容 |
|---|---|
nagios.cfg |
全体の設定。読み込むオブジェクト定義のファイルを cfg_file と cfg_dir で指定する |
objects/contacts.cfg |
通知先(連絡先)と連絡先グループ |
objects/templates.cfg |
ホストやサービスのひな形(linux-server・generic-service など) |
objects/commands.cfg |
検査と通知のコマンドの定義 |
objects/localhost.cfg |
監視サーバー自身の監視の設定 |
通知先のメールアドレスを設定する
/usr/local/nagios/etc/objects/contacts.cfg の nagiosadmin の email を、通知を受け取るアドレスに書き換えます。
define contact {
contact_name nagiosadmin
use generic-contact
alias Nagios Admin
email you@example.com
}
同じファイルの連絡先グループ admins に nagiosadmin が入っています。設定例のひな形(linux-server・generic-service)は、通知を admins に送る設定になっています。
通知のメールは、commands.cfg の notify-host-by-email と notify-service-by-email が送ります。中で mail コマンドを呼び出しているため、mail でメールが送れることを先に確かめておきます。
echo "test" | mail -s "Nagios mail test" you@example.com
届かない場合は、MTA の設定を確かめます。クラウドのサーバーでは、外向きの 25番ポートが止められていて、外部の SMTP サーバーを中継に使う設定が必要なことがあります(「Postfix で外部の SMTP サーバーを中継に使う」)。
監視する Web サーバーを追加する
監視対象の設定を、専用のファイルにまとめます。/usr/local/nagios/etc/servers/ を作り、nagios.cfg でこのディレクトリを読み込むようにします。
sudo mkdir -p /usr/local/nagios/etc/servers
sudo chown nagios:nagios /usr/local/nagios/etc/servers
/usr/local/nagios/etc/nagios.cfg で、次の行の先頭の # を消します(無ければ追加します)。
cfg_dir=/usr/local/nagios/etc/servers
/usr/local/nagios/etc/servers/web01.cfg を作り、ホストとサービスを定義します。address と -H のドメイン名は監視したいサーバーのものに置き換えます。
define host {
use linux-server
host_name web01
alias WordPress Web server
address 203.0.113.20
notification_period 24x7
}
define service {
use generic-service
host_name web01
service_description HTTPS
check_command check_http!-H www.example.com -S --sni -u /
}
define service {
use generic-service
host_name web01
service_description SSL certificate
check_command check_http!-H www.example.com -S --sni -C 21,7
check_interval 720
}
- ホストの死活は、ひな形
linux-serverのcheck-host-alive(check_ping)で調べます。ping に応答しないサーバー(ICMP を止めている場合)では、ホストが「DOWN」になります。その場合はホストのcheck_commandを別の検査にします。 linux-serverの通知の時間帯(notification_period)は、設定例ではworkhours(平日の日中)です。夜間や休日にも通知を受け取るため、上の例では24x7に上書きしています。check_httpの-Sは HTTPS で接続、--sniは SNI でホスト名を送る指定、-uは調べるパスです。応答が 2xx・3xx なら正常、4xx は警告、5xx や応答なしは異常になります。-C 21,7は、証明書の残りが21日を切ったら警告、7日を切ったら異常にします。-Cを付けると証明書だけを調べてページの中身は調べないため、HTTPS の応答とは別の監視項目にしています。証明書の期限は頻繁に変わらないため、check_intervalを720分(12時間)にしています。
監視対象のサーバーのディスクの空きや負荷を調べるには、監視対象のサーバーに NRPE などのエージェントを入れる必要があります。この記事では扱いません。
設定を検査して反映する
設定を変えたら、反映する前に検査します。
sudo /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg
最後に Total Warnings: 0 と Total Errors: 0 が出れば問題ありません。エラーがあると、ファイル名と行の手がかりが表示されます。検査が通ったら再起動します。
sudo systemctl restart nagios
通知が届くか試す
Web 画面の「Services」で監視項目を開き、「Send custom service notification」を使うと、障害が起きていなくても通知を送れます。メールが届くことを確かめておきます。
実際の障害の検出も試す場合は、テスト用のサーバーで Web サーバーを止めます(sudo systemctl stop nginx など)。generic-service の設定例では、10分ごとに調べ、異常を見つけたら2分ごとに調べ直し、3回続けて異常のときに通知します。そのため、止めてから通知が届くまで、数分から十数分かかります。確かめたら Web サーバーを起動し、回復の通知(RECOVERY)が届くことも確かめます。
うまくいかないとき
- Web 画面の状態の一覧などが開けない:
sudo a2enmod cgiを実行したか、Apache を再起動したかを確かめます。 - すべての項目が「(No output on stdout)」や UNKNOWN: Nagios Plugins が入っていない可能性があります。
ls /usr/local/nagios/libexec/でプラグインがあるか確かめます。 - メールが届かない:
mailコマンドで直接送れるかを確かめ、届かなければ MTA のログ(Postfix ならsudo journalctl -u postfixや/var/log/mail.log)を見ます。通知の時間帯(notification_period)がworkhoursのままになっていないかも確かめます。
注意事項
- 監視サーバーは、監視されるサーバーとは別の場所に置きます。同じサーバーやネットワークに置くと、障害のときに監視と通知も止まります。
- Web 画面のアカウントのパスワードは推測されにくいものにし、公開する場合は HTTPS と接続元の制限を設定します。
- 監視の間隔を短くしすぎると、監視される側の負荷やログが増えます。サイトの規模に合わせて調整します。
まとめ
- Nagios Core と Nagios Plugins を、公式の手順に沿ってソースから入れる。通知に使う
mailコマンドはconfigureの前に入れる contacts.cfgのnagiosadminのemailを通知先のアドレスにする- 監視対象は
cfg_dirで読み込むディレクトリにまとめ、check_httpで HTTPS の応答と証明書の期限を調べる - 設定例の
linux-serverは通知が日中だけなので、必要ならnotification_periodを24x7にする nagios -vで設定を検査してから再起動し、テストの通知で届くことを確かめる
Nagios を使った WordPress サイトの監視の例は「Nagios で WordPress サイトを監視する」、独自の検査コマンドの作り方は「Nagios のカスタムプラグインを作る」で説明しています。