PrometheusやZabbixが主流の今、なぜNagiosを使い続けるのか?
私が管理しているインフラでは、PrometheusとGrafanaが約20個のDocker Swarmクラスターのリアルタイムメトリクス監視を担当しています。しかし、レガシーアプリケーションが動作する物理サーバーの監視や、「生きているか死んでいるか」(Up/Down)というバイナリな回答が必要な場合、Nagios Coreは依然として最良の選択肢です。派手さはありませんが、非常に堅実で粘り強いツールです。
新人のエンジニアは、Nagios의 UI가 古臭いとか、テキストベースの設定ファイルはミスが起きやすいと敬遠しがちです。しかし実際には、その安定性は最新のツールが時に及ばないほどです。Nagiosは非常に軽量に動作し、消費RAMは20MB未満、状態を保存するための複雑なデータベースも必要ありません。
Nagiosによる一般的な3つの監視アプローチ
リモートサーバーからデータを取得するには、主に3つの方法があります。
- 公開プロトコル(HTTP, PING, SMTP)経由のチェック: この方法は表面的な確認しかできません。Webサイトが生きていることはわかりますが、そのサーバーのCPUが過負荷状態かどうかはわかりません。
- SNMP経由のチェック: スイッチやルーターなどのネットワーク機器の標準的な方法です。ただし、LinuxでのSNMP設定はやや煩雑で、古いv2を使用するとセキュリティリスクが伴います。
- NRPE (Nagios Remote Plugin Executor) 経由のチェック: Linuxサーバーにとって最も効率的な方法です。小さなエージェントを対象サーバーで実行し、ローカルスクリプトを実行して、その結果をポート5666経由で中央のNagiosサーバーに返します。
実用面でのメリットとデメリットの考察
メリット:
– リソース消費が極めて低く、ほぼゼロに等しい。
– 過去20年間にわたりコミュニティによって蓄積された膨大なプラグインがあり、大抵のものは既存のスクリプトが存在する。
– 無限のカスタマイズ性。Bash、Python、Perlなどのスクリプトが書ければ、サーバー室の温度からDB内の注文数まで、あらゆるものを監視できる。
デメリット:
– すべての設定を .cfg ファイルで管理する。中括弧 } を一つ忘れただけで、サービス全体が停止する。
– デフォルトのUIは90年代からタイムスリップしてきたかのよう. しかし、私たちの目的はタイムリーなアラートを受け取ることであり、綺麗なグラフを眺めることではないはずだ。
ここからは、パフォーマンスを最適化するために Nagios Coreをソースコードからインストール し、NRPE を使ってリモート監視を行う手順を解説します。
ステップ 1: Ubuntu 22.04にNagios Coreをインストールする
まず、ソースコードのビルドに必要な依存パッケージをインストールします。安定性のためにUbuntu 22.04 LTSを使用します。
sudo apt update
sudo apt install -y autoconf gcc libc6 make wget unzip apache2 php libapache2-mod-php libgd-dev
sudo apt install -y libmcrypt-dev libssl-dev bc gawk dc build-essential snmp libnet-snmp-perl gettext
次に、最新版のNagios Coreを一時ディレクトリにダウンロードします。
cd /tmp
wget https://assets.nagios.com/downloads/nagioscore/releases/nagios-4.4.9.tar.gz
tar xzf nagios-4.4.9.tar.gz
cd nagios-4.4.9
ビルドとインストールのプロセスは以下の通りです。
sudo ./configure --with-httpd-conf=/etc/apache2/sites-enabled
sudo make all
# システムユーザーとグループの作成
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
sudo make install-webconf
最後に、ダッシュボードにログインするための nagiosadmin アカウントを作成します。このパスワードは忘れないようにメモしておいてください。
sudo htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin
ステップ 2: Nagios Pluginsのインストール
Nagios Coreが「脳」だとすれば、プラグインは「手足」です。プラグインがなければ、Nagiosはディスク容量やRAMの状態を確認する方法を知りません。
cd /tmp
wget https://nagios-plugins.org/download/nagios-plugins-2.3.3.tar.gz
tar xzf nagios-plugins-2.3.3.tar.gz
cd nagios-plugins-2.3.3
sudo ./configure
sudo make
sudo make install
ステップ 3: クライアント(監視対象サーバー)でのNRPE設定
監視対象となるサーバー(クライアント)には、Nagios一式をインストールする必要はありません。NRPEエージェントだけで十分です。時間を節約するため、ここではソースビルドではなく apt を使用します。
sudo apt update
sudo apt install nagios-nrpe-server nagios-plugins
/etc/nagios/nrpe.cfg ファイルを開きます。allowed_hosts の行を探し、NagiosサーバーのIPを追加して接続を許可します。
allowed_hosts=127.0.0.1,10.0.0.50 # 10.0.0.50 は私のNagiosサーバーのIPです
設定を適用するためにサービスを再起動します: sudo systemctl restart nagios-nrpe-server。
ステップ 4: Bashスクリプトでカスタムプラグインを自作する
ここが最も面白い部分です。例えば、アプリケーションのログフォルダが1GBを超えた場合に警告を出したいとしましょう。クライアント側で /usr/lib/nagios/plugins/check_log_size.sh ファイルを作成します。
#!/bin/bash
path="/var/log/myapp"
size=$(du -s $path | cut -f1)
if [ $size -gt 1048576 ]; then
echo "CRITICAL - ディレクトリ $path が $(($size/1024)) MB を占有しています"
exit 2
elif [ $size -gt 524288 ]; then
echo "WARNING - ディレクトリ $path が $(($size/1024)) MB を占有しています"
exit 1
else
echo "OK - ログ容量は正常です"
exit 0
fi
chmod +x コマンドで実行権限を付与します。その後、このコマンドを nrpe.cfg に登録するだけで、Nagiosサーバーからリモートで呼び出せるようになります。
ステップ 5: 自動メール通知の設定
障害発生時にすぐにメールを受け取るには、Nagiosにメール転送エージェント(MTA)が必要です。PostfixはGmailやSendGridのリレーと統合しやすいため、最も一般的な選択肢です。
sudo apt install postfix mailutils
/usr/local/nagios/etc/objects/contacts.cfg ファイルを編集し、通知先メールアドレスを更新します。
define contact {
contact_name nagiosadmin
use generic-contact
alias Nagios Admin
email [email protected]
}
ちょっとしたコツ:Amazon SESなどのSMTPサービスを使用することをお勧めします。これにより、システムから毎日数十通のメールが送信されても、アラートメールがスパムフォルダに振り分けられるのを防ぐことができます。
結び:どのような時にNagiosを選ぶべきか?
Nagiosは、混在したシステムの献身的な「守護神」のような存在です。物理サーバーや重要なデータベースを管理している場合、あるいは複雑な業務ロジックのチェックが必要な場合、Nagiosは非常に信頼に値します。派手さはありませんが、異常があればすぐにTelegramやメールで大騒ぎして知らせてくれます。このガイドが、皆さんがこの古典的な監視ツールを使いこなす助けになれば幸いです。

