【问题标题】:Monitor node.js scripts running on ubuntu instance监控在 ubuntu 实例上运行的 node.js 脚本
【发布时间】:2015-09-23 08:35:27
【问题描述】:

我有一个 node.js 脚本,每天在 ubuntu EC2 实例上运行一次。该脚本从数十万个远程 API 中提取数据并保存到我们的本地数据库中。有什么方法可以在远程服务器上监控这个 node.js 脚本?很少有脚本由于某种原因而崩溃的情况,如果不通过 SSH 连接到实例并检查日志,我们就无法解决这个问题。然而,在最初的几次崩溃之后,我创建了一个小型系统,每当由于某些未捕获的异常而导致脚本崩溃以及脚本完成执行时,它都会向我们发送一封电子邮件。

但是,我们需要开发一个更好的系统,我们可以通过部署在其他实例上的管理应用程序的 Web 界面监控脚本的进度,并通过该界面触发脚本的启动/停止。实现这一目标有哪些可能的选择?

【问题讨论】:

  • 尝试使用记录器,我正在使用morgan 写入文件,然后我正在解析该文件以显示网页上的日志。它有不同的标志,指示日志类型为正常、警告、错误等。所以你可以只显示错误日志。在您的情况下,Winston 可能更适合您,因为它最适合remote-calls

标签: node.js monitoring


【解决方案1】:

如果你喜欢留在Node.js,那么有几个进程监控工具:

PM2 除了监控进程外,还有许多其他功能。您可以通过 CLI 或其官方 Web 界面监控您的流程:https://keymetrics.io/。在 npm 上快速搜索还提供了一堆不错的非官方 gui 工具:https://www.npmjs.com/search?q=pm2+web

Forever 不像 PM2 那样功能丰富,但会执行基本的流程操作,npm 中也提供了几个 gui。

【讨论】:

  • 感谢您的回答。过去一年半以来,我一直在使用 PM2 来运行和监控节点服务器,但它不适合我需要监控的当前场景。我更喜欢编写自己的自定义解决方案以在脚本中进行监控。
  • 是的,它只监控 CPU/内存使用情况。要监控其他矩阵,您需要自定义模块。
【解决方案2】:

这里有两个问题你要解决:

  1. 安排要完成的工作
  2. 监控进程是否失败

简单来说,这很容易:安排一个 cron 作业并重新启动失败的事情,以便它们继续尝试。

但是,当事情进展不顺利时,更详细地了解您正在安排的内容以及执行方式会有所帮助。这也可以让您了解每一项小工作。

增加一点复杂性,你可以得到这样的结果:

  1. 安排启动一切的脚本(通过 cron,如果方便的话)
  2. 该脚本会生成几个需要在队列中执行的作业
  3. 一个工作进程(或 n 个工作进程)使用该队列并执行挂起的作业
  4. 您可以监控作业的进度以及每个工作人员的状态(崩溃次数、失败次数、已完成的作业等)。上面提到的其他工具是很好的候选者(forever、pm2 等)

当作业失败时,其他工作人员可以拿起正在进行的小部分工作并重新启动它。这比重新启动整个过程要高效得多,并且还允许您根据如何拆分工作负载在 n 个工作人员之间并行处理。

您可以轻松地将状态发送到网络应用程序,这样您就可以定期签入,而不必挖掘服务器日志。

您还可以通过不同类型的故障变得更加聪明。网络错误?重试 5 次。额定有限?逐渐退缩。碰撞?不要重试并通过电子邮件通知。等等

【讨论】:

    【解决方案3】:

    我用 pm2 试过这个,你可以得到任务的信息,然后 cat out 或者抓取日志文件。或者你可以有一个日志服务器,另见:https://github.com/papertrail/remote_syslog2

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-30
      • 2012-06-22
      • 2017-04-27
      • 1970-01-01
      • 2019-04-09
      • 1970-01-01
      • 2014-06-14
      • 2018-02-15
      相关资源
      最近更新 更多