【第１章 K8SとPrometheus】Kubernetesのための監視ツールを紹介

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/614998/be3b8878-1857-39be-aebd-bbbfdb52b22b.png)

#分散監視の問題点
マイクロサービスアーキテクチャの採用の増加は、マイクロサービスをパッケージ化、配布、実行するためのコンテナの採用も促進しています。これには、オーケストレーターがサーバー上のこれらのコンテナーの可用性、パフォーマンス、およびデプロイメントを処理する必要があります。

ただし、さまざまな分散および多様化されたアプリケーションが相互に作用しているため、マイクロサービス、コンテナー化、およびオーケストレーターに関するセットアップ全体がロギングとモニタリングを複雑にします。単一障害点によって中断のないプロセスが中断され、問題が認識される場合がありますが、他の問題の検出は別の話です。

Kubernetesなどのコンテナオーケストレーションツールは、さまざまな分散システムでコンテナをオーケストレーションし、分散処理によって生じる複雑さを抑えますが、Kubernetes自体は複雑であり、監視するにはコンポーネントが多すぎます。監視するコンポーネントが2つしかないモノリシックアプリケーション（アプリケーションとホスト）とは異なり、Kubernetesには、ノード（ホスト）、Kubernetesプラットフォーム自体、Dockerコンテナー、コンテナー化されたマイクロサービスの4つがあります。

明らかに、CPU使用率、メモリ使用量、1秒あたりの入出力（I / O）、遅延、ネットワーク帯域幅などのパラメーターをログに記録する従来の監視ツールは、マイクロサービス、Dockerコンテナー、Kubernetesのクラウ​​ドネイティブ時代では不十分になります。クラウドネイティブ時代の監視戦略には、コンテナまたはサービスレベルでの詳細な詳細が必要です。

さらに、従来の監視方法が、長期にわたるホストモデルとともに考案されました。従来のデータセンターは、静的IPとホスト名を使用して、モノリシックアプリケーションをホストする多数のサーバーで構成されています。監視はこれらの定数パラメータに関連付けられており、マイクロサービスアーキテクチャとは対照的に変更されることはめったにありません。

マイクロサービスベースのアプリケーションは、動的で一時的なコンテナーにデプロイされるのが特徴です。 Kubernetesでは、多数のアプリケーションモデルを実行する必要があります。 Kubernetesには、特に明記されていない限り、適切と見なされるノードにポッドを配置する傾向があります。実際、ポッドをスケジュールするKubernetesの機能は、自動調整システムの縮図です。

したがって、コンテナ化された環境の監視ツールは、コンテナのライフサイクルイベントの即時のサービス検出と自動検出を提供する必要があります。また、コンテナが毎秒作成または再起動されるため、メトリックを調整する必要があります。

一言で言えば、マイクロサービス環境で問題を特定することは、モノリシック環境よりも少し難しいです。リクエストは、多数のサービスの下でさまざまなスタックレイヤー間を移動するからです。これらの相互接続されたレイヤーを監視すると同時に、トラブルシューティングを簡素化するためにアプリケーションとインフラストラクチャの動作をリソースに基づいて分類するには、最新の監視ツールが必要です。

#標準のKubernetesダッシュボードと社内ツールの制限
標準のKubernetesダッシュボードは、リソース使用率情報を表示する基本的なUIを提供します。 さらに、クラスター内で実行されているアプリケーションとクラスター自体を整理できます。 ただし、Kubernetesダッシュボードには、**PrometheusやGrafana**などのより高度なKubernetesモニタリングツールの洗練度が欠けています。 さらに、Kubernetesダッシュボードは、Kubernetesの非推奨のパフォーマンスモニタリングおよびメトリクス収集システムであるHeapsterに依存しています。

Kubernetesに投資している組織は、独自のツールを社内で開発するのではなく、多数の監視ツールを調べる必要があります。 次のツールは、Kubernetesの監視に効率的であるだけでなく、オープンソースコミュニティによって絶えず改善されていますので、信頼できるツールになります。

