【问题标题】:Logs not working on Elastic Beanstalk Tomcat environment日志在 Elastic Beanstalk Tomcat 环境中不起作用
【发布时间】:2021-02-05 10:32:50
【问题描述】:

我们一直在使用 Elastic Beanstalk 在我们公司的 Tomcat 上运行我们的 Java (8) 应用程序,没有任何问题。现在我们决定继续使用 Java 11。我们使用 CloudFormation 设置环境,就像我们之前为 Java 8 应用程序所做的那样,但现在我们正在使用这个解决方案堆栈:'64bit Amazon Linux 2 v4.1.1 running Tomcat 8.5 Corretto 11' (也尝试过 v4.1.2)。一切正常,但看起来请求日志功能在弹性 beantalk 中不再起作用(最后 100 行和完整日志)。我还向应用程序服务器添加了一个密钥对,以检查 ec2 服务器上 /var/log/tomcat/ 上的日志,但我们找不到 catalina.out 文件(只有 catalina 文件的日期如下:catalina.2020-10 -14.log)。这些文件仅包含我们使用的库的日志,但不包含我们发送到标准系统输出的日志。我们有时与之合作的另一家公司在此解决方案堆栈上遇到了同样的问题。

有没有人在这个解决方案堆栈上遇到过同样的问题并找到了解决方法?

这是我们的 CloudFormation 配置 (YAML):

Application:
Type: AWS::ElasticBeanstalk::Application
Properties:
Description: Application backend
ApplicationVersion:
Type: AWS::ElasticBeanstalk::ApplicationVersion
Properties:
ApplicationName:
Ref: Application
Description: !Ref AppVersion
SourceBundle:
S3Bucket: !Ref BeanstalkSourceS3
S3Key: !Ref BuildFileName
AppEC2ServiceRole:
Type: AWS::IAM::Role
Properties:
AssumeRolePolicyDocument:
Version: '2012-10-17'
Statement:
- Effect: Allow
Principal:
Service:
- elasticbeanstalk.amazonaws.com
Action:
- sts:AssumeRole
ManagedPolicyArns:
- "arn:aws:iam::aws:policy/service-role/AWSElasticBeanstalkEnhancedHealth"
- "arn:aws:iam::aws:policy/service-role/AWSElasticBeanstalkService"
AppEnvironment:
Type: AWS::ElasticBeanstalk::Environment
Properties:
ApplicationName:
Ref: Application
OptionSettings:
- Namespace: aws:autoscaling:launchconfiguration
OptionName: InstanceType
Value: !Ref EC2InstanceSize
- Namespace: aws:elasticbeanstalk:environment
OptionName: EnvironmentType
Value: SingleInstance
- Namespace: aws:autoscaling:launchconfiguration
OptionName: IamInstanceProfile
Value: !Ref AppInstanceProfile
- Namespace: aws:autoscaling:launchconfiguration
OptionName: EC2KeyName
Value: CompanyTestKey
- Namespace: aws:ec2:vpc
OptionName: VPCId
Value: !Ref Vpc
- Namespace: aws:ec2:vpc
OptionName: Subnets
Value: !Join [",",https://forums.aws.amazon.com/
- Namespace: aws:ec2:vpc
OptionName: AssociatePublicIpAddress
Value: true
- Namespace: aws:elasticbeanstalk:environment
OptionName: ServiceRole
Value: !Ref AppEC2ServiceRole
- Namespace: aws:elasticbeanstalk:cloudwatch:logs
OptionName: StreamLogs
Value: true
- Namespace: aws:elasticbeanstalk:cloudwatch:logs
OptionName: RetentionInDays
Value: 14
SolutionStackName: 64bit Amazon Linux 2 v4.1.1 running Tomcat 8.5 Corretto 11
VersionLabel:
Ref: ApplicationVersion
Tags:
- Key: group
Value: !Ref ResourceGroupTagValue

【问题讨论】:

    标签: java amazon-web-services tomcat amazon-elastic-beanstalk


    【解决方案1】:

    我在一个新的Medium blog 中详细介绍了这一切对 Tomcat 的工作原理,我遇到了类似的问题,尤其是由于 S3 日志轮换导致的零长度文件。

    以下是您可能会使用的摘录,该文章解释了如何确定要流式传输的正确文件夹/文件。

    在这里,我正在流式传输三个不同的文件(它会自动处理您提到的日期),请查看您需要流式传输的每个文件的 logs.conf 'content' 部分下的内容。

    不要忘记还设置您的策略和角色,以使 Elastic Beanstalk EC2 实例能够与 CloudWatch 进行通信。

    packages:
      yum:
        awslogs: []
    
    option_settings:
      - namespace: aws:elasticbeanstalk:cloudwatch:logs
        option_name: StreamLogs
        value: true
      - namespace: aws:elasticbeanstalk:cloudwatch:logs
        option_name: DeleteOnTerminate
        value: false
      - namespace: aws:elasticbeanstalk:cloudwatch:logs
        option_name: RetentionInDays
        value: 90
    
    files:
      "/etc/awslogs/awscli.conf" :
        mode: "000600"
        owner: root
        group: root
        content: |
          [plugins]
          cwlogs = cwlogs
          [default]
          region = `{"Ref":"AWS::Region"}`
    
      "/etc/awslogs/config/logs.conf" :
        mode: "000600"
        owner: root
        group: root
        content: |
          [/var/log/tomcat/localhost.log]
          log_group_name = `{"Fn::Join":["/", ["/aws/elasticbeanstalk", { "Ref":"AWSEBEnvironmentName" }, "var/log/tomcat/localhost.log"]]}`
          log_stream_name = {instance_id}
          file = /var/log/tomcat/localhost.*
    
          [/var/log/tomcat/catalina.log]
          log_group_name = `{"Fn::Join":["/", ["/aws/elasticbeanstalk", { "Ref":"AWSEBEnvironmentName" }, "var/log/tomcat/catalina.log"]]}`
          log_stream_name = {instance_id}
          file = /var/log/tomcat/catalina.*
    
          [/var/log/tomcat/localhost_access_log.txt]
          log_group_name = `{"Fn::Join":["/", ["/aws/elasticbeanstalk", { "Ref":"AWSEBEnvironmentName" }, "var/log/tomcat/access_log"]]}`
          log_stream_name = {instance_id}
          file = /var/log/tomcat/access_log.*
    
    commands:
      "01":
        command: systemctl enable awslogsd.service
      "02":
        command: systemctl restart awslogsd
    

    【讨论】:

      猜你喜欢
      • 2021-04-08
      • 2018-05-02
      • 2018-06-11
      • 2023-04-06
      • 2019-01-23
      • 2020-11-03
      • 2013-03-17
      • 2015-09-18
      • 2020-08-05
      相关资源
      最近更新 更多