【初心者向け】PrometheusによるAWS Fargateのポッドの監視について
はじめに
ソフトウェアやサーバー、ネットワーク機器などの状況の監視は、運営しているサービスに問題が発生しても早期の発見・解決に繋がります。これにより、ダウンタイムを最小限に抑え、ビジネスへ悪影響が及ぶことを回避できます。本記事では、AWS Fargateと、監視や問題発生時のアラートなどを行うオープンソースソフトウェアであるPrometheusを紹介します。
まずAWS FargateとPrometheusの概要や利点などを紹介します。その後、PrometheusとAWS Fargateを連携し、AWS Fargateで実行しているKubernetesポッドの監視について、パフォーマンスの測定に必要なものを基に紹介します。
AWS Fargateとは
AWS Fargateは、Amazon Elastic Container Service(ECS)とAmazon Elastic Kubernetes Service(EKS)の両方で動作するコンテナ向けサーバーレスコンピューティングエンジンです。AWS Fargateでは、サーバーのプロビジョニングと管理といった作業をすることなく、Kubernetesワークロードを実行することができます。
AWS FargateでのKubernetesポッドの実行
前述のAmazon EKSとは、AWSでKubernetesを簡単に実行できるマネージドサービスです。AWS Fargateは、Amazon EKS クラスターの一部として、オンデマンドで適切なサイズのコンピューティング能力をKubernetesポッドとして実行されるコンテナに提供します。Kubernetesポッドは、AWS Fargateを使用して、要求通りのコンピューティング能力で実行することができます。各Kubernetesポッドは、他のKubernetesポッドとリソース(カーネル、CPU、メモリ、ネットワークインターフェース)を共有することなく、独自のVM分離環境で実行されます。
上記の概要で示したもの以外の、AWS FargateでKubernetesポッドを実行する利点を以下にまとめます。
- AWS Fargateの利用料金は、ユーザーが指定したアプリケーションで必要なリソース分のみ発生します。
- Kubernetesポッドの水平方向のスケーリングを簡単に行うことができます。水平方向のポッドオートスケーラーが新しいレプリカを作成すると、AWS Fargateは新しいKubernetesポッドのノードを作成します。
Prometheusとは
Prometheus は、サーバーのリソース状況やソフトウェアの統計情報といった各種メトリックを収集して監視を行う、オープンソースのリソース監視ソフトウェアです。元々は、音楽共有サービスのSoundCloud社によって構築されたものです。現在は、Cloud Native Computing Foundationがメンテナンスを行っています。
Prometheusの利点について紹介します。
- シンプルな構造と容易なセットアップ - 外部ライブラリに依存せずバイナリと設定ファイルを用意するだけで利用できます。データを格納するデータベースを用意する必要はありません。DockerやKubernetesなどのコンテナ / クラスタ管理ツールとの連携機能があるため、容易に監視対象を設定することができます。
- 柔軟なクエリ言語(PromQL)とデータの可視化機能 - 取得したデータを加工して表示する、または取得したデータからグラフを作成することができます。
- アラート機能 - Alertmanagerを使用して実装されるアラート機能によって、問題発生時に通知を行うことができます。
Prometheusのアーキテクチャ
Prometheusは、Prometheus サーバーが各コンポーネントにHTTP通信でメトリックの収集や、サービスディスカバリ、通知を行います。メトリックの収集は、Prometheusサーバーから命令を出す「プル方式」で行われます。アーキテクチャは、以下のようになっています。
- Prometheusサーバーにバッチ処理の実行結果などの値を送りたい場合は、Pushgateway宛に値を送る
- Prometheusサーバーからは、Pushgatewayにプル方式で値を取得する
ここでPushgatewayとは、バッチ処理といった、一時的に実行される処理の実行結果などを保持しておく機構のことです。Pushgatewayを利用すると、監視対象が自発的に監視用のデータを送信するプッシュ型のような監視も可能になります。
Grafanaによる可視化
Grafanaは、Grafana Labsが公開しているログ・データ可視化のためのツールです。Prometheusをはじめとする、ツールで収集されたデータを基に、グラフの作成だけでなく、複数の情報をまとめたダッシュボードを作成することができます。Prometheus Server単体でもグラフを作成することはできますが、Grafanaと組み合わせて可視化を行うことが推奨されています。
Prometheusでできることを以下にまとめます。
- 監視対象のサーバーから情報を取得して保管
- 保管済みデータに対して集計クエリを発行
- 問題が発生した際にアラートを実行
- 設定に応じたAlertmanagerによる柔軟なアラートが実行可能
PrometheusとAWS Fargateの連携
Prometheus を使用してAWS Fargateで実行しているKubernetesポッドを監視することができます。AWS Fargateで実行されているKubernetesポッドのパフォーマンスを測定するには、vCPU、メモリ使用量、ネットワーク転送などのメトリックが必要です。Prometheus では、cAdvisorとkube-state-metricsの2つのソースから、これらメトリックを収集します。
cAdvisor(コンテナアドバイザー)
cAdvisorは、ノードで実行中のコンテナでのリソース使用量とパフォーマンスデータを分析して公開します。Kubernetesでは、cAdvisorがKubeletバイナリの一部として実行されます。Bashにて、「kubectl」を使用して、cAdvisorによって生成されたメトリックを表示することができます。
cAdvisorでは、Kubernetesポッドのリソースの使用方法を理解するために便利なノードとKubernetesポッドの使用統計を提供します。またcAdvisorは、ノードの合計CPUとメモリも公開します。
kube-state-metrics
kube-state-metricsとは、Kubernetes APIサーバーのリッスンとメトリックの生成を行うオープンソースプロジェクトです。Kubernetesサービスを作成し、Prometheusテキスト形式でメトリックを公開します。ポート8080でリッスンするサービスを作成し、cAdvisorと同様にBashにて「kubectl」を使用すると、公開するすべてのメトリックを確認することができます。
基本的にポッドモニタリングのGrafanaダッシュボードは、kube-state-metricsを使用し、Kubernetesポッドのコンピューティングリソースのリクエスト制限を決定します。
Prometheusは、cAdvisorとkube-state-metricsから収集したデータを組み合わせることにより、全体像を提供してくれます。
まとめ
本記事では、AWS FargateとPrometheus について紹介した後、それらを連携したKubernetesポッドの監視について紹介しました。Prometheus は汎用的ではなく、メトリックの収集に特化したモニタリングシステムです。監視システムの導入を考えている方は、可視化ツールとしてGrafanaも合わせてPrometheus の利用を検討してみてください。