Skip to content

Commit 050e301

Browse files
committed
Change ECS Agent log rollover defaults to size-based rotation
- Change DEFAULT_ROLLOVER_TYPE from 'date' to 'size' - Change DEFAULT_MAX_FILE_SIZE from 10MB to 1MB - Update README.md documentation for ECS_LOG_ROLLOVER_TYPE and ECS_LOG_MAX_FILE_SIZE_MB - Fix unit tests to expect size-based rollover instead of date-based - Add test cases for explicit hourly rollover to maintain backward compatibility This provides more predictable log file sizes while allowing users to override the behavior through environment variables if needed.
1 parent 17af3bb commit 050e301

File tree

5 files changed

+98
-34
lines changed

5 files changed

+98
-34
lines changed

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -235,9 +235,9 @@ additional details about how to configure the agent.
235235
| `ECS_NVIDIA_RUNTIME` | nvidia | The Nvidia Runtime to be used to pass Nvidia GPU devices to containers. | nvidia | Not Applicable |
236236
| `ECS_ALTERNATE_CREDENTIAL_PROFILE` | default | An alternate credential role/profile name. | default | default |
237237
| `ECS_ENABLE_SPOT_INSTANCE_DRAINING` | `true` | Whether to enable Spot Instance draining for the container instance. If true, if the container instance receives a [spot interruption notice](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-interruptions.html), agent will set the instance's status to [DRAINING](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/container-instance-draining.html), which gracefully shuts down and replaces all tasks running on the instance that are part of a service. It is recommended that this be set to `true` when using spot instances. | `false` | `false` |
238-
| `ECS_LOG_ROLLOVER_TYPE` | `size` | `hourly` | Determines whether the container agent logfile will be rotated based on size or hourly. By default, the agent logfile is rotated each hour. | `hourly` | `hourly` |
238+
| `ECS_LOG_ROLLOVER_TYPE` | `size` | `hourly` | Determines whether the container agent logfile will be rotated based on size or hourly. By default, the agent logfile is rotated based on size. | `size` | `size` |
239239
| `ECS_LOG_OUTPUT_FORMAT` | `logfmt` | `json` | Determines the log output format. When the json format is used, each line in the log would be a structured JSON map. | `logfmt` | `logfmt` |
240-
| `ECS_LOG_MAX_FILE_SIZE_MB` | `10` | When the ECS_LOG_ROLLOVER_TYPE variable is set to size, this variable determines the maximum size (in MB) the log file before it is rotated. If the rollover type is set to hourly then this variable is ignored. | `10` | `10` |
240+
| `ECS_LOG_MAX_FILE_SIZE_MB` | `1` | When the ECS_LOG_ROLLOVER_TYPE variable is set to size, this variable determines the maximum size (in MB) the log file before it is rotated. If the rollover type is set to hourly then this variable is ignored. | `1` | `1` |
241241
| `ECS_LOG_MAX_ROLL_COUNT` | `24` | Determines the number of rotated log files to keep. Older log files are deleted once this limit is reached. | `24` | `24` |
242242
| `ECS_LOG_DRIVER` | `awslogs` | `fluentd` | `gelf` | `json-file` | `journald` | `logentries` | `syslog` | `splunk` | The logging driver to be used by the Agent container. | `json-file` | Not applicable |
243243
| `ECS_LOG_OPTS` | `{"option":"value"}` | The options for configuring the logging driver set in `ECS_LOG_DRIVER`. | `{}` | Not applicable |

agent/vendor/github.com/aws/amazon-ecs-agent/ecs-agent/logger/log.go

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

ecs-agent/logger/log.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,10 +39,10 @@ const (
3939

4040
DEFAULT_LOGLEVEL = "info"
4141
DEFAULT_LOGLEVEL_WHEN_DRIVER_SET = "off"
42-
DEFAULT_ROLLOVER_TYPE = "date"
42+
DEFAULT_ROLLOVER_TYPE = "size"
4343
DEFAULT_OUTPUT_FORMAT = logFmt
4444
DEFAULT_TIMESTAMP_FORMAT = time.RFC3339
45-
DEFAULT_MAX_FILE_SIZE float64 = 10
45+
DEFAULT_MAX_FILE_SIZE float64 = 1
4646
DEFAULT_MAX_ROLL_COUNT int = 24
4747
DEFAULT_LOGTO_STDOUT = true
4848
)

