web-dev-qa-db-ja.com

Nagios3:サービスチェックの条件付き演算子?

ホストグループを使用してさまざまなマシンを監視するようにNagiosをセットアップして「マシンの役割」を定義しようとしています。これに対して、サービスを実行してマシンを役割ごとにチェックします。ただし、2つのホストグループの和集合ではなく、交差点に対してサービスチェックを実行できる条件演算子を使用したいと思います。つまり、&&、||、または()演算子を使用します。

たとえば、次のサーバーがあるとします。

  • www-e:EUのLinux WWW(Apache)サーバー
  • www-us:米国(西海岸)のWindows WWW(IIS)サーバー
  • ftp-e:EUのLinuxFTPサーバー
  • ftp-us:米国のWindowsFTPサーバー

次のホストグループを作成したいと思います。

  • S-Servers:www-us、ftp-us
  • EU-サーバー:www-eu、ftp-eu
  • WWW-Servers:www-us、www-eu
  • FTP-Servers:ftp-us、ftp-eu

ここで、WebサーバーのHTTP応答時間を確認することに関心があるとします。次に、この特定のNagiosサービスが米国(西海岸)から実行されており、check_http_response_timeというコマンドがあるとします。このコマンドは、HTTPサーバーの応答性をチェックします。これは、クリティカルを発生させる前の最大応答時間を定義する引数を提供できます。

私のコマンドは次のようになります:check_http_response_time $HOSTNAME$ 50

今では伝統的に、ホストまたはホストグループのリストを指定することでチェックを実行できます。

define service{
    use             local-service
    hostgroup_name              WWW-Servers   # Servers = www-us, www-eu
    servicegroups           WWW Checks
    service_description     Check HTTP Response Time
    check_command           check_http_response_time!50
}

ただし、上記のサービス定義では、私のNagiosサービスが米国西部にあることを考えると、EUサーバーがクリティカルに戻ることを合理的に期待できます。本当に、地域ごとに異なるしきい値が必要です(米国西部では50、EUでは200)。

これを実現するには、ホストごとにサービスを並べ替えてカスタムしきい値を設定するか、役割と地域ごとにサービスグル​​ープを並べ替えて(つまり、WWW-Servers-EU)、それらに対して特定のしきい値を実行する必要があります。後者の方が優れていますが、どちらも私が望むよりもはるかに厄介です...

私が気に入っているのは、この投稿で求めているのは、単純な結合ではなく、ホストグループを使用して条件付きロジックを使用して交差を実行する方法です。次のようになります。

define service{
    use             local-service
    hostgroup_name              WWW-Servers && US-Servers
    servicegroups           WWW Checks
    service_description     Check HTTP Response Time
    check_command           check_http_response_time!50
}

次に、両方のWWWサーバーにあるサーバーに対してチェックのみを実行しますおよび USサーバーホストグループ:私の例では、www-usだけです。このような機能の利点は、大規模に構成されたNagiosサービスにとって重要です。

この機能は利用できますか?そうでない場合、将来的に利用可能になりますか?最新のNagiosバージョンを前提として、これを実現する別の方法はありますか?

ヒント/提案は大歓迎です!

  • デイブ
6
Dave

次に、WWWサーバーとUSサーバーの両方にあるサーバー(私の例ではwww-usのみ)に対してのみチェックを実行します。

この機能は利用できますか?そうでない場合、将来的に利用可能になりますか?

Ethan Galstad言った 彼は交差点のサポートを追加する予定はありません。

最新のNagiosバージョンを前提として、これを実現する別の方法はありますか?

ホストまたはホストグループの前に!記号を付けることにより、定義から 一部のホストを除外 できます。したがって、次のようなものを試してください。

define service{
    use                     local-service
    hostgroup_name          *,!EU-Servers,!FTP-Servers
    servicegroups           WWW Checks
    service_description     Check HTTP Response Time
    check_command           check_http_response_time!50
}
6
quanta

私の方法は、私が達成しようとしていることによって異なります。通常、私はより多くのホストグループが良いことだと信じていますが、可能な限りスクリプトを使用してNagios構成を自動化することも信じています。

ただし、ユースケースを処理するために、$ HOSTGROUPNAMES $マクロを使用し、コマンド文字列を適切に解析して、ホストグループメンバーシップのリストを取得するハンドラーを作成します。

$ HOSTGROUPNAMES $Nagiosドキュメント で説明されています。ホストがメンバーになっているホストグループのコンマ区切りのリストを提供します。コマンドラインの解析は、ほとんどのスクリプト言語を使用して簡単にする必要があります。

コマンド設定は次のようになります

check_http_by_hostgroup -g $ HOSTGROUPNAMES $ -H $ HOSTNAME -I $ HOSTADDRESS $ -U $ ARG1 $ -W $ ARG2 $ -C $ ARG3 $

サービス構成は次のようになります。

define service{
    use            local-service
    hostgroup_name WWW-Servers ; hosts are also members of us, eu, or ap
    servicegroups  WWW Checks
    service_description  Check HTTP Response Time
    check_command  check_http_by_hostgroup|http://foo.bar/|us=30,eu=160|us=90,eu=240,ap=390
}

次に、ホストグループ構成ではなく、ホスト構成でホストグループメンバーシップを定義します。

1
Rik Schneider

Nagiosのサービス/ホスト依存機能を確認することをお勧めします。

0
mdpc