我有一台运行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吗?