Checkmk
to checkmk.com
Important

This is a machine translation based on the English version of the article. It might or might not have already been subject to text preparation. If you find errors, please file a GitHub issue that states the paragraph that has to be improved.

1. Checkmk Micro Core の特別な機能

CMCの最大のメリットは、オープンソースプロジェクト Nagios の監視コアに比べて、パフォーマンスが高く、応答時間が短いことです。 さらに、知っておきたい興味深いメリットがいくつかあります。その主なものは次のとおりです。

  • Smart Ping — インテリジェントなホストチェック

  • 補助プロセスチェックヘルパー、Checkmkフェッチャー、Checkmkチェッカー

  • 初期スケジュール

  • パフォーマンスデータの処理

  • Nagiosのいくつかの機能は使用されていません、またはCMCでは異なる手順で実現されています。 詳細については、CMCへの移行に関する記事をご参照ください。

2. Smart Ping — インテリジェントなホストチェック

Nagios では、ホストの可用性は通常、Ping を使用して確認されます。 この目的のために、check_pingcheck_icmp などのプラグインが、各ホストに対して一定間隔(通常は 1 分に 1 回)実行されます。 これにより、たとえば 5 つの ping パケットが送信され、その返信が待たれます。 プラグインを実行するためのプロセスを作成すると、貴重な CPU リソースが占有されます。 さらに、ホストに到達できない場合、これらのプロセスは長時間にわたってバックログを形成し、長いタイムアウトを余儀なくされます。

一方、CMC は、特に設定がない限り、Smart Ping という手順を使用してホストチェックを実行します。 Smart Ping は、独自の ping 実装を備えたicmpsender という内部コンポーネントに依存しています。 Checkmk with CMC は外部バイナリに依存していないため、送信される ping パケットごとに新しいプロセスを生成する必要はありません。 さらに、icmpsender のデフォルトの動作は、Nagios の動作とは異なります。 icmpsender は、連続して複数のパケットを送信して応答を待つのではなく、n 秒ごとにホストごとに1 つのICMP パケットのみを送信します(デフォルトは 6 秒で、Normal check interval for host checks ルールセットで設定可能)。 この動作により、リソース消費とデータトラフィックが大幅に削減されます。

ping に対する応答は明示的に待機されません。 CMC のicmpreceiver コンポーネントは、ホストの状態が「UP 」か「DOWN 」かを判断します。 CMC は、ホストから送信された ping パケットをホストのチェックに成功したとみなして、そのホストを「UP 」とマークします。 定義された時間内にホストからパケットを受信しなかった場合、そのホストは「DOWN 」とマークされます。 タイムアウトは 15 秒(2.5 間隔)に事前設定されていますが、Settings for host checks via Smart PING ルールセットでホストごとに変更できます。

icmpreceiver コンポーネントは、ホストから送信されるTCP SYN(同期)およびRST(リセット)パケットもリッスンします。 このようなパケットを受信すると、そのホストはUP とみなされます。 このメカニズムにより、ICMPトラフィックは許可されているがTCPトラフィックは許可されていないインフラストラクチャでは、ホストがフラッピング状態になる場合があります。

Tip

icmpreceiver SNMP パケットは TCP ではなく UDP 経由で通信するため、SNMP パケットはすべて無視されます。

2.1. オンデマンドのホストチェックなし

ホストチェックは、ホストが完全に故障した場合に通知をトリガーするだけでなく、ホストの計画的なダウンタイム中にサービスの問題に関する通知を抑制する役割も果たします。 サービスの問題は、サービス自体の問題ではなく、ホストの故障条件によって発生する場合があります。 Checkmk での最後のホストチェックの結果が「UP 」であっても、実際にはホストが「DOWN 」である場合があります。 このような条件では、複数のサービスチェックがホストの「DOWN 」の状態に依存する問題を報告し、誤ってサービス通知が送信される可能性があります。 したがって、サービス問題が発生した場合は、まずサービスのホストの状態を確認することが重要です。

