Dockerを監視するための ""監視ツール"" をご紹介

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/614998/f12b6639-a431-c2ce-4cf2-b7962101b3ae.png)


データは、あらゆる形態において、非常に強力で有用なものとなります。収集されたデータは、いつでも驚くべき洞察を提供し、最適化、障害認識/許容度、および新機能の開発のための意思決定の際に役立つものです。これらのデータは、ビジネス、ソフトウェアアプリケーションのセット、またはコンテナから由来するものである可能性があります。

コンテナは最新のソフトウェアアーキテクチャの不可欠な部分になり、データベース、アプリケーションの一部、さらにはアプリケーション全体を、ホストサーバーから独立した自己完結型の環境でホストできるようになりました。そのため、コンテナを適切に監視することは、コンテナがホストするアプリケーションを正常で効率的に保つために絶対に不可欠です。

現在、Dockerはコンテナーの世界で支配的な勢力であり、2018年に本番環境にあるすべてのコンテナーの83％以上を占めています。その人気により、Dockerコンテナーの監視は、さまざまなツールが存在するため、選択の問題に帰着することがあります。そこから選択し、それぞれに長所と短所があります。

多くのユースケースの場合、[MetricFire](https://www.metricfire.com/japan/?utm_source=blog&utm_medium=Qiita&utm_campaign=Japan&utm_content=Docker%20Monitoring%20Tools)はDockerコンテナを監視するための優れたオプションとなります。 MetricFireは、Graphite、Prometheus、Grafanaのホストバージョンを提供するプラットフォームです。 これらのオープンソースツールに基づいて構築されたMetricFireは、高度にカスタマイズ可能で、DevOpsおよびSREコミュニティ全体でよく知られているアジャイルツールを提供します。 しかも、お値段もお手頃です。ここでMetricFireの無料[デモを予約](https://www.metricfire.com/demo-japan/?utm_source=blog&utm_medium=Qiita&utm_campaign=Japan&utm_content=Docker%20Monitoring%20Tools)し、今日からDockerコンテナーの監視を開始するために必要なことや質問等ございましたらご相談ください。

この記事の目的は、人気のあるDocker監視ツールの詳細を、ユースケースを用いて最適なツールを決定するのに役立つ方法と一緒に提供することです。

#[MetricFire](https://www.metricfire.com/japan/?utm_source=blog&utm_medium=Qiita&utm_campaign=Japan&utm_content=Docker%20Monitoring%20Tools)
オープンソースのPrometheus、Graphite、Grafana上に構築されたMetricFireは、デフォルトのダッシュボードとプラグインをすぐに利用できる状態でDockerコンテナーをすぐに監視する準備ができています。 MetricFireは基本的に、オープンソースプロジェクトのホストバージョンを提供するサービスであるため、MetricFireはオープンソースプロジェクトが行えることは基本すべて実行できます。 これには、コミュニティ全体で開発されたすべての適応とプラグインが含まれています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/614998/61e96b77-b551-af6f-a08c-97f89a28533d.png)

[MetricFire](https://www.metricfire.com/japan/?utm_source=blog&utm_medium=Qiita&utm_campaign=Japan&utm_content=Docker%20Monitoring%20Tools)は、cAdvisor、Prometheus、Kubernetesと統合されており、Dockerコンテナーを監視するための究極のツールになっています。 オープンソースツールの背後にいるフォロワーの大規模なコミュニティの結果として、MetricFireの背後にあるテクノロジーも絶えず開発され進化しています。

つまり、Docker監視ツールとしてMetricFireを選択した場合、DockerとKubernetesが急速に開発されるため、監視テクノロジーが時代遅れになることを心配する必要はありません。

MetricFireには14日間の無料トライアルがありますので、まずは[無料デモを予約](https://www.metricfire.com/demo-japan/?utm_source=blog&utm_medium=Qiita&utm_campaign=Japan&utm_content=Docker%20Monitoring%20Tools)して、ユースケースについてご相談ください。

#Docker CLI（docker stats）
docker自体が提供する監視ツールであるdockerstatsコマンドを見てみましょう。 ターミナルでこのコマンドを実行すると、コンテナを実行するためのライブデータストリームが返され、コンテナのリソース消費をカバーする基本的なメトリックが提供されます。

これらのメトリックには、存在するさまざまな実行中のコンテナーのコンテナーID、CPU、メモリー、およびネットワークの使用状況が含まれます。 実行中のすべてのコンテナーではなく、単一のコンテナーのメトリックをリストする場合は、コマンドの最後にそのコンテナーのコンテナーIDを追加するだけです。次に例を示します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/614998/1d094a28-05f7-2d5e-f79f-088b0d116b76.png)

上記の例では、コンテナーIDがfb649db2dc20のコンテナーのみのメトリックをフェッチしています。 --no-streamオプションを使用してストリーミング統計を無効にし、最初の結果のみがプルされるようにします。

そのフラグなしでこのコマンドを実行すると、プロセスを手動で停止するまで、これらのメトリックが継続的にポーリングおよび表示されます。 このコマンドの他の便利なフラグは、dockerのドキュメントにあります。

ただし、docker statsコマンドは、いかなる形式のデータ視覚化もサポートしていません。ターミナルに生データとしてメトリックを表示するだけです。 そのため、コンテナの状態とステータスを一目で確認するのに役立ちますが、詳細な監視または視覚的な監視ダッシュボードが必要な状況ではあまり価値がありません。 優れた視覚化による長期的な監視には、Grafanaをお勧めします。

#cAdvisor
cAdvisorは、Googleが管理するオープンソースのコンテナ監視ツールです。 Docker、または文字通り他のタイプのコンテナーのサポートが組み込まれているため、cAdvisorを使用して、事実上すべてのタイプの実行中のコンテナーに関するデータを収集できます。 これは、実行中のコンテナーに関する情報を収集、処理、集約、およびエクスポートする単一の実行デーモンで構成されています。

この情報は、組み込みのユーザーインターフェイスからエクスポートして表示することも、より大きな監視プラットフォームにエクスポートして分析と視覚化を行うこともできます。 ただし、cAdvisorは、監視するコンテナーで大量のメトリックを収集しますが、メモリやCPU使用率など、コンテナーのパフォーマンスの特定の側面に関する一般的なデータのみを表示するため、Webユーザーインターフェイスはかなり制限されています。 以下にcAdvisorダッシュボードの例を示します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/614998/a1f062e6-6d78-d1a3-af34-9cd8bb95d041.png)

