
目次
Apacheコンテナで複数のログをCloudWatch Logsに転送するには、以下の手順を実行する必要があります。
ECS- Apacheコンテナの複数ログをCloudWatchロググループへ転送
-
ECSタスク定義のログドライバを設定する
ECSタスク定義には、ログドライバの設定が必要です。ここでは、firelentsを使用してログを転送するために、awsfirelens
ログドライバを使用します。
以下は、ECSタスク定義でawsfirelens
ログドライバを使用する例です。
{ "containerDefinitions": [ { "name": "apache", "image": "httpd", "logConfiguration": { "logDriver": "awsfirelens", "options": { "Name": "cloudwatch", "region": "us-west-2", "log_group_name": "apache-logs", "log_stream_name": "apache-container" } } }, { "name": "firelens", "image": "amazon/aws-for-fluent-bit:latest", "essential": true, "logConfiguration": { "logDriver": "awslogs", "options": { "awslogs-region": "us-west-2", "awslogs-group": "firelens-logs", "awslogs-stream-prefix": "firelens" } } } ], "requiresCompatibilities": [ "EC2" ], "networkMode": "bridge", "cpu": "256", "memory": "512", "family": "apache-task" }
上記の例では、apache
コンテナにawsfirelens
ログドライバを使用し、firelens
コンテナにawslogs
ログドライバを使用しています。awslogs
ログドライバを使用するfirelens
コンテナは、Apacheコンテナのログを受け取り、CloudWatch Logsに転送します。
-
firelensコンテナでFluent Bit設定ファイルを作成する
firelens
コンテナは、Fluent Bitを実行して、ApacheコンテナからのログをCloudWatch Logsに転送します。
firelens
コンテナでFluent Bit設定ファイルを作成する必要があります。
以下は、Fluent Bit設定ファイルの例です。
[INPUT] Name forward Listen 0.0.0.0 Port 24224 Buffer_Chunk_Size 1M Buffer_Max_Size 10M Buffer_Size 5M [FILTER] Name parser Parser apache [OUTPUT] Name cloudwatch_logs Match * region us-west-2 log_group_name apache-logs log_stream_name apache-container auto_create_group true
上記の例では、apache
コンテナのログは、forward
プロトコルを介してfirelens
コンテナに送信されます。
Fluent Bitは、parser
フィルタを使用して、ログをパースし、CloudWatch Logsに転送する前にデータを変換します。
最後に、cloudwatch_logs
アウトプットプラグインを使用して、パースされたログをCloudWatch Logsに送信します。
- Fluent BitのApacheパーサーを設定する
Fluent Bitは、Apacheログを解析するために、専用のパーサーを使用する必要があります。
Apacheパーサーを設定するには、parser
セクションを作成し、以下のようにapache
パーサーを設定します。
[PARSER] Name apache Format regex Regex ^(?[^ ]*) - - \[(? [^\]]*)\] \"(? [^\"]*) (? [^\"]*) HTTP/(? [^\"]*)\" (? [^ ]*) (? [^ ]*) \"(? [^\"]*)\" \"(? [^\"]*)\"$ Time_Key timestamp Time_Format %d/%b/%Y:%H:%M:%S %z
上記の例では、apache
パーサーを使用して、Apacheログをパースします。
Format
プロパティは、正規表現を使用してApacheログを解析します。Time_Key
とTime_Format
プロパティは、ログのタイムスタンプを解析します。
-
CloudWatch Logsグループを作成する
CloudWatch Logsグループを作成する必要があります。これにより、ログを受信する場所が設定されます。
AWS Management ConsoleでCloudWatch Logsにアクセスし、グループを作成します。
コンテナログの場合は、例えばapache-logs
という名前を付けることができます。
-
ECSタスクを実行する
ECSタスクを実行すると、firelens
コンテナがApacheログを受信し、Fluent BitがログをパースしてCloudWatch Logsに転送します。
CloudWatch Logsにログが正しく転送されるかどうかを確認するには、
AWS Management ConsoleでCloudWatch Logsにアクセスし、ロググループ内のログを確認します。
以上が、ECS Apacheコンテナの複数ログをFirelensによってCloudWatch Logsに転送する手順です。
複数のログを複数のロググループに転送するには、以下のようなFluent Bit設定ファイルを作成することができます。
この例では、2つの異なるApacheログファイルを転送する必要があると仮定します。
ログファイルは、それぞれaccess.log
とerror.log
という名前であり、/var/log/apache2/
ディレクトリに保存されています。
[INPUT] Name tail Path /var/log/apache2/access.log Tag apache.access Parser apache [INPUT] Name tail Path /var/log/apache2/error.log Tag apache.error Parser apache [FILTER] Name parser Match apache.* Parser apache [OUTPUT] Name cloudwatch_logs Match apache.access region us-west-2 log_group_name apache-access-logs log_stream_name apache-access-container auto_create_group true [OUTPUT] Name cloudwatch_logs Match apache.error region us-west-2 log_group_name apache-error-logs log_stream_name apache-error-container auto_create_group true
上記の設定ファイルでは、tail
入力プラグインを使用して、/var/log/apache2/access.log
と/var/log/apache2/error.log
の2つのログファイルを監視します。
それぞれのログファイルに対して、独自のタグが付けられています。このタグは、ロググループとログストリームの名前を一意に識別するのに使用されます。
parser
フィルタプラグインは、両方のログファイルでApacheログをパースします。
cloudwatch_logs
出力プラグインは、それぞれのログファイルのタグに対して、独自のCloudWatch Logsグループとストリームを設定します。
auto_create_group
オプションがtrue
に設定されているため、ロググループが存在しない場合は自動的に作成されます。
この設定ファイルを使用してFluent Bitを実行すると、2つのログファイルがそれぞれ異なるCloudWatch Logsグループに転送されます。
ECSタスク定義でFluent Bit設定ファイルはどのように記述すればよいですか?
ECSタスク定義でFluent Bit設定ファイルを指定するには、以下の手順を実行する必要があります。
- Fluent Bit設定ファイルを作成する
前述の手順に従って、Fluent Bit設定ファイルを作成してください。
- Fluent Bitコンテナイメージを指定する
ECSタスク定義で、Fluent Bitを実行するコンテナを定義する必要があります。以下は、例です。
"containerDefinitions": [ { "name": "my-app-container", "image": "my-app-image:latest", "logConfiguration": { "logDriver": "awsfirelens", "options": { "Name": "fluentbit", "config-file-type": "s3", "config-file-value": "s3://my-bucket/fluent-bit.conf" } } }, { "name": "fluentbit", "image": "amazon/aws-for-fluent-bit:latest", "essential": true, "firelensConfiguration": { "type": "fluentbit", "options": { "config-file-type": "s3", "config-file-value": "s3://my-bucket/fluent-bit.conf" } } } ]
上記の例では、ECSタスク定義で2つのコンテナを定義しています。1つはアプリケーションコンテナであり、もう1つはFluent Bitコンテナです。
my-app-container
コンテナは、アプリケーションを実行するためのものです。logConfiguration
プロパティを使用して、awsfirelens
ログドライバーを設定しています。options
プロパティは、Fluent Bit設定ファイルを指定するために使用されます。ここでは、S3バケットからFluent Bit設定ファイルを取得するように指定されています。
fluentbit
コンテナは、Fluent Bitを実行するためのものです。firelensConfiguration
プロパティを使用して、FireLensを有効にし、Fluent Bitの設定ファイルを指定します。ここでも、S3バケットから設定ファイルを取得するように指定されています。
- IAMロールを作成する
Fluent Bitコンテナは、S3バケットからFluent Bit設定ファイルをダウンロードするために、S3へのアクセス権限を持つIAMロールが必要です。以下は、例です。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject" ], "Resource": "arn:aws:s3:::my-bucket/fluent-bit.conf" } ] }
上記の例では、s3:GetObject
アクションを許可するIAMポリシーが定義されています。Resource
プロパティは、S3バケット内のFluent Bit設定ファイルに対するアクセス許可を指定します。
- ECSタスク定義を作成する
最後に、ECSタスク定義を作成し、Fluent Bit設定ファイルを指定します。以下は、例です。
{ "family": "my-task", "executionRoleArn": "arn:aws:iam::123456789012:role/ecsTaskExecutionRole", "taskRoleArn": "arn:aws:iam::123456789012:role/my-task-role", "networkMode": "awsvpc", "containerDefinitions": [ { "name": "my-app-container", "image": "my-app-image:latest", "logConfiguration": { "logDriver": "awsfirelens", "options": { "Name": "fluentbit", "config-file-type": "s3", "config-file-value": "s3://my-bucket/fluent-bit.conf" } } }, { "name": "fluentbit", "image": "amazon/aws-for-fluent-bit:latest", "essential": true, "firelensConfiguration": { "type": "fluentbit", "options": { "config-file-type": "s3", "config-file-value": "s3://my-bucket/fluent-bit.conf" } } } ], "requiresCompatibilities": [ "FARGATE" ], "cpu": "256", "memory": "512", "executionStopTimeout": 300, "tags": [ { "key": "my-tag", "value": "my-value" } ] }
上記の例では、ECSタスク定義でFluent Bit設定ファイルを指定しています。containerDefinitions
プロパティのlogConfiguration
とfirelensConfiguration
プロパティで、Fluent Bit設定ファイルをS3から取得するように設定されています。
設定ファイルを取得するために必要なIAMロールは、executionRoleArn
とtaskRoleArn
プロパティで指定されています。
以上が、ECSタスク定義でFluent Bit設定ファイルを指定する手順です。