24
Apr 2017
by
小川 岳史
Elastic Beanstalk は2016年12月にアップデートされたプラットフォームから、CloudWatch Logs との連携が強化され、コンソールからオプションを有効にするだけで、簡単にログが Stream に出力できるようになりました。
ただ、例えば Tomcat 環境であれば現時点では以下のログが対象になり、catalina.out が含まれません。
/var/log/eb-activity.log /var/log/httpd/error_log /var/log/httpd/access_log /var/log/nginx/error_log /var/log/nginx/access_log
ということで、catalina.out を CloudWatch Logs に出力するために、以下のファイルを .ebextensions に含める必要があります。
cwl-catalina-out.config
Outputs: CatalinaCWLogGroup: Description: "Tomcat catalina.out" Value: { "Ref" : "AWSEBCloudWatchLogs8832c8d3f1a54c238a40e36f31ef55a0CatalinaLogGroup"} Resources: AWSEBCloudWatchLogs8832c8d3f1a54c238a40e36f31ef55a0CatalinaLogGroup: Type: "AWS::Logs::LogGroup" DependsOn: AWSEBBeanstalkMetadata DeletionPolicy: Retain Properties: LogGroupName: "Fn::GetOptionSetting": Namespace: "aws:elasticbeanstalk:application:environment" OptionName: CatalinaCWLogGroup DefaultValue: {"Fn::Sub": ["/aws/elasticbeanstalk/${env}/var/log/tomcat8/catalina.out", { "env": { "Ref" : "AWSEBEnvironmentName" }}]} RetentionInDays: "Fn::GetOptionSetting": Namespace: "aws:elasticbeanstalk:cloudwatch:logs" OptionName: RetentionInDays DefaultValue: 7 AWSEBAutoScalingGroup: Metadata: "AWS::CloudFormation::Init": configSets: "_OnInstanceBoot": "CmpFn::Insert": values: - CWLogsAgentConfigSetup CWLogsAgentConfigSetup: files: "/etc/awslogs/config/tomcat.conf": content: | [/var/log/tomcat8/catalina.out] log_group_name=`{ "Ref" : "AWSEBCloudWatchLogs8832c8d3f1a54c238a40e36f31ef55a0CatalinaLogGroup" }` log_stream_name={instance_id} file=/var/log/tomcat8/catalina.out mode: "644" owner: root group: root "/opt/elasticbeanstalk/hooks/appdeploy/post/99_restart_logs.sh": content: | service awslogs restart mode: "755" owner: root group: root
この設定を含めることで、以下のようなロググループが CloudWatch Logs に作成されます。
/aws/elasticbeanstalk/<Environment Name>/var/log/tomcat8/catalina.out
これでローカルマシンから awslogs コマンドを使って catalina.out が tail できますね。
awslogs get [グループ名] --watch --profile [プロファイル名]