Elastic Beanstalk CloudWatch 日志流停止工作 – 如何调试

Posted

技术标签:

【中文标题】Elastic Beanstalk CloudWatch 日志流停止工作 – 如何调试【英文标题】:Elastic Beanstalk CloudWatch Log streaming stops working – How to debug 【发布时间】:2017-07-27 12:59:40 【问题描述】:

我的 Elastic Beanstalk 环境正在停止将 node.js 事件流式传输到 CloudWatch Logs。流式处理在新实例上的视图分钟内工作正常。查看几分钟后,CloudWatch 中不再显示日志。

我在配置 > 软件配置 > CloudWatch 日志 > 日志流式处理 (true) 下设置 AWS Elastic Beanstalk 以将日志流式传输到 CloudWatch。我停用了日志流并将其重新激活为测试。看看cloudwatch

上次 eb 活动日志大约 10 分钟前 错误日志不可用(在两个实例上都没有) nginx/access.log 是一个视图秒旧 nodejs.log 大约一个小时前(重新启动实例后不久)

不过,每次运行状况检查都会在每个视图秒数中写入一个日志条目到 nodejs.log 中。

我没有在 ec2 实例上找到任何关于日志流的日志。

    有没有类似的问题? 如何使 Elastic Beanstalk 将 nodejs 日志流式传输到 CloudWatch 日志。

--- 编辑

