启用 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 应用程序上启用 HTTPS
启用 Elastic Beanstalk 的 tomcat 日志文件的日志记录到 Cloudwatch