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. 概要

ピギーバックメカニズムは、VMware の監視の一部として、Checkmk の初期から導入されています。 ここでは、データが特定のホスト(ESX ホストシステムや vCenter など)にのみ存在するため、そのホストからデータを照会する必要がある状況があります。 しかし、監視では、そのデータはまったく別のホスト(仮想マシンなど)に関連しています。

Checkmk の通常のメカニズムでは、ホストから取得したデータとサービスを自動的に割り当てるため、これは実現できません。 また、すべての VM の情報が常に ESX ホストまたは vCenter に直接表示される場合、監視には非常に不都合です。

「ピギーバック」という用語は、ホスト B の監視データを、ホスト A から照会したデータに(いわば)ピギーバックするプロセスを表します。

最近では、ピギーバックは他の多くの監視プラグインでも使用されています。

仮想化環境に加えて、ピギーバックメカニズムは、モバイルデバイスの監視やデータセンター内の気候監視 (MQTT) にも使用できます。 クエリインターフェースは非常にシンプルであるため、ピギーバックメカニズムを自分で使用するのは非常に簡単です。 たとえば、独自のチェックプラグインを実装して、あるソースからのデータを他のホストにマッピングする場合などに使用できます。

2. ピギーバックの原理

ピギーバックの基本原理は、次の図のように機能します。 ホスト A は、自身の監視データだけでなく、他のホスト、より一般的には他のオブジェクトからの監視データも持っています。 たとえば、ESX ホストは、その仮想マシン (VM) それぞれの状態と多くの現在のメトリックを記録します。 このホスト Aをピギーバックホストと呼びます。

ここで、Checkmk が 1 分間隔で A から監視データを取得すると(通常の Checkmk エージェントから、あるいはメーカーの API 経由でスペシャルエージェントから取得する場合も同様です)、応答には、他のホスト/オブジェクト B、C などから特別にマークされたレポートデータも含まれます。 このピギーバックデータは、後で処理するために Checkmk サーバー上のファイルに保存されます。 ホスト B、C などは、ピギーバックホストと呼ばれます。

後で Checkmk が B または C の監視データを必要とした場合、そのデータはすでにローカルファイルに保存されているため、エージェントにクエリを実行することなく直接処理することができます。

Schematic representation of indirect data forwarding via the piggyback mechanism.

通常の監視とピギーバックを組み合わせることも可能であり、有用です。 再び VMware の例を見てみましょう。 VM B に Checkmk エージェントをインストールし、ESX ホストには認識されていない VM のローカル情報(VM で実行中のプロセスなど)を評価するとします。 この場合、エージェントがクエリされるだけでなく そのデータはホスト A から受信したピギーバックデータと結合されます

Schematic representation of combined data forwarding: part of the data comes via Piggyback, the rest directly from the monitored host.

3. ピギーバックの実践

3.1. ピギーバックの設定

まず良いニュースです。ピギーバックのメカニズムは、多くの場合完全に自動的に機能します。

  • A をクエリしたときに他のホストのピギーバックデータが検出されると、それらは後で評価するために自動的に保存されます。

  • B をクエリすると、別のホストからのピギーバックデータが見つかった場合は、それが自動的に使用されます。

ただし、Checkmk では通常どおり、すべて設定可能です。 つまり、ホスト (ホスト B など) のプロパティの「Monitoring agents 」ボックスで、既存のピギーバックデータまたは欠落しているピギーバックデータに対してどのように反応するかを設定できます。

Piggyback data redirection is defined in the agent settings.

デフォルトは「Use piggyback data from other hosts if present 」です。 ピギーバックデータが利用可能な場合はそれが使用され、ない場合はホストは「独自の」監視データを使用します。

Always use and expect piggyback data (ピギーバックデータを無視)を設定すると、ピギーバックデータの処理が強制されます。 データがないか、またはデータが古い場合、Check_MK (ホストのステータスを監視)サービスは警告を発します。

Never use piggyback data を設定すると、見つかったピギーバックデータは単に無視されます。この設定は、例外的な場合にのみ必要になります。

3.2. ホストが存在する必要があります

もちろん、ホストがピギーバックデータを処理するには、そのホスト自体が監視対象として存在している必要があります。 ESX の例では、VM も Checkmk にホストとして登録して、実際に監視対象としている必要があります。

商業版では ダイナミックホストマネージメントを使用してこれを自動化し、ピギーバックデータが利用可能なホストを自動的に作成することができます。

3.3. ホスト名とその割り当て

上記の方式では、オブジェクト B に関するデータは、監視においてホスト B に割り当てられるのが当然でした。 しかし、これはどのように機能しているのでしょうか

