Monit 是Unix系统中用于管理和监控进程、程序、文件、目录和文件系统的工具。使用 Monit 可以检测进程是否正常运行,如果异常可以自动重启服务以及报警,当然,也可以使用 Monit 检查文件和目录是否发生修改,例如时间戳、校验和以及文件大小的改变。
Monit 默认的配置文件是~/.monitrc
,如果没有该文件,则使用/etc/monitrc
文件。在启动 Monit 的时候,可以指定使用的配置文件:
$ monit -c /var/monit/monitrc
在第一次启动 monit 的使用,可以使用如下命令测试配置文件(控制文件)是否正确
$ monit -t
$ Control file syntax OK
如果配置文件没有问题的话,就可以使用monit
命令启动 monit 了。
$ monit
当启动 monit 的时候,可以使用命令行选项控制它的行为,命令行提供的选项优先于配置文件中的配置。
下列是 monit 支持的选项
set daemon
]进行配置start
, stop
, restart
, monitor
, unmonitor
动作的组名set logfile
]set pidfile
]指令set statefile
]当 Monit 以守护进程运行的时候,可以使用下列的参数连接它的守护进程(默认是 TCP 的127.0.0.1:2812)使其执行请求的操作。
start all
启动配置文件中列出的所有的服务并且监控它们,如果使用-g
选项提供了组选项,则只对该组有效。
start name
启动指定名称的服务并对其监控,服务名为配置文件中配置的服务条目名称。
stop all
与start all
相对。
stop name
与start name
相对。
restart all
重启所有的 service
restart name
重启指定 service
monitor all
允许对配置文件中所有的服务进行监控
monitor name
允许对指定的 service 监控
unmonitor all
与monitor all
相对
unmonitor name
与monitor name
相对
status
打印每个服务的状态信息
reload
重新初始化Monitor守护进程,守护进程将会重载配置文件以及日志文件
quit
关闭所有monitor
进程
validate
检查所有配置文件中的服务,当 Monitor 以守护进程运行的时候,这是默认的动作
procmatch regex
对符合指定模式的进程进行简单测试,该命令接受正则表达式作为参数,并且显示出符合该模式的所有进程。
Monit 的配置文件叫做monitrc
文件。默认为~/.monitrc
文件,如果该文件不存在,则尝试/etc/monitrc
文件,然后是@sysconfdir@/monitrc
,最后是./monitrc
文件。
这里所说的配置文件实际上就是控制文件(control file)
Monit 使用它自己的领域语言(DSL)进行配置,配置文件包含一系列的服务条目和全局配置项。
在语意上,配置文件包含以下三部分:
set
开始,后面跟着配置项
include
开头,后面是glob字符串,指定了要包含的配置文件位置
check
,后面跟着服务类型。每一条后面都需要跟着一个唯一的服务标识名称。monit 使用这个名称来引用服务以及与用户进行交互。
当前支持九种类型的check
语句:
CHECK PROCESS <unique name> <PIDFILE <path> | MATCHING <regex>>
这里的PIDFILE
是进程的 PID 文件的绝对路径,如果 PID 文件不存在,如果定义了进程的 start 方法的话,会调用该方法。
MATCHING
是可选的指定进程的方式,使用名称规则指定进程。
CHECK FILE <unique name> PATH <path>
检查文件是否存在,如果指定的文件不存在,则调用 start 方法。
CHECK FIFO <unique name> PATH <path>
CHECK FILESYSTEM <unique name> PATH <path>
CHECK DIRECTORY <unique name> PATH <path>
CHECK HOST <unique name> ADDRESS <host address>
CHECK SYSTEM <unique name>
CHECK PROGRAM <unique name> PATH <executable file> [TIMEOUT <number> SECONDS]
CHECK NETWORK <unique name> <ADDRESS <ipaddress> | INTERFACE <name>>
Monit 将会使用日志文件记录运行状态以及错误消息,在配置文件中使用set logfile
指令指定日志配置。
如果希望使用自己的日志文件,使用下列指令:
set logfile /var/log/monit.log
如果要使用系统的 syslog 记录日志,使用下列指令:
set logfile syslog
如果不想开启日志功能,只需要注释掉该指令即可。
日志文件的格式为:
[date] priority : message
例如:
[CET Jan 5 18:49:29] info : 'mymachine' Monit started
set daemon n (n的单位是秒)
指定Monit在后台轮询检查进程运行状态的时间。你可以使用命令行参数-d
选项指定这个时间,当然,建议在配置文件中进行设置。
Monit应该总是以后台的守护进程模式运行,如果你不指定该选项或者是命令行的-d
选项,则只会在运行Monit的时候对它监控的文件或者进程检查一次然后退出。
配置set init
可以防止monit将自身转化为守护进程模式,它可以让前台进程运行。这需要从init运行monit,另一种方式是使用crontab定时任务运行,当然这样的话你需要在运行前使用monit -t
检查一下控制文件是否存在语法错误。
要配置monit从init运行,可以在monit的配置文件中使用set init
指令或者命令行中使用-I
选项,以下是需要在/etc/inittab
文件中增加的配置。
# Run Monit in standard run-levels
mo:2345:respawn:/usr/local/bin/monit -Ic /etc/monitrc
inittab文件格式:
id:runlevels:action:process
该行配置是为Monit指定了id为mo,运行级别2-5有效,respawn
指明了无论进程是否已经运行,都对进程restart
在修改完init配置文件后,可以使用如下命令测试/etc/inittab
文件并运行Monit:
telinit q
telinit q
用于重载守护进程的配置,等价于systemctl daemon-reload
对于没有telinit
的系统,执行如下命令:
kill -1 1
如果Monit已经系统启动的时候运行对服务进行监控,在某些情况下,可能会出现竞争。也就是说如果一个服务启动的比较慢,Monit会假设该服务没有运行并且可能会尝试启动该服务和报警,但是事实上该服务正在启动中或者已经在启动队列里了。
include globstring
例如include /etc/monit.d/*.cfg
会将/etc/monit.d/
目录下所有的.cfg
文件包含到配置文件中。