為什麼 Amazon ECS 容器日誌不會傳送到 CloudWatch Logs?

2 分的閱讀內容
0

我無法在 Amazon CloudWatch Logs 中找到 Amazon Elastic Container Service (Amazon ECS) 任務的容器日誌。

簡短說明

由於下列其中一項原因,您的 Amazon ECS 容器日誌可能無法傳送至 CloudWatch Logs:

  • 未正確設定 Amazon ECS 任務定義中的 awslogs 日誌驅動程式。
  • AWS Identity and Access Management (IAM) 角色沒有必要許可。
  • 未正確設定網路。
  • 未正確設定容器的日誌層次。

解決方法

未正確設定 awslogs 日誌驅動程序

若要將容器日誌資訊傳送至 CloudWatch Logs,您必須正確設定任務中的容器。定義容器的參數時,請確保是否已正確設定 logConfiguration 參數。如果您的 Amazon ECS 任務定義涉及多個容器,則必須為每個容器設定此參數。此外,您必須將 awslogs 日誌驅動程式新增至任務定義中的 logConfiguration 參數。

對於 Amazon Elastic Compute Cloud (Amazon EC2) 啟動類型,請完成下列其他任務:

  • 將您的 Amazon ECS 容器執行個體更新為容器代理程式的 1.9.0 版或更新版本。如需詳細資訊,請參閱更新 Amazon ECS 容器代理程式
  • 對於不使用 Amazon ECS 最佳化 AMI 的容器執行個體,請在容器執行個體上指定 awslogs 日誌驅動程式。您使用下列環境變數來啟動代理程式時,請指定 awslogs 日誌驅動程式:
    ECS_AVAILABLE_LOGGING_DRIVERS='["json-file","awslogs"]'

如需詳細資訊,請參閱安裝 Amazon ECS 容器代理程式

IAM 角色沒有必要的許可

完成以下任務:

  • 對於 Amazon ECS 容器執行個體的 IAM 角色,請新增 logs:CreateLogStreamlogs:PutLogEvents 許可。
  • 對於 AWS Fargate 啟動類型,請將 Amazon ECS 任務執行 IAM 角色與 logs:CreateLogStreamlogs:PutLogEvents 許可搭配使用。如需詳細資訊,請參閱 Amazon ECS 任務執行 IAM 角色
  • 對於 Amazon EC2 啟動類型,請檢查下列內容:
    對於不使用 Amazon ECS 任務執行 IAM 角色的任務,請將 logs:CreateLogStreamlogs:PutLogEvents 許可授予容器執行個體 IAM 角色
    對於使用 Amazon ECS 任務執行 IAM 角色的任務,請將容器代理程式參數 ECS_ENABLE_AWSLOGS_EXECUTIONROLE_OVERRIDE 的值更新為 true
    **注意:**您使用 ecs-init 套件 1.16.0 -1 版或更高版本的 Amazon ECS 最佳化 AMI 時,此參數的預設值為 true。在 Windows 上,此參數的預設值為 false。如需詳細資訊,請參閱 Amazon ECS 容器代理程式組態

未正確設定網路

將 awslogs 日誌驅動程式與沒有網際網路閘道的 Amazon Virtual Private Cloud (Amazon VPC) 搭配使用的任務必須建立 CloudWatch Logs 端點。如需詳細資訊,請參閱將 CloudWatch Logs 與介面 VPC 端點搭配使用

未正確設定容器的日誌層次

awslogs 日誌驅動程式會將 STDOUT 和 STDERR I/O 串流的容器日誌從 Docker 傳遞到 CloudWatch Logs。更新您的應用程式,以將日誌傳送到 STDOUT 和 STDERR I/O 串流。在容器構置期間為應用程式設定正確的日誌層次。取決於應用程式,您可以透過環境變數或組態檔來設定日誌層次。

相關資訊

Amazon ECS 的監控工具

如何疑難排解 Amazon ECS 或 Amazon Elastic Kubernetes Service (Amazon EKS) 遺漏的容器日誌?

AWS 官方
AWS 官方已更新 5 個月前