Docker コンテナの監視: 初心者ガイド

このチュートリアルでは、Docker コンテナの監視について詳しく説明します。Docker コンテナの監視と、docker stats コマンド、Prometheus、cAdvisor などのツールの使用の重要性について学びます。

Docker は、開発者がコンテナ化された環境でアプリケーションをパッケージ化、デプロイ、実行できるようにする強力なツールです。Docker コンテナは移植可能で軽量であるため、開発者にとってアプリケーションを構築、テスト、デプロイするための魅力的な選択肢となります。

Docker コンテナは、アプリケーションを実行するための分離された環境も提供します。これにより、アプリケーションが相互に干渉しないようにし、開発者が同じホスト上で複数のバージョンのアプリケーションを実行できるようになります。Docker コンテナは、さまざまなマシンや環境間でアプリケーションを簡単に配布し、スケーラビリティを高めるのに役立ちます。

ただし、Docker コンテナーでアプリケーションを実行すると、コンテナーの健全性やパフォーマンスの監視など、新たな課題も生じます。この記事では、Docker コンテナの監視について詳しく説明します。Docker コンテナを監視することの重要性、追跡する主要なメトリクス、コンテナの監視に利用できるさまざまなツールや手法について説明します。最後に、Docker コンテナ監視のベスト プラクティスについて説明します。


Dockerコンテナ監視とは何ですか?

Docker コンテナの監視は、Docker コンテナ内で実行されているアプリケーションのパフォーマンス、正常性、リソース使用率を追跡するプロセスです。Docker コンテナーで監視される標準メトリクスの一部は次のとおりです。

  1. リソース使用率メト​​リクス: Docker コンテナに割り当てられ、Docker コンテナによって使用されるリソースを参照するメトリクス。使用状況は、コンテナーで発生しているワークロードが重すぎるか、最適であるか、または軽すぎるかを示すことができ、コンテナー内で実行されているアプリケーションの問題のトラブルシューティングに役立ちます。これらのメトリクスの例としては、次のようなものがあります。
    • CPU 使用率: コンテナーによって使用されている CPU 時間の割合
    • メモリ使用量: 使用されているメモリの量
    • ディスク使用量: 使用されているディスク容量の量
    • ネットワーク使用量: 使用されているネットワーク帯域幅の量
  2. コンテナステータスメトリクス: これらのメトリクスは、Docker コンテナのステータスを参照し、可用性、全体的な健全性を追跡し、コンテナに関連する問題を特定するのに役立ちます。これらのメトリクスの例は次のとおりです。
    • コンテナ稼働時間: コンテナが実行されている時間。稼働時間の高さはコンテナの安定性と信頼性の指標となる可能性があります
    • コンテナの再起動: コンテナが再起動された回数。再起動の回数が多い場合は、コンテナまたはコンテナ内で実行されているアプリケーションに問題があることを示す可能性があります。
    • コンテナの終了: コンテナが終了した回数。コンテナーの出口数が多い場合は、問題の兆候となる可能性があります
    • ステータス: このメトリクスは、コンテナ自体のステータスを指します (実行中、停止中、再起動中など)。
  3. アプリケーション パフォーマンス メトリクス: Docker コンテナ内で実行されているアプリケーションのパフォーマンスを参照するメトリクス。いくつかの例は次のとおりです。
    • 応答時間: コンテナ化されたアプリケーションがリクエストに応答するまでにかかる時間。応答時間を追跡すると、パフォーマンスの問題を特定し、アプリケーションがエンド ユーザーに応答できることを確認できます。
    • リクエスト レート: コンテナ化されたアプリケーションによって処理される 1 秒あたりのリクエストの数
    • エラー率: コンテナ化されたアプリケーションで発生したエラーの数
  4. ホスト マシン メトリクス: Docker が実行されている物理マシンまたは仮想マシンのパフォーマンスを参照するメトリクス。これらのメトリクスは、ホスト上で実行されている Docker コンテナのパフォーマンスと可用性に影響を与える可能性がある、ホスト マシンの全体的な健全性とパフォーマンスに関連する問題の特定に役立つため、監視が不可欠です。いくつかの例は次のとおりです。
    • CPU使用率
    • メモリ使用量
    • ディスクの使用状況
    • ネットワークの使用状況
  5. ログ: ログは、コンテナ内のアクティビティとイベントの詳細な記録を提供します。Docker コンテナによって生成されたログ出力を追跡および分析することを指します。
  6. プロセス: コンテナ内で実行されているプログラムまたはタスク

