

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

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

Amazon Elastic Container Service (Amazon ECS) には、コンテナを実行するための 2 [つの起動タイプ](https://docs.aws.amazon.com//AmazonECS/latest/developerguide/launch_types.html)があり、タスクとサービスをホストするインフラストラクチャのタイプを決定します。これらの起動タイプは AWS Fargate と Amazon EC2 です。どちらの起動タイプも CloudWatch と統合されますが、設定とサポートは異なります。

以下のセクションでは、CloudWatch を使用して Amazon ECS でのログ記録とモニタリングを行う方法を理解するのに役立ちます。

**Topics**
+ [EC2 起動タイプの CloudWatch の設定](configure-cloudwatch-ec2-launch-type.md)
+ [EC2 および Fargate 起動タイプの Amazon ECS コンテナログ](ec2-fargate-logs.md)
+ [Amazon ECS 用 FireLens でカスタムログルーティングを使用する](firelens-custom-log-routing.md)
+ [Amazon ECS のメトリクス](ecs-metrics.md)

# EC2 起動タイプの CloudWatch の設定
<a name="configure-cloudwatch-ec2-launch-type"></a>

EC2 起動タイプでは、ログとモニタリングに CloudWatch エージェントを使用する EC2 インスタンスの Amazon ECS クラスターをプロビジョニングします。Amazon ECS 最適化 AMI には、[Amazon ECS コンテナエージェント](https://docs.aws.amazon.com//AmazonECS/latest/developerguide/ECS_agent.html) およびは、Amazon ECS クラスターの CloudWatch メトリクスを提供します。

これらのデフォルトのメトリクスは Amazon ECS のコストに含まれますが、Amazon ECS のデフォルト設定では、ログファイルや追加のメトリック（空きディスク容量など）は監視されません。を使用して AWS マネジメントコンソール 、EC2 起動タイプで Amazon ECS クラスターをプロビジョニングできます。これにより、起動設定で Amazon EC2 Auto Scaling グループをデプロイする CloudFormation スタックが作成されます。ただし、この方法では、カスタム AMI を選択したり、異なる設定や追加の起動スクリプトを使用して起動設定をカスタマイズしたりすることはできません。

追加のログとメトリクスを監視するには、Amazon ECS コンテナインスタンスに CloudWatch エージェントをインストールする必要があります。EC2 インスタンスのインストールアプローチは、[Systems Manager ディストリビューターとステートマネージャーを使用して CloudWatch エージェントをインストールする](install-cloudwatch-systems-manager.md) ガイドのセクションを参照してください。ただし、Amazon ECS AMI には、必要な Systems Manager Agent は含まれていません。Amazon ECS クラスターの作成時に Systems Manager Agent をインストールするユーザーデータスクリプトを使用して、カスタム起動設定を使用する必要があります。これにより、コンテナインスタンスを Systems Manager に登録し、ステートマネージャの関連付けを適用して CloudWatch エージェントをインストール、設定、および更新できます。ステートマネージャーは CloudWatch エージェントの設定を実行し、更新するときに、Amazon EC2 用の標準化されたシステムレベルの CloudWatch 設定も適用されます。また、Amazon ECS の標準化された CloudWatch 設定を CloudWatch 設定の S3 バケットに保存し、ステートマネージャーで自動的に適用することもできます。

Amazon ECS コンテナインスタンスに適用された IAM ロールまたはインスタンスプロファイルに `CloudWatchAgentServerPolicy` そして `AmazonSSMManagedInstanceCore` ポリシーに必要なものが含まれているか確認する必要があります。[ecs\$1cluster\$1with\$1cloudwatch\$1linux.yaml](https://github.com/aws-samples/logging-monitoring-apg-guide-examples/blob/main/examples/ecs/ecs_cluster_with_cloudwatch_linux.yaml) CloudFormation テンプレートを使用して、Linux ベースの Amazon ECS クラスターをプロビジョニングできます。このテンプレートは、Systems Manager をインストールし、カスタムの CloudWatch 設定をデプロイして Amazon ECS 固有のログファイルを監視するカスタム起動設定を持つ Amazon ECS クラスターを作成します。

Amazon ECS コンテナインスタンスおよび標準 EC2 インスタンスログについて、次のログをキャプチャする必要があります。
+ **Amazon ECS エージェントの起動出力**–`/var/log/ecs/ecs-init.log`
+ **Amazon ECS エージェントの出力**–`/var/log/ecs/ecs-agent.log`
+ **IAM 認証情報プロバイダーのリクエストログ**–`/var/log/ecs/audit.log`

出力レベル、フォーマット、および追加設定オプションの詳細については、Amazon ECS のドキュメント内の「[Amazon ECS ログファイルの場所](https://docs.aws.amazon.com//AmazonECS/latest/developerguide/logs.html)」を参照してください。

**重要**  
 EC2 コンテナインスタンスを実行したり管理したりしないため、Fargate 起動タイプにはエージェントのインストールや設定は必要ありません。

Amazon ECS コンテナインスタンスでは、最新の Amazon ECS で最適化された AMI とコンテナエージェントを使用する必要があります。 AWS は、AMI ID を含む Amazon ECS で最適化された AMI 情報とともに、パブリックSystems Manager パラメータストアパラメータを格納します。パラメータストアから、Amazon ECS で最適化された AMI の [パラメータストアパラメータ形式](https://docs.aws.amazon.com//AmazonECS/latest/developerguide/retrieve-ecs-optimized_AMI.html) から最適化された最新の AMI を取得することができます。お客様の CloudFormation テンプレートの最新の AMI または特定の AMI リリースを参照するパブリックパラメータストアパラメータを参照できます。

AWS は、サポートされている各リージョンで同じ Parameter Store パラメータを提供します。つまり、これらのパラメータを参照する CloudFormation テンプレートは、AMI を更新せずにリージョンとアカウント間で再利用できます。特定のリリースを参照して、新しい Amazon ECS AMI の組織へのデプロイを制御できます。これにより、新しい Amazon ECS で最適化された AMI がテストされるまで使用されなくなります。

# EC2 および Fargate 起動タイプの Amazon ECS コンテナログ
<a name="ec2-fargate-logs"></a>

Amazon ECS はタスク定義を使用して、コンテナをタスクとサービスとしてデプロイおよび管理します。タスク定義内で Amazon ECS クラスターに起動するコンテナを設定します。ログは、コンテナレベルでログドライバーを使用して構成されます。複数のログドライバオプションは、コンテナに起動タイプが EC2 か Fargate のどちらを使用するかによって異なるロギングシステム（ 例えば、`awslogs`,`fluentd`,`gelf`,`json-file`,`journald`,`logentries`,`splunk`,`syslog` または `awsfirelens`)を提供します Fargate 起動タイプは、、`awslogs`、`splunk`および のログドライバーオプションのサブセットを提供します`awsfirelens`。 は、コンテナ出力をキャプチャして CloudWatch Logs に送信する`awslogs`ログドライバー AWS を提供します。ログドライバの設定では、ロググループ、リージョン、ログストリームのプレフィックスを他の多くのオプションとともにカスタマイズできます。

ロググループのデフォルトの名前付けの **CloudWatch Logs の自動設定** オプションは、 AWS マネジメントコンソール では `/ecs/<task_name>` です 。Amazon ECS で使用されるログストリーム名には、`<awslogs-stream-prefix>/<container_name>/<task_id>` の形式で設定。組織の要件に基づいてログをグループ化するグループ名を使用することをお勧めします。以下の表では、`image_name` そして `image_tag` がログストリームの名前に含まれます。


|  |  | 
| --- |--- |
| ロググループ名 | /<Business unit>/<Project or application name>/<Environment>/<Cluster name>/<Task name> | 
| ログストリーム名のプレフィクス |  `/<image_name>/<image_tag>`  | 

この情報は、タスク定義でも使用できます。ただし、タスクは新しいリビジョンで定期的に更新されます。つまり、タスク定義で現在使用しているものよりも、`image_name` そして `image_tag` タスク定義が別のリビジョンが使用されている可能性があります。詳細や名前付けの例については、このガイドの「[CloudWatch デプロイを計画する](planning-cloudwatch-deployment.md)」を参照してください。

継続的インテグレーションおよび継続的デリバリー (CI/CD) パイプラインまたは自動プロセスを使用する場合は、新しい Docker イメージビルドごとにアプリケーションの新しいタスク定義リビジョンを作成できます。例えば、CI/CD プロセスの一部として、Docker イメージ名、イメージタグ、GitHub リビジョン、またはその他の重要な情報をタスク定義のリビジョンとロギング設定に含めることができます。

# Amazon ECS 用 FireLens でカスタムログルーティングを使用する
<a name="firelens-custom-log-routing"></a>

FireLens for Amazon ECS は、[Fluentd](https://www.fluentd.org/) または [Fluent Bit](https://docs.fluentbit.io/manual) にログをルーティングするのに役立ちます。これにより、コンテナログを AWS サービスや AWS パートナーネットワーク (APN) の送信先に直接送信したり、CloudWatch Logs へのログ配信をサポートしたりできます。

AWS は、Amazon Kinesis Data Streams、Amazon Data Firehose、CloudWatch Logs 用のプラグインがプリインストールされた [Fluent Bit 用の Docker イメージ](https://docs.aws.amazon.com//AmazonECS/latest/developerguide/firelens-using-fluentbit.html)を提供します。FireLens ログドライバーは、CloudWatch Logs に送信されるログをさらにカスタマイズして制御するための `awslogs` ログドライバーを利用できます。

例えば、FireLens ログドライバを使用して、ログ形式の出力を制御できます。つまり、Amazon ECS コンテナの CloudWatch ログは JSON オブジェクトとして自動的にフォーマットされ、次の `ecs_cluster`,`ecs_task_arn`,`ecs_task_definition`,`container_id`,`container_name`, および `ec2_instance_id` のJSON 形式のプロパティが含まれます。Fluent ホストは、`FLUENT_HOST` そして `FLUENT_PORT` 環境変数は、`awsfirelens` ドライバーを手特定するときに露出します。つまり、流暢なロガーライブラリを使用して、コードからログルーターに直接ログを記録できます。例えば、アプリケーションに `fluent-logger-python` 環境変数の値を使用して Fluent Bit に記録するライブラリが含まれます。

Amazon ECS に FireLens を使用することを選択した場合、`awslogs` ログドライバー [他の設定も使って](https://github.com/aws/amazon-cloudwatch-logs-for-fluent-bit) と同じ設定を構成できます。例えば、CloudWatch へのロギングに FireLens を使用するように設定された NGINX サーバーを起動する Amazon ECS タスク定義 [ecs-Task-nginx-firelense.json](https://github.com/aws-samples/logging-monitoring-apg-guide-examples/blob/main/examples/ecs/ecs-task-nginx-firelense.json) を利用できます。また、ロギング用のサイドカーとして FireLens Fluent Bit コンテナを起動します。

# Amazon ECS のメトリクス
<a name="ecs-metrics"></a>

Amazon ECS コンテナエージェントを使用したクラスターおよびサービスレベルでの EC2 および Fargate 起動タイプ (CPU およびメモリ使用率など)で、[Amazon ECS は標準の CloudWatch メトリクスを提供します。](https://docs.aws.amazon.com//AmazonECS/latest/developerguide/cloudwatch-metrics.html)CloudWatch Container Insights を使用してサービス、タスク、およびコンテナのメトリクスをキャプチャしたり、組み込みメトリクス形式を使用して独自のカスタムコンテナメトリクスをキャプチャすることもできます。

Container Insights はクラスターレベル、コンテナインスタンス、サービス、タスクレベルで CPU 使用率、メモリ使用率、ネットワークトラフィック、ストレージなどのメトリックスを提供するCloudWatch 機能です。Container Insights では、サービスとタスクを分析し、コンテナレベルで平均メモリまたは CPU 使用率を確認するのに役立つ自動ダッシュボードも作成します。コンテナインサイトは、カスタム指標を `ECS/ContainerInsights` [カスタム名前空間](https://docs.aws.amazon.com//AmazonECS/latest/developerguide/cloudwatch-metrics.html) グラフ、アラーム、およびダッシュボードに使用できます。

個々の Amazon ECS クラスターでコンテナインサイトを有効にすることで、コンテナインサイトメトリクスを有効にすることができます。コンテナインスタンスレベルでメトリクスを表示する場合は、[Amazon ECS クラスターで CloudWatch エージェントをデーモンコンテナとして起動します](https://docs.aws.amazon.com//AmazonCloudWatch/latest/monitoring/deploy-container-insights-ECS-instancelevel.html)。[cwagent-ecs-instance-metric-cfn.yaml](https://github.com/aws-samples/logging-monitoring-apg-guide-examples/blob/main/examples/ecs/cwagent-ecs-instance-metric-cfn.yaml) CloudFormation テンプレートを使用して、CloudWatch エージェントを Amazon ECS サービスとしてデプロイできます。重要なのは、この例では、適切なカスタム CloudWatch エージェント設定を作成し、`ecs-cwagent-daemon-service` キーを使用してパラメータストアに保存したことを前提としています。

[CloudWatch エージェント](https://docs.aws.amazon.com//AmazonCloudWatch/latest/monitoring/Container-Insights-metrics-ECS.html) は、CloudWatch Container Insights のデーモンコンテナとしてデプロイされるには、次のような追加のディスク、メモリ、`instance_cpu_reserved_capacity` そして `instance_memory_reserved_capacity`と `ClusterName`,`ContainerInstanceId`,`InstanceId` ディメンションなどのCPU メトリクスが含まれます。コンテナインスタンスレベルのメトリクスは、CloudWatch 組み込みメトリックス形式を使用して Container Insights によって実装されます。このガイドの [CloudWatch エージェントのデプロイと設定のステートマネージャーとディストリビューターをセットアップする](install-cloudwatch-systems-manager.md#set-up-systems-manager-distributor)セクションの アプローチを使用して、Amazon ECS コンテナインスタンスに追加のシステムレベルのメトリクスを設定できます。

## Amazon ECS でカスタムアプリケーションメトリクスを作成する
<a name="ecs-metrics-applications"></a>

[CloudWatch の埋め込みメトリクス形式](https://docs.aws.amazon.com//AmazonCloudWatch/latest/monitoring/CloudWatch_Embedded_Metric_Format.html) を使用して、独自のアプリケーションメトリクスを作成、取得することも可能です。`awslogs` ログドライバーは、CloudWatch 埋め込みメトリクス形式のステートメントを解釈できます。

`CW_CONFIG_CONTENT` 次の例の環境変数は、`cwagentconfig` Systems Manager パラメータストアパラメータに設定されています。この基本構成でエージェントを実行して、組み込みメトリック形式のエンドポイントとして構成できます。ただし、不要になりました。

```
  {
  "logs": {
    "metrics_collected": {
      "emf": { }
    }
  }
}
```

複数のアカウントとリージョンにまたがって Amazon ECS デプロイメントがある場合は、 AWS Secrets Manager Secret は CloudWatch 設定を保存し、組織と共有するようにシークレットポリシーを設定します。タスク定義で secrets オプションを使用して、`CW_CONFIG_CONTENT` 変数を設定します。

アプリケーションで AWS 提供されている[オープンソースの埋め込みメトリクス形式ライブラリ](https://docs.aws.amazon.com//AmazonCloudWatch/latest/monitoring/CloudWatch_Embedded_Metric_Format_Libraries.html)を使用し、 `AWS_EMF_AGENT_ENDPOINT`環境変数を指定して、埋め込みメトリクス形式のエンドポイントとして機能する CloudWatch エージェントサイドカーコンテナに接続できます。例えば、[ecs\$1cw\$1emf\$1example](https://github.com/aws-samples/logging-monitoring-apg-guide-examples/tree/main/examples/ecs/ecs_cw_emf_example) 埋め込みメトリックス形式のエンドポイントとして設定された CloudWatch エージェントサイドカーコンテナに埋め込みメトリックス形式のメトリクスを送信する Python アプリケーションのサンプルを使用します。

CloudWatch 用 [Fluent Bit プラグイン](https://github.com/aws/amazon-cloudwatch-logs-for-fluent-bit)を使用して、埋め込みメトリクス形式のメッセージを送信することもできます。また、 [ecs\$1firelense\$1emf\$1example](https://github.com/aws-samples/logging-monitoring-apg-guide-examples/tree/main/examples/ecs/ecs_firelense_emf_example) Amazon ECS サイドカーコンテナに FireLens 組み込みメトリクス形式のメトリクスを送信する Python アプリケーションのサンプルを使用することもできます。

埋め込みメトリクス形式を使用しない場合は、 [AWS API](https://docs.aws.amazon.com//AmazonCloudWatch/latest/APIReference/Welcome.html) または [AWS SDK](https://aws.amazon.com/developer/tools/) を使用して CloudWatch メトリクスを作成および更新できます。特定のユースケースがない限り、このアプローチは推奨されません。これは、コードにメンテナンスと管理オーバーヘッドを追加するためです。