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

上次更新时间:2020 年 11 月 6 日

我在无法使用 CloudWatch Logs 代理 (awslogs) 向 Amazon CloudWatch Logs 推送日志数据。如何解决此问题?

解决方案

开始之前,请先确认 awslogs 代理能够连接至 CloudWatch Logs API 终端节点。

确保您的配置具有以下内容:

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

指纹识别问题

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

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

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

查看 /var/log/awslogs.log 日志文件。请务必注意所有错误消息。

权限错误包括:

  • NoCredentialsError: Unable to locate credentials - 如果您未向实例中添加 AWS Identity and Access Management (IAM) 角色,请创建并附加一个 IAM 角色。如果您已经向实例中添加 IAM 角色,请在 /etc/awslogs/awscli.conf 文件中更新 IAM 用户凭证。
  • ClientError: An error occurred (AccessDeniedException) when calling the PutLogEvents operation: User: arn:aws:iam::012345678910:<role/user>/<iam-user-name> is not authorized to perform: logs:PutLogEvents[...] - 为 CloudWatch Logs 配置具有所需权限的 IAM 角色或用户

时间戳错误包括:

  • Fall back to previous event time: {'timestamp': 1492395793000, 'start_position': 17280L, 'end_position': 17389L}, previousEventTime: 1492395793000, reason: timestamp could not be parsed from message. - 请确认日志事件以时间戳开始。检查 /etc/awslogs/awslogs.conf 中指定的 datetime_format 是否与日志事件的时间戳格式匹配。根据需要更改 datetime_format 以匹配时间戳格式。
  • No file is found with given path '<PATH-TO-FILE>' - 将代理配置文件中的日志文件路径更新为正确路径。
  • Caught exception: An error occurred (InvalidSequenceTokenException) when calling the PutLogEvents operation: The given sequenceToken is invalid[…] - 或 - Multiple agents might be sending log events to log stream[…] - 您不能从多个日志文件向单个日志文件推送日志。更新配置,以将每个日志推送到日志流 - 日志组组合。

其他 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>

这篇文章对您有帮助吗?


您是否需要账单或技术支持?