CMC はこの問題を非常に簡単に解決します。 サービス問題が発生し、ホストが「UP 」状態の場合、CMC は次のホストチェックを待ちます。 間隔は(デフォルトで)6 秒と非常に短いため、ホストが「UP 」のままで、サービスに関する通知を送信する必要がある場合でも、通知の遅延はごくわずかです。

例として、クエリした web サーバーが利用できないために、check_http プラグインがCRIT 状態を通知する場合を考えてみましょう。 この状況では、サービスチェックの開始後に、 icmpreceiver コンポーネントがこのサーバーから TCP RST パケット(接続拒否)を受信します。 したがって、CMC はホスト自体がUP であることを確実に認識し、通知を遅滞なく送信することができます。

親ホストが定義されている場合、ネットワークの停止を計算する際にも同じ原則が利用されます。 ここでも、確認された状態を待つために、通知が一時的に遅延する場合があります。

2.2. メリット

この手順には以下の利点があります:

  • ホストチェックによる CPU 負荷が実質的に無視できるほど小さい − 特に高性能なハードウェアがなくても、何万ものホストを監視できます。

  • ホストがDOWN の場合、オンデマンドのホストチェックの混雑によって監視が妨げられることはありません。

  • ホストの状態が最新でない場合、サービスによる偽アラームが発生しません。

ただし、1 つの欠点があります。 Smart Ping ホストチェックでは、パフォーマンスデータ (パケットのランタイム) は生成されません。

これが必要なホストでは、Check hosts with PING (ICMP Echo Request) ルールセットを使用して、pingによるアクティブチェックを設定するだけで対応できます。

2.3. ping が応答しないホスト

実際には、すべてのホストが ping によってチェックできるわけではありません。 このような場合、CMC の他の方法、たとえば TCP 接続などをホストチェックに使用することもできます。 これらは一般的に例外であるため、全体的なパフォーマンスに悪影響はありません。 ここで設定するルールセットは、Host check command です。

2.4. ファイアウォールの問題

アクセスできないホストへの TCP 接続パケットに対して、TCP RST パケットで応答するファイアウォールがあります。 このファイアウォールは、このパケットの送信者として自身を登録することは許可されておらず、ターゲットホストの IP アドレスを指定する必要があります。 Smart Ping は、このパケットを「応答あり」と認識し、ターゲットホストがアクセス可能であると誤って判断します。

このような (まれな) 状況では、Global settings > Monitoring core > Tuning of Smart PING で、Ignore TCP RST packets when determining host state オプションを有効にすることができます。 または、check_icmp で、影響を受けるホストのホストチェックとして従来の ping を選択することができます。

3. 補助プロセス

大規模な環境における Nagios のパフォーマンスの低さから学んだ教訓は、プロセスの作成はリソースと時間を消費する作業であるということです。 ここで重要なのは、親プロセスのサイズですアクティブチェックを実行するたびに、Nagios プロセス全体を複製(フォーク)してから、新しいプロセス(チェックプラグイン)に置き換える必要があります。 監視するホストやサービスが多いほど、このプロセスが大きくなり、フォークに時間がかかるようになります。 その間、コアの他のタスクは待機状態になります。この点では、24 個の CPU コアもあまり役立ちません。

3.1. チェックヘルパー

コアのフォークを回避するため、プログラムの起動時に CMC は、アクティブチェックプラグインを起動するタスクを持つ非常に軽量な補助プロセスを一定数作成します これらのプロセスは、フォークの速度がはるかに速いだけでなく、コア自体がブロックされなくなるため、利用可能なすべてのコアにスケールアップしてフォークを行うことができます。 これにより、実際にはランタイムが非常に短いアクティブチェック(check_http など)の実行が大幅に高速化されます。

3.2. Checkmk フェッチャーおよび Checkmk チェッカー

