web-dev-qa-db-ja.com

ホスト名/ IPを指定せずにサブネット内のすべてのホストをicingaモニタリングに追加する

ドメインtest.domain.local、つまりclient44.test.domain.localに新しいホストを設定するプロビジョニングシステムがあり、*.test.domain.localなどの正規表現を使用してこれらすべてのホストを自動的に監視したいIcingaサーバーがあります。

すべてのクライアントはnagios-nrpe-server(バージョン2.13-3)パッケージを取得します。これは、icinga-serverがクライアントからデータをフェッチできるように構成されており、これが機能していることが確認されています。

今のところ、SSH、pingへの応答など、すべてのノードが持つことがわかっているサービス/ものを監視します。

このリンク を見てきましたが、ホスト、ホストグループ、サービスクラスの関係がよくわかりませんか?

Icingaサーバーとすべてのクライアントの両方がDebianを実行します。

4
fredmu

私はこの問題について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
        }
2
timss

これに取り組む方法はたくさんあります。

以前、単一のicingaチェックとして実行されるbashスクリプトを組み立てました。次に、スクリプトはサブドメイン内のすべてのホストをチェックし、検出された障害の有無または数に基づいて状態を返します。

最近、私は人形のカスタムファクトのファンになりました。適切なwritebテンプレートと組み合わせると、forループを使用して多数のノードにチェックを簡単に追加できます。

1
Tim Brigham