在EC2上监视来自NodeJS的日志

我在AWS上有一个EC2实例,使用NodeJS运行HTTPS服务器。 我从/etc/rc.local启动我的NodeJS服务器,所以它会在每次启动时自动启动。

我有两个问题:

  1. 有没有更好的方法来启动一个HTTPS服务器监听端口443而不使用sudo path/to/node myScript.js ? 如果以root用户身份运行此过程,我将面临哪些风险?

  2. 我在哪里看到我的日志? 当从shell运行脚本时,我看到进程的日志,但是现在从rc.local运行时,如何访问服务器的输出?

谢谢!

使用sudo启动应用程序肯定不是一个好的做法。 您不应该使用根证书运行可公开访问的服务。 如果您的应用程序存在缺陷,并且有人发现此问题,则可能会在机器中使用更多服务。

你的应用程序应该从非特权端口(例如5000)开始,然后把nginx或apache作为反向代理,将内部stream量转发到在端口5000上运行的应用程序。pm2也build议类似这样的: http ://pm2.keymetrics.io/docs/tutorials/pm2-nginx-production-setup 。 在线search您将能够find如何configurationnginx在https上运行以及如何将所有stream量从http转发到https的教程。 你的应用程序不应该知道SSL证书等等。请记住,pm2模块应该在你的项目中本地安装,你必须利用package.json。 在那里,您可以定义一个任务,使用本地pm2模块在生产环境中引导您的应用程序。 好处是你不需要在全局安装pm2模块,你不会再次使用权限和超级用户来混淆这些事情。

我不认为日志是保存在某个地方,直到你会告诉它发生在rc.local脚本。 你如何在那里产生这个过程? 像这样的东西应该redirect到一个文件的标准输出:

 node path/to/node myScript.js 2> /var/log/my-app.rc.local.log # send stderr from rc.local to a log file` 

不过你在应用程序中不使用logging器吗? 我build议select一个(有像bunyan,winston等很多可用),并用logging器replace所有的console.logs 。 然后,您可以在应用程序中明确定义日志的保存位置,一般情况下可以有不同的日志级别和更多function。

不是一个直接的答案,更多的是在这里经验的小回报。

在AWS的生产中,我们有一个沉重的使用过的nodejs应用程序,在一个非docker的设置(现在;))。

我们有一个专门用来运行节点应用程序的用户,我猜如果你用root启动你的节点进程,它有root权限,这不是一个安全的事情。

为了运行这个应用程序,我们使用pm2作为进程pipe理器,它允许在失败的时候重新启动节点进程,并且扩展worker的数量以匹配EC2实例的核心数量。 您还可以使用./path/to/node ./node_modules/.bin/pm2 logs ,并可以将其发送到任何您想要的(从ELK到hipchat)。

My2cents。