amazon-web-services - Elastic Beanstalk CloudWatch 日志流停止工作 – 如何调试

标签 amazon-web-services amazon-ec2 amazon-elastic-beanstalk amazon-cloudwatchlogs

我的 Elastic Beanstalk 环境正在停止将 node.js 事件流式传输到 CloudWatch Logs。流式传输适用于新实例上的查看分钟。在查看分钟后,CloudWatch 中不再显示日志。

我将 AWS Elastic Beanstalk 设置为在配置 > 软件配置 > CloudWatch 日志 > 日志流 (true) 下将日志流式传输到 CloudWatch。我停用了日志流并重新激活它作为测试。看一下云表

  • 上一个 eb 事件日志大约 10 分钟前
  • 错误日志不可用(在两个实例上)
  • nginx/access.log 是旧 View
  • nodejs.log 大约一个小时前(重新启动实例后很短)

  • 但是,每次运行状况检查都会在每个 View 秒中写入一个日志条目到 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}
    

    最佳答案

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

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

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

    同样根据他们的文档,您应该在启用功能之前向 Elastic Beanstalk 添加一些策略 AWS-Docs

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

    关于amazon-web-services - Elastic Beanstalk CloudWatch 日志流停止工作 – 如何调试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42646269/

    相关文章:

    python - 使用 sagemaker api 调用端点时出错

    ios - 如何在 iOS 中将图像上传到 AWS S3?

    java - 如何使用 aws-java-sdk 从 S3 中逐 block 读取文件

    amazon-web-services - 云形成 : Publish to SNS topic

    c++ - 在 Amazon EC2 上安装测试应用程序

    amazon-web-services - 从 aws elastic beanstalk 中的 .ebextensions 文件夹运行脚本

    linux - Oracle Linux Server (ami-3f739c56) 的 AWS AMI 镜像的默认用户名是什么?

    Python Fabric 和 Amazon EC2 : Sudo password asked

    php - aws.push 到多个环境

    amazon-web-services - 用于私有(private) dockerhub 镜像的 Dockerrun.aws.json 文件