ドメインtest.domain.local、つまりclient44.test.domain.local
に新しいホストを設定するプロビジョニングシステムがあり、*.test.domain.local
などの正規表現を使用してこれらすべてのホストを自動的に監視したいIcingaサーバーがあります。
すべてのクライアントはnagios-nrpe-server
(バージョン2.13-3)パッケージを取得します。これは、icinga-serverがクライアントからデータをフェッチできるように構成されており、これが機能していることが確認されています。
今のところ、SSH、pingへの応答など、すべてのノードが持つことがわかっているサービス/ものを監視します。
このリンク を見てきましたが、ホスト、ホストグループ、サービスクラスの関係がよくわかりませんか?
Icingaサーバーとすべてのクライアントの両方がDebianを実行します。
私はこの問題についてfredmuと協力してきましたが、TimBrighamの答えに触発された実用的な解決策を思いつきました。
デフォルトのgeneric-Host
定義を使用すると、テンプレートに基づいてホスト構成ファイルを自動的に生成するスクリプトを使用してこれを解決できます。オプションで、これらのファイルを定期的に生成するためのcronジョブとして実行できます。
generate_Host_cfg.sh
#!/usr/bin/env bash
icinga_root="/etc/icinga/objects"
subnet="10.0.0.*"
template="template_icinga.cfg"
alias_file="alias.txt"
# navigate to the Icinga configuration directory
cd $icinga_root
# create first server alias if doesn't exist
if [ ! -e $alias_file ]; then
echo "1" > $alias_file
fi
# iterate through subnet, store "hostname:ip" in associative array
declare -A address
for Host in $(nmap -sP $subnet | awk -F '[ ()]' '/for [a-z]+/ {print $5 ":" $7}'); do
address[$(echo $Host | cut -d: -f1)]=$(echo $Host | cut -d: -f2)
done
# iterate through hosts, create files if not exist based off template
for Host in ${!address[@]}; do
Host_file=${Host}_icinga.cfg
if [ ! -e $Host_file ]; then
# fetch new server alias
alias=$(cat $alias_file)
# create the next server alias
expr $alias + 1 > $alias_file
# create hostname_icinga.cfg if doesn't exist, based off template
cp $template $Host_file
# replace contents of new template; hostname, alias and ip
sed -i -r \
-e "s/tmp-hostname/$Host/" \
-e "s/tmp-alias/Server$alias/" \
-e "s/tmp-address/${address[$Host]}/" $Host_file
fi
done
template_icinga.cfg
define Host{
use generic-Host
Host_name tmp-hostname
alias tmp-alias
address tmp-address
}
次のようなファイルになります。
define Host{
use generic-Host
Host_name monitor.company.local
alias Server1
address 10.0.0.1
}
これに取り組む方法はたくさんあります。
以前、単一のicingaチェックとして実行されるbashスクリプトを組み立てました。次に、スクリプトはサブドメイン内のすべてのホストをチェックし、検出された障害の有無または数に基づいて状態を返します。
最近、私は人形のカスタムファクトのファンになりました。適切なwritebテンプレートと組み合わせると、forループを使用して多数のノードにチェックを簡単に追加できます。