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 [プロファイル名]
