為什麼統一 CloudWatch 代理程式無法推送日誌事件?

2 分的閱讀內容
0

我正在使用統一 CloudWatch 代理程式將日誌推送至 Amazon CloudWatch Logs。但是,我在 CloudWatch Logs 主控台中看不到日誌。為什麼統一 CloudWatch 代理程式無法推送日誌事件?

簡短描述

下列問題會導致統一 CloudWatch 代理程式無法推送日誌事件:

  • 安裝 CloudWatch 代理程式後,因建立 Amazon Machine Image (AMI) 而造成的中繼資料未同步問題
  • 使用舊版的 CloudWatch 代理程式
  • 無法連線至 CloudWatch Logs 端點
  • 帳戶、區域或日誌群組的組態不正確
  • AWS Identity and Access Management (IAM) 的權限不足
  • CloudWatch 代理程式執行錯誤
  • 時間戳記問題

解決方法

**注意:**如果您在執行 AWS Command Line Interface (AWS CLI) 命令時收到錯誤訊息,請確認您使用的是最新的 AWS CLI 版本

**重要事項:**下列疑難排解步驟不適用於 Container Insights。如需對 Container Insights 進行疑難排解的詳細資料,請參閱對 Container Insights 進行疑難排解如何對 Amazon EKS 中的 Pod 狀態進行疑難排解?

檢閱 CloudWatch 代理程式的安裝方法

最佳實務是使用 AWS CloudFormation、AWS Systems Manager Agent (SSM Agent)、使用者資料指令碼或 AWS CLI,在啟動時安裝 CloudWatch 代理程式。另一種最佳實務是在安裝 CloudWatch 代理程式前先建立 AMI。AMI 通常會從原始執行個體中擷取唯一的資訊。中繼資料無法同步,而且此狀態會導致 CloudWatch 代理程式無法如預期般運作。未同步的中繼資料是導致很多 Windows 執行個體在使用 AMI 時需要 Sysprep 的原因。如需詳細資訊,請參閱如何使用 Sysprep 在 Amazon EC2 中建立和安裝可重複使用的自訂 Windows AMI?

確認您使用的是最新版本的 CloudWatch 代理程式

下載並檢閱 README 檔案,了解 CloudWatch 代理程式版本資訊和最新版本編號。如果您使用的是較舊版本的 CloudWatch 代理程式,請務必升級。最新版本可能包括可解決所遭遇問題的更新內容。

測試連線至 CloudWatch Logs 端點的狀態

使用下列任一命令測試連線至 CloudWatch Logs 端點的狀態:

telnet logs.<region>.amazonaws.com 443
nc -zv logs.<region>.amazonaws.com 443

如果您連線失敗,請確定:

  • 安全群組和網路存取控制清單 (ACL) 規則允許連線
  • 您的執行個體可以使用網際網路閘道或網路位址轉譯 (NAT) 閘道連線至公用端點
  • 如果您使用的是 VPC 端點,則該端點會解析至 VPC IP 且端點安全群組允許來源執行個體的存取

檢閱您的帳戶、區域及日誌群組的組態

CloudWatch 代理程式組態檔案中:

  • 請確定指定的區域與主控台區域相符
  • 確認日誌已在正確帳戶中檢查完畢

或者,您可以使用 common-config.toml 檔案覆寫 CloudWatch 代理程式的系統預設值。這些系統預設值包括代理程式的 Proxy、區域及憑證資訊。該檔案位於下列位置中。

Linux:

/opt/aws/amazon-cloudwatch-agent/etc/common-config.toml

-或-

/etc/amazon/amazon-cloudwatch-agent/common-config.toml

Windows:

$Env:ProgramData\Amazon\AmazonCloudWatchAgent\common-config.toml

檢查您的 IAM 權限

CloudWatch 代理程式會使用 IAM 使用者或 IAM 角色政策的憑證,將日誌事件推送至 CloudWatch 服務。您必須建立日誌群組和日誌串流才能發佈日誌事件。如果沒有日誌群組或日誌串流,則 CloudWatch 代理程式會自行建立。

確認您的政策包括下列 IAM 權限

"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents",
"logs:DescribeLogStreams"

將任何遺漏的 IAM 權限新增至使用者政策角色政策

注意:建立 IAM 角色和使用者時,最佳實務是使用 Amazon 建立的 CloudWatchAgentServerPolicyCloudWatchAgentAdminPolicy 政策,而不是自訂政策。

解決 CloudWatch 代理程式執行錯誤的問題

確認 CloudWatch 代理程式正在執行中。如果代理程式不在執行中,請檢查日誌檔案是否有誤並加以解決。日誌檔案位於下列位置中。

Linux:

/opt/aws/amazon-cloudwatch-agent/logs/amazon-cloudwatch-agent.log

Windows:

$Env:ProgramData\Amazon\AmazonCloudWatchAgent\Logs\amazon-cloudwatch-agent.log

**注意:**自訂的 logfile 位置中可以指定日誌。檢查代理程式組態檔案以識別任何自訂的日誌位置。

在代理程式組態檔案中,使用偵錯參數啟用詳盡偵錯日誌記錄。如果您使用的是 run_as_user 參數,請確認使用者擁有日誌位置路徑的權限。如果沒有必要權限,則 CloudWatch 代理程式無法將日誌寫入位置中。

解決時間戳記問題

檢查是否有 14 天以上或未來兩小時以上的日誌事件時間戳記。PutLogEvents 命令不允許任一時間範圍內的日誌批次。

此外,確認執行個體上的系統時間服務已正確設定。如需詳細資訊,請參閱設定 Linux 執行個體的時間設定 Windows 執行個體的時間


相關資訊

對 CloudWatch 代理程式進行疑難排解

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