Amazon CloudWatch を使用して Amazon Elastic Container Service (Amazon ECS) コンテナログを監視したいです。
解決策
注: AWS コマンドラインインターフェイス (AWS CLI) コマンドの実行中にエラーが発生した場合は、「AWS CLI で発生したエラーのトラブルシューティング」を参照してください。また、AWS CLI の最新バージョンを使用していることを確認してください。
ログドライバーの設定
Amazon ECS コンソールまたは JSON エディタを使用してログドライバーを設定します。
Amazon ECS コンソールを使用する
次の手順を実行します。
- Amazon ECS コンソールを開きます。
- ナビゲーションペインで [タスク定義] を選択し、[新しいタスク定義の作成] の順に選択します。
注: 既存のタスク定義を更新する場合は、そのタスク定義を選択してから、[新しいリビジョンの作成] を選択します。
- [新しいタスク定義の作成] ページの [タスク定義の設定] セクションで、タスク定義のファミリ名を入力します。
- [インフラストラクチャの要件] セクションで起動タイプを選択します。
- [コンテナ] セクションの [ログ記録] で [ログ収集を使用する] を選択します。
- 次のキーはデフォルト値のままにします。フィールドが空の場合は、値を入力します。
awslogs-group
awslogs-region
awslogs-stream-prefix
注: ロググループがない場合は、awslogs-create-group パラメータを True に設定します。
- タスク実行 AWS Identity and Access Management (IAM) ロールのアクセス許可には、CreateLogGroup アクションが必要です。
- [作成] を選択します。
JSON エディタを使用する
ECS タスク定義で logConfiguration パラメータを定義するには、ECS タスク定義のテンプレートをコンソールの JSON エディタに入力します。
設定例
"logConfiguration":
"logDriver": "awslogs",
"options": {
"awslogs-group": "/ecs/my-log-group",
"awslogs-region": "region-code",
"awslogs-stream-prefix": "ecs"
}
}
注: my-log-group は、実際のロググループ名に置き換えます。
詳細については、「Amazon ECS タスク定義: ログを CloudWatch にルーティングする」および「Amazon ECS ログを CloudWatch に送信する」を参照してください。
ログオプションの詳細については、Docker のウェブサイトで「Amazon CloudWatch Logs のオプション」を参照してください。
コンテナログの監視とトラブルシューティング
コンテナログを分析する
CloudWatch Logs Insights を使用してログをクエリするには、次の手順を実行します。
-
CloudWatch コンソールを開きます。
-
ナビゲーションペインで [ログ] を選択します。
-
[Logs Insights] を選択します。
-
該当するロググループを選択します。
-
クエリを入力します。
-
[クエリを実行] を選択します。
-
アプリケーションの問題をトラブルシューティングするために、エラーのキーワードを検索します。アプリケーションログに応答時間が含まれている場合は、低速リクエストを分析します。
クエリの例
fields @timestamp, @message
| filter @message like /error/
| sort @timestamp desc
fields @timestamp, @message, response_time
| filter response_time > 2000
| sort response_time desc
詳細については、「CloudWatch Logs Insights を使用してログデータを分析する」を参照してください。
アラートを作成する
次の手順を実行します。
- ログイベントからメトリクスフィルターを作成します。
- CloudWatch アラームを作成します。
エラーのトラブルシューティング
OutOfMemory エラーまたは ConnectionTimeout エラーのトラブルシューティングについては、「Fargate で Amazon ECS タスクの CPU 使用率が高い場合のトラブルシューティング方法を教えてください」を参照してください。
HTTP ステータスコード 5xx が大量に発生する場合のトラブルシューティングについては、「HTTP 500: 内部サーバーエラー」を参照してください。
AWS サービスとの統合
サブスクリプションを使用すると、CloudWatch Logs にあるログイベントのリアルタイムフィードにアクセスできます。CloudWatch は、処理、分析、他のシステムへのロード用に、Amazon Kinesis ストリームや AWS Lambda などのサービスにログイベントを配信します。
CloudWatch ログのコスト管理
保持ポリシーを変更する
開発環境では保持期間を短くし、本番環境ではログを長く保持することをおすすめします。
保持期間を 1 日から 10 年間の範囲で選択することも、ログを無期限に保持することもできます。不要なコストが発生しないように、保持設定をレビューし、必要な期間よりも長くログを保存しないようにしてください。
保持ポリシーを設定するには、次の手順を実行します。
- CloudWatch コンソールを開きます。
- ナビゲーションペインで [ログ] を選択します。
- [ロググループ] を選択します。
- 該当するロググループを選択します。
- [アクション] を選択し、[保持設定の編集] を選択します。
- 保持期間を選択します。たとえば、1 週間、1 か月、またはカスタム値を選択します。
- [保存] を選択します。
または、次の AWS CLI コマンド put-retention-policy を実行します。
aws logs put-retention-policy --log-group-name "/ecs/production-web-app" --retention-in-days retention-period>
注: 実際のものでそれぞれ、log-group-name をロググループ名に、retention-period を保持期間に置き換えます。
ログメトリクスを分析する
コストを削減し、最適化するには、AWS Cost Explorer を使用して各ロググループに関連するコストを分析します。
ログのエクスポートとアーカイブ
長期保存のコストを削減するには、ログを Amazon Simple Storage Service (Amazon S3) またはアーカイブソリューションに移動します。Amazon S3 にログをエクスポートするには、CloudWatch コンソールを使用するか、create-export-task コマンドを実行します。
aws logs create-export-task --log-group-name "/ecs/production-web-app" \--from start-timestamp --to end-timestamp --destination "s3-log-archive"
注: 実際のものでそれぞれ、log-group-name ロググループ名に、start-timestamp を開始時間に、end-timestamp を終了時間に置き換えます。
Amazon S3 ライフサイクルポリシーを実装する
S3 ライフサイクル設定を使用すると、古いログを Amazon S3 Glacier に自動的に移行し、指定した時間の経過後にアーカイブまたは削除できます。
過度なログ記録を避ける
アプリケーションが関連するログのみを送信するように設定します。詳細については、「ログ記録のベストプラクティス」を参照してください。
関連情報
Amazon Elastic Container Service でのログ記録と監視