Docker コンテナを監視することが重要なのはなぜですか?

コンテナーは最新のアプリケーションの開発とデプロイメントに不可欠なコンポーネントであり、コンテナー化されたアプリケーションを成功させるには、コンテナーを効果的に監視できることが重要です。

Docker コンテナの監視は、アプリケーションの全体的な動作にとって重要なコンテナの健全性とパフォーマンスを確保できるため、重要です。これにより、コンテナーが効率的に実行され、問題をタイムリーに特定して対処できるようになります。Docker コンテナを監視することが重要である理由はいくつかあります。

  1. リソース使用率: Docker コンテナのリソース使用率を監視すると、コンテナが最適に実行され、タスクを実行するのに十分なリソースがあることを確認できます。コンテナーのリソース使用状況を可視化することは、将来の容量ニーズの計画にも役立ちます
  2. セキュリティ: Docker コンテナを監視すると、不正アクセスや悪意のあるコードの挿入などのセキュリティ違反を検出して防止できます。
  3. コストの最適化: リソースの使用を最適化すると、コストの削減につながります。
  4. コンプライアンス: 場合によっては、Docker コンテナを監視するには、業界の規制や標準への準拠が必要になる場合があります。
  5. 健全性と可用性: Docker コンテナの健全性と可用性を監視すると、問題を迅速に検出して解決し、ユーザーがアプリケーションを常に利用できるようにすることができます。
  6. モニタリング: ボトルネックの特定、パフォーマンスの最適化、問題の警告、デバッグ用の詳細なログとメトリクスの提供に役立ちます。

Dockerコンテナをリアルタイムで監視する

Docker コンテナをリアルタイムで監視するには、いくつかの方法があります。

  1. docker logs: 実行中のコンテナのログを表示します。
  2. docker attach: 実行中のコンテナに接続し、その出力を表示します
  3. docker top: コンテナの実行中のプロセスを表示します。
  4. docker events: コンテナーの作成時や破棄時など、Docker デーモンからのリアルタイム イベントを表示します。
  5. サードパーティ ツール: いくつかのサードパーティ ツールは、Docker コンテナをリアルタイムで監視できます。これらのツールは通常、より高度な監視および視覚化機能を提供し、他の IT システムやツールとの統合を提供します。

Dockerコンテナを監視するためのオープンソースツール

コマンドdocker stats_

docker statsは、実行中のすべてのコンテナーのリアルタイムのパフォーマンスとリソース使用量の統計を表示するために Docker コマンドライン インターフェイス (CLI) で使用される単純な組み込みコマンドです。このコマンドを使用するには、まずホスト システムに Docker をインストールする必要があります。

コマンドの出力にはdocker stats次の列が含まれます。

  • CONTAINER ID: コンテナの一意の識別子
  • NAME: コンテナの名前
  • CPU %: CPU 使用率のパーセンテージ
  • MEM USAGE / LIMIT: コンテナが使用するメモリの量とそのメモリ制限
  • MEM %: メモリ使用率の割合
  • NET I/O: ネットワークの入出力
  • BLOCK I/O: ブロックの入出力
  • PIDS: コンテナ内で実行されているプロセスの数

このdocker statsコマンドはデフォルトで、実行中のすべてのコンテナーの統計を表示します。ただし、次のように名前または ID を引数として渡すことで、特定のコンテナを指定できますdocker stats container-id

