统一的 CloudWatch 代理为什么没有推送日志事件?

上次更新时间:2020 年 4 月 28 日

我在使用统一的 CloudWatch 代理向 Amazon CloudWatch Logs 推送日志。然而,我无法在 CloudWatch Logs 控制台中查看日志。统一的 CloudWatch 代理为什么没有推送日志事件?

简短描述

以下问题可能会阻止统一的 CloudWatch 代理推送日志事件:

  • 在安装 CloudWatch 代理后创建 Amazon 系统映像 (AMI) 所导致的元数据不同步
  • 使用过时版本的 CloudWatch 代理
  • 无法连接到 CloudWatch Logs 终端节点
  • 账户、区域或日志组配置不正确
  • AWS Identity and Access Management (IAM) 权限不足
  • CloudWatch 代理运行错误
  • 时间戳问题

解决方法

注意:以下问题排查步骤不适用于 Container Insights。有关排查 Container Insights 问题的详细信息,请参阅排查 Container Insights 的问题如何排查 Amazon EKS 中的 pod 状态问题?

查看 CloudWatch 代理的安装方法

最佳实践是,在启动时使用 AWS CloudFormation、AWS Systems Manager 代理(SSM 代理)、用户数据脚本或 AWS 命令行界面 (AWS CLI) 安装 CloudWatch 代理。不建议在已安装 CloudWatch 代理的情况下创建 AMI。AMI 通常会从原始实例中捕获唯一的信息。元数据不同步,此状态可能导致 CloudWatch 代理不按预期方式运行。元数据不同步是很多 Windows 实例在处理 AMI 时需要 Sysprep 的原因。有关更多信息,请参阅如何使用 Sysprep 创建和安装自定义可重用 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 代理的系统默认设置。这些系统默认设置包括该代理的代理、区域和凭证信息。文件提供在以下位置。

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 创建的 CloudWatchAgentServerPolicy 和 CloudWatchAgentAdminPolicy 策略,而不是自定义策略。

解决 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 代理无法将日志写入该位置。

解决时间戳问题

检查 14 天以上或在未来超过两小时的日志事件时间戳。PutLogEvents 命令不允许在任一时间范围内进行日志批处理。

另外,请确认实例上的系统时间服务已正确配置。有关更多信息,请参阅:


这篇文章对您有帮助吗?

我们可以改进什么?


需要更多帮助?