ピギーバックメカニズムでは、割り当ては常に名前を使用します。 (特別な) エージェントは、ピギーバックデータのセットごとにオブジェクト名を書き込みます。 ESX の場合、たとえば、仮想マシンの名前です。 Dockerなどの一部のプラグインには、名前として使用するものの選択肢がいくつかあります。

Tip

名前がドットで始まるホストからのピギーバックデータは、Checkmk では処理されません。 これは、たとえば、..hostname.hostname.domain.com などの名前に適用されます。 これらのホストを監視に含めるには、以下で説明する手順に従ってホスト名を変更する必要があります。

マッピングが正しく機能するためには、Checkmk での一致するホストの名前は、大文字と小文字も含めて、もちろん完全に一致している必要があります。

しかし、ピギーバックデータのオブジェクト名が不適切または監視に不適切な場合はどうなりますか? 不適切な名前としては、.myhostname など、ピギーバックホストの名前がドットのみで構成されている、またはドットで始まっているものが挙げられます。これらは Checkmk では処理されないためです。 特別なルールセット Host name translation for piggybacked hosts があります。これは、Setup > Agents > Agent access rules のセットアップメニューにあります。

リネームを設定するには、次の2つの操作が必要です:

  1. ルールを作成し、ピギーバックホスト(ホスト A)にアクセスするための条件を設定します。

  2. ルールに適切な名前割り当て値を作成します。

ルール内の値の例を以下に示します。 まず、Convert FQHN を使用して、ホスト名のドメイン部分が削除されます。 次に、ピギーバックデータ内のすべてのホスト名が小文字に変換されます。 最後に、2 つのホストvm0815 およびvm081 が、Checkmk ホストmylnxserver07 およびmylnxserver08 に変換されます。

Options for host name translation, removing the domain part, conversion to lowercase and explicit mapping.

より柔軟な方法は、Multiple regular expressions に記載されている正規表現を使用する方法です。 この方法は、多くのホストの名前を変更する必要があり、特定の方式に従って変更を行う場合に便利です。 以下の手順に従ってください。

  1. Multiple regular expressions オプションを有効にします。

  2. Add expression ボタンで翻訳エントリを追加します。2 つのフィールドが表示されます。

  3. 最初のフィールド(Regular expression)に、元のオブジェクト名と一致し、少なくとも 1 つのサブグループ(括弧で囲まれた部分式)を含む正規表現を入力します。 これらのグループの詳細については、正規表現に関する記事をご覧ください

  4. Replacement で、サブグループで「キャプチャ」された値が\1\2 などに置き換えられる、目的のターゲットホスト名のスキーマを指定します。

正規表現の例としては、例えばvm(.*)-local があります。 置換値myvm\1 は、名前vmharri-localmyvmharri に翻訳します。

3.4. 古いピギーバックデータ

ネットワークが変更された場合、ピギーバックデータも変更される可能性があります。 これにより、新たな問題が発生します。 ホストにアクセスできない場合、監視はどのように反応しますか? オブジェクトが一時的または永続的に利用できなくなった場合など、ピギーバックデータが古くなった場合はどうなりますか? すべてのピギーバックデータは同じように扱われますか、それとも違いがありますか? Checkmk の他の多くのトピックと同様、ここでの動作も設定、つまりルールによって決まります。Setup > Agents > Agent access rules にありますルールProcessing of piggybacked host data を使用して、さまざまなオプションを設定できます。

Processing of piggybacked host data セクションで、ピギーバックデータの処理に関する実際に必要な詳細情報を入力します。

Defining the rules for outdated piggyback data.

Checkmk は、ピギーバックデータの管理作業を容易にします。 とりわけ、ピギーバックホストからピギーバックデータが提供されていない(または提供されなくなった)すべてのホスト/オブジェクトを自動的に削除します。Keep hosts while piggyback source sends piggyback data only for other hosts オプションを使用して、ピギーバックデータを含む影響を受けるファイルが削除されるまでの時間を指定します。 この期間は、ピギーバックホストのチェック間隔以上にしてください。

Set period how long outdated piggyback data is treated as valid の 2 つのオプションを使用して、ホストが新しいデータを供給しなくなった場合に、既存のピギーバックデータを有効とみなす期間を定義します。 定義した期間が経過すると、ピギーバックデータに基づくサービスは「面白くない」と表示されます。 この期間中のCheck_MK サービスのステータスも定義します。 これにより、特に短時間の接続中断が繰り返し発生する場合に、不要な警告を表示しないようにすることができます。

ピギーバックデータの一般的な処理方法を定義したら、Exceptions for piggybacked hosts で、説明されているオプションを使用して、個々のホストに対して(同じ方式に従って)個別の処理方法を定義できます。

最後に、ConditionsExplicit hosts オプションで、ピギーバックホストの名前を必ず指定する必要があります。

4. このプロセスの背後にある技術

