2026年7月9日
2026年7月9日
Nagiosのプラグインを追加してカスタム監視を設定する方法
はじめに
Nagiosで標準プラグインにない監視を追加したい・WordPressのデータベース接続やキャッシュヒット率をNagiosで監視したい・カスタムプラグインの書き方がわからない・NRPE経由でリモートサーバーを監視したいといった問題の解決方法を解説します。
症状・原因
- 標準の
check_httpでは不十分でWordPress固有の状態を監視できない - プラグインのパーミッション設定が間違っていてNagiosから実行できない
- プラグインの終了コードが間違いNagiosが正しくステータスを判断できない
- NRPE設定の
allowed_hostsにNagiosサーバーのIPが追加されていない
解決手順
ステップ1:Nagios プラグインの基本を理解する
# ✅ Nagios プラグインの終了コード規則(必ず遵守)
# 0: OK → 緑(正常)
# 1: WARNING → 黄(警告)
# 2: CRITICAL → 赤(重大)
# 3: UNKNOWN → 灰(不明)
# ✅ プラグインの出力フォーマット
# "STATUS: メッセージ | パフォーマンスデータ"
# 例: OK: WordPress is healthy | response_time=0.23s;1.0;2.0;0;5
# ✅ プラグインディレクトリの確認
ls /usr/lib/nagios/plugins/
# → check_http check_ping check_disk ... ← 標準プラグイン
# ✅ カスタムプラグインディレクトリ
ls /usr/local/nagios/libexec/
# または
ls /etc/nagios/plugins/
ステップ2:シェルスクリプトでプラグインを作成する
# ✅ WordPress のヘルスチェックプラグインを作成
sudo tee /usr/lib/nagios/plugins/check_wordpress << 'EOF'
#!/bin/bash
# ✅ Nagios プラグイン: WordPress ヘルスチェック
# 終了コード: 0=OK, 1=WARNING, 2=CRITICAL, 3=UNKNOWN
SITE_URL="${1:-http://localhost}"
WARNING_TIME="${2:-2.0}" # レスポンスが2秒以上でWARNING
CRITICAL_TIME="${3:-5.0}" # レスポンスが5秒以上でCRITICAL
# ✅ WordPress のレスポンス時間を測定
RESPONSE=$(curl -s -o /dev/null -w "%{http_code}:%{time_total}" \
--max-time 10 "$SITE_URL/" 2>/dev/null)
HTTP_CODE=$(echo "$RESPONSE" | cut -d: -f1)
RESPONSE_TIME=$(echo "$RESPONSE" | cut -d: -f2)
# ✅ HTTP ステータスコードのチェック
if [ "$HTTP_CODE" != "200" ] && [ "$HTTP_CODE" != "301" ] && [ "$HTTP_CODE" != "302" ]; then
echo "CRITICAL: WordPress returned HTTP $HTTP_CODE | response_time=${RESPONSE_TIME}s"
exit 2
fi
# ✅ レスポンス時間のチェック(bc コマンドで浮動小数点比較)
if [ "$(echo "$RESPONSE_TIME >= $CRITICAL_TIME" | bc)" -eq 1 ]; then
echo "CRITICAL: Response time ${RESPONSE_TIME}s >= ${CRITICAL_TIME}s | response_time=${RESPONSE_TIME}s;${WARNING_TIME};${CRITICAL_TIME};0;10"
exit 2
elif [ "$(echo "$RESPONSE_TIME >= $WARNING_TIME" | bc)" -eq 1 ]; then
echo "WARNING: Response time ${RESPONSE_TIME}s >= ${WARNING_TIME}s | response_time=${RESPONSE_TIME}s;${WARNING_TIME};${CRITICAL_TIME};0;10"
exit 1
fi
echo "OK: WordPress responding in ${RESPONSE_TIME}s | response_time=${RESPONSE_TIME}s;${WARNING_TIME};${CRITICAL_TIME};0;10"
exit 0
EOF
# ✅ パーミッションを設定
sudo chmod 755 /usr/lib/nagios/plugins/check_wordpress
sudo chown nagios:nagios /usr/lib/nagios/plugins/check_wordpress
# ✅ テスト実行
sudo -u nagios /usr/lib/nagios/plugins/check_wordpress http://example.com 2.0 5.0
# → OK: WordPress responding in 0.23s | response_time=0.23s;2.0;5.0;0;10
# 終了コードを確認
echo $? # → 0
ステップ3:WordPress 固有の監視プラグインを作成する
# ✅ WordPress DB 接続確認プラグイン
sudo tee /usr/lib/nagios/plugins/check_wordpress_db << 'EOF'
#!/bin/bash
WP_PATH="${1:-/var/www/html}"
DB_CHECK=$(wp eval "
try {
global \$wpdb;
\$result = \$wpdb->get_var('SELECT 1');
echo \$result == 1 ? 'OK' : 'FAIL';
} catch (Exception \$e) {
echo 'ERROR: ' . \$e->getMessage();
}
" --path="$WP_PATH" 2>/dev/null)
if [ "$DB_CHECK" = "OK" ]; then
echo "OK: WordPress database connection successful"
exit 0
elif echo "$DB_CHECK" | grep -q "ERROR"; then
echo "CRITICAL: $DB_CHECK"
exit 2
else
echo "CRITICAL: WordPress database check failed"
exit 2
fi
EOF
sudo chmod 755 /usr/lib/nagios/plugins/check_wordpress_db
ステップ4:Nagios にカスタムコマンドを登録する
# ✅ コマンド定義ファイルを作成
sudo tee /etc/nagios/conf.d/custom_commands.cfg << 'EOF'
# ✅ WordPress ヘルスチェックコマンド
define command {
command_name check_wordpress
command_line /usr/lib/nagios/plugins/check_wordpress $ARG1$ $ARG2$ $ARG3$
}
# ✅ WordPress DB チェックコマンド
define command {
command_name check_wordpress_db
command_line /usr/lib/nagios/plugins/check_wordpress_db $ARG1$
}
EOF
# ✅ サービス監視定義を追加
sudo tee /etc/nagios/conf.d/wordpress_services.cfg << 'EOF'
define service {
use generic-service
host_name wordpress-server
service_description WordPress Health
check_command check_wordpress!http://example.com!2.0!5.0
check_interval 5 ; 5分ごとにチェック
max_check_attempts 3 ; 3回失敗したらアラート
}
define service {
use generic-service
host_name wordpress-server
service_description WordPress Database
check_command check_wordpress_db!/var/www/html
check_interval 5
}
EOF
# ✅ 設定の構文チェック
sudo nagios -v /etc/nagios/nagios.cfg
# → Total Warnings: 0
# → Total Errors: 0
# ✅ Nagios を再起動
sudo systemctl reload nagios
ステップ5:NRPE でリモートサーバーを監視する
# ✅ 監視対象サーバーに NRPE をインストール
sudo apt install nagios-nrpe-server nagios-plugins -y
# ✅ NRPE の設定
sudo nano /etc/nagios/nrpe.cfg
# ✅ Nagios サーバーの IP を許可
allowed_hosts=127.0.0.1,192.168.1.100 # Nagiosサーバーのアドレス
# ✅ カスタムコマンドを定義
command[check_wordpress]=/usr/lib/nagios/plugins/check_wordpress http://localhost 2.0 5.0
command[check_disk_wp]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p /var/www/html
command[check_mysql]=/usr/lib/nagios/plugins/check_mysql -u nagios -p nagiospass
# ✅ NRPE を起動
sudo systemctl enable nagios-nrpe-server
sudo systemctl start nagios-nrpe-server
# ✅ Nagios サーバーから NRPE で確認
/usr/lib/nagios/plugins/check_nrpe -H wordpress-server -c check_wordpress
# → OK: WordPress responding in 0.18s | response_time=0.18s;2.0;5.0;0;10
# ✅ Nagios サーバーの設定にリモートコマンドを追加
# define command {
# command_name check_nrpe
# command_line /usr/lib/nagios/plugins/check_nrpe -H $HOSTADDRESS$ -c $ARG1$
# }
注意事項
- Nagiosプラグインは必ず
nagiosユーザーから実行可能なパーミッション(755)を設定してください。また、プラグインが外部コマンド(wp-cli等)を呼び出す場合は、nagiosユーザーがそのコマンドを実行できる権限があるか確認してください - プラグインの出力は1行のテキストと
|の後にパフォーマンスデータを書きます。複数行出力の場合、2行目以降は「長い出力」として扱われます。Nagiosの設定でどちらを表示するか決まります
まとめ
Nagiosカスタムプラグインの設定は①終了コード規則(0=OK/1=WARNING/2=CRITICAL/3=UNKNOWN)の理解・プラグインの出力フォーマット(STATUS: メッセージ | パフォーマンスデータ)の確認、②シェルスクリプトでWordPressヘルスチェックプラグイン作成・curl -w "%{time_total}"でレスポンスタイム測定・HTTPコードと時間でOK/WARNING/CRITICAL判定、③WP-CLIを使ったDB接続確認プラグイン・chmod 755で実行権限設定・nagiosユーザーでテスト実行、④custom_commands.cfgでコマンド定義・wordpress_services.cfgでサービス監視設定・nagios -vで構文チェック・reload、⑤NRPEをインストール・allowed_hostsにNagiosサーバーIPを追加・command[名前]=でリモートコマンド定義・check_nrpeでリモート確認の手順で設定します。