###cAdvisor
cAdvisorは、コンテナー用に構築されたオープンソースのコンテナーリソース使用量およびパフォーマンス分析エージェントであり、DockerDNAがその全体に流れています。 Kubernetesでは、cAdvisorはKubeletバイナリに含まれています。 その結果、cAdvisorはポッドレベルではなくノードレベルで実行されます。

通常の構成では、cAdvisorはすべてのライブコンテナを自動検出し、CPU、メモリ、ファイルシステム、およびネットワークの使用状況をリアルタイムで報告します。

ツールとしてのcAdvisorは、いくつかの基本的なマシンレベルのパフォーマンス特性を測定するのに適しています。 ただし、意味のある洞察を報告するための分析エンジンを持っていないのは事実です。

###Kube-state-metrics
非常に人気があったが現在は非推奨のHeapsterと並行して使用される、Kube-state-metricsは、KubernetesAPIサーバーに報告されたデータを収集する最小限のサービスです。

デプロイメント、ノード、PersistentVolume、ポッド、サービスなどのオブジェクトの状態に関する洞察を取得します。

最大の欠点は、Kube-state-metricsがメトリックをプレーンテキスト形式で提供することです。 もちろん、メトリックをスクレイプして有能な分析ソフトウェアスイートにすることもできます。 ただし、これは、Kube-state-metricsからのデータを理解できるようにするために独自のツールを持参する必要があることを意味します。

###Prometheus

