Nagiosのパフォーマンスを最適化する

出典: Nagios 3翻訳プロジェクト Wiki

Nagiosのパフォーマンスを最適化する

Nagiosのパフォーマンスを最適化するための微調整

はじめに

Nagiosが稼働したところで、微調整の方法をあげておきましょう。監視対象のホストとサービスが多数(1,000以上)だった場合には、パフォーマンスを最適化するためにNagiosを微調整する必要があります。以下にNagios最適化の詳細を示します...


最適化のポイント:

  • MRTGによる統計グラフの取得。  各時間帯ごとにNagiosがどの程度のロードを行っているか、又は構成変更がどんな影響を及ぼすかを知る為には、重要な統計をいくつかMRTGでグラフ表示させている必要があります。これはNagiosのパフォーマンスを最適化する場合には本当に、本当に、ほんとうに、役に立ちます。ほんとですよ。設定方法はこちらです。

  • 大規模監視の場合の微調整。  use_large_installation_tweaksオプションを有効にすると、より良いパフォーマンスを提供できるかもしれません。より詳しい情報はこちら

  • 環境マクロの無効化。  マクロは、チェック、通知、イベントハンドラなどが環境変数として実行するものです。これはいくらかのメモリと(さらに重要なことに)より多くのCPUを消費するので、Nagiosにとっては大きな問題となります。もしチェックスクリプトが環境変数としてのマクロにアクセスする必要がない場合(例えばコマンドラインに必要なマクロが揃っている場合)は、enable_environment_macrosオプションを利用することで、マクロが環境変数として実行されることを防ぐことができます。

  • チェック結果の収集頻度。  check_result_reaper_frequency変数で、Nagiosがどのくらいの頻度でホストやサービスのチェック結果を調べなければならないかを決定します。その結果を処理するのに費やした時間の最大値は、最大収集時間(下記参照)で決定されます。もしその値が高くなりすぎるようなら(そんなことは稀ですが)、ホストやサービスチェックに時間がかかるかもしれません。

  • 最大回収時間。  max_check_result_reaper_time変数で、Nagiosがホストやサービスチェックの結果を処理するのに費やせる時間の最大値を変えることができます-新たなホストやサービスチェックはそれに従って行われます。値が大きすぎると、ホストやサービスチェックに大きな遅延が発生する場合があります。小さすぎる値も同じです。もし待ち時間が長いと思っているなら、この変数を調整してどのような影響が出るか確認してください。これについて決定する場合には、統計のグラフ表示が必要です。

  • バッファスロットの調節。  external_command_buffer_slotsオプションの値を調整する必要があるかもしれません。バッファスロットの統計をMRTGでグラフ表示(上記参照)して、このオプションに設定する値を決定する際に役立ててください。

  • サービスチェックの遅延を減らし並列チェック数を最大にするためのベストな値を測定する。  Nagiosは、並行してサービスチェックを行う数をmax_concurrent_checksオプションで指定した値で制限できます。Nagiosがホストにかける負荷を少しは制御できますが、場合によっては却って遅延が発生する可能性もあります。もしサービスチェック(追加情報CGI参照)において遅延が発生している(10~15秒以上)場合は、Nagiosはこの部分のチェックが必要です。-つまりその遅延はNagiosではなくあなたのせいです。理想的な状況では、全てのサービスチェック遅延は0となりますが、通常はチェックのうちいくらかには多少の遅延が発生します。Nagiosで-sオプションを付けてコマンドを実行し、得られた結果のうち最小の値で最大の並列チェックを行うことをお勧めします。サービスチェックの遅延が低い値になるまで設定値を増やしてください。サービスチェックスケジューリングについてのより詳しい情報はこちらです。

  • できるだけパッシブチェックを利用する。  パッシブチェックの処理に必要なオーバーヘッドは、"通常の"アクティブチェックより非常に少ないので、多くのサービスを監視する場合はこちらを利用してください。その場合は、外部アプリケーションによって監視やレポートを行っているかという点に注意してください。Nagiosが全て作業しているのであれば、この項目はあまり効果が期待できません。

  • インタプリタで書かれたプラグインを使うのを避ける。  監視の負荷を下げる1つの方法としてあげられるのは、インタプリタ方式(Perlなど)ではなく、CやC++等でコンパイルされたプラグインを使用することです。Perlスクリプトはプラグイン作成が簡単で利用しやすいですが、多くのサービスチェックをしたい場合は毎回コンパイルを行うことになるため監視ホストの負荷が高くなります。Perlプラグインを利用したい場合は、perlcc(1)(Perlの標準ディストリビューションの一種)を利用するか、埋め込み型のPerlインタプリタ(下記参照)を利用することを考えてください。

  • 埋め込み型のPerlインタプリタを利用する。  サービスチェックなどにPerlスクリプトを多用している場合は、埋め込み型のPerlインタプリタでコンパイルすることによって、Nagiosの処理速度を上げることができるでしょう。

  • ホストチェックコマンドを最適化する。  もしホストのステータスチェックにcheck_pingプラグインを利用しているなら、それはより速く処理できるようになるでしょう。ホスト設定ファイルのmax_attemptsに1を設定してcheck_pingプラグインにICMPパケットを10個送信させる代わりに、max_attemptsに10を設定してICMPパケットを毎回1つだけ送信させることにより、大幅な処理速度の向上が期待できます。これは、Nagiosが毎回のプラグイン実行後にホストのステータスを決定するためで、最初のチェックをできるだけ早く終わらせるということです。状況によってはリスクを伴いますが(ホストのレスポンスが遅ければダウン状態とみなされるかもしれません)、ホストチェックは高速化できます。ホストチェックコマンドとして、check_pingプラグインの代わりにより速いプラグイン(即ちcheck_fping)を利用することもできます。

  • 定期的なホストチェックをスケジュールする。  定期的なホストチェックをスケジュールすることで、Nagiosのパフォーマンスを助けることができます。これはキャッシュチェック論理の働き(下記参照)によるものです。Nagios 3以前は、定期的なホストチェックのスケジューリングは大きな負荷がかかるものでした。しかし、サービスチェックと同じようにホストチェックの並行処理が可能となったため、その認識は誤ったものとなっています。定期的なホストチェックのスケジューリングは、ホスト定義check_intervalディレクティブに0より大きな値を設定することで可能となります。

  • ホストのキャッシュチェックを有効にする。  Nagios 3から、オンデマンドのホストチェックにおいてキャッシュからサービス状態を判断できるようになりました。オンデマンドのホストチェックは、サービスの状態変更を見つけるためや、そのサービスに関連したホストに状態変更があったかを知るために実行されます。キャッシュによるホストチェックを有効にすることで、パフォーマンスを最適化できます。Nagiosが度々チェックコマンドを実行するよりはキャッシュを利用する方が賢明です。これによりスピードアップと負荷の削減が可能です。ホストのキャッシュチェックを有効にするためには、定期的なホストチェックをスケジュールする(上記参照)必要があります。キャッシュチェックに関するより詳しい情報はこちらです。

  • アグレッシブホストチェックを利用しない。   Nagiosにホスト回復の認識に関する問題がない限り、アグレッシブホストチェックオプションを無効にすることをお勧めします。このオプションを無効にすると、サービスチェックはより早く完了しますが、特定の状況下ではホスト回復を見逃してしまう可能性もあります。例えば、ホストが回復しかつその全サービスがOKでない(またはOK以外のステータスを行ったり来たりしている)状態の場合、Nagiosはこのホストが回復していないと思う可能性があります。少数の人たちはこのオプションを有効にする必要があるかもしれませんが、大多数はその必要はないでしょう。必要であると確信できない限りはこのオプションを有効にしないことをお勧めします…

  • 外部コマンド利用の最適化。   外部コマンドを多用している場合(例えば分散監視におけるパッシブチェック)は、コマンドチェック間隔オプションの値を-1に設定したくなるかもしれません。これによりNagiosは頻繁に外部コマンドを発行することになります。外部コマンドのために外部コマンドバッファスロットの値を増やすことも考える必要があるでしょう。外部コマンドバッファスロットは外部コマンドファイル(それぞれ別のスレッド)から読み込まれた外部コマンドを、Nagiosが読み込むまで一時的に保持するために用いられます。Nagiosデーモンがパッシブチェックや外部コマンドを多用している場合、バッファは常にフル活用されていることになり、これは外部コマンドファイルへ書込みを行おうとすると子プロセス(外部スクリプトやNSCAデーモンなど)によってブロックされるという事態を招きます。こちらで解説されているように、MRTGとnagiosユーティリティを利用している外部コマンドバッファスロットのグラフ表示をすることを強くお勧めします。グラフ表示から、Nagiosの外部コマンドバッファの使用状況を把握して下さい。

  • 最大パフォーマンスのためのハードウェアの最適化。   注釈:次のようなケースでない限り、ハードウェアは問題になりません... 1)何千ものサービスを監視している 2)パフォーマンスデータに多くの後処理をしている など。システム構成とハードウェアのセットアップは、OSに直接影響するのでそれはそのままNagiosにも影響します。一般的に、まずできることはハードディスクの最適化です。CPUやメモリ速度もパフォーマンスに影響を及ぼすのは明らかですが、それよりもディスクアクセスは最大のボトルネックとなります。プラグインやステータスログを、遅いドライブ(古いIDEドライブやNFSマウント上)に保存せず、必要ならUltra SCSIや速いIDEドライブを利用してください。ディスクアクセスを最適化しようとしないのは、IDE/Linuxユーザーにとって重要な問題です。(hdparamのようなユーティリティを用いて)ディスクアクセスパラメータを変更しない場合は、多くのスピーディな特徴を持つ新しいIDEドライブへ移行して下さい。

  • 個人用ツール