如何通过upstart和monit监控多个nodejs服务?

如何通过upstart和monit监控多个nodejs服务?

我创建了一个 upstart 脚本,用于守护一个 node.js 应用程序。upstart 脚本如下:

description "app_name"

start on startup
stop on shutdown

script
    export HOME="/home/ubuntu/nodeapp"

    exec sudo -u nodejs /usr/local/bin/node $HOME/app/server.js production 2>>/var/log/app_name.error.log >>/var/log/app_name.log
end script

我的监控脚本如下:

check host app_name with address 127.0.0.1
    start "/sbin/start app_name"
    stop "/sbin/stop app_name"
    if failed port 80 protocol HTTP
        request /ok
        with timeout 5 seconds
        then restart

它工作正常,但现在我想添加 nginx 作为上游的负载平衡器,如下所示:

upstream cluster1 {
  least_conn;
  server 127.0.0.1:8000;
  server 127.0.0.1:8001;
}

server {
    listen 0.0.0.0:80;

    location / {
    proxy_pass http://cluster1;
    }
}

那么我应该如何更改 upstart 和 monit 脚本来支持两个服务?我是否需要再编写一个 upstart 和 monit 脚本?

谢谢。

答案1

对于 monit,您可以使用单独的配置文件/etc/monit.d(或服务配置文件的任何目录),其内容如下:

check process nginx with pidfile /var/run/nginx.pid
  if failed host localhost port 80 
       protocol HTTP request "/ok" then restart
  start program = "/etc/init.d/nginx start"
  stop program  = "/etc/init.d/nginx stop"
  group www-data (for ubuntu, debian)

官方有更多配置示例监控站点。您可以查看 Apache 示例以进行进一步的测试。

对于 Upstart 来说,Nginx 的文档有一个例子

在某种程度上,同时使用 Monit 和 Upstart 有点矫枉过正,而且可能会产生冲突。两者都会重生进程(尽管 Monit 允许对服务进行更详细的测试),并且您可能会遇到一种奇怪的情况,即如果服务意外终止,它们都会争相重新启动服务。更精简的方法是使用 Monit 来监控这些服务(使用您想要的任何额外的 HTTP 探测和内存/CPU 使用情况检查),然后使用 Upstart 来确保 Monit 正在运行。

相关内容