为什么我无法使用 awslogs 代理将日志数据推送到 CloudWatch Logs?

2 分钟阅读
0

我无法使用 CloudWatch Logs 代理 (awslogs) 将日志数据推送到 Amazon CloudWatch Logs。

解决方法

在开始之前,请确认 awslogs 代理可以连接到 CloudWatch Logs API 端点。

确保您的配置具有以下属性:

  • 互联网连接
  • 有效的安全组配置
  • 有效的网络访问控制列表(网络 ACL)

重要事项: 此参考适用于不再受支持的早期 CloudWatch Logs 代理。如果您使用实例元数据服务版本 2(IMDSv2),则必须使用新的统一 CloudWatch 代理。即使您没有使用 IMDSv2,也最好使用更新的统一 CloudWatch 代理而不是日志代理。

指纹识别问题

查看源日志文件的标题行。在配置要推送到 CloudWatch 的数据时,您可以设置此文件的路径。

  • 如果前几行为空或包含保持不变的非事件数据,则日志识别哈希可能存在问题。
  • 如果标题行相同,则更新代理配置文件中的 file_fingerprint_lines 选项。确保在每个文件中指定用于生成识别哈希的行。

检查 awslogs 日志文件中是否存在错误

查看 /var/log/awslogs.log 日志文件。确保记下所有错误消息。

权限错误包括:

  • NoCredentialsError: 找不到凭证 – 如果您没有向实例添加 AWS Identity and Access Management(IAM)角色,请创建并附加 IAM 角色。如果您已经向实例添加 IAM 角色,请更新 /etc/awslogs/awscli.conf 文件中的 IAM 用户凭证。
  • ClientError: 调用 PutLogEvents 操作时出错 (AccessDeniedException): 用户 arn:aws:iam::012345678910: / 无权执行 logs:PutLogEvents[...]为 IAM 角色或用户配置 CloudWatch Logs 所需的权限

时间戳错误包括:

  • 回退到之前的事件时间:{'timestamp': 1492395793000, 'start_position': 17280L, 'end_position': 17389L}, previousEventTime: 1492395793000,原因:无法从消息中解析时间戳。 – 确认日志事件以时间戳开头。检查 /etc/awslogs/awslogs.conf 中指定的 datetime_format 是否与日志事件的时间戳格式匹配。根据需要更改 datetime_format 以与时间戳格式匹配。
  • **未找到具有给定路径 ' ' 的文件 ** – 将代理配置文件中的日志文件路径更新为正确的路径。

其他 awslogs 问题

  • 如果日志轮换后日志停止推送,请检查支持的日志轮换方法。有关更多信息,请参阅 CloudWatch Logs 代理常见问题
  • 如果仅在 awslogs 代理重新启动后才短暂推送日志,请检查代理配置文件的 [logstream] 部分中是否存在重复内容。每个部分必须有唯一的名称。
  • 如果 awslogs.log 日志文件占用过多的磁盘空间,请检查日志文件中是否存在错误,然后进行更正。如果日志文件仅包含信息性消息,则在代理配置文件中为 logging_config_file 选项指定较低的日志记录级别。

进一步的故障排除

要进一步进行故障排除,请记下 instance-id(您的实例的 ID)。然后,根据您的配置收集并查看以下内容。

Yum 安装:

  • yum 版本
$ yum info awslogs
$ yum info aws-cli-plugin-cloudwatch-logs
  • /etc/awslogs/awslogs.conf 文件
  • /etc/awslogs/awscli.conf 文件
  • /etc/awslogs/ 中的其他相关文件
  • /var/log/awslogs.log 文件

基于脚本的安装:

  • 使用以下命令获取的 awslogs 版本:
$ /var/awslogs/bin/awslogs-version.sh
  • /var/awslogs/etc/awslogs.conf 文件
  • /var/awslogs/etc/awscli.conf 文件
  • /var/awslogs/etc/ 中的其他相关文件
  • /var/log/awslogs.log
  • /var/log/awslogs-agent-setup.log

对于轮换相关的问题,请收集并查看:

  • 源日志的片段
  • 监视目标目录的内容列表。使用带有目录路径的命令 ls-la 获取以下内容:
$ ls -la <Monitoring-Target-Directory-Path>

相关信息

CloudWatch 日志入门

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