awslogs ログドライバーを使用する
タスクのコンテナを設定して CloudWatch Logs にログ情報を送信できます。このタスクの Fargate 起動タイプを使用している場合、コンテナからログを表示できます。EC2 起動タイプを使用すると、コンテナからの異なるログを 1 か所で便利に表示できます。また、コンテナログがコンテナインスタンスのディスク容量を占めることも防止できます。このトピックでは、タスク定義で awslogs
ログドライバーの使用を開始する方法について説明します。
タスクのコンテナによってログ記録される情報のタイプは、ENTRYPOINT
コマンドによって大きく異なります。デフォルトでは、キャプチャされるログは、コンテナをローカルに実行した場合にインタラクティブターミナルに表示されるコマンド出力 (STDOUT
および STDERR
I/O ストリーム) を示します。awslogs
ログドライバーは、これらのログを Docker から CloudWatch Logs に渡します。Docker ログの処理方法 (ファイルデータやストリームをキャプチャする別の方法)
の詳細については、Docker ドキュメントの「コンテナまたはサービスのログを表示する
Amazon ECS コンテナインスタンスから CloudWatch Logs にシステムログを送信するには、「コンテナインスタンスでの CloudWatch Logs の使用」を参照してください。CloudWatch Logs の詳細については、Amazon CloudWatch Logs User Guide の「ログファイルのモニタリング」および「CloudWatch Logs クォータ」を参照してください。
コンテナで awslogs ログドライバーを有効にする
タスクで Fargate 起動タイプを使用する場合、タスク定義に必要な logConfiguration
パラメータを追加するだけで、awslogs
ログドライバーを有効にできます。詳細については、「タスク定義でログ設定を指定する」を参照してください。
タスクで EC2 起動タイプを使用する場合、awslogs
ログドライバーを有効にするには、Amazon ECS コンテナインスタンスでコンテナエージェントの 1.9.0 以降が必要です。エージェントのバージョンの確認と最新バージョンへの更新については、「Amazon ECS コンテナエージェントの更新」を参照してください。
コンテナインスタンスで Amazon ECS 対応 AMI (ecs-init
パッケージのバージョンが最低でも 1.9.0-1) を使用していない場合は、docker run ステートメントで以下の環境変数を使用するか、環境変数ファイルを使用して、エージェントの起動時に awslogs
ロギングドライバーがコンテナインスタンスで使用できることを指定する必要があります。詳細については、「Amazon ECS コンテナエージェントのインストール」を参照してください。
ECS_AVAILABLE_LOGGING_DRIVERS='["json-file","
awslogs
"]'
Amazon ECS コンテナインスタンスでは、コンテナインスタンスとともに起動する IAM ロールに logs:CreateLogStream
および logs:PutLogEvents
アクセス権限が必要です。Amazon ECS で awslogs
ログドライバーのサポートを有効にする前に Amazon ECS コンテナインスタンスを作成した場合は、このアクセス権限を追加する必要がある場合があります。コンテナインスタンスでコンテナインスタンス用のマネージド
IAM ポリシーを使用している場合は、コンテナインスタンスに正しいアクセス権限があるはずです。Amazon ECS コンテナインスタンスのロールの確認とコンテナインスタンスのマネージド
IAM ポリシーのアタッチについては、「IAM コンソールで ecsInstanceRole を確認するには」を参照してください。
ロググループを作成する
awslogs
ログドライバーは、CloudWatch Logs の既存のロググループにログストリームを送信することも、ユーザーに代わって新しいロググループを作成することもできます。AWS
マネジメントコンソール には、タスク定義ファミリー名を ecs
でプレフィックスとして使用して、自動的にロググループを作成する自動設定オプションが用意されています。または、手動でログ設定オプションを指定し、値 true
で awslogs-create-group
オプションを指定することもできます。これにより、ロググループが自動的に作成されます。
awslogs-create-group
オプションを使用してロググループを作成するには、IAM ポリシーに logs:CreateLogGroup
アクセス許可が含まれている必要があります。
自動設定機能を使用してロググループを作成する
Amazon ECS コンソールでタスク定義を登録する際、Amazon ECS で CloudWatch ログを自動設定することができます。このオプションでは、ecs
をプレフィックスとして指定し、タスク定義ファミリー名を使用して自動的にロググループが作成されます。
Amazon ECS コンソールでロググループの自動設定オプションを使用するには
-
Amazon ECS コンソール (https://console.aws.amazon.com/ecs
) を開きます。 -
左のナビゲーションペインで、[Task Definitions]、[Create new Task Definition] の順に選択します。
-
互換性オプションを選択し、[次のステップ] を選択します。
-
[Add container] を選択します。
-
[Storage and Logging (ストレージとログ記録)] の [Log configuration (ログ設定)] で、[Auto-configure CloudWatch Logs (CloudWatch Logs の自動設定)] を選択します。
-
awslogs ログドライバーのオプションを入力します。詳細については、「タスク定義でログ設定を指定する」を参照してください。
-
タスク定義ウィザードの残りの手順を完了します。
使用できる awslogs ログドライバーのオプション
awslogs
ログドライバーは、Amazon ECS タスク定義で以下のオプションをサポートします。詳細については、「CloudWatch Logs logging driver
awslogs-create-group
-
必須: いいえ
自動的に作成されたロググループが必要かどうかを指定します。このオプションを指定しない場合、デフォルトは
false
です。注記 awslogs-create-group
を使用しようとする前に、IAM ポリシーにはlogs:CreateLogGroup
アクセス権限が含まれている必要があります。 awslogs-region
-
必須: はい
awslogs
ログドライバーが Docker ログを送信するリージョンを指定します。異なるリージョンのクラスターからのログをすべて CloudWatch Logs の単一のリージョンに送信する選択もできます。そうすることで、1 か所ですべてを表示できます。あるいは、詳細に確認するためにリージョン別にすることもできます。このオプションで指定するリージョンに、指定されたロググループが存在することを確認してください。 awslogs-endpoint
-
必須: いいえ
デフォルトでは、Dockerは
awslogs-region
ログオプションまたは検出されたリージョンのいずれかを使用してリモート CloudWatch Logs API エンドポイントを構築します。awslogs-endpoint
ログオプションを使用して、指定されたエンドポイントでデフォルトのエンドポイントを上書きします。 awslogs-group
-
必須: はい
awslogs
ログドライバーでログストリームを送信するロググループを指定する必要があります。詳細については、「ロググループを作成する」を参照してください。 awslogs-stream-prefix
-
必須: EC2 起動タイプの場合はオプション。Fargate 起動タイプの場合は必須。
awslogs-stream-prefix
オプションを使用して、指定したプレフィックス、コンテナ名、コンテナの所属先の Amazon ECS タスクの ID に、ログストリームを関連付けることができます。このオプションでプレフィックスを指定した場合、ログストリームの形式は以下のようになります。prefix-name
/container-name
/ecs-task-id
このオプションでプレフィックスを指定しない場合、ログストリームの名前は、コンテナインスタンスの Docker デーモンによって割り当てられたコンテナ ID に基づいて付けられます。Docker コンテナ ID (コンテナインスタンスでのみ使用できます) だけでそのログを送信したコンテナを追跡するのは難しいため、このオプションでプレフィックスを指定することをお勧めします。
Amazon ECS サービスの場合は、サービス名をプレフィックスとして使用できます。こうすることで、コンテナが所属するサービスへのログストリームと、それを送信したコンテナの名前、およびそのコンテナが所属するタスクの ID を追跡できます。
Amazon ECS コンソールを使用するときに [Log] ペインにログを表示するためには、ログのストリームプレフィックスを指定する必要があります。
awslogs-datetime-format
-
必須: いいえ
このオプションは、Python
strftime
形式で複数行起動パターンを定義します。ログメッセージは、パターンに一致する 1 行と、それに続くパターンに一致しない行で構成されます。したがって、一致した行はログメッセージ間の区切り文字です。この形式を使用する場合のユースケースの例としては、スタックダンプなどの解析された出力があり、これを使用しなければ、複数のエントリに記録されることになります。適切なパターンにより、単一のエントリにキャプチャさせます。
詳細については、「awslogs-datetime-format
」を参照してください。 awslogs-datetime-format
とawslogs-multiline-pattern
の両方が設定されている場合、このオプションは常に優先されます。注記 複数行のログ記録は、すべてのログメッセージの正規表現の解析とマッチングを実行します。これにより、ログ記録のパフォーマンスに悪影響が及ぶ可能性があります。
awslogs-multiline-pattern
-
必須: いいえ
このオプションでは、正規表現を使用して複数行起動パターンを定義します。ログメッセージは、パターンに一致する 1 行と、それに続くパターンに一致しない行で構成されます。したがって、一致した行はログメッセージ間の区切り文字です。
詳細については、「awslogs-multiline-pattern
」を参照してください。 awslogs-datetime-format
も設定されている場合は、このオプションは無視されます。注記 複数行のログ記録は、すべてのログメッセージの正規表現の解析とマッチングを実行します。これによりログ記録のパフォーマンスに悪影響が及ぶ可能性があります。
mode
-
必須: いいえ
有効な値:
non-blocking
|blocking
デフォルト値:
blocking
コンテナから
awslogs
へのログメッセージの配信モード。詳細については、「ログドライバーを設定する」を参照してください。 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-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-group": "awslogs-mysql
", "awslogs-region": "us-west-2
", "awslogs-stream-prefix": "awslogs-example
" } } } ], "family": "awslogs-example" }
Amazon ECS コンソールで、wordpress
コンテナのログ設定は次の図のように指定されています。