このコマンドには、出力のカスタマイズを可能にするいくつかのオプションがあります。たとえば、終了したコンテナを含むすべてのコンテナを表示するオプションや、ライブ ストリームを無効にして代わりに現在のリソース使用量のスナップショットを表示するオプションなどdocker statsです。出力のカスタム形式を指定するオプションもあります。このオプションでは Go テンプレート構文を使用します。これにより、変数と制御構造を使用して出力のレイアウトと内容を定義できます。--all--no-stream--format

を使用すると、docker statsコンテナのパフォーマンスとリソースの使用状況をリアルタイムで監視する効果的な方法になります。これは、アプリケーションの問題の特定とトラブルシューティングに役立ちます。ただし、これはリソース使用量の概要を提供するだけであり、より詳細かつ包括的な監視と分析にはさらに多くの情報が必要であることに注意することが重要ですdocker stats

プロメテウス

Prometheus は、リソースの使用状況と Docker コンテナーの健全性を監視するのに適したオープンソースの監視およびアラート システムです。Prometheus を使用して Docker コンテナーを監視するには、コンテナーからメトリクスを収集するように Prometheus サーバーをセットアップおよび構成する必要があります。

Prometheus クエリ言語 PromQL を使用すると、コンテナーのパフォーマンスを監視できるアラートとグラフを作成できます。Prometheus を Docker と統合するには、いくつかの方法があります。それでも、標準的な方法の 1 つは、Docker デーモンからメトリクスを収集して Prometheus にエクスポートするコンテナーである Prometheus Docker Hub エクスポーターを使用することです。その後、エクスポータ コンテナからメトリクスを収集するように Prometheus サーバーを構成できます。

Prometheus には、Docker コンテナの監視に適した重要な機能がいくつかあります。

  • スケーラビリティ: Prometheus は水平方向にスケーラブルになるように設計されており、パフォーマンスを低下させることなく多数の Docker コンテナを処理できます。
  • アラート: Prometheus には、定義されたルールに基づいて通知を送信できる組み込みのアラート マネージャーが含まれています。通知は、コンテナの CPU 使用率がしきい値を超えた場合など、特定のルールに基づいて行われます。
  • クエリ言語: Prometheus は、メトリクスをリアルタイムでフィルタリング、集計、分析できる PromQL と呼ばれる強力なクエリ言語を提供します。これは、コンテナーのパフォーマンスを理解するのに役立つアラートの作成やグラフの生成に役立ちます。
  • Grafana の統合: Prometheus は、ダッシュボードを作成してデータを視覚化するための人気のあるオープンソース ツールである Grafana とシームレスに統合します。これにより、関心のある指標をわかりやすい方法で表示するカスタム ダッシュボードを作成できます。
  • 柔軟性: Prometheus は特定のテクノロジーやプラットフォームに関連付けられていないため、さまざまなシステム上で実行されている Docker コンテナーを監視するために使用できます。
  • カスタマイズ性: Prometheus では、収集および処理操作に関するカスタム メトリクスと構成を定義できます。この機能により、それぞれの環境に関連するコンテナの特定の側面を監視できます。

全体として、Prometheus は Docker コンテナを監視するための強力なツールであり、DevOps プロフェッショナルの間で人気のある選択肢です。

cアドバイザー

Container Advisor とも呼ばれる cAdvisor は、コンテナ化されたアプリケーションを監視および管理するために Google によって開発されたオープンソース ツールです。個々のコンテナーのリソース使用状況に関する詳細情報が提供され、管理者がコンテナー化されたアプリケーションのリソース使用率を最適化するのに役立ちます。

cAdvisor は、Docker コンテナ内でスタンドアロン サービスとして実行され、同じホスト上で実行されているすべてのコンテナからリソース使用量データを収集します。次に、シンプルな Web インターフェイスを介してグラフや表を通じてこの情報を提供します。cAdvisor では、ホストに Docker がインストールされている必要があります。ホスト上に Docker が正常にインストールされている状態で、Docker Hub から cAdvisor イメージをプルし、次のように cAdvisor コンテナを起動しますdocker pull google/cadvisor:latest

次に、cAdvisor コンテナを起動します。

