启用 Elastic Beanstalk 的 tomcat 日志文件的日志记录到 Cloudwatch

Posted

技术标签:

【中文标题】启用 Elastic Beanstalk 的 tomcat 日志文件的日志记录到 Cloudwatch【英文标题】:Enable logging to Cloudwatch of the tomcat log files of Elastic Bean Stalk 【发布时间】:2019-01-23 09:05:13 【问题描述】:

我对 AWS 环境非常陌生,并尝试将 AWS ElasticBeanstalk 中的 tomcat 实例生成的日志配置到 Cloudwatch。 我尝试从 ElasticBeanstalk 控制台配置它,我只能看到下面的文件列表,我没有看到像“catalina.2018-08-16.log”、“localhost_access_log.txt”、“catalina.log”这样的日志。 out”等,我还需要做什么才能看到它们?

List of log files available on Cloudwatch

【问题讨论】:

【参考方案1】:

我能够通过密切遵循页面 https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/AWSHowTo.cloudwatchlogs.html 上的说明来做到这一点,“使用配置文件的实例日志流式传输”部分

我们需要放置一个配置文件来告诉 cloudwatch 代理选择我想要的所有文件。 并通过将适当的策略附加到 EC2 角色来配置适当的权限,以便它可以在 cloudwatch 上运行。

【讨论】:

【参考方案2】:

Elastic Beanstalk 日志有一个想法,需要一些解释才能让您了解正在发生的事情。 Elastic Beanstalk 是 AWS(平台即服务)提供的 PaaS。它们为您提供了一个完整的平台,仅限于几个选项(Node.Js、Python、php、Tomcat 等)。从鸟瞰的角度来看,所有平台由以下人员组成:

    静态内容的端点(apache、nginx); 您可以在其中部署应用的“应用服务器”; 负载平衡器、分析 (X-Ray) 和其他选项,具体取决于您的配置; 如果您在创建环境时配置数据库实例;

这是所有平台的通用东西,不管是 Node.JS、tomcat 还是其他。此组件的日志会流式传输到 CloudWatch。

特定于您选择的平台的日志不会流式传输到 CloudWatch。它们保留在由 Elastic Beanstalk 管理的实例中。如果您需要查看此日志,您可以使用 Elastic Beanstalk 控制台访问它。在控制台中,转到左侧窗格,选择“日志”选项。在那里您会找到下载日志的说明(整个或仅最后 100 行)。

您还可以配置 Elastic Beanstalk 来部署此日志,但不能部署到 CloudWatch。它们被传送到您在配置中选择的 S3 存储桶。

【讨论】:

感谢您的回答 Gustavo,它确实解释了大局。【参考方案3】:

我在一个新的Medium blog 中详细介绍了这一切的工作原理以及一个示例 .ebextensions 文件及其放置位置。

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

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

【讨论】:

以上是关于启用 Elastic Beanstalk 的 tomcat 日志文件的日志记录到 Cloudwatch的主要内容,如果未能解决你的问题,请参考以下文章

启用 ZipArchive 的 Elastic Beanstalk 编译 php

在AWS Elastic Beanstalk上启用LDAP

在 AWS Elastic Beanstalk 应用程序上启用 HTTPS

启用 Elastic Beanstalk 的 tomcat 日志文件的日志记录到 Cloudwatch

如何在亚马逊 Elastic Beanstalk 中安装和启用服务?

启用 ssl 和 Elastic Beanstalk 的 Spring Boot - 找不到文件