如何将node.js日志从Elastic Beanstalk Docker应用程序发送到Cloudwatch Logs?

Amazon提供这些用于将Tomcat / Apache / nginx日志发送到Cloudwatch日志的现成文件,这些日志很好用。

http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/AWSHowTo.cloudwatchlogs.html

但是,为了我的目的,他们只发送nginx日志,这是不够的,不幸的是,他们也提供了零文件的文件格式。 我想要实现的是将Node.js日志从我的Docker应用程序发送到Cloudwatch(因为自动调节使得实例来来去去)。

所以像/var/log/eb-docker/containers/eb-current-app/add839a3b599-stdouterr.log中出现像/var/log/eb-docker/containers/eb-current-app/add839a3b599-stdouterr.log这样的文件。

所以,我到目前为止所尝试的是从上面的链接调整webrequestsconfiguration:

 ############################################################################## ## Sends docker logs to CloudWatch Logs ############################################################################## Mappings: CWLogs: ApplicationLogGroup: LogFile: "/var/log/eb-docker/containers/eb-current-app/*-stdouterr.log" TimestampFormat: "%Y-%m-%d %H:%M:%S" 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" : "AWSEBCloudWatchLogs8832c8d3f1a54c238a40e36f31ef55a0ApplicationLogGroup"} Resources : AWSEBCloudWatchLogs8832c8d3f1a54c238a40e36f31ef55a0ApplicationLogGroup: ## 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" }, "stdouterr"]]} RetentionInDays: 14 ## Register the files/log groups for monitoring 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/stdouterr.conf": content : | [stdouterr] file = `{"Fn::FindInMap":["CWLogs", "ApplicationLogGroup", "LogFile"]}` log_group_name = `{ "Ref" : "AWSEBCloudWatchLogs8832c8d3f1a54c238a40e36f31ef55a0ApplicationLogGroup" }` log_stream_name = {instance_id} datetime_format = `{"Fn::FindInMap":["CWLogs", "ApplicationLogGroup", "TimestampFormat"]}` mode : "000400" owner : root group : root 

不幸的是,这似乎并不奏效。 :/

另外,没有任何人有任何想法,如果日志出现在所有fe。 时间戳格式是错误的? 特别重要,因为默认情况下,exception实际上没有时间戳,所以实际的错误将会消失。

我的应用程序日志行目前看起来像这样: 2016-07-05 09:11:31 ::1 - GET / 200 (5.107 ms)

你可以使用这个链接在你的beanstalk实例上设置cloudwatch代理(如果你还没有的话) – http://serebrov.github.io/html/2015-05-20-cloudwatch-setup.html

接下来 – 尝试发送/ var / lib / docker / containers / / .json中的文件来收集您的docker日志。 这是容器stdout和stderr被写入的地方。