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

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

确保您的配置具有:

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

指纹识别问题

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

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

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

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

权限错误包括:

  • NoCredentialsError: Unable to locate credentials (NoCredentialsError: 无法查找凭证) 如果您尚未向实例中添加 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[...] (ClientError: 调用 PutLogEvents 操作时出现错误 (AccessDeniedException): 用户: arn:aws:iam::012345678910:<role/user>/<iam-user-name> 未被授权执行: 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. (退回到上一个事件时间: {'timestamp': 1492395793000, 'start_position': 17280L, 'end_position': 17389L}, previousEventTime: 1492395793000, 原因: 从消息中无法分析时间戳。)确认日志事件以时间戳开头。检查 /etc/awslogs/awslogs.conf 中指定的 datetime_format 是否与日志事件的时间戳格式匹配。根据需要更改 datetime_format 以匹配时间戳格式。
  • No file is found with given path '<PATH-TO-FILE>' (找不到具有给定路径 '<PATH-TO-FILE>' 的文件)代理配置文件中的日志文件路径更新为正确路径。
  • Caught exception: An error occurred (InvalidSequenceTokenException) when calling the PutLogEvents operation: The given sequenceToken is invalid[…] -or- Multiple agents might be sending log events to log stream[…] (捕获到异常: 调用 PutLogEvents 操作时发生错误 (InvalidSequenceTokenException): 给定的 sequenceToken 无效[…] -或- 可能有多个代理正在向日志流发送日志事件[…]) 不能从多个日志文件向单个日志流推送日志。更新配置,以将每个日志推送到日志流-日志组组合。

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

此页内容对您是否有帮助? |

返回 AWS Support 知识中心

需要帮助? 访问 AWS 支持中心

发布时间:2018 年 12 月 6 日