Help us improve the AWS re:Post Knowledge Center by sharing your feedback in a brief survey. Your input can influence how we create and update our content to better support your AWS journey.
為什麼我的統一 CloudWatch 代理程式沒有傳送日誌事件?
我的統一 Amazon CloudWatch 代理程式未傳送日誌事件,我想解決這個問題。
解決方法
以下解決方法不適用於 CloudWatch Container Insights。若要對 CloudWatch Container Insights 進行疑難排解,請參閱對 Container Insights 進行疑難排解。
中繼資料不同步
中繼資料不同步可能會導致您的 CloudWatch 代理程式出現問題。
若要解決此問題,請採取以下動作:
- 在您安裝 CloudWatch 代理程式之前,請先建立 Amazon Machine Image (AMI) 以擷取原始執行個體的唯一資訊。
- 在啟動時,使用 AWS CloudFormation、AWS Systems Manager、使用者資料指令碼或命令列來安裝 CloudWatch 代理程式。
- 對於 Windows 執行個體,請在使用 AMI 時,使用 Sysprep。
CloudWatch 代理程式版本過舊
檢查您目前使用的 CloudWatch 代理程式版本。如果 CloudWatch 代理程式版本過舊,請下載並安裝最新版本的 CloudWatch 代理程式套件。最新版本可能包含可解決您問題的更新。
無法連線至 CloudWatch Logs 端點
**注意:**在以下命令中,將 example-region 替換為您的 AWS 區域。
若要測試您與 CloudWatch Logs 端點的連線,請執行以下其中一個命令:
telnet logs.example-region.amazonaws.com 443
nc -zv logs.example-region.amazonaws.com 443
預設情況下,Windows 機器未安裝 netcat。請改在 Windows PowerShell 上執行以下 Test-NetConnection 命令:
Test-NetConnection -ComputerName logs.example-region.amazonaws.com -Port 443
如果連線失敗,請採取以下動作:
- 確定安全群組與網路存取控制清單 (網路 ACL) 允許該連線。
- 對於公共端點,請為您的執行個體使用網際網路閘道或 NAT 閘道。
- 如果您使用 Amazon Virtual Private Cloud (Amazon VPC) 端點,請確認該端點解析為 Amazon VPC IP 位址。此外,確定端點安全群組允許來自來源執行個體的存取。
帳戶、區域或日誌群組組態不正確
對於 CloudWatch 代理程式組態檔案,請確認指定的區域與主控台區域相符。此外,請務必在正確的 AWS 帳戶中檢查日誌。
若要覆寫 CloudWatch 代理程式的系統預設值,請使用以下 common-config.toml 檔案位置。
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,CloudWatch 代理程式會使用來自 AWS Identity and Access Management (IAM) 使用者或 IAM 角色政策的憑證。
檢查您的身分型政策是否包含以下 IAM 權限:
- logs:CreateLogGroup
- logs:CreateLogStream
- logs:PutLogEvents
- logs:DescribeLogStreams
當您建立 IAM 角色或使用者時,最佳實務是使用 CloudWatchAgentServerPolicy 或 CloudWatchAgentAdminPolicy 政策。
如果沒有日誌群組或日誌串流,則 CloudWatch 代理程式會自行建立。在您發佈日誌事件之前,請先建立日誌群組與日誌串流。
CloudWatch 代理程式執行錯誤
驗證 CloudWatch 代理程式是否正在執行。如果代理程式未在執行,請檢查日誌檔案位置以查看錯誤。
對於 Linux,日誌檔案位置為 /opt/aws/amazon-cloudwatch-agent/logs/amazon-cloudwatch-agent.log。
對於 Windows,日誌檔案位置為 $Env:ProgramData\Amazon\AmazonCloudWatchAgent\Logs\amazon-cloudwatch-agent.log。
您可能在自訂的 logfile 位置中指定了日誌。若要識別自訂日誌位置,請檢查代理程式組態檔案。
使用 debug 參數在組態檔案中開啟詳細偵錯記錄。如果您使用 run_as_user 參數,請檢查該使用者是否具有日誌位置的權限。如果使用者不具備必要權限,則 CloudWatch 無法將日誌寫入該位置。
如果您在啟動 CloudWatch 代理程式時遇到國際材料資料系統 (IMDS) 的問題,請採取以下動作:
- 確認您能 存取 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體的中繼資料。檢查與中繼資料端點的連線。
- 在您的作業系統 (OS) 層級路由與防火牆中,檢查您是否建立了封鎖與中繼資料端點連線的規則。對於 Linux,請參閱如何針對 EC2 Linux 執行個體上的執行個體中繼資料問題進行疑難排解?對於 Windows,請參閱如何針對 Amazon EC2 Windows 執行個體上的「Waiting for the metadata service」錯誤進行疑難排解?
時間戳記問題
CloudWatch 代理程式使用 PutLogEvents API 作業將日誌事件發佈至 CloudWatch 日誌群組。請檢查您的日誌事件是否符合 PutLogEvents API 作業限制。此外,也請檢查您是否正確地設定了執行個體的時區。
日誌狀態檔案中的值不正確
若要解決日誌狀態檔案中缺失或不正確的值,請完成以下步驟:
-
確認您的狀態檔案位於正確的位置。<br id=hardline_break/> 對於 Linux,使用以下檔案位置:<br id=hardline_break/> /opt/aws/amazon-cloudwatch-agent/logs/state<br id=hardline_break/> 對於 Windows,使用以下檔案位置:<br id=hardline_break/> C:\ProgramData\Amazon\AmazonCloudWatchAgent\Logs\state<br id=hardline_break/> **注意:**確認上述狀態檔案包含與日誌檔案相同的大小值,讓 CloudWatch 代理程式能夠讀取新資料並將其發佈至 CloudWatch 日誌群組。
-
檢查狀態檔案的大小值。<br id=hardline_break/> 對於 Linux,執行以下 sudo 命令:
sudo cat /opt/aws/amazon-cloudwatch-agent/logs/state/_var_log_httpd_access_log對於 Windows,執行以下 Windows PowerShell 命令:
gc 'C:\ProgramData\Amazon\AmazonCloudWatchAgent\Logs\state\C__Program_Files_log.log'**注意:**前述命令的輸出包含目前偏移量的數值。例如,如果輸出為 34,則目前偏移量位於日誌檔案的第 34 個位元組。當 CloudWatch 代理程式將新日誌寫入日誌檔案時,CloudWatch Logs 會從識別出的位元組開始讀取。
-
檢查日誌檔案的大小值。<br id=hardline_break/> 對於 Linux,執行以下命令:
stat /var/log/httpd/access_log | grep Size | awk '{print $2}'對於 Windows,執行以下命令:
Get-Item 'C:\Program Files\log.log' | Format-List | findstr Length -
檢查您從步驟 2 與步驟 3 獲得的輸出是否相同。
來源日誌檔案組態不正確
若要解決因來源日誌檔案組態不正確而產生的問題,請採取以下動作:
- 檢查 CloudWatch 代理程式組態是否包含您想要監控的日誌檔案。
- 確認日誌檔案具有正確的檔案格式,且您使用了正確的名稱與位置。
- 在目前的組態中,檢查您是否將日誌設定為傳送至您想要從中擷取資料的同一個日誌群組與日誌串流。
- 檢閱您在執行個體上監控的日誌檔案。檢查來源日誌檔案是否包含您想要發佈至日誌群組的資料。
force_flush_interval 值過高
如果日誌大小達到 1 MB 的最大緩衝區,則無論您設定的 force_flush_interval 間隔為何,CloudWatch 都會立即收到日誌。如需更多資訊,請選取 CloudWatch agent configuration file: Metrics section (CloudWatch 代理程式組態檔案:指標部分) 索引標籤。
如果您將間隔設定為較大的值且日誌大小未達到 1 MB,則日誌會保留在緩衝區中。CloudWatch 代理程式只有在緩衝區滿或間隔到期後,才會將日誌傳送至伺服器。在此間隔期間,日誌在 CloudWatch 中不可用。確定您將間隔值設定為正確的大小。最佳實務是根據日誌大小與您想要發佈日誌的間隔來設定間隔值。
相關資訊
如何對 Amazon Elastic Kubernetes Service (Amazon EKS) 中的 Pod 狀態進行疑難排解?
- 語言
- 中文 (繁體)

相關內容
- 已提問 2 年前
- 已提問 2 年前