awslogs
ログドライバーを使用するタスク定義をコンテナ定義ログ設定に登録すると、タスク定義を使用してタスクを実行またはサービスを作成し、CloudWatch Logs へのログの送信を開始できます。詳細については、「スタンドアロンタスクの実行」および「サービスの作成」を参照してください。
CloudWatch Logs で awslogs コンテナログを表示する
EC2 起動タイプを使用するタスクの場合、コンテナインスタンスロールに CloudWatch Logs にログを送信するために必要な正しいアクセス権限を付与すると、コンテナエージェントは
1.9.0 バージョン以降に更新されます。awslogs
ログドライバーを使用するコンテナでタスクを設定し、開始しているので、設定済みコンテナはログデータを CloudWatch Logs に送信しているはずです。これらのログはコンソールで表示および検索できます。
Amazon ECS コンソールからコンテナの CloudWatch Logs データを表示するには
-
Amazon ECS コンソール (https://console.aws.amazon.com/ecs
) を開きます。 -
[Clusters] ページで、表示するタスクを含むクラスターを選択します。
-
[Cluster:
cluster_name
] ページで、[Tasks] を選択して表示するタスクを選択します。 -
[Task:
task_id
] ページで、コンテナ名の左にある矢印を選択してコンテナビューを展開します。 -
[Log Configuration (ログ設定)] セクションで、[CloudWatch のログを表示] を選択します。CloudWatch コンソールに関連ログストリームが開きます。
CloudWatch コンソールで CloudWatch Logs データを表示するには
-
https://console.aws.amazon.com/cloudwatch/
にある CloudWatch コンソールを開きます。 -
左のナビゲーションペインで [Logs] を選択します。
-
表示するロググループを選択します。「ロググループを作成する」で作成したロググループが表示されます。
-
表示するログストリームを選択します。