awslogs ログドライバーを使用する - Amazon ECS

awslogs ログドライバーを使用する

タスクのコンテナを設定して CloudWatch Logs にログ情報を送信できます。これを行うと、Fargate タスク内のコンテナのログを表示できるようになります。このトピックでは、タスク定義で awslogs ログドライバーの使用を開始する方法を説明します。

注記

タスクのコンテナによってログ記録される情報のタイプは、ENTRYPOINT コマンドによって大きく異なります。デフォルトでは、キャプチャされるログには、コンテナをローカルに実行した場合に通常はインタラクティブターミナルに表示されるコマンド出力 (STDOUT および STDERR I/O ストリーム) が表示されます。awslogs ログドライバーは、これらのログを Docker から CloudWatch Logs に渡します。Docker ログの処理方法 (ファイルデータやストリームをキャプチャする別の方法) の詳細については、Docker ドキュメントの「コンテナまたはサービスのログを表示する」を参照してください。

コンテナ用の awslogs ログドライバーを有効にする

タスクで Fargate 起動タイプを使用する場合、awslogs ログドライバーを有効化するには、必要な logConfiguration パラメータをタスク定義に追加する必要があります。詳細については、「タスク定義でログ設定を指定する」を参照してください。

ロググループを作成する

awslogs ログドライバーでは、CloudWatch Logs の既存のロググループにログストリームを送信することも、ユーザーに代わって新しいロググループを作成することも可能です。AWS Management Console には、ecs をプレフィックスとするタスク定義ファミリー名を使用して自動的にロググループを作成する、自動設定オプションが用意されています。または、手動でログ設定オプションを指定し、awslogs-create-group オプションに値 true を指定することもできます。これにより、ロググループが自動的に作成されます。

注記

awslogs-create-group オプションを使用してロググループを作成するには、タスク実行 IAM ロールポリシーまたは EC2 インスタンスロールポリシーに logs:CreateLogGroup 許可が含まれている必要があります。

次のコードは、awslogs-create-group オプションの設定方法を示しています。