4.1. ピギーバックデータの転送

前述のように、ピギーバックデータは、ピギーバックホストからのエージェント出力とともに他のホストにも転送されます。 Checkmk エージェントからの出力は、単純なテキスト形式です。

新しい点は、出力に、<<<< で始まり、>>>> で終わる行を 1 行挿入できることです。 その間にホスト名が入ります。 この行以降、すべての監視データは、このホストに割り当てられます。 以下は、セクション<<<esx_vsphere_vm>>> をホスト316-VM-MGM に割り当てる例です。

<<<<316-VM-MGM>>>>
<<<esx_vsphere_vm>>>
config.datastoreUrl url /vmfs/volumes/55b643e1-3f344a10-68eb-90b11c00ff94|uncommitted 12472944334|name EQLSAS-DS-04|type VMFS|accessible true|capacity 1099243192320|freeSpace 620699320320
config.hardware.memoryMB 4096
config.hardware.numCPU 2
config.hardware.numCoresPerSocket 2
guest.toolsVersion 9537
guest.toolsVersionStatus guestToolsCurrent
guestHeartbeatStatus green
name 316-VM-MGM
...
<<<<>>>>

この割り当てを終了するには、<<<<>>>> という内容の行を使用する必要があります。 それ以降の出力は、再びピギーバックホストに属することになります。

エージェントの出力を処理する際に、Checkmk は他のホスト宛ての部分を抽出して、~/tmp/check_mk/piggyback 以下のファイルに保存します。 この下に、ピギーバックホストごとにサブディレクトリが作成されます(この例では、B という名前を使用しています)。 このサブディレクトリには、各ピギーバックホストからの実際のデータが別々のファイルとして保存されます。 この例では、ファイル名はA となります。 なぜこんなに複雑なのでしょうか? それは、1 つのホストが複数のホストからピギーバックデータを取得できるため、1 つのファイルでは不十分だからです。

Tip

ピギーバックデータがどのようなものなのか興味がある場合は、監視サイトのホストの~/tmp/check_mk/cache ディレクトリでエージェントの出力を確認してください。 関連するすべてのファイルとディレクトリの概要は、以下をご覧ください。

4.2. 孤立したピギーバックデータ

ホストがピギーバックホストを自動的に変更する環境で作業している場合は、ダイナミックホストマネージメントの使用をお勧めします。 仮想マシンが手動で移動されるなどの理由で、ダイナミックホストマネージメントを使用できない、または使用したくない場合 Checkmk で作成していないホストからピギーバックデータを受信する可能性があります。 これは意図的なものかもしれませんが、名前の完全一致ではないなどのエラーである可能性もあります。

コマンドcmk-piggyback list orphans は、ピギーバックデータが利用可能であるが、監視にホストが存在しないすべてのオブジェクトを表示します。 監視されていないピギーバックホストが 1 つ見つかるごとに 1 行のリストを出力します。

OMD[mysite]:~$ cmk-piggyback list orphans
fooVM01
barVM02

この出力は「クリーン」であり、たとえばスクリプトで処理することができます。

4.3. 分散監視におけるピギーバック

分散監視では、運用構造に応じてピギーバックデータを整理することができます。 つまり、ホストを経由して監視に流入したピギーバックデータは、サイト間でも別のホストに割り当てて評価することができます。 ピギーバックデータは、セントラルサイトを経由して転送されます。

デフォルトでは、ピギーバックデータは常に、それが検出されたサイトで処理され 、そのデータは、それが到着したホストに自動的に割り当てられます。 この動作は、ホストのプロパティで変更できます。

“Settings for the monitoring site.”

ここで、ピギーバックデータを監視するセントラルサイトまたはリモートサイトのいずれかを、ご希望の代替サイトとして選択してください。 新しい」サイトのホストについても、以下の事項が適用されます。ホストが存在している必要があります

セントラルサイトの負荷を軽減するために、ピギーバックデータを 1 つのリモートサイトから別のリモートサイトに直接、つまりセントラルサイトを経由せずに転送することもできます。 このピアツーピア接続の詳細については、「分散監視」の記事をご覧ください。

5. ファイルおよびディレクトリ

5.1. Checkmk サーバー上のファイルパス

パス 説明

~/tmp/check_mk/piggyback/

ピギーバックデータの保存場所

~/tmp/check_mk/piggyback/B/

ホスト Bピギーバックデータのディレクトリ

~/tmp/check_mk/piggyback/B/A

ホスト Bに対するホスト Aからのピギーバックデータを含むファイル

~/tmp/check_mk/piggyback_sources/

ピギーバックデータを作成するホストのメタ情報

~/tmp/check_mk/cache/A

ホスト A からのエージェント出力 — 既存のピギーバックデータを含む、生形式のファイル

このページでは