[cAdvisor](https://www.metricfire.com/blog/monitoring-docker-containers-with-cadvisor)が収集する詳細なメトリックにアクセスするために、ストレージプラグインを使用して、これらのメトリックをより大きな監視システムまたはストレージシステムにエクスポートし、そこから処理することができます。 cAdvisorを使用してDockerコンテナーを監視する方法の詳細については、[この記事](https://qiita.com/TomoEndo/items/4aa2d9889c49148a3d7f)を確認してください。 また、cAdvisorをMetricFireと統合することも検討してください。これにより、両方の長所が得られます。

#Prometheus
Prometheusは、非常に人気のあるオープンソースの監視および警告システムです。 プッシュベースのメカニズムを使用してメトリックを収集するほとんどの監視ツール（監視対象のコンテナー上のエージェントがメトリックを収集して送信する）とは異なり、Prometheusはプルベースのメカニズム（ポーリング）を使用します。

プルベースのシステムでは、コンテナー/サーバーがメトリックエンドポイントをPrometheusに公開し、Prometheusが構成可能な間隔でこれらのエンドポイントからメトリックデータを取得します。

次に、Prometheusはこのデータを処理および集約して、[組み込みの式ブラウザー](https://www.metricfire.com/blog/prometheus-dashboards)を使用してデータを表示したり、[Grafana](https://www.metricfire.com/blog/grafana-dashboards-from-basic-to-advanced)などの視覚化ツールで洞察に満ちたダッシュボードを構築したりできるようにします。

Prometheusは、ポーリングメカニズムと組み合わせて、多種多様なクライアント側の統合を可能にする、大量のクライアントライブラリを提供しています。

基本的に、メトリックをPrometheusに取り込むために必要なのは、アプリケーションコードに適切なクライアントライブラリを使用して、アプリケーションのインスタンスでHTTPエンドポイントを使用してこれらのメトリックを定義および公開することです（クライアントライブラリを使用して作成されたメトリックはカスタムメトリックと呼ばれます）。

Redis DBメトリックをPrometheusにインポートする例を含む、完全なチュートリアルをここで見ることができます。 Prometheusはこれらのメトリックをスクレイプし、エクスプレッションブラウザまたはGrafanaなどのビジュアライザを使用してそれらを視覚化できます。 Prometheus ExpressionBrowserの例は以下にあります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/614998/2de8ddde-2034-c2ee-254c-8cccebb3847c.png)

これらのクライアントライブラリを使用して、適切なライブラリを組み込み、公開したいカスタムメトリックを公開することで、Dockerコンテナ内で実行されているアプリケーションを監視できますが、これらのライブラリを使用して、次のようなDockerコンテナのメトリクスを取得することはできません。コンテナのCPUまたはメモリ使用量など。

これは、Dockerコンテナのメトリックを直接Prometheusにエクスポートするコンテナエクスポータを使用して可能でした。ただし、コンテナーエクスポーターメソッドは非推奨になり、cAdvisorを使用してコンテナーメトリックを監視し、前述のようにそれらをPrometheusに公開するようになりました。

Prometheusを選択すると、多くの構成とメンテナンスを行う必要があるというトレードオフが伴います。簡単ですぐに使用できるPrometheusインスタンスを優先して、これらの構成とメンテナンスのボトルネックをスキップしたい場合は、MetricFireが提供するPrometheusのマネージドツールHosted Prometheusの[無料デモ](https://www.metricfire.com/demo-japan/?utm_source=blog&utm_medium=Qiita&utm_campaign=Japan&utm_content=Docker%20Monitoring%20Tools)にサインアップしてチームと直接話し合ってください。

#まとめ
コンテナ化されたアーキテクチャとDockerの一般的な人気を考えると、他にもいくつかの監視オプションがあります。 これらには、Datadog、Sysdig、SolarWinds、NewRelic、SignalFxなどがあります。

それぞれ長所と短所があり、アーキテクチャも異なります。エージェントベースのものとクラウドホスト型のものがあります。 非常に多くのオプションから選択するのは難しい場合がありますが、どちらを選択するかは、ユースケースまたは最終目標に大きく依存します。

決定の手助けが必要な場合は、[デモを予約](https://www.metricfire.com/demo-japan/?utm_source=blog&utm_medium=Qiita&utm_campaign=Japan&utm_content=Docker%20Monitoring%20Tools)してMetricFireに連絡してください。 私たちはモニタリングの専門家であり、あなたに最適なモニタリング設定に向けてあなたを導くためにいます。 ハッピーモニタリング！