

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# Amazon EKS でのログ記録とモニタリング
<a name="amazon-eks-logging-monitoring"></a>

Amazon Elastic Kubernetes Service (Amazon EKS) は、Kubernetes コントロールプレーン用の CloudWatch Logs と統合されます。コントロールプレーンは Amazon EKS によってマネージドサービスとして提供され、[CloudWatch エージェントをインストールせずにロギングを有効にする](https://docs.aws.amazon.com//eks/latest/userguide/control-plane-logs.html)。CloudWatch エージェントをデプロイして Amazon EKS ノードとコンテナログをキャプチャすることもできます。[Fluent Bit と Fluentd](https://docs.aws.amazon.com//AmazonCloudWatch/latest/monitoring/Container-Insights-EKS-logs.html) は、CloudWatch Logs へのコンテナログの送信にもサポートされています。

CloudWatch Container Insights は、クラスター、ノード、ポッド、タスク、サービスのレベルで Amazon EKS の包括的なメトリクスモニタリングソリューションを提供します。Amazon EKS では、[Prometheus](https://prometheus.io/) とメトリックスキャプチャの複数のオプションもサポートしています。Amazon EKS コントロールプレーン は、Prometheus 形式で公開されたメトリクスで [メトリックエンドポイントを提供します](https://docs.aws.amazon.com//eks/latest/userguide/prometheus.html)。Prometheus を Amazon EKS クラスターにデプロイして、これらのメトリクスを消費することができます。

また、[Prometheus メトリクスをスクレイプするように CloudWatch エージェントをセットアップ](https://docs.aws.amazon.com//AmazonCloudWatch/latest/monitoring/ContainerInsights-Prometheus-Setup-configure.html) することで、他の Prometheus エンドポイントを使用するだけでなく、CloudWatch メトリクスを作成します。[コンテナインサイトで Prometheus](https://docs.aws.amazon.com//AmazonCloudWatch/latest/monitoring/ContainerInsights-Prometheus.html) をモニタリングすると、コンテナ化されたシステムとワークロードからの Prometheus メトリクスの検出が自動化されます。

Amazon EKS ノードに CloudWatch エージェントをインストールして設定し、ディストリビューターおよびステートマネージャーを使用した Amazon EC2 で使用されるアプローチと同様に、Amazon EKS ノードを標準のシステムロギングおよびモニタリング設定に合わせることができます。

# Amazon EKS のログ記録
<a name="kubernetes-eks-logging"></a>

Kubernetes ロギングは、コントロールプレーンのロギング、ノードロギング、およびアプリケーションロギングに分けることができます。[Kubernetes コントロールプレーン](https://kubernetes.io/docs/concepts/overview/components/#control-plane-components) は、Kubernetes クラスタを管理し、監査および診断に使用されるログを生成するコンポーネントのセットです。Amazon EKSで、[さまざまなコントロールプレーンコンポーネントのログをオンにし](https://docs.aws.amazon.com//eks/latest/userguide/control-plane-logs.html)、CloudWatch に送信します。

Kubernetes は、`kubelet` そして `kube-proxy` ポッドを実行する各 Kubernetes ノードで次のようなシステムコンポーネントも実行します。これらのコンポーネントは各ノード内にログを書き込み、各 Amazon EKS ノードでこれらのログをキャプチャするように CloudWatch とコンテナインサイトを設定できます。

コンテナは、Kubernetes クラスタ内で[ポッド](https://kubernetes.io/docs/concepts/workloads/pods/)としてグループ化され、また Kubernetes ノードで実行するようにスケジュールされています。ほとんどのコンテナ化されたアプリケーションは、標準出力と標準エラーに書き込み、コンテナエンジンはその出力をロギングドライバにリダイレクトします。Kubernetes では、コンテナログは `/var/log/pods` ノード上のディレクトリで見つかります。CloudWatch とコンテナインサイトを設定して、各 Amazon EKS ポッドのこれらのログをキャプチャできます。

## Amazon EKS コントロールプレーンのログ記録
<a name="eks-control-plane-logging"></a>

Amazon EKS クラスターは、Kubernetes クラスターの高可用性のシングルテナントコントロールプレーンと、コンテナを実行する Amazon EKS ノードで構成されます。コントロールプレーンノードは、 が管理するアカウントで実行されます AWS。Amazon EKS クラスターコントロールプレーンノードは CloudWatch に統合され、特定のコントロールプレーンコンポーネントのロギングを有効にできます。

ログは、Kubernetes コントロールプレーンコンポーネントインスタンスごとに提供されます。 はコントロールプレーンノードの状態 AWS を管理し、[Kubernetes エンドポイントのサービスレベルアグリーメント (SLA) ](https://aws.amazon.com//eks/sla/)を提供します。

## Amazon EKS ノードとアプリケーションのログ記録
<a name="eks-node-application-logging"></a>

[CloudWatch コンテナインサイト](https://docs.aws.amazon.com//AmazonCloudWatch/latest/monitoring/Container-Insights-setup-logs.html) Amazon EKS のログとメトリクスをキャプチャをを使用することをお勧めします。コンテナインサイトは CloudWatch エージェントでクラスター、ノード、ポッドレベルのメトリクスを実装し、CloudWatch へのログキャプチャ用のフルエントビットまたは Fluentd を実装します。Container Insights は、キャプチャされた CloudWatch メトリクスをレイヤー化したビューを含む自動ダッシュボードも提供します。コンテナインサイトは、すべての Amazon EKS ノードで実行される CloudWatch DaemonSet および Fluent Bit DaemonSet としてデプロイされます。Fargate ノードは、DaemonSets によって管理 AWS され、サポートされていないため、Container Insights ではサポートされません。Amazon EKS の Fargate ロギングについては、このガイドで個別に説明しています。

 次の表に、[デフォルトの Fluentd または Fluent Bit ログキャプチャ設定](https://docs.aws.amazon.com//AmazonCloudWatch/latest/monitoring/Container-Insights-setup-logs-FluentBit.html) し、Amazon EKS の場合でキャプチャされた CloudWatch ロググループとログを示します。


|  |  | 
| --- |--- |
| /aws/containerinsights/Cluster\$1Name/application | /var/log/containers のすべてのログファイル このディレクトリは、/var/log/pods ディレクトリ構造内のすべての Kubernetes コンテナログへのシンボリックリンクを提供します。これにより、アプリケーションコンテナのログへの書き込みが stdout または stderr にキャプチャされます。また、次のようなKubernetes システムコンテナの aws-vpc-cni-init,kube-proxy, および coreDNS のログも含まれます。 | 
| /aws/containerinsights/Cluster\$1Name/host | /var/log/dmesg、/var/log/secure、および /var/log/messages からのログ | 
| /aws/containerinsights/Cluster\$1Name/dataplane | /var/log/journal、kubelet.service、およびkubeproxy.service に対する docker.service のログ。 | 

ログに Fluent Bit または Fluentd でコンテナインサイトを使用したくない場合は、Amazon EKS ノードにインストールされた CloudWatch エージェントを使用してノードとコンテナログをキャプチャできます。Amazon EKS ノードは EC2 インスタンスです。つまり、Amazon EC2 の標準システムレベルのロギングアプローチにそれらを含める必要があります。ディストリビューターとステートマネージャーを使用して CloudWatch エージェントをインストールすると、Amazon EKS ノードも CloudWatch エージェントのインストール、設定、および更新に含まれます。

次の表に、Kubernetes に固有のログを示し、ログに Fluent Bit または Fluentd でコンテナインサイトを使用していない場合にキャプチャする必要があるログを示します。


|  |  | 
| --- |--- |
| /var/log/containers | このディレクトリは、/var/log/pods ディレクトリ構造内のすべての Kubernetes コンテナログへのシンボリックリンクを提供します。これにより、アプリケーションコンテナのログへの書き込みが stdout または stderr にキャプチャされます。また、次のようなKubernetes システムコンテナの aws-vpc-cni-init,kube-proxy, および coreDNS のログも含まれます。重要: コンテナインサイトを使用している場合、これは必須ではありません。 | 
| var/log/aws-routed-eni/ipamd.log/var/log/aws-routed-eni/plugin.log | L-IPAM デーモンのログはここにあります | 

Amazon EKS ノードが適切なシステムレベルのログとメトリクスを送信するように CloudWatch エージェントをインストールして設定する必要があります。ただし、AMI 解析された Amazon EKS は、必要な Systems Manager Agent は含まれていません。[起動テンプレート](https://docs.aws.amazon.com//eks/latest/userguide/launch-templates.html) を使用して、Systems Manager エージェントのインストールと、ユーザーデータセクションを通じて実装された起動スクリプトを使用して、重要な Amazon EKS 固有のログをキャプチャするデフォルトの CloudWatch 設定を自動化できます。Amazon EKS ノードは、Auto Scaling グループを [マネージド型ノードグループ](https://docs.aws.amazon.com//eks/latest/userguide/managed-node-groups.html) または [セルフマネージド型ノード](https://docs.aws.amazon.com//eks/latest/userguide/worker.html) としてデプロイされています。

管理対象ノードグループでは、[起動テンプレート](https://docs.aws.amazon.com//eks/latest/userguide/launch-templates.html) には、Systems Manager エージェントのインストールと CloudWatch 設定を自動化するためのユーザーデータセクションが含まれています。[amazon\$1eks\$1managed\$1node\$1group\$1launch\$1config.yaml](https://github.com/aws-samples/logging-monitoring-apg-guide-examples/blob/main/examples/eks/amazon_eks_managed_node_group_launch_config.yaml) CloudFormation テンプレートをカスタマイズして使用すると、Systems Manager エージェント、CloudWatch エージェントをインストールし、Amazon EKS 固有のログ記録設定を CloudWatch 設定ディレクトリに追加する起動テンプレートを作成できます。このテンプレートを使用して、Amazon EKS マネージドノードグループの起動テンプレートをコードとしてのインフラストラクチャ (IaC) アプローチで更新できます。 CloudFormation テンプレートの更新ごとに、起動テンプレートの新しいバージョンがプロビジョニングされます。次に、ノードグループを更新して新しいテンプレートバージョンを使用し、[マネージド型ライフサイクルプロセス](https://docs.aws.amazon.com//eks/latest/userguide/managed-node-update-behavior.html) をダウンタイムなしでノードを更新できます。マネージドノードグループに適用される IAM ロールとインスタンスプロファイルに、 `CloudWatchAgentServerPolicy`および `AmazonSSMManagedInstanceCore` AWS マネージドポリシーが含まれていることを確認します。

セルフマネージドノードを使用すると、Amazon EKS ノードのライフサイクルと更新戦略を直接プロビジョニングおよび管理できます。自己管理ノードを使用すると、お客様のAmazon EKS クラスターで Windows ノードを実行し、[Bottlerocket](https://aws.amazon.com//bottlerocket/)と併せて [他のオプション](https://docs.aws.amazon.com//eks/latest/userguide/eks-compute.html) を許可します。 CloudFormation を使用して、Amazon EKS クラスターにセルフマネージド型ノードをデプロイできます。つまり、Amazon EKS クラスターに IaC および マネージド型変更アプローチを使用できます。 AWS には、そのまま使用したりカスタマイズしたりできる [amazon-eks-nodegroup.yaml](https://github.com/aws-samples/logging-monitoring-apg-guide-examples/blob/main/examples/eks/amazon-eks-nodegroup.yaml) CloudFormation テンプレートが用意されています。テンプレートは、クラスター内の Amazon EKS ノードに必要なすべてのリソースをプロビジョニングします (たとえば、個別の IAM ロール、セキュリティグループ、Amazon EC2 Auto Scaling グループ、起動テンプレート)。[amazon-eks-nodegroup.yaml](https://github.com/aws-samples/logging-monitoring-apg-guide-examples/blob/main/examples/eks/amazon-eks-nodegroup.yaml) CloudFormation テンプレートは、必要な Systems Manager エージェント、CloudWatch エージェントをインストールし、Amazon EKS 固有のログ記録設定を CloudWatch 設定ディレクトリに追加する更新バージョンです。

## Fargate での Amazon EKS のログ記録
<a name="eks-fargate-logging"></a>

Fargate で Amazon EKS を使用すると、Kubernetes ノードを割り当てたり管理したりすることなく、ポッドをデプロイできます。これにより、Kubernetes ノードのシステムレベルのログをキャプチャする必要がなくなります。Fargate ポッドからログをキャプチャするには、Fluent Bit を使用してログを CloudWatch に直接転送できます。これにより、Fargate 上の Amazon EKS ポッドの追加設定やサイドカーコンテナを使用せずに、ログを CloudWatch に自動的にルーティングできます。詳細については、Amazon EKS ドキュメントの[「Fargate logging](https://docs.aws.amazon.com//eks/latest/userguide/fargate-logging.html)」と AWS ブログの[「Fluent Bit for Amazon EKS](https://aws.amazon.com//blogs/containers/fluent-bit-for-amazon-eks-on-aws-fargate-is-here/)」を参照してください。このソリューションでは、`STDOUT` そして `STDERR` の入出力 (I/O) は、Fargate 上の Amazon EKS クラスター用に確立されたフルエントビット設定に基づいて、コンテナからストリームし、Fluent Bit を介して CloudWatch に送信します。

# Amazon EKS および Kubernetes のメトリクス
<a name="kubernetes-eks-metrics"></a>

Kubernetes には、リソース使用量メトリクス（ノードおよびポッドの CPU およびメモリ使用量など）にアクセスできるメトリクス API が提供されますが、API はポイントインタイム情報のみを提供し、履歴メトリックは提供しません。[Kubernetes メトリックスサーバー](https://github.com/kubernetes-sigs/metrics-server) は、通常、Amazon EKS および Kubernetes のデプロイで、メトリクスの集約、メトリクスに関する短期的な履歴情報の提供、[Horizontal Pod Autoscaler](https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/) のような機能をサポートするために使用されます。

Amazon EKS は [Prometheus 形式で](https://docs.aws.amazon.com//eks/latest/userguide/prometheus.html) Kubernetes API サーバーを介してコントロールプレーンのメトリクスを公開しており、CloudWatch は、これらのメトリクスをキャプチャして取り込むことができます。CloudWatch とコンテナインサイトは、Amazon EKS ノードとポッドの包括的なメトリクスのキャプチャ、分析、およびアラームを提供するように構成することもできます。

## Kubernetes コントロールプレーンのメトリクス
<a name="kubernetes-control-plane-metrics"></a>

`/metrics` HTTP API エンドポイントを使用し Kubernetes は、Prometheus 形式でコントロールプレーンのメトリックを公開します。Kubernetes クラスターに [Prometheus](https://prometheus.io/) インストールし、これらのメトリクスをウェブブラウザーでグラフ化して表示します。また、Kubernetes API サーバーによって CloudWatch により、[公開されたメトリクスを取り込めます](https://docs.aws.amazon.com//AmazonCloudWatch/latest/monitoring/ContainerInsights-Prometheus-Setup-configure.html#ContainerInsights-Prometheus-Setup-new-exporters)。

## Kubernetes のノードとシステムメトリック
<a name="kubernetes-node-system-metrics"></a>

Kubernetes が Prometheus を提供する [メトリクスサーバー](https://github.com/kubernetes-sigs/metrics-server) できるポッド [デプロイして実行する](https://docs.aws.amazon.com//eks/latest/userguide/metrics-server.html) クラスター、ノード、ポッドレベルの CPU およびメモリの統計情報については、Kubernetes クラスタ上で実行します。これらのメトリクスは、[Horizontal Pod Autoscaler](https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/)、そして [Vertical Pod Autoscaler](https://docs.aws.amazon.com/eks/latest/userguide/vertical-pod-autoscaler.html) に使用されます。CloudWatch はこれらのメトリクスを提供することもできます。

Kubernetes [Kubernetes ダッシュボード](https://github.com/kubernetes/dashboard) または、水平および垂直ポッドオートスケーラーを使用する場合は、Kubernetes メトリクスサーバをインストールする必要があります。Kubernetes ダッシュボードは、Kubernetes クラスター、ノード、ポッド、および関連する構成を参照して構成し、Kubernetes メトリクスサーバーから CPU およびメモリのメトリックを表示するのに役立ちます。

Kubernetes メトリクスサーバーによって提供されるメトリックは、Auto Scaling 以外の目的（モニタリングなど）には使用できません。メトリックは、過去の分析ではなく、ポイントインタイム分析を対象としています。Kubernetes ダッシュボードは、`dashboard-metrics-scraper` Kubernetes メトリクスサーバーからのメトリックを短時間ウィンドウに保存します。

Container Insights は、Kubernetes DaemCloudWatch set で実行中のすべてのコンテナを検出し、ノードレベルのメトリクスを提供します。次に、パフォーマンススタックの各レイヤーでパフォーマンスデータを収集します。クイックスタートから AWS クイックスタートを使用するか、Container Insights を個別に設定できます。クイックスタートでは、CloudWatch エージェントによるメトリクスのモニタリングと Fluent Bit によるロギングを設定するため、ロギングとモニタリングのために一度だけデプロイする必要があります。

Amazon EKS ノードは EC2 インスタンスであるため、Amazon EC2 に対して定義した標準を使用して、コンテナインサイトによってキャプチャされたメトリクスに加えて、システムレベルのメトリックスをキャプチャする必要があります。 Amazon EKS クラスターの CloudWatch エージェントをインストールして設定するには、[CloudWatch エージェントのデプロイと設定のステートマネージャーとディストリビューターをセットアップする](install-cloudwatch-systems-manager.md#set-up-systems-manager-distributor) このガイドのセクションと同じ方法で使用できます。Amazon EKS 固有の CloudWatch 設定ファイルを更新して、メトリクスと Amazon EKS 固有のログ設定を含めることができます。

Prometheus をサポートするエージェントは、Prometheus メトリクスを自動的に検出して [サポートされているコンテナ化されたワークロードとシステム](https://docs.aws.amazon.com//AmazonCloudWatch/latest/monitoring/ContainerInsights-Prometheus.html) をスクレイプできます。CloudWatch Logs Insights を使用して分析するために、組み込みメトリックス形式の CloudWatch Logs としてそれらを取り込み、CloudWatch メトリクスを自動的に作成します。

**重要**  
Prometheus メトリクスを収集するための CloudWatch エージェントの [特殊バージョンをデプロイ](https://docs.aws.amazon.com//AmazonCloudWatch/latest/monitoring/ContainerInsights-Prometheus-Setup.html#ContainerInsights-Prometheus-Setup-install-agent) を行う必要があります。これは、コンテナインサイト用にデプロイされた CloudWatch エージェントとは別のエージェントです。Prometheus メトリクスの検出を実証するための CloudWatch エージェントと Amazon EKS ポッドデプロイのデプロイと設定ファイルが含まれている [prometheus\$1jmx](https://github.com/aws-samples/logging-monitoring-apg-guide-examples/tree/main/examples/eks/prometheus_jmx) サンプル の Java アプリケーションを使用できます。詳細については、CloudWatch のドキュメント内の「[Amazon EKS および Kubernetes で Java/JMX サンプルワークロードをセットアップ](https://docs.aws.amazon.com//AmazonCloudWatch/latest/monitoring/ContainerInsights-Prometheus-Sample-Workloads-javajmx.html)」を参照してください。また、Amazon EKS クラスターで実行中の他の Prometheus ターゲットからメトリクスをキャプチャするように CloudWatch エージェントを設定することもできます。

## アプリケーションメトリクス
<a name="application-metrics-eks"></a>

[CloudWatch の埋め込みメトリクス形式](https://docs.aws.amazon.com//AmazonCloudWatch/latest/monitoring/CloudWatch_Embedded_Metric_Format.html) を使用して、独自のアプリケーションメトリクスを作成、取得することも可能です。埋め込みメトリック形式ステートメントを取り込むには、埋め込みメトリック形式のエントリを埋め込みメトリック形式のエンドポイントに送信する必要があります。CloudWatch エージェントは、[Amazon EKS ポッドのサイドカーコンテナ](https://docs.aws.amazon.com//AmazonCloudWatch/latest/monitoring/CloudWatch_Embedded_Metric_Format_Generation_CloudWatch_Agent.html) を設定できます。CloudWatch エージェント設定は Kubernetes ConfigMap として保存され、CloudWatch エージェントサイドカーコンテナによって読み込まれ、埋め込みメトリックス形式のエンドポイントを開始します。

また、アプリケーションを Prometheus ターゲットとして設定し、Prometheus サポートを使用して CloudWatch エージェントを設定して、メトリクスを検出、スクレープ、CloudWatch に取り込むこともできます。たとえば、[オープンソースの JMX エクスポーター](https://github.com/prometheus/jmx_exporter) と一緒に Java アプリケーションを使用して、CloudWatch エージェントによる Prometheus 消費用の JMX Bean を公開します。

埋め込みメトリクス形式を使用しない場合は、[AWS API](https://docs.aws.amazon.com//AmazonCloudWatch/latest/APIReference/Welcome.html) または [AWS SDK](https://aws.amazon.com/developer/tools/) を使用して CloudWatch メトリクスを作成および更新することもできます。ただし、モニタリングとアプリケーションロジックが混在するため、このアプローチはお勧めしません。

## Fargate での Amazon EKS のメトリクス
<a name="metrics-fargate-eks-workloads"></a>

Fargate は Kubernetes ポッドを実行するために Amazon EKS ノードを自動的にプロビジョニングするため、ノードレベルのメトリクスを監視および収集する必要はありません。ただし、Fargate の Amazon EKS ノードで実行されているポッドのメトリクスを監視する必要があります。コンテナインサイトは、現在サポートされていない次の機能が必要なため、Fargate 上の Amazon EKS では現在利用できません。
+ DaemonSets は現在サポートされていません。コンテナインサイトは、CloudWatch エージェントを各クラスターノードで DaemonSet として実行することによってデプロイされます。
+ HostPath パーシステントボリュームはサポートされていません。CloudWatch エージェントコンテナは、コンテナメトリックスデータを収集するための前提条件として HostPath パーシステントボリュームを使用します。
+ Fargate は、特権コンテナーとホスト情報へのアクセスを防止します。

[Fargate 用の内蔵ログルータ](https://docs.aws.amazon.com//eks/latest/userguide/fargate-logging.html) を使用して、埋め込みメトリクスフォーマットステートメントを CloudWatch に送信します。ログルーターは Fluent Bit を使用します。Fluent Bit には CloudWatch プラグインがあり、組み込みメトリックス形式のステートメントをサポートするように設定できます。

Fargate ノードのポッドレベルのメトリクスを取得してキャプチャするには、Prometheus サーバーを Amazon EKS クラスターにデプロイして Fargate ノードからメトリクスを収集します。Prometheus は永続ストレージを必要とするため、永続ストレージに Amazon Elastic File System (Amazon EFS) を使用する場合は、Prometheus を Fargate にデプロイできます。また、Amazon EC2 バッキングされたノードに Prometheus をデプロイすることもできます。詳細については、 ブログの「[Monitoring Amazon EKS on AWS Fargate using Prometheus and Grafana](https://aws.amazon.com//blogs/containers/monitoring-amazon-eks-on-aws-fargate-using-prometheus-and-grafana/)」を参照してください。 AWS 