具有Amazon CloudWatch的Elastic Beanstalk Docker

ust*_*etz 14 amazon-web-services amazon-cloudwatch docker amazon-elastic-beanstalk

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

我的目标是将日志记录到Cloudwatch.特别是我想将stdouterr.log文件发送到Cloudwatch.该文件可以在下面找到/var/log/eb-docker/containers/eb-current-app/*

我在这里遵循官方AWS文档.根据示例配置文件,我设法将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
Run Code Online (Sandbox Code Playgroud)

已创建cloudwatch日志组,但没有日志到达.我错过了哪些步骤或配置文件中出了什么问题?

Bac*_*con 5

我刚遇到同样的问题 - 我设法通过将LogFile配置更改为来获取日志文件

Mappings:
  CWLogs:
    WebRequestLogGroup:
      LogFile: "/var/log/eb-docker/containers/eb-current-app/*.log"
      TimestampFormat: "%d/%b/%Y:%H:%M:%S %z"
Run Code Online (Sandbox Code Playgroud)

请注意,这仅适用于存在单个日志文件的情况,如果重新部署容器或应用配置更改导致此目录中存在多个日志,则只有具有最新修改时间的日志文件中的事件才会被处理awslogs代理

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

例如,使用第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
Run Code Online (Sandbox Code Playgroud)

  • 我发现情况并非如此.我从初始部署中获取日志,但不从后续更新中获取.有什么建议? (2认同)