【问题标题】:Is there a CLI to tail logs from AWS Elastic Beanstalk是否有 CLI 来跟踪来自 AWS Elastic Beanstalk 的日志
【发布时间】:2013-06-07 18:20:25
【问题描述】:

是否有用于从 Elastic Beanstalk 应用程序跟踪日志的 CLI 实用程序。特别是一个 python 烧瓶应用程序。

您可以使用他们的 eb CLI 获取快照...

eb logs

但我想做(类似于heroku offers)...

eb logs --tail

有人做到了吗?

谢谢!


一些参考资料:

【问题讨论】:

标签: logging amazon-elastic-beanstalk


【解决方案1】:

2021 年更新:

现在最好的方法可能是使用 AWS CLI v2:

aws logs tail $log_group_name --follow

(注意:由于权限错误,我无法让它为我工作。)

我之前的回答是:

现在很简单:

eb logs --stream

https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/eb3-logs.html

(我意识到posit lab's answer 已经包含了--stream 选项,但我一直浏览该答案,因为我想查看所有日志,而不仅仅是一组。如果我的记忆更好,我就不必保留谷歌搜索同样的问题并在同一个地方结束。)

【讨论】:

  • 我收到此错误:ERROR: InvalidOptionsError - Can't retrieve instance logs for environment huru-api2-dev. Instance log streaming is disabled.
  • 可能需要先运行eb logs --cloudwatch-logs enable
  • @JarvisJohnson 我运行了这个并得到了The following instances have not responded in the allowed command timeout time. Unsuccessful command execution on instance id(s) '<instance-id>'. Aborting the operation. 不知何故 Beanstalk 对于我尝试的任何操作都非常慢。任何事情都会导致超时。
  • 嗨!我通过调用eb logs --stream 得到输出,但是当新的日志条目进入时它不会自动更新。我必须再次运行该命令才能看到新条目。任何线索可能是什么问题?
【解决方案2】:

更详细的答案,因为我在 SSH 中使用 eb logs --streamtail 时遇到错误:

  1. 使用此命令 eb logs --cloudwatch-logs enable 在 eb CLI 中启用 Cloudwatch。

  2. 转到 AWS 控制台并打开 Cloudwatch。现在,转到 Logs Groups,选择要流式传输的日志,在我的情况下为 web.stdout.log,然后 复制下图中突出显示的路径

  3. 现在,再次打开 eb CLI 并输入 eb logs -g your_copied_path --stream。例如:eb logs -g /aws/elasticbeanstalk/yourEbsApp-env/var/log/web.stdout.log --stream。然后日志拖尾将开始。

  4. (可选)您完全可以跳过第 3 点,直接在上面的 CloudWatch 面板中流式传输日志,只需打开日志组并 选择它下面提供的日志流。

【讨论】:

    【解决方案3】:

    对我来说,它涉及两个步骤。

    你需要运行eb logs --stream,但在此之前,运行: eb logs --cloudwatch-logs enable

    瞧!

    【讨论】:

      【解决方案4】:

      我用来跟踪来自多个服务器(包括 aws)的多个日志的方法如下:

      for $server in server-1 server-2 server-3 server-4; do
          ssh -t $server -f "tail -f /var/log/some-process/error.log|sed -e 's/^/$server /'" &
      done
      

      来源:https://gist.github.com/iolloyd/da60ef316643d7894bdf

      它允许我监控本地机器中的多个远程实例。

      【讨论】:

        【解决方案5】:

        更新:我的回答不断获得支持,但自 2013 年以来情况发生了变化。现在跟踪 EB 日志更容易了——查看posit labs's answer 以获得更简单的方法:-)。


        原答案:

        我也一直在努力解决这个问题。 eb CLI 实用程序目前似乎不允许跟踪您的应用程序日志。

        但是,您可以通过以下方式跟踪这些日志:

        1. 在 EC2 控制台中创建密钥对(应该会为您提供 .pem 文件)
        2. 将您的 EB 实例链接到此密钥对(在 EB 控制台中)
        3. 在 EC2 控制台中查找您的实例的公有 DNS
        4. 通过 ssh (`ssh -i [yourpemfile.pem] ec2-user@[your.public.dns]
        5. 连接到您的实例
        6. 跟踪您的日志文件。对于 Node.js 应用程序,它是 tail -f /var/log/nodejs/nodejs.log。我不知道 Flask 应用程序的等价物是什么。

        (感谢Richard Soutar 为我指明了正确的方向。)

        【讨论】:

        • tail -f /var/app/current/log/production.log 用于使用 AWS Beanstalk 部署的 Rails 应用程序
        • eb ssh 允许跳过 1-4 步并直接转到您正在运行的实例之一
        • 对于带有 puma 的导轨,以下对我有用:eb ssh 然后 tail -f /var/log/puma/puma.log
        • @AlekseyKulikov 建议您将其作为答案。我差点没看你的评论。
        【解决方案6】:

        这不使用 eb-cli,但流式传输日志的最简单方法是使用 eb logs -cw enable 然后在 cloudwatch 门户中读取流。

        【讨论】:

          【解决方案7】:

          您可以使用-g 标志设置日志组,然后使用--stream 流式传输结果。无需 ssh 进入特定机器。

          eb logs -g /aws/elasticbeanstalk/yourApp-env/var/log/nodejs/nodejs.log --stream
          

          【讨论】:

          • hmmm 我们如何得到那条路径?我正在使用 docker,所以它会是 eb logs -g /aws/elasticbeanstalk/yourApp-env/var/log/docker/docker.log --stream 吗?我讨厌猜测兄弟大声笑
          • 我收到此错误:ERROR: InvalidOptionsError - Can't retrieve instance logs for environment huru-api2-dev. Instance log streaming is disabled.
          • 这适用,但不适用于即将到来的日志。它仅记录一次。未显示新的日志
          【解决方案8】:

          这就是我的工作:

          eb logs获取你想要的日志文件的位置

          eb logs
          

          EB 显示的每个日志都带有------- 前面/前缀。例如,对于 Rails 上的乘客日志:

          -------------------------------------
          /var/app/support/logs/production.log
          -------------------------------------
          

          然后 SSH 进入服务器并跟踪日志:

          eb ssh    # may have to eb ssh --setup for first time use
          
          # from inside the server
          tail -f /var/app/support/logs/production.log
          

          【讨论】:

            【解决方案9】:

            你可能不需要 eb 日志,先试试eb ssh 然后

            tail -f /var/log/*
            

            【讨论】:

              【解决方案10】:

              所以对于还在寻找它的人,我写了一个小工具来跟踪弹性beantalk环境的日志,你只需要指定环境名称和文件名,它会做SSH并跟踪每个实例的文件。

              ./eb-tail env-name
              

              ./eb-tail env-name -f '/path/to/file'
              

              https://github.com/ahmednasir91/eb-tail

              【讨论】:

                【解决方案11】:

                您不能直接跟踪日志,因为 AWS EB 将多个日志聚合在一起。假设它是您感兴趣的应用程序日志,您可以转到 EC2 选项卡并按下实际服务器上的连接按钮(您可能需要定义 key-对,只需按照说明进行操作)。登录到服务器后,您可以从那里跟踪您的日志。

                【讨论】:

                  【解决方案12】:

                  我没有可以测试它的环境,但从查看代码看来你可以做到:

                  eb 日志尾

                  查看 constants.py 第 129 行

                  【讨论】:

                  • 我离开 EB 有几个原因。让我知道是否有人可以确认这一点。
                  • 不幸的是,eb logs tail 看起来与 eb logs 没有任何区别
                  • ERROR: No Environment found for EnvironmentName = 'tail'.
                  • 这个答案是错误的。 eb cli中没有这样的东西。
                  猜你喜欢
                  • 2021-06-26
                  • 2019-02-11
                  • 2015-01-14
                  • 2021-04-14
                  • 2017-09-22
                  • 2017-10-18
                  • 2023-04-06
                  • 2017-04-04
                  • 1970-01-01
                  相关资源
                  最近更新 更多