CloudWatch代理无法跟上日志记录

时间:2020-05-28 13:47:56

标签: java amazon-web-services logback amazon-cloudwatch

我有一台运行Java应用程序且具有以下logback配置的EC2机器:

<appender name="ROLLING" class="ch.qos.logback.core.rolling.RollingFileAppender">
  <file>/var/log/my-application/application.log</file>
  <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
    <fileNamePattern>/var/log/my-application/application-%i.log.gz</fileNamePattern>
    <minIndex>1</minIndex>
    <maxIndex>10</maxIndex>
  </rollingPolicy>
  <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
    <maxFileSize>800MB</maxFileSize>
  </triggeringPolicy>
  <encoder>
    <pattern>%level --- [%thread] %logger{36} : %msg%n
    </pattern>
  </encoder>
</appender>

如果您不熟悉logback,此配置可以归结为我的应用程序将日志记录语句附加到/var/log/my-application/application.log文件中,直到达到800MB。达到该大小后,将重命名当前日志文件并将其压缩为application-1.log.gz,并创建一个新的application.log文件以开始在此处附加新的日志记录。

这是我的统一CloudWatch代理配置:

{
  "agent": {
    "run_as_user": "ec2-user",
    "region": "${AWS::Region}",
    "debug": true
  },
  "logs": {
    "logs_collected": {
      "files": {
        "collect_list": [
          {
            "file_path": "/var/log/my-application/application*",
            "log_group_name": "my-application-log-group",
            "log_stream_name": "my-application-log-{instance_id}"
          }
        ]
      }
    }
  }
}

此设置有效,但是一旦我的应用程序生成大量日志记录(5分钟内有10,000,000条日志记录语句),则其中只有约6,000,000条记录最终落在CloudWatch中。每条记录行的大小估计为228个字节。

有人知道我如何确保CloudWatch代理能够将所有日志发送到CloudWatch吗?

0 个答案:

没有答案