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