使用monit监控服务进程和硬盘以及自动重启进程

  需求

  需要服务器运行的程序在被意外杀死时,能自动重启,同时提醒我程序发生过重启。在服务器硬盘使用量达到一定比例的时候,提醒迁移数据或者清理无用的日志文件,所以需要一个服务器的守护程序(能在centos上运行),要求轻量简单占用少,根据上面的需求,找到了supervisor和monit2款软件

  supervisor 和 monit的对比

  因为主要是要满足以上我们的需求,所以我们根据实际需求来对比,而不是完全对比软件本身

  进程守护

  supervisor:

  优点:采用托管的方式守护,一旦进程异常能马上检查出来,可以指定目录,对启动命令本身修改不大

  缺点:只能启动前台进程,一旦supervisor发生重启会再次启动进程,导致进程再次被启动(不知道有没有办法避免,)

  monit:

  优点:有基于pid文件和正则匹配的检查进程,不会导致进程重复启动

  缺点:通过定时检查的方式检查进程,存在一定延时,另外启动命令必须要包含完整的路径

  提醒

  supervisor:需要使用第三方插件才能实现邮件提醒功能,本身并不支持邮件提醒

  monit:原生支持邮件提醒功能

  磁盘监控

  supervisor:本身只是为了守护进程,所以需要第三方扩展才可以监控磁盘

  monit:原生支持磁盘监控

  轻量级占用少

  supervisor:基于Python开发,轻量级

  monit:轻量级

  其他

  2款软件都提供了网页管理的功能,monit能在页面中直接对进程进行重启,停止和启动操作,supervisor能直接在页面中查看软件输出的日志

  综合以上的对比,最后觉得还是monit适合我们,所以我们选择了monit

  安装和配置monit

  在centos中,可以直接通过yum命令安装

  sudo yum install -y monit

  安装完成后执行命令

  sudo vi /etc/monitrc

  编辑配置文件

  set daemon 30 # 每隔30秒检测一次

  set log syslog # 日志配置

  set mailserver smtp.office365.com port 587 # 邮箱的smtp服务器和端口

  username "xxxxxx@outlook.com" password "xxxxx" # 邮箱的账号和密码

  using tlsv1, STARTTLS # 是否使用ssl和加密串

  set alert xxxxxx@qq.com # 接受提醒的邮箱,可以配置多条

  # 邮箱的模板配置

  set mail-format {

  from: xxxxxx@outlook.com # 同上面的发件邮箱账号相同即可

  subject: monit alert -- $EVENT $SERVICE

  message: $EVENT Service $SERVICE

  Date: $DATE

  Action: $ACTION

  Host: $HOST

  Description: $DESCRIPTION

  Your faithful employee,

  Monit

  }

  set httpd port 2812 and # http服务的端口

  use address localhost # 只能通过localhost访问,这里是指的URL只能是localhost:2812,如果不用,去掉或者注释此条

  allow localhost # 只允许本机访问,如果要其他IP能访问,注释此条

  allow username:password # 访问页面的用户密码

  include /etc/monit.d/* # 导入配置文件,我们将具体的软件守护和磁盘监控配置到这里的文件夹里面

  服务类型

  首先需要理解在monit里什么是服务(service)。看监控语法:

  check <类型> <服务名> [PATH ] [ADDRESS ]

  其中类型是monit支持的监控类型,一共有:system、file、process、fifo、filesystem、directory、host、network、program。 服务名必需是英文且唯一,不可以出现重复! 后面的带[]是根据类型需要添加的。

  进程

  CHECK PROCESS | MATCHING >

  进程有2种判断模式,一种是pid文件,一种是名称匹配 pidfile 后面的是pid文件的绝对路径。pid文件是一个包含进程唯一ID的文件。如果pid文件不存在或不包含正在运行的进程的PID编号,则Monit将调用该条目的start方法(如果已定义)

  如果进程本身并不存在pid文件,那么就可以使用名称匹配。名称匹配会选择具有最长正常运行时间的最顶部匹配的父级,因此如果进程名称是唯一的,则此检查形式是最有用的。应该尽可能使用Pid文件,因为它定义了预期的PID。您可以测试一个进程是否匹配来自命令行使用的模式monit procmatch "regex-pattern"。这将列出匹配的所有进程

  监控程序

  配置程序监控,以Tomcat为例,在/etc/monit.d/文件夹中创建tomcat文件,文件内容如下:

  #tomcat

  check process tomcat with matching "tomcat"

  start program="/usr/local/tomcat/bin/startup.sh"

  stop program="/usr/local/tomcat/bin/shutdown.sh"

  第一行代码是注释,第二行代码是判断进程tomcat是否在运行,是通过名称匹配的,第三行是配置的启动脚本路径,第四行是配置的停止脚本路径

  另外需要注意的是,如果在启动或者停止脚本的时候需要用到其他软件或者包含路径的时候,比如nohup等,一定要使用绝对路径,否则可能会出错导致无法启动

  磁盘

  CHECK DEVICE PATH

  在服务器中,很多时候日志文件除了会写入数据库、搜索引擎外,Tomcat的日志本身也会保留,所以也需要注意服务器的磁盘剩余空间占用

  #vda1

  check device vda1 with path /dev/vda1

  if space usage > 80% then alert

  这里是判断如果vda1这个磁盘使用空间大于80%就发邮件提醒

  其他监控

  文件

  CHECK FILE PATH

  是文件的绝对路径。如果文件不存在,Monit将调用该条目的start方法(如果已定义),如果不指向常规文件类型(例如目录),Monit将禁用此条目的监视。如果Monit在被动模式下运行或者没有定义start方法,Monit只会在错误时发送警报。

  Fifo

  CHECK FIFO PATH

  是fifo的绝对路径。如果fifo不存在,Monit将定义调用该条目的start方法,如果没有指向fifo类型(例如目录),Monit将禁用对该条目的监视。如果Monit在被动模式下运行或者没有定义start方法,Monit只会在错误时发送警报。

  文件系统

  CHECK FILESYSTEM PATH

  是设备/磁盘,安装点,文件或作为文件系统一部分的目录的路径。建议直接使用块特殊文件(例如Linux上的/dev/vda1或Solaris上的/dev/dsk/c0t0d0s1等)如果使用挂载点(例如/data),请注意文件系统是卸载的测试仍然是真的,因为挂载点存在。

  如果文件系统不可用,Monit将调用该条目的start方法(如果已定义)。如果不指向文件系统,Monit将禁用对此条目的监视。如果Monit在被动模式下运行或者没有定义start方法,Monit只会在错误时发送警报。

  目录

  CHECK DIRECTORY PATH

  是目录的绝对路径。如果目录不存在,Monit将调用该条目的start方法(如果已定义)。如果不指向目录,monit将禁用对此条目的监视。如果Monit在被动模式下运行或者没有定义启动方法,Monit只会在错误时发送警报。

  monit常用命令

  monit -t # 配置文件检测

  monit # 启动monit daemon

  monit -c /var/monit/monitrc # 启动monit daemon时指定配置文件

  monit reload # 当更新了配置文件需要重载

  monit status # 查看所有服务状态

  monit status xxx # 查看xxx服务状态(xxx)为配置的

  monit stop all # 停止所有服务

  monit stop xxx # 停止xxx服务

  monit start all # 启动所有服务

  monit start xxx # 启动xxx服务

  monit -V # 查看版本

  其他

  当然monit远不止上面介绍的功能,比如还有远程主机、系统、网络以及自定义一些监控,另外monit还支持检查时间和提醒的相关自定义定制,因为本文主要是介绍使用monit监控服务进程和硬盘以及自动重启进程,所以没有详细介绍其他用法,有兴趣的可以自行了解

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值