サーバーの負荷を監視するためにNagios
プラグインを介してNRPE
をcheck_load
で構成しました。負荷が高いときに報告しますが、スナップショットの上位プロセスを取得するオプションはありません(top
コマンド)その時。
そのためのnagios
NRPE
プラグインはありますか?
イベントハンドラー でそれを行うことができます。
まず、負荷平均定義のイベントハンドラーを追加します。
define service{
use generic-service
Host_name xx
service_description Load_Average
check_command check_nrpe!check_load
event_handler processes_snapshot!xx
contact_groups admin-sms
}
processes_snapshot
コマンドはcommands.cfg
で定義されています。
define command{
command_name processes_snapshot
command_line $USER1$/eventhandlers/processes_snapshot.sh $SERVICESTATE$ $SERVICESTATETYPE$ $SERVICEATTEMPT$ $HOSTADDRESS$
}
次に、イベントハンドラスクリプト(processes_snapshot.sh
)を記述します。
#!/bin/bash
case "$1" in
OK)
;;
WARNING)
/usr/local/nagios/libexec/check_nrpe -H $4 -c processes_snapshot
;;
UNKNOWN)
;;
CRITICAL)
/usr/local/nagios/libexec/check_nrpe -H $4 -c processes_snapshot
;;
esac
exit 0
コマンドprocesses_snapshot
は、xx
ホストのnrpe.cfg
で次のように定義されています。
command[processes_snapshot]=top -cSbn 1 | tail -n +8 | sort -rn -k11 | head > /tmp/proc_snap.txt
PS:私はこの設定をテストしていません。
@quantaのアイデアに基づいて、プロセスリストのスナップショットを取得するために私が行ったことは次のとおりです通知メールで直接。 NagiosをDebian/Ubuntuマシンにインストールする方法に固有のパスが含まれている場合があります。
オリジナルを呼び出し、終了コードが1(警告)または2(クリティカル)の場合にプロセススナップショットを追加するラッパースクリプト/usr/local/sbin/check_load
を作成しました。
#!/bin/sh
/usr/lib/nagios/plugins/check_load "$@" || {
rc=$?
echo
# http://nagios.sourceforge.net/docs/3_0/pluginapi.html
# | separates long output from perfdata
COLUMNS=1000 top -cSbn 1|sed -e 's/|/<BAR>/g' -e 's/ \+$//'
exit $rc
}
これにより、COLUMNSが大きな数値に設定されるため、プロセス名/コマンドラインが40文字に切り捨てられず、バッチモードで1回繰り返し実行され(-bn 1
)、完全なコマンドラインが要求されます(-c
)と累積CPU時間(-S
)が表示されたら、topの出力が最初の|
文字で<BAR>
に置き換えられて切り捨てられないようにします。
Topのデフォルトのソート順が適切であることがわかりました-@ quantaの回答で提案されたように累積CPU時間で再ソートしようとすると、initやcrondなどのシステムデーモンがトップに配置されますが、これはどのCGIスクリプトであるかを理解するのに役立ちませんCPUスパイクの原因です。また、このようにして、トップのヘッダーを保持することができます。
chmod +x /usr/local/sbin/check_load
を忘れないでください
/etc/nagios-plugins/config/load.cfg
を編集し、check_loadエントリを置き換えます
command_line /usr/lib/nagios/plugins/check_load --warning='$ARG1$,$ARG2$,$ARG3$' --critical='$ARG4$,$ARG5$,$ARG6$'
と
command_line /usr/local/sbin/check_load --warning='$ARG1$,$ARG2$,$ARG3$' --critical='$ARG4$,$ARG5$,$ARG6$'
/etc/nagios3/commands.cfg
を編集し、notify-service-by-emailエントリを更新して、生成された電子メールに$ LONGSERVICEOUTPUT $が含まれるようにします。ここに貼り付けるには長すぎます。基本的にInfo:\n\n$SERVICEOUTPUT$\n" | /usr/bin/mail
ビットを見つけて、それをInfo:\n\n$SERVICEOUTPUT$\n$LONGSERVICEOUTPUT$\n" | /usr/bin/mail
に変更します。
Nagiosを再起動します:service nagios3 restart
。
私はNRPEでこれを試していません。