docker run --volume=/:/rootfs:ro --volume=/var/run:/var/run:rw --volume=/sys:/sys:ro --volume=/var/lib/docker/:/var/lib/docker:ro --publish=8080:8080 --detach=true --name=cadvisor google/cadvisor:latest

このコマンドは、cAdvisor コンテナをデタッチ モードで起動し、バックグラウンドで実行します。このフラグはコンテナのポート 8080 をホストのポート 8080 にマップするため、 http://localhost:8080--publishで cAdvisor Web インターフェイスにアクセスできるようになります。

デフォルトでは、cAdvisor はホスト上のすべてのコンテナのリソース使用状況データを収集します。cAdvisor の動作は、コンテナーの起動時にコマンド ライン フラグを使用するか、環境変数を設定することでカスタマイズできます。オプションの完全なリストについては、cAdvisor のドキュメントを参照してください。

cAdvisor が起動して実行されると、cAdvisor Web インターフェイスにアクセスして、個々のコンテナーのリソース使用状況データを表示できます。このインターフェイスには、リソース使用量データを表示するいくつかのリアルタイムのグラフとテーブルが用意されています。Web インターフェイスから、コンテナーにカスタム メタデータのラベルを付けたり、さまざまな基準でグループ化したり、コンテナーのリソース使用量が特定のしきい値を超えた場合にアラートを設定したりできます。

cAdvisor には、Docker コンテナーの監視に適したいくつかの重要な機能があります。

  • リアルタイムのリソース使用状況データ: cAdvisor は、CPU、メモリ、ネットワーク使用状況など、個々のコンテナーの詳細なリソース使用状況データを提供します。このデータはリアルタイムで更新されるため、管理者はリソース競合の問題を迅速に特定し、トラブルシューティングを行うことができます。
  • リソース使用量の履歴データ: cAdvisor は、各コンテナのリソース使用量の履歴データを保存し、管理者がコンテナのリソース使用量が時間の経過とともにどのように変化したかを確認できるようにします。この機能は、容量計画とパフォーマンス分析に役立ちます。
  • コンテナのラベル付け: cAdvisor を使用すると、管理者はカスタム メタデータを使用してコンテナにラベルを付けることができます。これは、cAdvisor Web インターフェイスでコンテナをグループ化およびフィルタリングするのに役立ちます。
  • コンテナのグループ化: cAdvisor では、コンテナが実行されているホストやベースとなる Docker イメージなど、さまざまな基準に基づいてコンテナをグループ化できます。この機能は、さまざまなコンテナー グループのリソース使用量を比較するのに役立ちます。
  • コンテナ アラート: cAdvisor には、コンテナのリソース使用量が特定のしきい値を超えた場合にアラートを設定する機能が含まれています。この機能は、リソース競合の問題を事前に特定して対処するのに役立ちます。
  • 他のツールとの統合: cAdvisor は、Google Cloud Monitoring、Grafana、Prometheus などのいくつかの異なるツールと統合されており、管理者は全体的な監視および管理戦略のコンテキスト内でリソース使用状況データを表示および分析できます。

結論

Docker コンテナの監視は、コンテナ化された環境を管理および運用する上で重要な部分です。コンテナーを監視することで、アプリケーションがスムーズに実行されていることを確認し、発生した問題を特定してトラブルシューティングし、コンテナーのパフォーマンスを最適化することができます。

Docker コンテナをリアルタイムで監視するために、いくつかのオープン ソース ツールを利用できます。これらのツールは、多次元データ モデル、強力なクエリ言語、効率的な時系列データベース、柔軟な警告システムなどのさまざまな機能を提供します。

人気のあるオープン ソース オプションには、Prometheus、Grafana、cAdvisor などがあります。最終的に、Docker コンテナを監視するための適切なツールは、特定のニーズと要件によって異なります。ただし、これらのオープンソース ツールのいずれかを活用すると、コンテナーのパフォーマンスと動作に関する貴重な洞察が得られ、アプリケーションがスムーズに実行されていることを確認できます。

出典: https://blog.logrocket.com

#docker

1.80 GEEK