God进程监控框架

监控重启进程的方案有很多种:

  1. 最简单的方法,写个脚本fork进程运行,然后waitpid,如果获pid后就再次启动
  2. 最土的方法,配置cron任务,固定时间运行脚本检查进程是否存在,不存在则启动
  3. 百度使用qmail里的supervised程序,通过supervised监管进程。

    • 优点:supervised可以启动daemon程序,对于非daemon需要采用nohup的方式启动。
    • 缺点:每个进程都要配置自己的supervised,无法做到统一管理。
    • 百度对supervised进行过改造,线上有2个分支,基本功能类似,如:进程挂掉后的重启次数、重启前调用脚本处理、重启时报警功能。
  4. 使用supervisord
    supervisord是python写的进程监控工具(http://supervisord.org/),网上也有很详细的中文教程,提供2个工具supervisord和supervisorctl 

    • supervisord 用来启动supervisord
    • supervisorctl start/stop/restart/status [process_name] 对进程进行控制和状态查看
    • 提供一个http server,能够在浏览器查看和操作进程启停。同时提供xmlrpc功能,可以自己编写CLI程序远程call supervisord的接口
    • 缺点:不能对daemon程序监控,supervisord退出后会使被监管的进程也退出
  5. 使用monit
    monit的功能基本上和supervisord类似,占用内存也非常少,大概在2M左右,不过实在不喜欢它的进程配置语法。 

    • 优点:支持进程资源只用判断,当进程使用cpu/mem超过多少进行重启。当进程异常不断重启时,也支持各种条件。
  6. 使用god
    god的功能和supervisord、monit比较类似,接下来会重点介绍God的相关功能

God 进程监控

God是由ruby编写的进程监控框架(http://godrb.com),安装、配置都很简单,大概的功能如下:
优点:

    1. 启动和控制都使用一个命令: god
    2. 可以管理daemon和非daemon进程
    3. 可以设置进程的uid、env、dir、log等参数
    4. 进程配置文件和supervisord类似,但使用ruby的语法。支持类似monit的,对进程使用资源和各种条件的控制
    5. 支持进程配置动态加载功能
    6. 支持把多个进程配置拆分成单独的配置文件,类似include功能
    7. 支持通知功能,包括:Webhook、Email、Twitter、Jabber、Campfire等多个接口
    8. 根据PID的方式进行监控,GOD可以随便升级和重启

缺点:

    1. 不提供web端和rpc接口
    2. log查看stdrr/stdout 功能似乎不能正常work,不过我基本上用不到这个功能
    3. linux下采用2种方式检测进程poll和event。root默认启用event模式,如果启动的进程错误,它会注册一个proc_exit事件,但无法响应。

一、 安装


需要有ruby环境,>= ruby 1.8.7,支持redhat、ubuntu、centos

二、 一个简单的实例

  1. 编写一个简单的ruby程序,hello.rb:

  2. 编写进程配置文件,hello.god:

  3. 启动god,加载配置,有2种方式:

    1. 启动god同时加载配置: god -c hello.god
    2. 先启动god,再加载配置: god && god load hello.god

这个时候可以用ps查看,hello.rb已经启动起来。使用god status 可以查看到状态如下:

在hello.god配置中,我们配置了:memory_max和:cpu_max,当hello.rb使用cpu或mem超过我们配置的内容时,god就会重启该进程。

使用如下命令,对进程进行各种控制,具体见god –help:

三、 进一步使用

  1. 配置文件中加载其他god文件

  2. 已经启动god后,使用god load 动态加载配置
  3. god pid文件,root启动时在/var/run/god, 普通账号在~/.god/
  4. god -D 非daemon方式运行God
  5. god status 看到的状态有3种:up、unmonitored、error(一般不会出现)
  6. god支持设置uid,pid,dir,chroot,env等各种参数,详细见godrb.com
  7. 进程启动触发邮件发送,配置如下:

四、 经验分享

  1. 实际测试时,只有log功能不能正常工作
  2. 测试配置一个错误的w.start = “ruby ddd.rb”, ddd.rb不存在

    1. 在root环境下god默认使用event模式,由于该进程启动命令错误,注册一个proc_exit(pid_num)后,没有再次启动.
      使用god status 查看,进程一直是up状态,但查看进程pid不存在
    2. 使用poll模式进行进程监控,查看god日志。god不断重启该进程
      使用god status查看,进程也是up状态。查看代码,因为god在启动进程的时候会将它状态变成up状态,下次周期检查时,发现进程挂了,又重启,又将状态修改为up状态。
      所以在任何时刻下查看进程都是up状态,可以使用如下配置方式进行解决: 

  3. god使用ruby的drb进行通信,所以很容易写一个web server+xmlrpc功能,通过drb控制god.
  4. god load对.god内容正确性没有检查,可以使用god load 加载一个ruby程序。

原文链接:http://zoomq.qiniudn.com/ZQScrapBook/ZqFLOSS/tree/item20081015105037-frameset.html

原创文章,作者:追马,如若转载,请注明出处:http://www.178linux.com/468

(2)
追马追马
上一篇 2015-02-13 15:51
下一篇 2015-02-14 10:13

相关推荐

  • http

    练习:分别使用CentOS 7和CentOS 6实现以下任务 一、配置三个基于名称的虚拟主机          (a) discuzX          (b) wordpress  &nb…

    Linux干货 2016-10-09
  • 关于 LVM 逻辑卷管理

                  逻辑卷管理 (LVM)    允许对卷进行方便操作的抽象层,包括从新设定文件系统的大小   允许在多个设备间重新组织文件系统将设备指定为物理卷用一个或者多个物理卷来创建一个卷组物理卷是用固定大小的物理区…

    系统运维 2016-09-02
  • 浅谈TCP三次握手和四次分手

          TCP(Transmission Control Protocol传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议提供可靠的连接服务,采用三次握手确认建立一个连接,比如我们去访问一个网站,从输入网址到页面显示我们所想要浏览的内容,这个过程其中就包含了小编要说的三次握手和四次挥手。 一、首先我们来了解…

    2017-09-02
  • 磁盘和文件系统管理述

        我们知道一块磁盘是可以被分区成多个分区的(partition),以Windows的观点来看,你可能会有一颗磁盘并且将他分区成为C:, D:, E:盘,那个C, D,E就是分区。Linux的设备都是以文件的型态存在,磁盘设备接口的不同也早就了磁盘文件名的不同。即IDE接口的磁盘设备文件名都是/dev/hd[a-z…

    Linux干货 2016-08-29
  • 软链接与硬链接的区别

      这两牵扯到链接,那么先介绍以下链接。   在文件系统中,有一种可以把不同的文件相连接到一起的机制,这个机制叫做链接。通俗的话来说就是打开两个不同的文件夹,其实进去的是同一个。它可以把一个文件用不同的名字和路径来表示出来。系统通过inode(索引节点,文件唯一标识)来识别是否为同一个文件,无论系统上有有多少个链接,在磁盘上只有一个唯一的…

    2017-05-25
  • 胡说八道计算机网络之什么是网络(一)?

    胡说八道计算机网络之什么是网络(一) 什么是网络? 网络通信的实现:tcp/ip协议 使用Wireshark抓包分析tcp/ip协议栈 什么是网络?      所谓网络,就是通过一定的形式连接起来的物体,物体与物体之间可以实现通信。     比如这样的,就称为计算机网络。它可以实现计算机之…

    Linux干货 2017-05-01