スキップしてコンテンツを表示

CloudWatch を使用して Amazon ECS コンテナログを監視する方法を教えてください。

所要時間2分
0

Amazon CloudWatch を使用して Amazon Elastic Container Service (Amazon ECS) コンテナログを監視したいです。

解決策

注: AWS コマンドラインインターフェイス (AWS CLI) コマンドの実行中にエラーが発生した場合は、「AWS CLI で発生したエラーのトラブルシューティング」を参照してください。また、AWS CLI の最新バージョンを使用していることを確認してください。

ログドライバーの設定

Amazon ECS コンソールまたは JSON エディタを使用してログドライバーを設定します。

Amazon ECS コンソールを使用する

次の手順を実行します。

  1. Amazon ECS コンソールを開きます。
  2. ナビゲーションペインで [タスク定義] を選択し、[新しいタスク定義の作成] の順に選択します。
    注: 既存のタスク定義を更新する場合は、そのタスク定義を選択してから、[新しいリビジョンの作成] を選択します。
  3. [新しいタスク定義の作成] ページの [タスク定義の設定] セクションで、タスク定義のファミリ名を入力します。
  4. [インフラストラクチャの要件] セクションで起動タイプを選択します。
  5. [コンテナ] セクションの [ログ記録][ログ収集を使用する] を選択します。
  6. 次のキーはデフォルト値のままにします。フィールドが空の場合は、値を入力します。
    awslogs-group
    awslogs-region
    awslogs-stream-prefix
    注: ロググループがない場合は、awslogs-create-group パラメータを True に設定します。
  7. タスク実行 AWS Identity and Access Management (IAM) ロールのアクセス許可には、CreateLogGroup アクションが必要です。
  8. [作成] を選択します。

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 を使用してログをクエリするには、次の手順を実行します。

  1. CloudWatch コンソールを開きます。

  2. ナビゲーションペインで [ログ] を選択します。

  3. [Logs Insights] を選択します。

  4. 該当するロググループを選択します。

  5. クエリを入力します。

  6. [クエリを実行] を選択します。

  7. アプリケーションの問題をトラブルシューティングするために、エラーのキーワードを検索します。アプリケーションログに応答時間が含まれている場合は、低速リクエストを分析します。

    クエリの例

    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 を使用してログデータを分析する」を参照してください。

アラートを作成する

次の手順を実行します。

  1. ログイベントからメトリクスフィルターを作成します
  2. CloudWatch アラームを作成します

エラーのトラブルシューティング

OutOfMemory エラーまたは ConnectionTimeout エラーのトラブルシューティングについては、「Fargate で Amazon ECS タスクの CPU 使用率が高い場合のトラブルシューティング方法を教えてください」を参照してください。

HTTP ステータスコード 5xx が大量に発生する場合のトラブルシューティングについては、「HTTP 500: 内部サーバーエラー」を参照してください。

AWS サービスとの統合

サブスクリプションを使用すると、CloudWatch Logs にあるログイベントのリアルタイムフィードにアクセスできます。CloudWatch は、処理、分析、他のシステムへのロード用に、Amazon Kinesis ストリームや AWS Lambda などのサービスにログイベントを配信します。

CloudWatch ログのコスト管理

保持ポリシーを変更する

開発環境では保持期間を短くし、本番環境ではログを長く保持することをおすすめします。

保持期間を 1 日から 10 年間の範囲で選択することも、ログを無期限に保持することもできます。不要なコストが発生しないように、保持設定をレビューし、必要な期間よりも長くログを保存しないようにしてください。

保持ポリシーを設定するには、次の手順を実行します。

  1. CloudWatch コンソールを開きます。
  2. ナビゲーションペインで [ログ] を選択します。
  3. [ロググループ] を選択します。
  4. 該当するロググループを選択します。
  5. [アクション] を選択し、[保持設定の編集] を選択します。
  6. 保持期間を選択します。たとえば、1 週間、1 か月、またはカスタム値を選択します。
  7. [保存] を選択します。

または、次の 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 でのログ記録と監視

AWS公式更新しました 1年前
コメントはありません