web-dev-qa-db-ja.com

負荷が高いときにプロセススナップショットを取得するNagiosプラグイン

サーバーの負荷を監視するためにNagiosプラグインを介してNRPEcheck_loadで構成しました。負荷が高いときに報告しますが、スナップショットの上位プロセスを取得するオプションはありません(topコマンド)その時。

そのためのnagiosNRPEプラグインはありますか?

5
nitins

イベントハンドラー でそれを行うことができます。

まず、負荷平均定義のイベントハンドラーを追加します。

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:私はこの設定をテストしていません。

12
quanta

@quantaのアイデアに基づいて、プロセスリストのスナップショットを取得するために私が行ったことは次のとおりです通知メールで直接。 NagiosをDebian/Ubuntuマシンにインストールする方法に固有のパスが含まれている場合があります。

  1. オリジナルを呼び出し、終了コードが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を忘れないでください

  2. /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$'
    
  3. /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に変更します。

  4. Nagiosを再起動します:service nagios3 restart

私はNRPEでこれを試していません。

8
Marius Gedminas