ecs-agent/logger/log_unix_test.go

Lines changed: 48 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -48,8 +48,8 @@ func TestSeelogConfig_Default(t *testing.T) {
4848
<console />
4949
</filter>
5050
<filter levels="info,warn,error,critical">
51-
<rollingfile filename="foo.log" type="date"
52-
datepattern="2006-01-02-15" archivetype="none" maxrolls="24" />
51+
<rollingfile filename="foo.log" type="size"
52+
maxsize="1000000" archivetype="none" maxrolls="24" />
5353
</filter>
5454
</outputs>
5555
<formats>
@@ -125,8 +125,8 @@ func TestSeelogConfig_DebugLevel(t *testing.T) {
125125
<console />
126126
</filter>
127127
<filter levels="info,warn,error,critical">
128-
<rollingfile filename="foo.log" type="date"
129-
datepattern="2006-01-02-15" archivetype="none" maxrolls="24" />
128+
<rollingfile filename="foo.log" type="size"
129+
maxsize="1000000" archivetype="none" maxrolls="24" />
130130
</filter>
131131
</outputs>
132132
<formats>
@@ -157,7 +157,7 @@ func TestSeelogConfig_SizeRollover(t *testing.T) {
157157
</filter>
158158
<filter levels="info,warn,error,critical">
159159
<rollingfile filename="foo.log" type="size"
160-
maxsize="10000000" archivetype="none" maxrolls="24" />
160+
maxsize="1000000" archivetype="none" maxrolls="24" />
161161
</filter>
162162
</outputs>
163163
<formats>
@@ -249,8 +249,8 @@ func TestSeelogConfig_JSONOutput(t *testing.T) {
249249
<console />
250250
</filter>
251251
<filter levels="info,warn,error,critical">
252-
<rollingfile filename="foo.log" type="date"
253-
datepattern="2006-01-02-15" archivetype="none" maxrolls="10" />
252+
<rollingfile filename="foo.log" type="size"
253+
maxsize="1000000" archivetype="none" maxrolls="10" />
254254
</filter>
255255
</outputs>
256256
<formats>
@@ -277,8 +277,8 @@ func TestSeelogConfig_JSONNoStdout(t *testing.T) {
277277
<seelog type="asyncloop">
278278
<outputs formatid="json">
279279
<filter levels="info,warn,error,critical">
280-
<rollingfile filename="foo.log" type="date"
281-
datepattern="2006-01-02-15" archivetype="none" maxrolls="10" />
280+
<rollingfile filename="foo.log" type="size"
281+
maxsize="1000000" archivetype="none" maxrolls="10" />
282282
</filter>
283283
</outputs>
284284
<formats>
@@ -338,8 +338,8 @@ func TestSeelogConfig_NoOnInstanceLog(t *testing.T) {
338338
<console />
339339
</filter>
340340
<filter levels="off">
341-
<rollingfile filename="foo.log" type="date"
342-
datepattern="2006-01-02-15" archivetype="none" maxrolls="24" />
341+
<rollingfile filename="foo.log" type="size"
342+
maxsize="1000000" archivetype="none" maxrolls="24" />
343343
</filter>
344344
</outputs>
345345
<formats>
@@ -366,8 +366,8 @@ func TestSeelogConfig_DifferentLevels(t *testing.T) {
366366
<console />
367367
</filter>
368368
<filter levels="info,warn,error,critical">
369-
<rollingfile filename="foo.log" type="date"
370-
datepattern="2006-01-02-15" archivetype="none" maxrolls="24" />
369+
<rollingfile filename="foo.log" type="size"
370+
maxsize="1000000" archivetype="none" maxrolls="24" />
371371
</filter>
372372
</outputs>
373373
<formats>
@@ -400,8 +400,8 @@ func TestSeelogConfig_FileLevelDefault(t *testing.T) {
400400
<console />
401401
</filter>
402402
<filter levels="off">
403-
<rollingfile filename="foo.log" type="date"
404-
datepattern="2006-01-02-15" archivetype="none" maxrolls="24" />
403+
<rollingfile filename="foo.log" type="size"
404+
maxsize="1000000" archivetype="none" maxrolls="24" />
405405
</filter>
406406
</outputs>
407407
<formats>
@@ -450,8 +450,8 @@ func TestSetOutputFormat(t *testing.T) {
450450
<console />
451451
</filter>
452452
<filter levels="info,warn,error,critical">
453-
<rollingfile filename="foo.log" type="date"
454-
datepattern="2006-01-02-15" archivetype="none" maxrolls="24" />
453+
<rollingfile filename="foo.log" type="size"
454+
maxsize="1000000" archivetype="none" maxrolls="24" />
455455
</filter>
456456
</outputs>
457457
<formats>
@@ -522,6 +522,37 @@ func TestSetLogToStdout(t *testing.T) {
522522
require.Equal(t, `
523523
<seelog type="asyncloop">
524524
<outputs formatid="logfmt">
525+
<filter levels="info,warn,error,critical">
526+
<rollingfile filename="foo.log" type="size"
527+
maxsize="1000000" archivetype="none" maxrolls="24" />
528+
</filter>
529+
</outputs>
530+
<formats>
531+
<format id="logfmt" format="%EcsAgentLogfmt" />
532+
<format id="json" format="%EcsAgentJson" />
533+
<format id="windows" format="%EcsMsg" />
534+
</formats>
535+
</seelog>`, c)
536+
}
537+
538+
func TestSeelogConfig_HourlyRollover(t *testing.T) {
539+
Config = &logConfig{
540+
logfile: "foo.log",
541+
driverLevel: DEFAULT_LOGLEVEL,
542+
instanceLevel: DEFAULT_LOGLEVEL,
543+
RolloverType: "hourly",
544+
outputFormat: DEFAULT_OUTPUT_FORMAT,
545+
MaxFileSizeMB: DEFAULT_MAX_FILE_SIZE,
546+
MaxRollCount: DEFAULT_MAX_ROLL_COUNT,
547+
logToStdout: DEFAULT_LOGTO_STDOUT,
548+
}
549+
c := seelogConfig()
550+
require.Equal(t, `
551+
<seelog type="asyncloop">
552+
<outputs formatid="logfmt">
553+
<filter levels="info,warn,error,critical">
554+
<console />
555+
</filter>
525556
<filter levels="info,warn,error,critical">
526557
<rollingfile filename="foo.log" type="date"
527558
datepattern="2006-01-02-15" archivetype="none" maxrolls="24" />

ecs-agent/logger/log_windows_test.go

Lines changed: 44 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -44,8 +44,8 @@ func TestSeelogConfigWindows_Default(t *testing.T) {
4444
<custom name="wineventlog" formatid="windows" />
4545
</filter>
4646
<filter levels="info,warn,error,critical">
47-
<rollingfile filename="foo.log" type="date"
48-
datepattern="2006-01-02-15" archivetype="none" maxrolls="24" />
47+
<rollingfile filename="foo.log" type="size"
48+
maxsize="1000000" archivetype="none" maxrolls="24" />
4949
</filter>
5050
</outputs>
5151
<formats>
@@ -105,8 +105,8 @@ func TestSeelogConfigWindows_DebugLevel(t *testing.T) {
105105
<custom name="wineventlog" formatid="windows" />
106106
</filter>
107107
<filter levels="info,warn,error,critical">
108-
<rollingfile filename="foo.log" type="date"
109-
datepattern="2006-01-02-15" archivetype="none" maxrolls="24" />
108+
<rollingfile filename="foo.log" type="size"
109+
maxsize="1000000" archivetype="none" maxrolls="24" />
110110
</filter>
111111
</outputs>
112112
<formats>
@@ -139,7 +139,7 @@ func TestSeelogConfigWindows_SizeRollover(t *testing.T) {
139139
</filter>
140140
<filter levels="info,warn,error,critical">
141141
<rollingfile filename="foo.log" type="size"
142-
maxsize="10000000" archivetype="none" maxrolls="24" />
142+
maxsize="1000000" archivetype="none" maxrolls="24" />
143143
</filter>
144144
</outputs>
145145
<formats>
@@ -237,8 +237,8 @@ func TestSeelogConfigWindows_JSONOutput(t *testing.T) {
237237
<custom name="wineventlog" formatid="windows" />
238238
</filter>
239239
<filter levels="info,warn,error,critical">
240-
<rollingfile filename="foo.log" type="date"
241-
datepattern="2006-01-02-15" archivetype="none" maxrolls="10" />
240+
<rollingfile filename="foo.log" type="size"
241+
maxsize="1000000" archivetype="none" maxrolls="10" />
242242
</filter>
243243
</outputs>
244244
<formats>
@@ -270,8 +270,8 @@ func TestSeelogConfigWindows_NoOnInstanceLog(t *testing.T) {
270270
<custom name="wineventlog" formatid="windows" />
271271
</filter>
272272
<filter levels="off">
273-
<rollingfile filename="foo.log" type="date"
274-
datepattern="2006-01-02-15" archivetype="none" maxrolls="24" />
273+
<rollingfile filename="foo.log" type="size"
274+
maxsize="1000000" archivetype="none" maxrolls="24" />
275275
</filter>
276276
</outputs>
277277
<formats>
@@ -303,6 +303,39 @@ func TestSeelogConfigWindows_DifferentLevels(t *testing.T) {
303303
<custom name="wineventlog" formatid="windows" />
304304
</filter>
305305
<filter levels="critical">
306+
<rollingfile filename="foo.log" type="size"
307+
maxsize="1000000" archivetype="none" maxrolls="24" />
308+
</filter>
309+
</outputs>
310+
<formats>
311+
<format id="logfmt" format="%EcsAgentLogfmt" />
312+
<format id="json" format="%EcsAgentJson" />
313+
<format id="windows" format="%EcsMsg" />
314+
</formats>
315+
</seelog>`, c)
316+
}
317+
318+
func TestSeelogConfigWindows_HourlyRollover(t *testing.T) {
319+
Config = &logConfig{
320+
logfile: "foo.log",
321+
driverLevel: DEFAULT_LOGLEVEL,
322+
instanceLevel: DEFAULT_LOGLEVEL,
323+
RolloverType: "hourly",
324+
outputFormat: DEFAULT_OUTPUT_FORMAT,
325+
MaxFileSizeMB: DEFAULT_MAX_FILE_SIZE,
326+
MaxRollCount: DEFAULT_MAX_ROLL_COUNT,
327+
logToStdout: DEFAULT_LOGTO_STDOUT,
328+
}
329+
c := seelogConfig()
330+
require.Equal(t, `
331+
<seelog type="asyncloop">
332+
<outputs formatid="logfmt">
333+
<filter levels="info,warn,error,critical">
334+
<console />
335+
336+
<custom name="wineventlog" formatid="windows" />
337+
</filter>
338+
<filter levels="info,warn,error,critical">
306339
<rollingfile filename="foo.log" type="date"
307340
datepattern="2006-01-02-15" archivetype="none" maxrolls="24" />
308341
</filter>
@@ -339,8 +372,8 @@ func TestSeelogConfigWindows_FileLevelDefault(t *testing.T) {
339372
<custom name="wineventlog" formatid="windows" />
340373
</filter>
341374
<filter levels="off">
342-
<rollingfile filename="foo.log" type="date"
343-
datepattern="2006-01-02-15" archivetype="none" maxrolls="24" />
375+
<rollingfile filename="foo.log" type="size"
376+
maxsize="1000000" archivetype="none" maxrolls="24" />
344377
</filter>
345378
</outputs>
346379
<formats>

0 commit comments

Comments
 (0)