為什麼我的 Amazon ECS 容器日誌未傳遞至 Amazon CloudWatch Logs?

2 分的閱讀內容
0

我在 Amazon CloudWatch Logs 中未能找到自己的 Amazon Elastic Container Service (Amazon ECS) 任務的容器日誌。

簡短描述

由於以下一點或多點原因,您的 Amazon ECS 容器日誌無法傳遞至 CloudWatch Logs:

  • 在您的 Amazon ECS 任務定義中,awslog 日誌驅動程式設定不正確。
  • AWS Identity and Access Management (IAM) 角色沒有所需的許可。
  • 您的聯網設定存在問題。
  • 容器的日誌級別設定不正確。

解決方案

未正確設定 awslog 日誌驅動程式

  • 要將容器日誌資訊傳送至 CloudWatch Logs,您必須在任務中正確設定容器。確保在為容器定義參數時正確設定 logConfiguration 參數。如果您的 Amazon ECS 任務定義涉及多個容器,則必須為每個容器設定此參數。
  • 請確保將 awslog 日誌驅動程式新增至到任務定義中的 logConfiguration 參數。
  • 對於 Amazon Elastic Compute Cloud (Amazon EC2) 啟動類型,請執行以下附加檢查:
  • 請確保您的 Amazon ECS 容器執行個體至少包含容器代理程式版本 1.9.0。有關檢查代理程式版本並更新到最新版本的資訊,請參閲更新 Amazon ECS 容器代理程式
  • 如果您沒有為容器執行個體使用 Amazon ECS 最佳化 AMI,請確保在使用以下環境變數啟動代理程式時,在容器執行個體上指定 awslog 日誌驅動程式。有關更多資訊,請參閲安裝 Amazon ECS 容器代理程式
ECS_AVAILABLE_LOGGING_DRIVERS='["json-file","awslogs"]'

IAM 角色沒有所需的許可

  • 確保您的 Amazon ECS 容器執行個體的 IAM 角色具有 logs:CreateLogStreamlogs:PutLogEvents 許可。
  • 對於 Fargate 啟動類型,請將 Amazon ECS 任務執行 IAM 角色與 logs:CreateLogStreamlogs:PutLogEvents 許可搭配使用。有關更多資訊,請參閲 Amazon ECS 任務執行 IAM 角色
  • 對於 Amazon EC2 啟動類型,請檢查以下內容:
  • 如果您在任務定義中未使用 Amazon ECS 任務執行 IAM 角色,請確保對容器執行個體使用的 IAM 角色授予 logs:CreateLogStreamlogs:PutLogEvents 許可。
  • 如果您使用 Amazon ECS 任務執行 IAM 角色,請確保容器代理程式參數 ECS_ENABLE_AWSLOGS_EXECUTIONROLE_OVERRIDE 的值設定為 true
    注意:當您將 Amazon ECS 最佳化 AMI 與版本 1.16.0 -1 或更高版本的 ecs-init 套件搭配使用時,此參數的預設值為 true。在 Windows 上,此參數的預設值為 false。有關更多資訊,請參閲 Amazon ECS 容器代理程式組態

您的網路設定存在問題

如果您的 Amazon Virtual Private Cloud (Amazon VPC) 沒有網際網路閘道,並且您的任務使用 awslog 日誌驅動程式向 CloudWatch Logs 傳送日誌資訊,請確保為 CloudWatch Logs 建立一個介面 Amazon VPC 端點。有關詳細資訊,請參閱使用 CloudWatch Logs 搭配介面 VPC 端點

容器的日誌級別設定不正確

awslog 日誌驅動程式只是將作為 STDOUT 和 STDERR I/O 串流的容器日誌從 Docker 傳遞到 CloudWatch Logs。因此,請驗證您的應用程式是否將日誌傳送到 STDOUT 和 STDERR I/O 串流。確保在容器建置過程中為應用程式設定正確的日誌級別。根據您的應用程式,您可以透過環境變數或組態檔案設定日誌級別。


相關資訊

監控容器執行個體

如何對 Amazon ECS 或 Amazon EKS 遺失容器日誌進行疑難排解?

AWS 官方
AWS 官方已更新 2 年前