[ec2-user@ip-###-##-##-## log]$ cat /var/log/awslogs.log 
2017-03-07 11:01:05,928 - cwlogs.push.stream - INFO - 31861 - Thread-1 - Detected file rotation, notifying reader
2017-03-07 11:01:05,928 - cwlogs.push.stream - INFO - 31861 - Thread-1 - Reader is still alive.
2017-03-07 11:01:05,928 - cwlogs.push.stream - WARNING - 31861 - Thread-1 - No file is found with given path '/var/log/httpd/error.log*'.
2017-03-07 11:01:05,928 - cwlogs.push.stream - WARNING - 31861 - Thread-1 - No file is found with given path '/var/log/httpd/access.log*'.
2017-03-07 11:01:06,052 - cwlogs.push.reader - INFO - 31861 - Thread-8 - No data is left. Reader is leaving.
2017-03-07 11:01:10,929 - cwlogs.push.stream - INFO - 31861 - Thread-1 - Removing dead reader [2177a5cce5ed29525de329bfdc292ff1, /var/log/nginx/access.log]
2017-03-07 11:01:10,929 - cwlogs.push.stream - INFO - 31861 - Thread-1 - Starting reader for [92257964a10edeb586f084f4f2ba35de, /var/log/nginx/access.log]
2017-03-07 11:01:10,930 - cwlogs.push.reader - INFO - 31861 - Thread-11 - Start reading file from 0.
2017-03-07 11:01:10,930 - cwlogs.push.stream - WARNING - 31861 - Thread-1 - No file is found with given path '/var/log/httpd/error.log*'.
2017-03-07 11:01:10,930 - cwlogs.push.stream - WARNING - 31861 - Thread-1 - No file is found with given path '/var/log/httpd/access.log*'.
2017-03-07 11:01:15,931 - cwlogs.push.stream - WARNING - 31861 - Thread-1 - No file is found with given path '/var/log/httpd/error.log*'.
2017-03-07 11:01:15,931 - cwlogs.push.stream - WARNING - 31861 - Thread-1 - No file is found with given path '/var/log/httpd/access.log*'.
2017-03-07 11:01:16,788 - cwlogs.push.publisher - INFO - 31861 - Thread-7 - Log group: /aws/elasticbeanstalk/production/var/log/nginx/access.log, log stream: i-0bd24767864801e2c, queue size: 0, Publish batch: 'skipped_events_count': 0, 'first_event': 'timestamp': 1488884470930, 'start_position': 0L, 'end_position': 114L, 'fallback_events_count': 0, 'last_event': 'timestamp': 1488884472931, 'start_position': 341L, 'end_position': 454L, 'source_id': '92257964a10edeb586f084f4f2ba35de', 'num_of_events': 4, 'batch_size_in_bytes': 554
2017-03-07 11:01:20,932 - cwlogs.push.stream - WARNING - 31861 - Thread-1 - No file is found with given path '/var/log/httpd/error.log*'.
2017-03-07 11:01:20,932 - cwlogs.push.stream - WARNING - 31861 - Thread-1 - No file is found with given path '/var/log/httpd/access.log*'.
2017-03-07 11:01:25,933 - cwlogs.push.stream - WARNING - 31861 - Thread-1 - No file is found with given path '/var/log/httpd/error.log*'.
2017-03-07 11:01:25,933 - cwlogs.push.stream - WARNING - 31861 - Thread-1 - No file is found with given path '/var/log/httpd/access.log*'.
2017-03-07 11:01:27,881 - cwlogs.push.publisher - INFO - 31861 - Thread-7 - Log group: /aws/elasticbeanstalk/production/var/log/nginx/access.log, log stream: i-0bd24767864801e2c, queue size: 0, Publish batch: 'skipped_events_count': 0, 'first_event': 'timestamp': 1488884481933, 'start_position': 454L, 'end_position': 568L, 'fallback_events_count': 0, 'last_event': 'timestamp': 1488884482934, 'start_position': 568L, 'end_position': 681L, 'source_id': '92257964a10edeb586f084f4f2ba35de', 'num_of_events': 2, 'batch_size_in_bytes': 277

【问题讨论】:

检查 /var/log/awslogs.log 文件是否有错误并确保 awslogs 服务正在运行 @b.b3rn4rd:找到了,但是这个文件没有提到 nodejs 日志,也没有任何问题。 它在文档中提到 我猜你指的是docs.aws.amazon.com/elasticbeanstalk/latest/dg/…?我尝试检查配置,但在 ec2 实例的任何位置都找不到 eb-logs.config 或该页面上描述的任何其他配置。 /var/log/awslogs.log 中没有错误。在 awslogs.log 的前两个日志轮换周期(2 小时)时,nodejs.logs 将发布到 cloudwatch 日志。第三个 los 文件不再包含任何 nodejs 日志。完全没有错误。 【参考方案1】:

当Andrew (@andrew-ferk) 和我自己激活日志流时,它使用当前日志在 CloudWatch 中创建了所有日志组和流。再次部署后,我们注意到日志停止了。这是因为 aws 对日志的第一行进行哈希处理。如果它在处理该文件之前已经看到该哈希,则该文件已被处理

如果您使用npm start,第一行将是您的应用程序名称和版本。

您可以将CMD date && npm start 添加到您的 dockerfile 以每次触发不同的第一行或在静默模式下运行 npm(只要您的第一个输出是唯一的)。

此外,根据他们的文档,您应该在启用该功能 AWS-Docs 之前向您的 elastic-beanstalk 添加一些策略


  "Version": "2012-10-17",
  "Statement": [
    
      "Effect": "Allow",
      "Action": [
        "logs:CreateLogGroup",
        "logs:CreateLogStream",
        "logs:GetLogEvents",
        "logs:PutLogEvents",
        "logs:DescribeLogGroups",
        "logs:DescribeLogStreams",
        "logs:PutRetentionPolicy"
      ],
      "Resource": [
        "*"
      ]
    
  ]

【讨论】:

【参考方案2】:

以下常见问题解答可能会有所帮助:

CloudWatch Logs Agent FAQs Why can’t I push log data to CloudWatch Logs with the awslogs agent?

检查您是否正在流式传输自定义日志文件的一些事项:

    eb ssh 进入实例并查看/var/log/awslogs.log。如果这甚至没有提到“从(您的 awslogs 配置文件)加载其他配置”,请确保您正确安装配置文件并在安装后重新启动 awslogs 服务(大概使用.ebextensions。请参阅“自定义日志Using Elastic Beanstalk with Amazon CloudWatch Logs 中的“文件流”。有关如何重新启动 awslogs 服务,请参阅 logs-streamtocloudwatch-linux.config 中的 commands 部分。 CloudWatch Logs 代理是有状态的。如果日志文件的前几行是空白或从未更改,则可能需要设置file_fingerprint_lines。见CloudWatch Logs Agent Reference。

【讨论】:

以上是关于Elastic Beanstalk CloudWatch 日志流停止工作 – 如何调试的主要内容,如果未能解决你的问题,请参考以下文章

elastic-beanstalk http请求超时

在 AWS Elastic Beanstalk 和 EKS 上部署了一个 laravel 应用程序 相同的数据库 RDS 为啥在 Elastic Beanstalk 中获得快速响应

AWS Elastic Beanstalk CLI 安装错误

text codepipeline + Elastic Beanstalk

text AWS Elastic Beanstalk

[AWS] Elastic Beanstalk