しかし、CMC はさらに一歩進んでいます。Checkmk 環境では、アクティブチェックはむしろ例外的なものだからです。 ここでは、ホストおよび間隔ごとに 1 回のフォークのみを必要とする Checkmk ベースのチェックが主に使用されています。

これらのチェックの実行を最適化するために、CMC は 2 種類の補助プロセス、Checkmk フェッチャーと Checkmk チェッカーを維持しています。

Checkmk フェッチャー

Checkmk フェッチャーは、監視対象のホストから必要な情報、つまりCheck_MK およびCheck_MK Discovery サービスからのデータを取得します。 したがって、フェッチャーは、Checkmkエージェント、SNMPエージェント、およびスペシャルエージェントとのネットワーク通信を引き継ぎます この情報の収集には時間がかかりますが、通常、プロセスごとに必要なメモリは50メガバイト未満と比較的少ないため、複数のプロセスを問題なく設定できます。 プロセスは部分的に、あるいはまったくスワップアウトされない場合があるため、常に物理メモリに保持しておく必要があることにご注意ください。 この場合の制限要因は、Checkmk サーバーで使用可能なメモリです。

Tip

上記の 50 メガバイトは、基本的な目安です。 特定の状況では、実際の値はこれよりも高くなる場合があります。たとえば、管理ボードで IPMI が設定されている場合などです。

Checkmk チェッカー

Checkmk チェッカーは、Checkmk フェッチャーによって収集された情報を分析および評価し、サービスのチェック結果を生成します。 チェッカーは、Checkmk 構成を含める必要があるため、大量のメモリを必要とします。 チェッカープロセスは、少なくとも約 90 メガバイトのメモリを消費しますが、チェックの構成によっては、その数倍のメモリが必要になる場合もあります。 一方、チェッカーはネットワーク負荷を発生させず、非常に高速に実行されます。 チェッカーの数は、Checkmk サーバーが並行して処理できる数だけにしてください。 通常、この数はサーバーのコア数に対応します。 チェッカーは IO バインドではないため、各チェッカーに独自のコアがある場合に最も効果的です。

Checkmk フェッチャーと Checkmk チェッカーの 2 つの異なる「収集」と「実行」のタスクの分割は、Checkmk バージョン2.0.0 以降で導入されました。 以前は、2 つのタスクの両方を担当する補助プロセスタイプは1 つだけでした(いわゆる Checkmk ヘルパー)。

フェッチャー/チェッカーモデルでは、2 つのタスクは 2 つの別々のプロセスのプールに分割されています。 多くの小さなフェッチャープロセスがネットワークから情報を取得し、少数の大きなチェッカープロセスが計算負荷の高いチェックを行います。 その結果、CMC は同じパフォーマンス(1 秒あたりのチェック数)で最大 4 倍のメモリを使用します。

3.3. 補助プロセスの数を正しく設定する

デフォルトで起動されるチェックヘルパー(アクティブチェック)、Checkmkフェッチャー、およびCheckmkチェッカーの数は、Global settings > Monitoring core で定義されており、ユーザーでカスタマイズすることができます。

List of global settings for the CMC's auxiliary processes.

デフォルト値を変更する必要があるかどうか、および変更する方法を確認するには、いくつかの方法があります。

サイドバーの「Core statistics 」スナップインには、過去 10~20 秒間の平均利用率がパーセンテージで表示されます。

Core statistics snap-in.

すべての補助プロセスタイプについて、設定されたチェックを実行するのに十分なプロセスが常に存在する必要があります。 プールが 100% 利用されている場合、チェックは時間通りに実行されず、レイテンシーが拡大し、サービスの状態が最新情報から遅れてしまいます。

