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. はじめに

Docker は、コンテナ仮想化のために世界中で最も広く使用されているソフトウェア製品の 1 つとなっています。 コンテナのエンドツーエンドの透過的な監視は不可欠ですが、コンテナは動的で多層的なアーキテクチャであるため、その監視は複雑です。
Checkmk は、Linux エージェントを介して Docker コンテナを直接監視することができます。 しかし、Checkmk は、デーモンやコンテナの一般的なステータスだけでなく、コンテナ自体も監視します。 現在監視可能なエレメントの完全なリストは、チェックプラグインのカタログでご覧いただけます。
Checkmk は、ノード(Docker の用語で「コンテナが実行されているホスト」を意味します)について、ステータスおよびインベントリ情報を取得できるほか、コンテナの詳細なステータス情報も取得できます。 この機能を利用するには、監視対象のコンテナを Checkmk に個別のホストとして追加する必要があります。 そのデータは、ノードからこのホストにピギーバックされます。
商業版では、 ダイナミックホストマネージメントを使用して、コンテナホストを自動的に作成または削除することができます。
2. 設定
2.1. エージェントおよびプラグインのインストール
Checkmk で Docker ノードを監視するには、まず通常のLinux エージェントで監視する必要があります。 これにより、ホストシステムの基本的な監視は可能になりますが、ドッカーデーモンやコンテナに関する情報は得られません。
mk_docker.py エージェントプラグインが必要です。このプラグインは、以下の場所にあります。Setup > Agents > Other operating systems > Plugins
プラグインをエージェントのプラグインフォルダ(通常は/usr/lib/check_mk_agent/plugins )にインストールします。
エージェントプラグインのインストールに関する詳細については、Linux エージェントの記事をご覧ください。
root@linux# install -m 0755 mk_docker.py /usr/lib/check_mk_agent/plugins商業版 では、Docker を監視するための適切なルールセットが付属しているエージェントベーカリーを使用して、これを行うこともできます。Docker node and containers
docker Python ライブラリ(docker-pyではない)が必要です。
バージョン 2.6.1 以上が必要です。
コマンドラインで「python 」と入力して、簡単に確認できます。
root@linux# python3
Python 3.8.10 (default, Nov 26 2021, 20:14:08)
[GCC 9.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import docker
>>> docker.version
'5.0.3'必要に応じて、pip3 でライブラリをインストールできます。
root@linux# pip3 install docker注意: docker-py またはpython-docker-py のパッケージはインストールしないでください。
これらのパッケージは、同じ名前空間で Docker ライブラリの古いバージョン(互換性がない)を利用可能にしてしまいます。docker-py (またはその両方)がインストールされている場合、pip3 では名前空間を修正できないため、1 回アンインストールするだけでは不十分です。
この場合、正しいバージョンがインストールされていることを確認するには、次のコマンドを実行してください。
root@linux# pip3 uninstall docker-py docker
root@linux# pip3 install dockerここで Checkmk でサービスディスカバリーを実行し、変更をアクティブにすると、Docker ノード自体に影響する新しいサービスがいくつか見つかるはずです。

2.2. プラグインの微調整
プラグインのさまざまなパラメータを設定できます。
たとえば、不要なセクションを非アクティブ化したり、必要に応じて Docker API エンジンのエンドポイントをカスタマイズしたりして、リソースを節約できます(デフォルトは Unix ソケットunix://var/run/docker.sock です)。
Docker ホストに設定ファイル/etc/check_mk/docker.cfg を作成します。
詳細な説明が記載されたテンプレートは、Checkmk ディレクトリ~/share/check_mk/agents/cfg_examples/docker.cfg にあります。
商業版では、エージェントベーカリーを使用してすべてのパラメータを簡単に設定できます。
2.3. コンテナの監視
コンテナホストの作成
もちろん、興味深いのは Docker コンテナの監視です。 これはプラグインをインストールすることで自動的に実装されますが、サービスはドッカーノードに割り当てられるのではなく、Checkmk はドッカーコンテナごとに 1 つのホストを想定しています。
ここで使用されるメカニズムは、ピギーバックと呼ばれています。
プラグインまたはスペシャルエージェントは、他のホストのデータを、いわば「ピギーバック」して、自身のデータとともに転送します。
Checkmk は、このデータを~/tmp/check_mk/piggyback ディレクトリに配置します。
セットアップでは、正しい名前でホストを作成するだけで、サービスは自動的にホストに割り当てられます。
商業版では、これらのホストを自動的に作成することができます。 ダイナミックホストマネージメントで、Piggyback data 接続タイプを使用してください。 ホストを手動で作成する場合は、次の点に注意してください。
ホスト名は、
~/tmp/check_mk/piggybackで作成したディレクトリと完全に一致する必要があります。デフォルトでは、これはコンテナの 12 文字の短い ID です (例:2ed23056480f)。コンテナに独自の IP アドレスがない場合 (通常はこの場合です)、Network address > IP アドレスファミリー# をNo IP に設定してください。
Monitoring agents の場合、Checkmk agent / API integrations をNo API integrations, no Checkmk agent に設定してください。
セクションBasic settings のParents フィールドを、ドッカーノードのホスト名に設定できます。
また、Docker ノードとそのコンテナは、同じ Checkmk サイトから監視することが重要です。
コンテナホストの作成が完了し、サービスディスカバリーを実行すると、新しいサービスがこれらのホストに表示されます。
コンテナにLinux エージェントがインストールされている場合、エージェントは自動的に実行されます。 ただし、コンテナ内のエージェントによって監視されるサービスの多くは、実際にはノードからの情報(CPU 負荷、温度、その他の多くのオペレーティングシステムパラメータなど)を表示するため、これらは削除されました。
コンテナホストの別名
前述のように、デフォルトでは、コンテナの 12 文字の短い ID がコンテナホストの名前として使用されます。
これは、必要に応じて別の設定に変更することができます。
これを行うには、設定ファイルdocker.cfg (プラグインの微調整を参照) で、container_id オプションを、コンテナ ID 全体を名前として使用するにはlong に、コンテナ名を使用するにはname に設定します。
商業版ユーザーは、エージェントベーカリーで、ルール「Docker node and containers 」のオプション「Host name used for containers 」を使用して、これを設定できます。

ちなみに、Host name translation for piggybacked hosts ルールセットを使用すると、ピギーバックデータに含まれるホスト名の名前変更に関する非常に柔軟なルールを定義できます。 この方法を使用すると、たとえば、2つの異なるDockerノードに同じ名前のコンテナが存在するという問題も解決できます。

この機能の詳細およびその他のオプションについては、「ピギーバックメカニズム」の記事をご覧ください。
ホストの状態の監視
コンテナのホスト状態は、TCP パケットや ICMP を使用して実際に確認することはできないため、別の方法で判断する必要があります。Docker container status サービスは、この作業を支援します。このサービスは、コンテナが実行されているかどうかを必ずチェックするため、ホスト状態を確実に検出するためのツールとして使用できます。 この目的のために、Host check command ルールセットでルールを定義し、Use the status of the service… オプションを上記のサービスに設定します。 コンテナのみに影響するように、条件を設定することを忘れないでください。 この例では、すべてのコンテナは、同じ名前のフォルダ内にあります。

コンテナ内でエージェントを直接操作する
コンテナ自体の詳細(実行中のプロセス、データベース、ログファイルなど)を監視するには、Checkmk エージェントをコンテナ自体にインストールして実行する必要があります。
これは、エージェントプラグインのロールアウトに特に当てはまります。
ただし、mem 、cpu 、diskstat (Disk I/O) の 3 つのプラグインは、コンテナ内にエージェントがなくても動作し、ノード自体の Checkmk エージェントによって分析されます。
特に、独自に作成したドッカーイメージの場合は、エージェント自体をコンテナにロールアウトすることをお勧めします。 この場合、前述のように、データはドッカーノードのエージェントによって分析されなくなります。 その代わりに、各コンテナで個別のエージェントが実行されます。 ただし、このエージェントの呼び出しは、ドッカーノードを経由するピギーバック手順で引き続きバンドルされます。
ただし、コンテナにインストールされたエージェントは、必要なコマンドがすべてコンテナにも存在する場合にのみ機能します。 特に、Alpine Linux ベースの最小限のコンテナでは、Bash などの基本的なものが存在しない場合がほとんどです。 このような状況では、Docker ノードからコンテナを監視する必要があります。
この場合、Host check command ルールセットの使用は、コンテナが ping できない場合にのみ必要になりますが、それ以外の場合は、上記で説明したとおりに機能します。
3. 診断オプション
3.1. ドッカーノードの診断
セットアップが成功しなかった場合、問題を分析するためのいくつかのオプションがあります。 該当する場合は、ホストに少なくともバージョン1.5.0 以降のCheckmkエージェントがインストールされていることを確認してください。
ホストのエージェントのバージョンが適切な場合は、エージェントの出力にデータがあるかどうかを確認してください。 出力はテキストファイルとしてダウンロードできます。監視のホストビューで、Download agent output アクションメニューのエントリからダウンロードできます。

または、エージェントのキャッシュを直接検索することもできます。 わかりやすくするため、以下の例では、ノードの出力に短縮して表示しています。
OMD[mysite]:~$ strings tmp/check_mk/cache/mydockerhost | grep "<<<docker"
<<<docker_node_info>>>
<<<docker_node_disk_usage:sep(44)>>>
<<<docker_node_images>>>
<<<docker_node_network:sep(0)>>>セクションがここに表示されていない場合、Docker のインストールは認識されません。Docker node info サービスには、次のコマンドを使用します。 このコマンドは、ホスト上でこのフォームとまったく同じで実行可能である必要があります。 必要に応じて、Docker のインストールを確認してください。
root@linux# docker info 2>&13.2. コンテナホストの診断
コンテナホストがデータを受信しない、またはサービスが検出されない場合は、まず、このホストでピギーバックデータが利用可能かどうかを確認してください。 ホスト名は、コンテナの ID と同じである必要があります。 または、Host name translation for piggybacked hosts ルールセットを使用して手動で割り当てることもできます。 ただし、この場合は、Explicit hostname mapping オプションのみを使用できます。

ID に対してピギーバックデータが作成されるかどうかを確認するには、次のディレクトリをチェックしてください。
OMD[mysite]:~$ ls -l tmp/check_mk/piggyback/
76adfc5a7794 f0bced2c8c96 bf9b3b8538344. ホストラベル
Checkmk には、いわゆるホストラベルがあります。 とりわけ、Docker 監視は、これらのラベルを自動的に設定します。
ドッカーノードには「
cmk/docker_object:node」ラベル、各コンテナには、
cmk/docker_image、cmk/docker_image_name、cmk/docker_image_version、cmk/docker_objectラベルが設定されます。
これらのラベルは、たとえばルールの条件などで使用して、コンテナで使用されているイメージに応じて監視設定を変更することができます。
5. ファイルとディレクトリ
| ファイルパス | 機能 |
|---|---|
|
Checkmk は、ピギーバックデータをここに保存します。ピギーバックされたホストごとに、そのホスト名と同じ名前のサブフォルダが作成されます。このサブフォルダには、そのホストのデータを含むテキストファイルが保存されます。ファイル名は、データを提供するピギーバックホストの名前です。 |
|
ここでは、すべてのホストからの最新のエージェント出力が一時的に保存されます。ホストのファイルの内容は、 |
