45

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

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

eb logs

但我想做(类似于heroku提供的)......

eb logs --tail

有没有人做到这一点?

谢谢!


一些参考资料:

4

12 回答 12

26

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


原答案:

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

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

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

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

于 2013-09-04T22:42:49.840 回答
16

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

eb logs -g /aws/elasticbeanstalk/yourApp-env/var/log/nodejs/nodejs.log --stream
于 2017-10-25T22:50:10.660 回答
12

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 的答案已经包含该--stream选项,但我一直浏览该答案,因为我想查看所有日志,而不仅仅是一组日志。如果我的记忆力更好,我就不必继续谷歌搜索相同的问题并结束在同一个地方。)

于 2018-03-23T20:13:13.903 回答
7

您可能不需要 eb 日志,请先eb ssh尝试

tail -f /var/log/*
于 2014-06-14T14:41:29.357 回答
2

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

./eb-tail env-name

或者

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

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

于 2016-02-14T15:38:47.863 回答
2

这就是我所做的:

获取您想要的日志文件的位置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
于 2017-10-13T18:59:35.367 回答
1

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

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

  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 面板上方流式传输日志,只需打开日志组并选择其下方提供的日志流即可。

于 2021-03-15T12:06:53.523 回答
0

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

于 2014-10-14T10:59:58.520 回答
0

我用来跟踪来自多个服务器(包括 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

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

于 2015-03-03T21:47:55.000 回答
0

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

于 2018-02-07T08:52:56.853 回答
0

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

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

瞧!

于 2020-05-16T07:30:02.947 回答
-6

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

eb 日志尾巴

查看 constants.py 第 129 行

于 2013-06-21T13:04:21.927 回答