Apacheコンテナで複数のログをCloudWatch Logsに転送するには、以下の手順を実行する必要があります。

ECS- Apacheコンテナの複数ログをCloudWatchロググループへ転送

  1. 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に転送します。

  1. 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に送信します。

 

  1. 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_KeyTime_Formatプロパティは、ログのタイムスタンプを解析します。

 

  1. CloudWatch Logsグループを作成する

CloudWatch Logsグループを作成する必要があります。これにより、ログを受信する場所が設定されます。

AWS Management ConsoleでCloudWatch Logsにアクセスし、グループを作成します。

コンテナログの場合は、例えばapache-logsという名前を付けることができます。

  1. 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.logerror.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設定ファイルを指定するには、以下の手順を実行する必要があります。

  1. Fluent Bit設定ファイルを作成する

前述の手順に従って、Fluent Bit設定ファイルを作成してください。

  1. 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バケットから設定ファイルを取得するように指定されています。

  1. 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設定ファイルに対するアクセス許可を指定します。

  1. 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プロパティのlogConfigurationfirelensConfigurationプロパティで、Fluent Bit設定ファイルをS3から取得するように設定されています。

設定ファイルを取得するために必要なIAMロールは、executionRoleArntaskRoleArnプロパティで指定されています。

以上が、ECSタスク定義でFluent Bit設定ファイルを指定する手順です。

記事タイトル検索