Tagbangers Blog

Elastic Beanstalk で catalina.out を CloudWatch Logs に出力する

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