Linux 下使用 Monit 实现服务挂掉自动拉起

背景

由于应用稳定性或者服务器资源限制等问题,应用就会出现自动挂掉的情况,此时就需要自动拉起应用。

生产环境,为了防止因为意外宕机造成服务长时间中断,一般都会设置服务进程监控拉起机制。

简介

Monit - utility for monitoring services on a Unix system

Monit 是 Unix 系统上的服务监控工具。可以用来监控和管理进程、程序、文件、目录和设备等。

优点

  • 安装配置简单,超轻量
  • 可以监控前后台进程(Supervisor 无法监控后台启动进程)
  • 除了监控进程还可以监控文件,还可以监控系统资源(CPU,内存,磁盘)使用率
  • 可以设置进程依赖,控制启动顺序

缺点

  • Monit 采用间隔轮询的方式检测,决定了它达不到 Supervisor 一样的实时感知。

安装

# 安装 epel 源
$ yum -y install epel-release

# 安装 monit
$ yum -y install monit

# 验证
$ monit -V
This is Monit version 5.26.0
Built with ssl, with ipv6, with compression, with pam and with large files
Copyright (C) 2001-2019 Tildeslash Ltd. All Rights Reserved.

# 启动服务
$ systemctl start monit

# 启动 monit 守护进程
$ monit

命令

官方手册:https://mmonit.com/monit/documentation/monit.html

命令格式: monit [options]+ [command]

# 查看帮助信息
$ monit -h

命令选项

选项说明
-c file启动指定配置文件
-d n每间隔 n 秒,以守护进程的方式运行 monit
-g name设置监控组名
-l logfile指定日志文件
-p pidfile指定守护模式的 PID(锁)文件
-s statefile将状态信息写入文件
-I不要在后台模式下运行(需要从init运行)
--id打印 monit id 信息
--resetid重置 monit id 信息,谨慎操作
-B批处理命令行模式(不能输出表格或颜色)
-t对配置文件进行语法检查
-v详细模式,诊断输出
-vv非常详细模式,与 -v 类似,并在错误时记录堆栈日志
-H [filename]如果省略文件名,则输出文件或标准输入的 MD5 和 SHA1 哈希值;Monit之后将退出
-V打印版本信息
-h打印帮助信息

常用命令

命令说明
monit start all启动所有服务
monit start <name>启动指定 服务
monit stop all停止所有服务
monit stop <name>停止指定 服务
monit restart all重启所有服务
monit restart <name>重启指定 服务
monit monitor all启用监控所有服务
monit monitor <name>启用监控指定 服务
monit unmonitor all禁用监控所有服务
monit unmonitor <name>禁用监控指定 服务
monit reload重新加载配置
monit status打印所有服务状态
monit status [name]打印指定 name 服务状态
monit summary打印所有服务简要信息
monit summary [name]打印指定 name 服务简要信息
monit report [up|down|..]打印服务状态的个数
monit quit退出 monit 守护进程
monit validate检查所有服务,如果不运行则启动
monit procmatch <pattern>测试进程匹配检查,支持正则表达式

配置

yum 安装后的默认配置文件如下:
全局参数配置文件 : /etc/monitrc
服务监控配置文件目录:/etc/monit.d
日志文件: /var/log/monit.log

# 配置文件
$ grep -v "^#" /etc/monitrc
# 每 5 秒检查被监控服务的状态
set daemon  5              # check services at 30 seconds intervals
set log syslog

# 启用内置的 web 服务器
set httpd port 2812 and
    use address 10.0.0.2  # only accept connection from localhost (drop if you use M/Monit)
    # 允许 localhost 连接
    allow localhost        # allow localhost to connect to the server and
    # 解决本地命令报错问题: Error receiving data -- Connection reset by peer
    allow 10.0.0.2
    # 运行外网 IP 访问
    allow x.x.x.x
    # web登录的用户名和密码
    allow admin:monit      # require user 'admin' with password 'monit'
    #with ssl {            # enable SSL/TLS and set path to server certificate
    #    pemfile: /etc/ssl/certs/monit.pem
    #}

