【问题标题】:Watch logs from NodeJS on EC2在 EC2 上查看来自 NodeJS 的日志
【发布时间】:2022-03-03 22:53:28
【问题描述】:

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

我有两个问题:

  1. 有没有更好的方法可以在不使用sudo path/to/node myScript.js 的情况下启动在端口 443 上侦听的 https 服务器?如果我以 root 身份运行此进程会有什么风险?

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

谢谢!

【问题讨论】:

    标签: node.js logging amazon-ec2


    【解决方案1】:

    使用 sudo 启动应用程序肯定不是一个好习惯。您不应使用 root 凭据运行可公开访问的服务。如果您的应用程序存在缺陷并且有人发现了这一点,那么访问机器中的更多服务就有危险。

    您的应用程序应该从非特权端口(例如 5000)开始,然后将 nginx 或 apache 作为反向代理,将内部流量转发到在端口 5000 上运行的应用程序。pm2 建议类似这样好吧:http://pm2.keymetrics.io/docs/tutorials/pm2-nginx-production-setup。在线搜索您将能够找到有关如何配置 nginx 以在 https 上运行以及如何将所有流量从 http 转发到 https 的教程。您的应用程序不应该知道 ssl 证书等。请记住,pm2 模块应该安装在您的项目中本地,并且您必须利用 package.json。在那里,您可以定义一个任务,该任务将使用本地 pm2 模块在生产环境中启动您的应用程序。好处是不用全局安装 pm2 模块,也不会再被权限和超级用户搞砸了。

    我认为日志不会保存在某个地方,除非您告诉它发生在 rc.local 脚本中。你如何在那里产生这个过程?类似的东西应该将标准输出重定向到一个文件:

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

    您不是在您的应用程序中使用记录器吗?我建议选择一个(有很多可用的,比如 bunyan、winston 等),然后用记录器替换你所有的 console.logs。然后,您可以在应用程序中明确定义将保存日志的位置,通常可以有不同的日志级别和更多功能。

    【讨论】:

      【解决方案2】:

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

      我们在 AWS 上使用非 Docker 设置(目前 ;))大量使用 nodejs 应用程序。

      我们有一个专门运行节点应用程序的用户,我猜如果你用 root 启动你的节点进程,它就有 root 访问权限,这样做并不安全。

      为了运行我们使用pm2 作为进程管理器的应用程序,它允许在节点进程失败时(并且会)重新启动节点进程,并扩展工作线程的数量以匹配您的 EC2 实例的核心数量.您还可以使用./path/to/node ./node_modules/.bin/pm2 logs 访问所有工作人员的日志,并且可以将其发送到您想要的任何位置(从 ELK 到 slack)。

      My2cents。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-08-19
        • 1970-01-01
        • 2023-01-15
        • 1970-01-01
        • 1970-01-01
        • 2022-11-06
        • 2015-06-02
        • 2022-01-06
        相关资源
        最近更新 更多