{ "containerDefinitions": [ { "logConfiguration": { "logDriver": "awslogs", "options": { "awslogs-group": "firelens-container", "awslogs-region": "us-west-2", "awslogs-create-group": "true", "awslogs-stream-prefix": "firelens" } } ] }

自動設定機能を使用してロググループを作成する

Amazon ECS コンソールでタスク定義を登録する際、Amazon ECS による CloudWatch Logs の自動設定を許可することができます。この設定を行うと、ecs をプレフィックスとするタスク定義ファミリー名を使用して、自動的にロググループが作成されます。詳細については、「コンソールを使用したタスク定義の作成」を参照してください。

使用できる awslogs ログドライバーのオプション

awslogs ログドライバーは、Amazon ECS タスク定義で以下のオプションをサポートします。詳細については、「CloudWatch Logs ロギングドライバー」を参照してください。

awslogs-create-group

必須: いいえ

ロググループを自動的に作成させるかどうかを指定します。このオプションを指定しない場合、デフォルトは [false] です。

注記

awslogs-create-group を使用する前に、IAM ポリシーにはアクセス許可 logs:CreateLogGroup が含まれている必要があります。

awslogs-region

必須: はい

awslogs ログドライバが Docker ログを送信する先の、AWS リージョン を指定します。CloudWatch Logs では、異なるリージョンのクラスターからすべてのログを 1 つのリージョンに送信するように選択できます。これにより、すべてのログを一元的な場所で確認できるようになります。他にも、リージョンごとにそれらを分離して、より細分化することが可能です。このオプションで指定するリージョンに、対象のロググループが存在することを確認してください。

awslogs-group

必須: はい

awslogs ログドライバーがログストリームを送信する先の、ロググループを指定する必要があります。詳細については、「ロググループを作成する」を参照してください。

awslogs-stream-prefix

必須:はい。Fargate 起動タイプを使用する場合は必須です。EC2 launch タイプの場合は

指定したプレフィックス、コンテナ名、コンテナが属する Amazon ECS タスクの ID にログストリームを関連付けるには、awslogs-stream-prefix オプションを使用します。このオプションでプレフィックスを指定した場合、ログストリームの形式は以下のようになります。

prefix-name/container-name/ecs-task-id

Amazon ECS サービスでは、サービス名をプレフィックスとして使用できます。これにより、コンテナが属するサービスへのログストリームと、それを送信したコンテナの名前、そのコンテナが所属するタスクの ID を追跡できます。

awslogs-datetime-format

必須: いいえ

このオプションは、Python strftime 形式で複数行起動パターンを定義します。ログメッセージは、パターンに一致する 1 行と、それに続くパターンに一致しない行で構成されます。一致する 1 行とは、ログメッセージ間の区切りです。

この形式を使用する場合のユースケースの例としては、スタックダンプなどの解析された出力があり、これを使用しなければ、複数のエントリに記録されることになります。適切なパターンにより、単一のエントリにキャプチャさせます。

詳細については、「awslogs-datetime-format」を参照してください。

awslogs-datetime-formatawslogs-multiline-pattern オプションの両方を設定することはできません。

注記

複数行のログ記録は、すべてのログメッセージの正規表現の解析とマッチングを実行します。これによりログ記録のパフォーマンスに悪影響が及ぶ可能性があります。

awslogs-multiline-pattern

必須: いいえ

このオプションでは、正規表現を使用する複数行起動パターンを定義します。ログメッセージは、パターンに一致する 1 行と、それに続くパターンに一致しない行で構成されます。一致する 1 行とは、ログメッセージ間の区切りです。

詳細については、「awslogs-multiline-pattern」を参照してください。

awslogs-datetime-format も設定されている場合は、このオプションは無視されます。

awslogs-datetime-formatawslogs-multiline-pattern オプションの両方を設定することはできません。

注記

複数行のログ記録は、すべてのログメッセージの正規表現の解析とマッチングを実行します。これによりログ記録のパフォーマンスに悪影響が及ぶ可能性があります。

mode

必須: いいえ

有効な値: non-blocking | blocking

デフォルト値: blocking

このオプションは、コンテナから CloudWatch Logs へのログメッセージの配信モードを定義します。選択した配信モードは、コンテナから CloudWatch へのログの流れが中断されたときのアプリケーションの可用性に影響します。

デフォルト の blocking モードを使用し、CloudWatch へのログのフローが中断された場合、stdout および stderr ストリームに書き込むコンテナコードからの呼び出しはブロックされます。その結果、アプリケーションのロギングスレッドがブロックされます。これにより、アプリケーションが応答しなくなり、コンテナのヘルスチェックが失敗する可能性があります。

non-blocking モードを使用する場合、コンテナのログは代わりに max-buffer-size オプションで設定されたメモリ内の中間バッファに保存されます。これにより、ログを CloudWatch に送信できない場合にアプリケーションが応答しなくなるのを防ぎます。サービスの可用性を確保したいが、多少のログ損失があっても問題ない場合は、このモードを使用することをおすすめします

max-buffer-size

必須: いいえ

デフォルト値: 1m

non-blocking モードが使用されている場合、max-buffer-size ログオプションは、中間メッセージ用のストレージに使用されるバッファのサイズを制御します。アプリケーションに基づいて、必ず適切なバッファサイズを指定してください。バッファがいっぱいになると、それ以上ログを保存できなくなります。保存できないログは失われます。

タスク定義でログ設定を指定する

コンテナがログを CloudWatch に送信する前に、タスク定義でコンテナの awslogs ログドライバーを指定する必要があります。このセクションでは、コンテナが awslogs ログドライバーを使用するためのログ設定について説明します。詳細については、「コンソールを使用したタスク定義の作成」を参照してください。

下にあるタスク定義 JSON には、各コンテナに指定された logConfiguration オブジェクトが含まれています。その 1 つは、awslogs-wordpress というロググループにログを送信する WordPress コンテナ用です。もう 1 つは、awslogs-mysql というロググループにログを送信する MySQL コンテナ用です。どちらのコンテナも awslogs-example ログストリームプレフィックスを使用します。

{ "containerDefinitions": [ { "name": "wordpress", "links": [ "mysql" ], "image": "wordpress", "essential": true, "portMappings": [ { "containerPort": 80, "hostPort": 80 } ], "logConfiguration": { "logDriver": "awslogs", "options": { "awslogs-create-group": "true", "awslogs-group": "awslogs-wordpress", "awslogs-region": "us-west-2", "awslogs-stream-prefix": "awslogs-example" } }, "memory": 500, "cpu": 10 }, { "environment": [ { "name": "MYSQL_ROOT_PASSWORD", "value": "password" } ], "name": "mysql", "image": "mysql", "cpu": 10, "memory": 500, "essential": true, "logConfiguration": { "logDriver": "awslogs", "options": { "awslogs-create-group": "true", "awslogs-group": "awslogs-mysql", "awslogs-region": "us-west-2", "awslogs-stream-prefix": "awslogs-example", "mode": "non-blocking", "max-buffer-size": "25m" } } } ], "family": "awslogs-example" }

CloudWatch Logs での コンテナログの表示

awslogs ログドライバーを使用する Fargate タスクを起動した後、設定済みコンテナはログデータを CloudWatch Logs に送信する必要があります。これらのログはコンソールで表示および検索できます。

Amazon ECS コンソールからコンテナの CloudWatch Logs データを表示するには
  1. コンソール (https://console.aws.amazon.com/ecs/v2) を開きます。

  2. [Clusters] ページで、表示するタスクを含むクラスターを選択します。

  3. [Cluster: cluster_name] ページで、[タスク] を選択して表示するタスクを選択します。

  4. [タスク: task_id] ページの [コンテナの詳細] で、[ログ設定] を選択してログを表示します。

  5. [Log Configuration (ログ設定)] セクションで、[CloudWatch のログを表示] を選択します。CloudWatch コンソールに関連ログストリームが開きます。

CloudWatch コンソールで CloudWatch Logs データを表示するには
  1. CloudWatch コンソール (https://console.aws.amazon.com/cloudwatch/) を開きます。

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

  3. 表示するロググループを選択します。「ロググループを作成する」で作成したロググループが表示されます。

  4. 表示するログストリームを選択します。