Node.js OpsWorks 层控制台日志

Posted

技术标签:

【中文标题】Node.js OpsWorks 层控制台日志【英文标题】:Node.js OpsWorks Layer console logs 【发布时间】:2015-03-26 19:55:22 【问题描述】:

我有一个带有 Node.js 层和 Node.js 应用程序的 Opsworks 堆栈。我想知道是否有人知道我的应用程序的控制台日志在 ubuntu 14.04LTS 实例上的哪个位置打印。我知道 opsworks 使用 monit 来运行我的应用程序,但我不确定它将日志输出到哪里。

谢谢!

【问题讨论】:

【参考方案1】:

除非 console.log 的行为被改变,node 将把 console.log 日志输出到应用程序的标准输出 (stdout)。 如果您在控制台中运行节点应用程序或使用 ssh,您应该会在那里看到日志。 否则,请尝试将应用程序的标准输出重定向到一个文件,这样即使您在没有控制台的情况下运行它也可以看到它,方式如下: node myapp.js > logfile

首选方法是用户 Forever 以确保您的应用程序始终处于打开状态,并且您可以将输出(stdout 和 stderr)重定向如下:

/>forever -o forever.out -e forever.err myapp.js

【讨论】:

【参考方案2】:

太烦人了,在 Opsworks 上为 Node.JS 应用程序呈现的 Monit 配置并没有将输出发送到任何地方! Source for this claim。 (当我得知这件事时,我感到很惊讶!)

我建议做的是覆盖该模板 - 请参阅 the OpsWorks documentation on overriding templates:基本上您需要做的就是从 Amazon 复制粘贴 Monit 配置,但更改第 2 行以将输出重定向到文件,如下所示:

start program = "/bin/bash -c 'cd <%= @deploy[:deploy_to] %>/current ; source <%= @deploy[:deploy_to] %>/shared/app.env ; /usr/bin/env PATH=$PATH:/usr/local/bin PORT=<%= @deploy[:nodejs][:port] %> NODE_PATH=<%= @deploy[:deploy_to] %>/current/node_modules:<%= @deploy[:deploy_to] %>/current /usr/local/bin/node <%= @monitored_script %> &> <%= @deploy[:deploy_to] %>/current/log/production.log'"

【讨论】:

谢谢!是的,这很奇怪,他们不会将输出发送到任何地方。 感谢瑞恩威尔科克斯!我在aws-cookbook-boilerplate 中添加了类似的覆盖。 谢谢你 - 但是当你 SSH 到实例时,你如何访问日志以及在哪里查找它?谢谢! @Leo 日志将保存在 /srv/www/YOUR APP NAME/current/log/production 。 (或者我所做的,将该文件挂钩以由 AWS CloudWatch Log 或类似服务进行监控,以便您可以使用 Web UI。 非常感谢,@RyanWilcox【参考方案3】:

我通过执行以下操作找到了日志(类似于@RyanWilcox 的评论):

    我在 /srv/www/APP NAME/current/ 中找到了我的“当前”部署 列出文件,我可以看到日志目录符号链接(日志应该是 符号链接到 /srv/www/APP NAME/shared/log 之类的东西 我在尝试 cd 到这个目录时遇到了权限问题,所以我 使用命令“sudo”切换到没有密码的超级用户 su" 然后我就可以访问目录了 终于在logs目录下,可以看到nodejs的控制台日志了 对于 STDERR 和 STDOUT

...鲍勃的父亲是你父亲的父亲。

【讨论】:

【参考方案4】:

你可以在app目录中找到它然后你会发现这个路径shared/log

例如:/srv/www/my_app/shared/log

【讨论】:

以上是关于Node.js OpsWorks 层控制台日志的主要内容,如果未能解决你的问题,请参考以下文章

在 aws opsworks 上升级 node.js

如何配置 OpsWorks 以部署非官方支持的 Node.js 版本?

在 OpsWorks 中使用 Grunt 或 Gulp

通过 Cloudformation 将配方分配给 Opsworks 中的生命周期事件

将 Node.js 配置为记录到文件而不是控制台

没有这样的说明书 - OpsWorks 找不到自定义说明书