@@ -33,7 +33,6 @@ import (
33
33
"github.com/aws/amazon-ecs-agent/agent/dockerclient/dockerapi"
34
34
"github.com/aws/amazon-ecs-agent/agent/engine/dockerstate"
35
35
"github.com/aws/amazon-ecs-agent/agent/engine/image"
36
- "github.com/cihub/seelog"
37
36
)
38
37
39
38
const (
@@ -152,7 +151,9 @@ func (imageManager *dockerImageManager) RecordContainerReference(container *apic
152
151
// Inspect image for obtaining Container's Image ID
153
152
imageInspected , err := imageManager .client .InspectImage (container .Image )
154
153
if err != nil {
155
- seelog .Errorf ("Error inspecting image %v: %v" , container .Image , err )
154
+ fields := container .Fields ()
155
+ fields ["err" ] = err
156
+ logger .Error ("Error inspecting image" , fields )
156
157
return err
157
158
}
158
159
container .ImageID = imageInspected .ID
@@ -177,7 +178,7 @@ func (imageManager *dockerImageManager) fetchRepoDigest(imageInspected *types.Im
177
178
resultRepoDigest = repoDigestSplitList [1 ]
178
179
return resultRepoDigest
179
180
} else {
180
- seelog . Warnf ( "ImageRepoDigest doesn't have the right format: %v" , imageRepoDigest )
181
+ logger . Warn ( fmt . Sprintf ( "ImageRepoDigest doesn't have the right format: %v" , imageRepoDigest ), container . Fields () )
181
182
return ""
182
183
}
183
184
}
@@ -272,7 +273,7 @@ func (imageManager *dockerImageManager) removeImageState(imageStateToBeRemoved *
272
273
for i , imageState := range imageManager .imageStates {
273
274
if imageState .Image .ImageID == imageStateToBeRemoved .Image .ImageID {
274
275
// Image State found; hence remove it
275
- seelog . Infof ( "Removing Image State: [%s] from Image Manager " , imageState .String ())
276
+ logger . Debug ( " Image Manager: removing image state " , imageState .Fields ())
276
277
imageManager .imageStates = append (imageManager .imageStates [:i ], imageManager .imageStates [i + 1 :]... )
277
278
imageManager .removeImageStateData (imageState .Image .ImageID )
278
279
return
@@ -282,14 +283,14 @@ func (imageManager *dockerImageManager) removeImageState(imageStateToBeRemoved *
282
283
283
284
func (imageManager * dockerImageManager ) getCandidateImagesForDeletion () []* image.ImageState {
284
285
if len (imageManager .imageStatesConsideredForDeletion ) < 1 {
285
- seelog . Debugf ("Image Manager: Empty state!" )
286
+ logger . Debug ("Image Manager: Empty state!" )
286
287
// no image states present in image manager
287
288
return nil
288
289
}
289
290
var imagesForDeletion []* image.ImageState
290
291
for _ , imageState := range imageManager .imageStatesConsideredForDeletion {
291
292
if imageManager .isImageOldEnough (imageState ) && imageState .HasNoAssociatedContainers () {
292
- seelog . Infof ("Candidate image for deletion: [%s] " , imageState .String ())
293
+ logger . Debug ("Candidate image for deletion" , imageState .Fields ())
293
294
imagesForDeletion = append (imagesForDeletion , imageState )
294
295
}
295
296
}
@@ -346,7 +347,7 @@ func (imageManager *dockerImageManager) StartImageCleanupProcess(ctx context.Con
346
347
// If the image pull behavior is prefer cached, don't clean up the image,
347
348
// because the cached image is needed.
348
349
if imageManager .imagePullBehavior == config .ImagePullPreferCachedBehavior {
349
- seelog .Info ("Pull behavior is set to always use cache. Disabling cleanup" )
350
+ logger .Info ("Pull behavior is set to always use cache. Disabling cleanup" )
350
351
return
351
352
}
352
353
// passing the cleanup interval as argument which would help during testing
@@ -367,10 +368,10 @@ func (imageManager *dockerImageManager) performPeriodicImageCleanup(ctx context.
367
368
}
368
369
369
370
func (imageManager * dockerImageManager ) removeUnusedImages (ctx context.Context ) {
370
- seelog .Debug ("Attempting to obtain ImagePullDeleteLock for removing images" )
371
+ logger .Debug ("Attempting to obtain ImagePullDeleteLock for removing images" )
371
372
ImagePullDeleteLock .Lock ()
372
- seelog .Debug ("Obtained ImagePullDeleteLock for removing images" )
373
- defer seelog .Debug ("Released ImagePullDeleteLock after removing images" )
373
+ logger .Debug ("Obtained ImagePullDeleteLock for removing images" )
374
+ defer logger .Debug ("Released ImagePullDeleteLock after removing images" )
374
375
defer ImagePullDeleteLock .Unlock ()
375
376
376
377
imageManager .updateLock .Lock ()
@@ -383,7 +384,9 @@ func (imageManager *dockerImageManager) removeUnusedImages(ctx context.Context)
383
384
err := imageManager .removeLeastRecentlyUsedImage (ctx )
384
385
numECSImagesDeleted = i
385
386
if err != nil {
386
- seelog .Infof ("End of eligible images for deletion: %v; Still have %d image states being managed" , err , len (imageManager .getAllImageStates ()))
387
+ logger .Info ("End of eligible images for deletion" , logger.Fields {
388
+ "managedImagesRemaining" : len (imageManager .getAllImageStates ()),
389
+ })
387
390
break
388
391
}
389
392
}
@@ -399,20 +402,20 @@ func (imageManager *dockerImageManager) removeUnusedImages(ctx context.Context)
399
402
func (imageManager * dockerImageManager ) removeNonECSContainers (ctx context.Context ) {
400
403
nonECSContainersIDs , err := imageManager .getNonECSContainerIDs (ctx )
401
404
if err != nil {
402
- seelog . Errorf ( "Error getting non-ECS container IDs: %v" , err )
405
+ logger . Error ( fmt . Sprintf ( "Error getting non-ECS container IDs: %v" , err ) )
403
406
}
404
407
var nonECSContainerRemoveAvailableIDs []string
405
408
for _ , id := range nonECSContainersIDs {
406
409
response , icErr := imageManager .client .InspectContainer (ctx , id , dockerclient .InspectContainerTimeout )
407
410
if icErr != nil {
408
- seelog . Errorf ( "Error inspecting non-ECS container id: %s - %v" , id , icErr )
411
+ logger . Error ( fmt . Sprintf ( "Error inspecting non-ECS container id: %s - %v" , id , icErr ) )
409
412
continue
410
413
}
411
414
412
- seelog . Debugf ( "Inspecting Non-ECS Container ID [%s] for removal, Finished [%s] Status [%s]" , id , response .State .FinishedAt , response .State .Status )
415
+ logger . Debug ( fmt . Sprintf ( "Inspecting Non-ECS Container ID [%s] for removal, Finished [%s] Status [%s]" , id , response .State .FinishedAt , response .State .Status ) )
413
416
finishedTime , err := time .Parse (time .RFC3339Nano , response .State .FinishedAt )
414
417
if err != nil {
415
- seelog . Errorf ( "Error parsing time string for container. id: %s, time: %s err: %s" , id , response .State .FinishedAt , err )
418
+ logger . Error ( fmt . Sprintf ( "Error parsing time string for container. id: %s, time: %s err: %s" , id , response .State .FinishedAt , err ) )
416
419
continue
417
420
}
418
421
@@ -428,13 +431,17 @@ func (imageManager *dockerImageManager) removeNonECSContainers(ctx context.Conte
428
431
if numNonECSContainerDeleted == imageManager .numNonECSContainersToDelete {
429
432
break
430
433
}
431
- seelog .Debugf ("Removing non-ECS Container ID %s" , id )
434
+ logger .Debug ("Removing non-ECS container" , logger.Fields {
435
+ "runtimeID" : id ,
436
+ })
432
437
err := imageManager .client .RemoveContainer (ctx , id , dockerclient .RemoveContainerTimeout )
433
438
if err == nil {
434
- seelog .Infof ("Removed Container ID: %s" , id )
439
+ logger .Info ("Removed non-ECS container" , logger.Fields {
440
+ "runtimeID" : id ,
441
+ })
435
442
numNonECSContainerDeleted ++
436
443
} else {
437
- seelog . Errorf ( "Error Removing Container ID %s - %s" , id , err )
444
+ logger . Error ( fmt . Sprintf ( "Error Removing Container ID %s - %s" , id , err ) )
438
445
continue
439
446
}
440
447
}
@@ -480,24 +487,29 @@ func (imageManager *dockerImageManager) removeNonECSImages(ctx context.Context,
480
487
if ! imageManager .nonECSImageOldEnough (image ) {
481
488
continue
482
489
}
490
+ fields := logger.Fields {
491
+ "imageID" : image .ImageID ,
492
+ "imageSizeBytes" : image .Size ,
493
+ "repoTags" : image .RepoTags ,
494
+ }
483
495
if len (image .RepoTags ) > 1 {
484
- seelog . Debugf ("Non-ECS image has more than one tag Image: %s (Tags: %s) " , image . ImageID , image . RepoTags )
496
+ logger . Debug ("Non-ECS image has more than one tag" , fields )
485
497
for _ , tag := range image .RepoTags {
486
498
err := imageManager .client .RemoveImage (ctx , tag , dockerclient .RemoveImageTimeout )
487
499
if err != nil {
488
- seelog . Errorf ("Error removing RepoTag (ImageID: %s, Tag: %s) %v" , image . ImageID , tag , err )
500
+ logger . Error ("Error removing non-ECS RepoTag" , fields , logger. Fields { "err" : err } )
489
501
} else {
490
- seelog . Infof ( "Image Tag Removed: %s (ImageID: %s) " , tag , image . ImageID )
502
+ logger . Info ( "Non-ECS image tag removed " , fields , logger. Fields { "imageTag" : tag } )
491
503
numImagesAlreadyDeleted ++
492
504
}
493
505
}
494
506
} else {
495
- seelog . Debugf ("Removing non-ECS Image: %s (Tags: %s) " , image . ImageID , image . RepoTags )
507
+ logger . Debug ("Removing non-ECS image " , fields )
496
508
err := imageManager .client .RemoveImage (ctx , image .ImageID , dockerclient .RemoveImageTimeout )
497
509
if err != nil {
498
- seelog . Errorf ("Error removing Image %s (Tags: %s) - %v " , image . ImageID , image . RepoTags , err )
510
+ logger . Error ("Error removing non-ECS image " , fields , logger. Fields { "err" : err } )
499
511
} else {
500
- seelog . Infof ( "Image removed: %s (Tags: %s) " , image . ImageID , image . RepoTags )
512
+ logger . Info ( "Non-ECS image removed " , fields )
501
513
numImagesAlreadyDeleted ++
502
514
}
503
515
}
@@ -512,13 +524,14 @@ func (imageManager *dockerImageManager) getNonECSImages(ctx context.Context) []I
512
524
for _ , imageID := range r .ImageIDs {
513
525
resp , err := imageManager .client .InspectImage (imageID )
514
526
if err != nil {
515
- seelog . Errorf ("Error inspecting non-ECS image: (ImageID: %s), %s" , imageID , err )
527
+ logger . Error ("Error inspecting non-ECS image" , logger. Fields { "imageID" : imageID , " err" : err } )
516
528
continue
517
529
}
518
530
createTime := time.Time {}
519
531
createTime , err = time .Parse (time .RFC3339 , resp .Created )
520
532
if err != nil {
521
- seelog .Warnf ("Error parse the inspected non-ECS image created time (ImageID: %s), %v" , imageID , err )
533
+ logger .Warn ("Error parsing the inspected non-ECS image created time." ,
534
+ logger.Fields {"imageID" : imageID , "err" : err })
522
535
}
523
536
allImages = append (allImages ,
524
537
ImageWithSizeID {
@@ -588,13 +601,13 @@ func exclude(allList []string, exclusionList []string) []string {
588
601
589
602
func (imageManager * dockerImageManager ) imagesConsiderForDeletion (allImageStates []* image.ImageState ) map [string ]* image.ImageState {
590
603
var imagesConsiderForDeletionMap = make (map [string ]* image.ImageState )
591
- seelog . Info ("Begin building map of eligible unused images for deletion" )
604
+ logger . Debug ("Begin building map of eligible unused images for deletion" )
592
605
for _ , imageState := range allImageStates {
593
606
if imageManager .isExcludedFromCleanup (imageState ) {
594
607
//imageState that we want to keep
595
- seelog . Debugf ("Image excluded from deletion: [%s] " , imageState .String ())
608
+ logger . Debug ("Image excluded from deletion" , imageState .Fields ())
596
609
} else {
597
- seelog . Debugf ("Image going to be considered for deletion: [%s] " , imageState .String ())
610
+ logger . Debug ("Image going to be considered for deletion" , imageState .Fields ())
598
611
imagesConsiderForDeletionMap [imageState .Image .ImageID ] = imageState
599
612
}
600
613
}
@@ -617,17 +630,18 @@ func (imageManager *dockerImageManager) removeLeastRecentlyUsedImage(ctx context
617
630
if leastRecentlyUsedImage == nil {
618
631
return fmt .Errorf ("No more eligible images for deletion" )
619
632
}
633
+ logger .Info ("Image ready for deletion" , leastRecentlyUsedImage .Fields ())
620
634
imageManager .removeImage (ctx , leastRecentlyUsedImage )
621
635
return nil
622
636
}
623
637
624
638
func (imageManager * dockerImageManager ) getUnusedImageForDeletion () * image.ImageState {
625
639
candidateImageStatesForDeletion := imageManager .getCandidateImagesForDeletion ()
626
640
if len (candidateImageStatesForDeletion ) < 1 {
627
- seelog . Infof ("No eligible images for deletion for this cleanup cycle" )
641
+ logger . Debug ("No eligible images for deletion for this cleanup cycle" )
628
642
return nil
629
643
}
630
- seelog . Infof ( "Found %d eligible images for deletion" , len (candidateImageStatesForDeletion ))
644
+ logger . Debug ( fmt . Sprintf ( "Found %d eligible images for deletion" , len (candidateImageStatesForDeletion ) ))
631
645
return imageManager .getLeastRecentlyUsedImage (candidateImageStatesForDeletion )
632
646
}
633
647
@@ -648,24 +662,28 @@ func (imageManager *dockerImageManager) removeImage(ctx context.Context, leastRe
648
662
649
663
func (imageManager * dockerImageManager ) deleteImage (ctx context.Context , imageID string , imageState * image.ImageState ) {
650
664
if imageID == "" {
651
- seelog .Errorf ("Image ID to be deleted is null" )
665
+ var fields logger.Fields
666
+ if imageState != nil {
667
+ fields = imageState .Fields ()
668
+ }
669
+ logger .Error ("Image ID to be deleted is null" , fields )
652
670
return
653
671
}
654
- seelog . Infof ( "Removing Image: %s" , imageID )
672
+ logger . Debug ( fmt . Sprintf ( "Removing Image: %s" , imageID ), imageState . Fields () )
655
673
err := imageManager .client .RemoveImage (ctx , imageID , dockerclient .RemoveImageTimeout )
656
674
if err != nil {
657
675
if strings .Contains (strings .ToLower (err .Error ()), imageNotFoundForDeletionError ) {
658
- seelog . Errorf ( "Image already removed from the instance: %v" , err )
676
+ logger . Error ( fmt . Sprintf ( "Image already removed from the instance: %v" , imageID ), imageState . Fields () )
659
677
} else {
660
- seelog . Errorf ( "Error removing Image %v - %v " , imageID , err )
678
+ logger . Error ( fmt . Sprintf ( "Error removing Image %v" , imageID ), imageState . Fields (), logger. Fields { " err" : err } )
661
679
delete (imageManager .imageStatesConsideredForDeletion , imageState .Image .ImageID )
662
680
return
663
681
}
664
682
}
665
- seelog . Infof ( "Image removed: %v" , imageID )
683
+ logger . Info ( fmt . Sprintf ( "Image removed: %v" , imageID ), imageState . Fields () )
666
684
imageState .RemoveImageName (imageID )
667
685
if len (imageState .Image .Names ) == 0 {
668
- seelog . Infof ( "Cleaning up all tracking information for image %s as it has zero references" , imageID )
686
+ logger . Info ( fmt . Sprintf ( "Cleaning up all tracking information for image %s as it has zero references" , imageID ), imageState . Fields () )
669
687
delete (imageManager .imageStatesConsideredForDeletion , imageState .Image .ImageID )
670
688
imageManager .removeImageState (imageState )
671
689
imageManager .state .RemoveImageState (imageState )
0 commit comments