最近、Nagios を使用して約 25 台のサーバー (主に仮想サーバー、一部はスタンドアロン) を監視し始めました。サーバーの大半 (Nagios ホスト自体を含む) は Ubuntu 14.04 LTS を実行しており、少数は 12.04 LTS を実行しています。そのため、NRPE を使用すれば済むと考えました。
NRPE の設定は私にとってはかなり複雑であることがわかりました。たとえば、単純な check_disk コマンドの場合、以下に示すように、他のすべてのパーティション/ファイルシステムを除外して、チェックするパーティションを手動で指定する必要がありました。
command[check_disk]=/usr/lib/nagios/plugins/check_disk -w 57% -x /dev -x /run -x /run/lock -x /run/shm -x /run/user -x /sys/fs/cgroup
そうしないと、sysfs、proc、またはその他のパーティションによって警告と重大のしきい値がすぐに設定されてしまいます。
次に、Nagios ホストが自身に対して実行する基本サービス モニターを確認しました。これは /usr/local/nagios/etc/localhost.cfg 内にリストされており、次の内容が含まれています (申し訳ありません。なぜ正しくフォーマットされないのか理解できません)。
define service{
use local-service ; Name of service template to use
host_name localhost
service_description PING
check_command check_ping!100.0,20%!500.0,60%
}
define service{
use local-service ; Name of service template to use
host_name localhost
service_description Root Partition
check_command check_local_disk!20%!10%!/
}
define service{
use local-service ; Name of service template to use
host_name localhost
service_description Current Users
check_command check_local_users!20!50
}
define service{
use local-service ; Name of service template to use
host_name localhost
service_description Total Processes
check_command check_local_procs!250!400!RSZDT
}
define service{
use local-service ; Name of service template to use
host_name localhost
service_description Current Load
check_command check_local_load!5.0,4.0,3.0!10.0,6.0,4.0
}
define service{
use local-service ; Name of service template to use
host_name localhost
service_description Swap Usage
check_command check_local_swap!20!10
}
define service{
use local-service ; Name of service template to use
host_name localhost
service_description SSH
check_command check_ssh
notifications_enabled 0
}
define service{
use local-service ; Name of service template to use
host_name localhost
service_description HTTP
check_command check_http
notifications_enabled 0
}
その結果、ダッシュボードには次の画面が表示されます。
これは私にとっては完璧です。これはまさに、追加するすべてのホストに表示させたいものです。カスタム コマンドをいじくり回すのではなく、NRPE conf ファイルを通じてこれを各ホストに「コピー」して、追加する各ホストの特定のサービスをすべて表示するにはどうすればよいのでしょうか。これはすでに存在し、ローカルホストですでに機能していることは明らかです。これを実現するために必要な構成を理解するのに苦労しています。
あらゆるアドバイスをありがとうございます。
答え1
少し前に、私は本当に素晴らしい NRPE 自動インストーラー スクリプトを書きました。これをニーズに合わせて編集すれば、役に立つと思います。スクリプトには、各ホストのnrpe.cfg
ファイルに追加される多くの組み込みチェックが含まれています。つまり、自分に関連するチェックを構成し、スクリプトを実行している各ホストにもそれらのチェックが確実に含まれるようにすることができます。これはクライアント側に関することです。
スクリプトへのリンク:ここ。
サーバー側 (Nagios) に関しては、NagioSQL などの Nagios 構成マネージャーをインストールできます。これにより、GUI を介してより便利な方法でホストとサービスを管理できるようになります。
さらに、すべてのホストにこれらのチェックが確実に適用されるようにするには、監視するすべてのサービス (チェック) を含むサービス グループを作成し、監視する各ホストにこのサービス グループをアタッチするだけです。
私が会社で行ったことをお話ししましょう。各サーバーがチェックで監視されていることを確認したかったのですcheck_load
が、会社にはハードウェアのベースラインがないため、各サーバーの仕様が異なり、マシンのコア/CPUごとに計算されるため、マシンに存在するプロセッサの数を識別し、それに応じてNagiosを構成するcheck_load
Puppetサーバーの「Nagios_client」モジュールに追加しました。custom_fact
check_load
たとえば、server1 に 4 つの CPU があるとします。この場合、負荷は 2.8 (CPU あたり 0.7) が理想的です。Puppet はCPU の数を識別し、次のようにfacter
サーバーを編集します。nrpe.cfg
command[check_load]=/usr/local/nagios/libexec/check_load -w 2.9,3.0,3.1 -c 4.0,5.0,6.0
次に、たとえば NagioSQL では、「インポート機能」を使用して、*.cfg
Nagios にホストおよびサービスとしてロードされるファイルをインポートできます。したがって、1 つのhost.cfg
ファイルを作成し、スクリプトを使用して監視するホストごとにそのファイルを複製し、各マシンのホスト名/IP を変更するだけで、より自動化された構成へのもう 1 つのステップを実行できます。
たとえば私の場合、Puppet はマシン上で初めて実行されていることを理解し、host.cfg
Nagios に関連ファイルも作成しました。
Puppet + NagioSQL を使用すると、Nagios の管理がはるかに簡単になると思います。
チェックの設定が難しいという点については、いつでも独自のスクリプトを作成し、Nagios がそれを実行するように設定できます。たとえば、あなたのcheck_disk
コマンドを例に挙げてみましょう。これは非常に豊富なコマンドで、あなたにとって不必要に重要なあらゆる種類のデータを表示できます。
これも非常に豊富な機能を持つコマンドでcheck_procs
、あらゆる種類のデータを提供しますが、私には必要なかったので、必要なことだけを実行する簡単なチェック スクリプトを作成し、Nagios で設定しました。例:
#!/bin/bash
# This script checks for running processes for mt.js and adb-server.js
# Script by Itai Ganot 2015 .
process="$1"
appname=$(basename $0)
if [ -z "$1" ]; then
echo "Please specify a process to check"
exit 1
fi
ps -ef | grep "$process" | egrep -v "grep|$appname" &>/dev/null
if [ "$?" -eq "0" ] ; then
stat="OK"
exitcode="0"
msg="Process $process is running"
else
stat="Critical"
exitcode="2"
msg="There are currently no running processes of $process"
fi
pid=$(ps -ef | grep "$process" | egrep -v "grep|$appname" | awk '{print $2}')
echo "$stat: $msg Process PID: $pid"
exit $exitcode
実際よりも情報は少ないですcheck_procs
が、必要な情報だけが得られます。
つまり、簡単に言えば、check_disk
コマンドの設定が難しい場合は、独自のスクリプトを作成すればよいのです。これが Nagios の優れた点です。
お役に立てれば幸いです。
答え2
各リモート ホストに nrpe デーモンをセットアップしてインストールし、構成と最終的にプラグインを展開するには、何らかのタイプの構成管理ソフトウェアが必要です。
提案させてくださいアンシブルこのタスクのために。
https://github.com/bobmaerten/ansible-role-nagios-nrpe-server