Amazon CloudWatch的Elastic Beanstalk Docker

我有一个用Docker容器部署的Elastic Beanstalk应用程序。 应用程序本身是一个Java应用程序。

我的目标是将日志获取到Cloudwatch。 特别是我想获得stdouterr.log文件到Cloudwatch。 该文件可以在/var/log/eb-docker/containers/eb-current-app/*

我在这里跟随了官方的AWS文档。 基于示例configuration文件,我设法将nginx Webrequest转换为Cloudwatch。

对于EB docker stdouterr日志,我将cwl-log-setup.config文件改编为以下内容:

 Mappings: CWLogs: ApplicationLogGroup: LogFile: "/var/log/eb-docker/containers/eb-current-app/*" TimestampFormat: "%d/%b/%Y:%H:%M:%S %z" Outputs: ApplicationLogGroup: Description: "The name of the Cloudwatch Logs Log Group created for this environments web server access logs. You can specify this by setting the value for the environment variable: WebRequestCWLogGroup. Please note: if you update this value, then you will need to go and clear out the old cloudwatch logs group and delete it through Cloudwatch Logs." Value: { "Ref" : "AWSEBCloudWatchLogs8832c8d3f1a54c238a40e36f31ef55a0WebRequestLogGroup"} Resources : AWSEBCloudWatchLogs8832c8d3f1a54c238a40e36f31ef55a0WebRequestLogGroup: ## Must have prefix: AWSEBCloudWatchLogs8832c8d3f1a54c238a40e36f31ef55a0 Type: "AWS::Logs::LogGroup" DependsOn: AWSEBBeanstalkMetadata DeletionPolicy: Retain ## this is required Properties: LogGroupName: "Fn::GetOptionSetting": Namespace: "aws:elasticbeanstalk:application:environment" OptionName: ApplicationLogGroup DefaultValue: {"Fn::Join":["-", [{ "Ref":"AWSEBEnvironmentName" }, "webrequests"]]} RetentionInDays: 14 

cloudwatch日志组已创build,但没有日志到达。 我在configuration文件中丢失了什么步骤?

我刚刚遇到同样的问题 – 我设法通过更改LogFileconfiguration来获取日志文件

 Mappings: CWLogs: WebRequestLogGroup: LogFile: "/var/log/eb-docker/containers/eb-current-app/*.log" TimestampFormat: "%d/%b/%Y:%H:%M:%S %z" 

请注意,只有在有单个日志文件的情况下,如果您重新部署容器或应用导致此目录中有多个日志的configuration更改,那么只有来自具有最新修改时间的日志文件的事件将被处理awslogs代理

此外,默认情况下,代理将比较日志文件的第一行,以确定它是否是不同的文件,如果第一行是相同的,它将忽略它。 您可以通过添加file_fingerprint_linesconfiguration来指定代理用于指定文件的行,

例如使用第1-20行来标识文件:

 AWSEBAutoScalingGroup: Metadata: "AWS::CloudFormation::Init": CWLogsAgentConfigSetup: files: ## any .conf file put into /tmp/cwlogs/conf.d will be added to the cwlogs config (see cwl-agent.config) "/tmp/cwlogs/conf.d/apache-access.conf": content : | [ apache-access_log] file = `{"Fn::FindInMap":["CWLogs", "WebRequestLogGroup", "LogFile"]}` log_group_name = `{ "Ref" : "AWSEBCloudWatchLogs8832c8d3f1a54c238a40e36f31ef55a0WebRequestLogGroup" }` file_fingerprint_lines = 1-20 log_stream_name = {instance_id} datetime_format = `{"Fn::FindInMap":["CWLogs", "WebRequestLogGroup", "TimestampFormat"]}` mode : "000400" owner : root group : root