📝

Elastic Beanstalk 環境の EC2 インスタンスのカスタムログを別リージョンに転送してみた

に公開

Using Elastic Beanstalk with Amazon CloudWatch Logs - AWS Elastic Beanstalk

カスタムログをストリーミングするには、設定ファイルを使用して直接 CloudWatch エージェントをインストールし、ファイルがプッシュされるよう設定します。

CloudWatch エージェントでリージョンを指定することで別リージョンへログを転送することが可能です。

サンプルアプリ

Tutorials and samples - AWS Elastic Beanstalk
上記ドキュメントの Node.js のサンプルをもとに config ファイルのみ編集しました。
デフォルトでは .ebextensions に logging.config というファイルが存在していますが、このファイルのみ編集します。

nodejs/
├── .ebextensions/
│   └── cloudwatch-logs.config
├── app.js
├── cron.yaml
├── index.html
└── package.json

logging.config のファイル名は任意の名称で問題ありません。
今回は cloudwatch-logs.config にリネームしました。
cloudwatch-logs.config の内容は以下の通りです。

files:
  "/opt/aws/amazon-cloudwatch-agent/etc/my_log_config.json":
    mode: "0644"
    owner: root
    group: root
    content: |
      {
        "agent": {
          "region": "us-east-1"
        },
        "logs": {
          "logs_collected": {
            "files": {
              "collect_list": [
                {
                  "file_path": "/var/log/messages",
                  "log_group_name": "`{"Fn::Join":["/", ["/aws/elasticbeanstalk", { "Ref":"AWSEBEnvironmentName" }, "var/log/messages"]]}`",
                  "log_stream_name": "{instance_id}",
                  "retention_in_days": 7
                }
              ]
            }
          }
        }
      }
container_commands:
  01_append_cloudwatch_agent_config:
    command: /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a append-config -s -c file:/opt/aws/amazon-cloudwatch-agent/etc/my_log_config.json
  02_remove_backup_file:
    command: rm -f /opt/aws/amazon-cloudwatch-agent/etc/my_log_config.json.bak
    ignoreErrors: true

上記のベースは以下の GitHub のサンプルです。
elastic-beanstalk-samples/configuration-files/aws-provided/instance-configuration/logs-streamtocloudwatch-linux.config at main · awsdocs/elastic-beanstalk-samples

CloudWatch エージェントではログの出力先リージョンの指定ができるため、agent セクションでリージョンを指定しています。
今回は us-east-1 リージョンを指定しています。

CloudWatch エージェント設定ファイルを手動で作成または編集する - Amazon CloudWatch

region – Amazon EC2 インスタンスを監視しているときに CloudWatch エンドポイントに使用するリージョンを指定します。収集されたメトリクスは、このリージョン (us-west-1 など) に送信されます。このフィールドを省略すると、エージェントは Amazon EC2 インスタンスが配置されているリージョンにメトリクスを送信します。

デプロイ

ルートディレクトリを除く上位ファイル群を zip 化して Elastic Beanstalk 環境を作成します。
今回は東京リージョンにデプロイしました。
プラットフォームは Node.js 22 running on 64bit Amazon Linux 2023/6.5.2 です。

デプロイ完了後、us-east-1 リージョンにカスタムログが出力されていることを確認できました。

特定リージョンにログを集約したい場合にリージョンを指定するなどのユースケースが考えられます。

まとめ

今回は Elastic Beanstalk 環境の EC2 インスタンスのカスタムログを別リージョンに転送してみました。
どなたかの参考になれば幸いです。

参考資料

Discussion