Prometheusは、Kubernetes環境にエンドツーエンドの可視性をもたらす最も有望な方法の1つです。 Prometheusは単なる監視システムではありませんが、時系列データベースだけでなくその真の可能性を解き放つには、さまざまなリモートエンドポイントやストレージシステム（VictoriaMetrics、Elasticsearch、Graphite、InfluxDB、Postgresなど）と統合し、Webhookレシーバー（SNS、SMS、SNMP、Slack、IRC、Telegram Botなど）に警告する方法を検討する必要はあります。 
[MetricFire](https://www.metricfire.com/japan/?GAID=2038175526.1567400116&utm_source=blog&utm_medium=Qiita&utm_campaign=Japan&utm_content=Introduction%20to%20Monitoring%20Kubernetes)はマネージドされたHosted Prometheusサービスを提供します。[今から、それを使用](https://www.hostedgraphite.com/accounts/signup-metricfire/?signup=japan&utm_source=blog&utm_medium=Qiita&utm_campaign=Japan&utm_content=Introduction%20to%20Monitoring%20Kubernetes)して、セットアップなしでPrometheusを試すことができます。

###Grafana

Grafanaはメトリック分析プラットフォームです。 これにより、Kubernetesメトリックのクエリ、視覚化、アラート、および理解が可能になります。

Kubernetesを監視するには、Grafana Kubernetesアプリを使用できます。このアプリには、クラスター、ノード、ポッド/コンテナー、デプロイの4つのダッシュボードが含まれています。

Grafanaの最大の強みはその柔軟性です。 これにより、多数のメトリックを便利なダッシュボードに簡単にまとめることができます。 たとえば、cAdvisorまたはPrometheusからメトリックを取得できます。 Grafanaでは、すべてのノードとポッドが持つ標準のメトリックに加えて、アプリケーションに特定のメトリックを追加できます。

MetricFireは、サービスとしてのGrafanaを提供しています。このサービスで、Grafanaを試して、その[詳細を確認](https://www.hostedgraphite.com/accounts/signup-metricfire/?signup=japan&utm_source=blog&utm_medium=Qiita&utm_campaign=Japan&utm_content=Introduction%20to%20Monitoring%20Kubernetes)することができます。

###Kubewatch

Kubewatchは、Slackチャネルと簡単に統合できるイベントトリガー通知システムです。 何を監視する必要があるかを指定するだけで、そのイベントのKubernetesクライアントライブラリがKubernetes APIサーバーとやり取りし、通知を返すことができます。

監視する以下のようなリソースを選択できます：

- デーモンセット、デプロイメント、ポッド、レプリカセット、レプリケーションコントローラー、サービス、シークレット、構成マップなど

###Jaeger

Jaegerは、Kubernetesなどの複雑な分散システムでのトランザクションのトラブルシューティングと監視を行います。

マイクロサービスアーキテクチャは本質的に分散されており、分散コンテキストの伝播、トランザクションモニタリング、および遅延の最適化を実現するときに問題が発生する可能性があります。 Jaegerは、分散システムのために開発された監視システムです。

OpenTracingのネイティブサポートであるJaegerは、Kubernetesのネットワーキングと可観測性に取り組みました。 Jaegerインストルメンテーションライブラリ、バックエンド、およびWeb UIは、ベンダーに依存しないAPIと分散トレース用のインストルメンテーションのセットであるOpenTracing標準をサポートするように設計されています。 Jaegerクライアントは、OpenTracingAPIの言語固有の実装です。 Jaegerデーモンは、Jaegerクライアントライブラリを介してアプリケーションから送信されたトレース情報を受信します。 サイドカーコンテナまたは独立したDaemonSetとして実行できます。

###MetricFire
[MetricFire](https://www.metricfire.com/japan/?GAID=2038175526.1567400116&utm_source=blog&utm_medium=Qiita&utm_campaign=Japan&utm_content=Introduction%20to%20Monitoring%20Kubernetes)は、一連のオープンソース監視ツールからの包括的なインフラストラクチャおよびアプリケーション監視プラットフォームを提供します。 現在提供されているプラットフォームのセットでは、マネージドされたHosted PrometheusとHosted Grafanaを提供しています。 ユーザーは、メトリックをMetricFireに送信する以外に何もすることなく、美しいGrafanaダッシュボードでメトリックをリアルタイムで表示できます。

さらに、[MetricFire](https://www.metricfire.com/japan/?GAID=2038175526.1567400116&utm_source=blog&utm_medium=Qiita&utm_campaign=Japan&utm_content=Introduction%20to%20Monitoring%20Kubernetes)はPrometheusとGrafanaをサービスとして提供し、長期保存と技術サポートを備えたOSSのPrometheusやGrafanaに欠けている機能を含みます。 今すぐMetricFireで[無料トライアル](https://www.hostedgraphite.com/accounts/signup-metricfire/?signup=japan&utm_source=blog&utm_medium=Qiita&utm_campaign=Japan&utm_content=Introduction%20to%20Monitoring%20Kubernetes)にサインアップして、チェックしてください。

#まとめ
マイクロサービスを強化するためにK8とDockerコンテナに投資している企業の場合、新しいツールを作成するのではなく、既存のKubernetesモニタリングツールの1つを検討する方が時間短縮であり、コストも安く済むでしょう。

また、比類のないカスタマイズを提供し、大規模なコミュニティのおかげですべてのバージョンで改善されている既存の監視ツールを使用することをお勧めします。

企業にとって、マネージドKubernetesモニタリングツールは、不要ではあるが回避可能なタスクに時間を費やすことなく、顧客に価値を提供することに集中できるため、検討する価値のあるオプションです。

[MetricFire](https://www.metricfire.com/japan/?GAID=2038175526.1567400116&utm_source=blog&utm_medium=Qiita&utm_campaign=Japan&utm_content=Introduction%20to%20Monitoring%20Kubernetes)で[無料トライアル](https://www.hostedgraphite.com/accounts/signup-metricfire/?signup=japan&utm_source=blog&utm_medium=Qiita&utm_campaign=Japan&utm_content=Introduction%20to%20Monitoring%20Kubernetes)にサインアップして、今すぐKubernetesのモニタリングを開始してください。 [デモを予約](https://www.metricfire.com/demo-japan/?GAID=2038175526.1567400116&utm_source=blog&utm_medium=Qiita&utm_campaign=Japan&utm_content=Introduction%20to%20Monitoring%20Kubernetes)して、Kubernetesが設定したモニタリングについて直接お問い合わせください。