# 监控服务配置文件目录
include /etc/monit.d/*

监控服务

# 查看 nexus 监控文件
$ cat /etc/monit.d/nexus
check process nexus
        matching "org.sonatype.nexus.karaf.NexusMain"
        start program = "/root/nexus3/nexus-3.12.1-01/bin/nexus start"
        stop program = "/root/nexus3/nexus-3.12.1-01/bin/nexus stop"
        if failed port 18081 then restart
        
# 查看 nexus 监控状态
$ monit status nexus
Monit 5.26.0 uptime: 3h 48m

Process 'nexus'
  status                       OK
  monitoring status            Monitored
  monitoring mode              active
  on reboot                    start
  pid                          15191
  parent pid                   1
  uid                          0
  effective uid                0
  gid                          0
  uptime                       1m
  threads                      96
  children                     0
  cpu                          0.2%
  cpu total                    0.2%
  memory                       14.3% [1.1 GB]
  memory total                 14.3% [1.1 GB]
  security attribute           -
  disk read                    0 B/s [1.6 MB total]
  disk write                   0 B/s [232.5 MB total]
  port response time           1.756 ms to localhost:18081 type TCP/IP protocol DEFAULT
  data collected               Wed, 13 May 2020 14:36:27
  
# 验证 nexus 停机自动拉起
$  kill -9 15191

# 间隔时间内还未拉起
$ monit status nexus
Monit 5.26.0 uptime: 3h 48m

Process 'nexus'
  status                       Does not exist
  monitoring status            Monitored
  monitoring mode              active
  on reboot                    start
  data collected               Wed, 13 May 2020 14:36:42

# 查看自动拉起后的 nexus 监控状态
$ monit status nexus
Monit 5.26.0 uptime: 3h 48m

Process 'nexus'
  status                       OK
  monitoring status            Monitored
  monitoring mode              active
  on reboot                    start
  pid                          15830
  parent pid                   1
  uid                          0
  effective uid                0
  gid                          0
  uptime                       0m
  threads                      52
  children                     0
  cpu                          64.0%
  cpu total                    64.0%
  memory                       4.5% [349.2 MB]
  memory total                 4.5% [349.2 MB]
  security attribute           -
  disk read                    0 B/s [84 kB total]
  disk write                   0 B/s [36.9 MB total]
  port response time           -
  data collected               Wed, 13 May 2020 14:36:45
  
# 查看过程日志
$ tailf -20 /var/log/monit.log
......
[CST May 13 14:35:09] error    : 'nexus' process is not running
[CST May 13 14:35:09] info     : 'nexus' trying to restart
[CST May 13 14:35:09] info     : 'nexus' start: '/root/nexus3/nexus-3.12.1-01/bin/nexus start'
[CST May 13 14:35:17] info     : Reinitializing monit daemon
[CST May 13 14:35:17] info     : Reinitializing Monit -- control file '/etc/monitrc'
[CST May 13 14:35:17] info     : 'VM_0_2_centos' Monit reloaded
[CST May 13 14:36:42] error    : 'nexus' process is not running
[CST May 13 14:36:42] info     : 'nexus' trying to restart
[CST May 13 14:36:42] info     : 'nexus' start: '/root/nexus3/nexus-3.12.1-01/bin/nexus start'
[CST May 13 14:36:45] info     : 'nexus' process is running with pid 15830

web 控制台

web 控制台地址:http://10.0.0.2:2812/

主页面:
在这里插入图片描述

监控运行信息:
在这里插入图片描述

系统监控信息:
在这里插入图片描述

进程监控信息:
在这里插入图片描述

微信公众号:daodaotest

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

叨叨软件测试

不敢奢望赞赏,只求点赞关注~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值