サイトの起動後数分で、使用状況が80% を超えてはいけません。 それ以上の割合の場合は、プロセスの数を増やす必要があります。 必要な Checkmk フェッチャーの数は、監視対象のホストおよびサービスの数に応じて増加するため、ここでは修正が必要になる可能性が高いです。 ただし、各プロセスはリソースを消費するため、実際に必要な数の補助プロセスだけを作成するように注意してください。 さらに、CMC の起動時にすべての補助プロセスが並行して初期化されるため、負荷のピークが発生する可能性があります。

Core statistics スナップインには、使用状況だけでなく、レイテンシーも表示されます。 これらの値については、単純なルールが適用されます。つまり、低いほど良い、つまり 0 秒が最適です。

Tip

スナップインに表示されている値は、OMD <site_name> performance サービスの詳細でサイトごとに表示することもできます。

Core statistics スナップインの代わりに、Setup > Maintenance > Analyze configuration を使用して、Checkmk で構成を分析することもできます。 この方法の利点は、Checkmk から補助プロセスの状態を即座に評価できることです。 補助プロセスのいずれかがOK でない場合、ヘルプテキストから対応するGlobal settings オプションを開いて、プロセスの値を変更できるのが非常に便利です。

4. 初期スケジュール設定

スケジュールでは、どのチェックをいつ実行するかを定義します。 Nagios には、チェックが時間間隔で定期的に分散されるようにするためのさまざまな手順が実装されています。 Nagios は、実行するクエリを、個々のターゲットシステムに時間間隔で均等に分散するように試みます。

CMC には、この目的のための独自の、より簡単な手順があります。 これは、Checkmk がすでに 1 間隔ごとに 1 回ホストに連絡していることを考慮しています。 さらに、CMC は、新しいチェックが数分にわたって分散されることなく、直ちに実行されるようにします。 これは、設定が有効になるとすぐに新しいホストがクエリされるため、ユーザーにとって非常に便利です。 多数の新しいチェックによって負荷が急上昇することを避けるため、定義可能な制限数を超える新しいチェックは、間隔全体に分散することができます。 このオプションは、Global settings > Monitoring core > Initial scheduling にあります。

5. パフォーマンスデータの処理

Checkmk の重要な機能は、CPU 使用率などの測定データの処理と、そのデータを長期間保存することです。 Checkmk Raw では、このためにPNP4Nagiosを使用しています。 これはRRDtool に基づいています。

このソフトウェアは 2 つの機能を備えています。

  1. ラウンドロビンデータベース (RRD)の作成および更新

  2. GUI でのデータのグラフィック表示です。

Nagios コア操作では、上記の1.で述べた機能は非常に長いプロセスになります。 方法に応じて、スプールファイル、Perl スクリプト、および C で記述された補助プロセス (npcd) が使用されます。 最後に、部分的に変換されたデータが RRD キャッシュディーモンの Unix ソケットに書き込まれます。

CMC は、RRD キャッシュディーモンに直接書き込むことで、この一連のプロセスを短縮します。中間ステップはすべて省略されます。 データの解析および RRDtool の形式への変換は、C++ で直接実行されます。 この方法は、RRD キャッシュデーモンが独自の非常に効率的なスプール機能をすでに実装しており、ジャーナルファイルを使用することで、システムクラッシュ時にデータが失われることがないため、現在では可能かつ合理的です。

メリット:

  • ディスクI/OとCPU負荷の削減

  • 実装がシンプルで、安定性が大幅に向上

新しい RRD のインストールは、cmk --create-rrd によって起動される別のヘルパーを使用して CMC によって実行されます。 これにより、PNP 互換のファイル、または新しい Checkmk フォーマット(新規インストールのみ)のファイルがオプションで作成されます。 Nagios から CMC への切り替えは、既存の RRD ファイルには影響しません。これらのファイルはシームレスに引き継がれ、引き続き維持されます。

商業版では、GUI でのデータのグラフィック表示は Checkmk の GUI 自体によって直接ハンドルされるため、PNP4Nagios コンポーネントは関与しません。

このページでは