Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将node.js日志从Elastic Beanstalk Docker应用程序发送到Cloudwatch日志?_Node.js_Amazon Web Services_Docker_Amazon Elastic Beanstalk_Amazon Cloudwatch - Fatal编程技术网

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

如何将node.js日志从Elastic Beanstalk Docker应用程序发送到Cloudwatch日志?,node.js,amazon-web-services,docker,amazon-elastic-beanstalk,amazon-cloudwatch,Node.js,Amazon Web Services,Docker,Amazon Elastic Beanstalk,Amazon Cloudwatch,Amazon提供了这些现成文件,用于将Tomcat/Apache/nginx日志发送到Cloudwatch日志,这非常有效 然而,出于我的目的,他们只发送nginx日志,这是不够的,不幸的是,他们也没有提供关于文件格式的文档。我试图实现的是将node.js日志从Docker应用程序发送到Cloudwatch(因为自动缩放使实例来去自如) 因此,在Cloudwatch中出现类似/var/log/eb docker/containers/eb current app/add839a3b599 st

Amazon提供了这些现成文件,用于将Tomcat/Apache/nginx日志发送到Cloudwatch日志,这非常有效

然而,出于我的目的,他们只发送nginx日志,这是不够的,不幸的是,他们也没有提供关于文件格式的文档。我试图实现的是将node.js日志从Docker应用程序发送到Cloudwatch(因为自动缩放使实例来去自如)

因此,在Cloudwatch中出现类似
/var/log/eb docker/containers/eb current app/add839a3b599 stdouterr.log
的文件

因此,到目前为止,我尝试从上面的链接调整webrequests配置:

##############################################################################
## 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出现日志吗。时间戳格式错误?特别重要的是,默认情况下,异常实际上没有时间戳,因此实际错误将消失

我的应用程序日志行当前如下所示:
2016-07-05 09:11:31::1-GET/200(5.107毫秒)

您可以使用此链接在beanstalk实例上设置cloudwatch代理(如果您还没有)-


下一步-尝试发送/var/lib/docker/containers/.json中的文件以收集docker日志。它是写入容器stdout和stderr的地方。

什么意思?从
/var/lib/docker/containers/[container id]/[container id]-json.log
获取日志需要我知道容器的id,不是吗?
日志文件:“/var/lib/docker/containers/***.log”
似乎可以工作,但是Cloudwatch中的所有日志条目都显示为json对象(
{“log”):“2016-07-05 12:17:12 10.0.1.180-GET/200(0.334 ms)\n”,“stream”:“stdout”,“time”:“2016-07-05T12:17:12.134355109Z”}
),这使得日志很难读取。:/有没有办法将它们作为“正常”日志条目?这是一个棘手的问题。解决这一问题的最佳方法是更改容器日志驱动程序(docker甚至有一个cloudwatch日志驱动程序)。我试着用beanstalk来做,但还没有成功。我猜有办法,但我还没有找到。你知道是否还有其他非旋转日志不是JSON吗?我已经用
/var/log/eb docker/containers/eb current app/
处理
日志文件:/var/log/eb docker/containers/eb current app/*.log“
但我猜,由于它们是旋转的,日志驱动程序不会捕获所有记录,而是在一次部署后似乎停止工作。不应该是这样。由于文件旋转,但保持相同的名称,因此日志驱动程序应该在旋转后继续捕获所有记录(减去可能在日志驱动程序捕获它之前旋转的某一小量,但这应该是无关紧要的)这是一个很好的问题,亚马逊没有让这个问题变得简单,这真的很荒谬,或者为什么他们在他们的示例中选择默认使用nginx或代理日志。感谢验证我不是疯狂地想要和期待同样的;-)