Unix系统服务监控 Monit

2019-02-27 13:09:14 浏览数 (1)

Monit 是Unix系统中用于管理和监控进程、程序、文件、目录和文件系统的工具。使用 Monit 可以检测进程是否正常运行,如果异常可以自动重启服务以及报警,当然,也可以使用 Monit 检查文件和目录是否发生修改,例如时间戳、校验和以及文件大小的改变。

常用操作

Monit 默认的配置文件是~/.monitrc,如果没有该文件,则使用/etc/monitrc文件。在启动 Monit 的时候,可以指定使用的配置文件:

代码语言:javascript复制
$ monit -c /var/monit/monitrc

在第一次启动 monit 的使用,可以使用如下命令测试配置文件(控制文件)是否正确

代码语言:javascript复制
$ monit -t
$ Control file syntax OK

如果配置文件没有问题的话,就可以使用monit命令启动 monit 了。

代码语言:javascript复制
$ monit

当启动 monit 的时候,可以使用命令行选项控制它的行为,命令行提供的选项优先于配置文件中的配置。

支持命令行的选项

下列是 monit 支持的选项

  • -c 指定要使用的配置文件
  • -d n 每隔 n 秒以守护进程的方式运行 monit 一次,在配置文件中使用 [set daemon]进行配置
  • -g name 设置用于start, stop, restart, monitor, unmonitor动作的组名
  • -l logfile 指定日志文件,[set logfile]
  • -p pidfile 在守护进程模式使用锁文件,配置文件中使用[set pidfile]指令
  • -s statefile 将状态信息写入到该文件,[set statefile]
  • -I 不要以后台模式运行(需要从 init 运行)
  • -i 打印 monit 的唯一 ID
  • -r 重置 monit 的唯一 ID
  • -t 检查配置文件语法是否正确
  • -v 详细模式,会输出针对信息
  • -vv 非常详细的模式,会打印出现错误的堆栈信息
  • -H [filename] 打印文件的 MD5 和 SHA1哈希值Print MD5 and SHA1,如果没有提供文件名,则为标准输入
  • -V 打印版本号
  • -h 打印帮助信息

命令行参数

Monit 以守护进程运行的时候,可以使用下列的参数连接它的守护进程(默认是 TCP 的127.0.0.1:2812)使其执行请求的操作。

  • start all 启动配置文件中列出的所有的服务并且监控它们,如果使用-g选项提供了组选项,则只对该组有效。
  • start name 启动指定名称的服务并对其监控,服务名为配置文件中配置的服务条目名称。
  • stop allstart all相对。
  • stop namestart name相对。
  • restart all 重启所有的 service
  • restart name 重启指定 service
  • monitor all 允许对配置文件中所有的服务进行监控
  • monitor name 允许对指定的 service 监控
  • unmonitor allmonitor all 相对
  • unmonitor namemonitor name相对
  • status 打印每个服务的状态信息
  • reload 重新初始化Monitor守护进程,守护进程将会重载配置文件以及日志文件
  • quit 关闭所有monitor进程
  • validate 检查所有配置文件中的服务,当 Monitor 以守护进程运行的时候,这是默认的动作
  • procmatch regex 对符合指定模式的进程进行简单测试,该命令接受正则表达式作为参数,并且显示出符合该模式的所有进程。

配置文件

Monit 的配置文件叫做monitrc文件。默认为~/.monitrc文件,如果该文件不存在,则尝试/etc/monitrc文件,然后是@sysconfdir@/monitrc,最后是./monitrc文件。

这里所说的配置文件实际上就是控制文件(control file)

Monit 使用它自己的领域语言(DSL)进行配置,配置文件包含一系列的服务条目和全局配置项。

在语意上,配置文件包含以下三部分:

  • 全局 set 指令 该指令以set开始,后面跟着配置项
  • 全局 include 指令 该指令以include开头,后面是glob字符串,指定了要包含的配置文件位置
  • 一个或多个服务条目指令 每一个服务条目包含关键字check,后面跟着服务类型。每一条后面都需要跟着一个唯一的服务标识名称。monit 使用这个名称来引用服务以及与用户进行交互。

当前支持九种类型的check语句:

  1. CHECK PROCESS <unique name> <PIDFILE <path> | MATCHING <regex>> 这里的PIDFILE是进程的 PID 文件的绝对路径,如果 PID 文件不存在,如果定义了进程的 start 方法的话,会调用该方法。 MATCHING是可选的指定进程的方式,使用名称规则指定进程。
  2. CHECK FILE <unique name> PATH <path> 检查文件是否存在,如果指定的文件不存在,则调用 start 方法。
  3. CHECK FIFO <unique name> PATH <path>
  4. CHECK FILESYSTEM <unique name> PATH <path>
  5. CHECK DIRECTORY <unique name> PATH <path>
  6. CHECK HOST <unique name> ADDRESS <host address>
  7. CHECK SYSTEM <unique name>
  8. CHECK PROGRAM <unique name> PATH <executable file> [TIMEOUT <number> SECONDS]
  9. CHECK NETWORK <unique name> <ADDRESS <ipaddress> | INTERFACE <name>>

日志

Monit 将会使用日志文件记录运行状态以及错误消息,在配置文件中使用set logfile指令指定日志配置。

如果希望使用自己的日志文件,使用下列指令:

代码语言:javascript复制
set logfile /var/log/monit.log

如果要使用系统的 syslog 记录日志,使用下列指令:

代码语言:javascript复制
set logfile syslog

如果不想开启日志功能,只需要注释掉该指令即可。

日志文件的格式为:

代码语言:javascript复制
[date] priority : message

例如:

代码语言:javascript复制
[CET Jan  5 18:49:29] info : 'mymachine' Monit started

守护进程模式

代码语言:javascript复制
set daemon n (n的单位是秒)

指定Monit在后台轮询检查进程运行状态的时间。你可以使用命令行参数-d选项指定这个时间,当然,建议在配置文件中进行设置。

Monit应该总是以后台的守护进程模式运行,如果你不指定该选项或者是命令行的-d选项,则只会在运行Monit的时候对它监控的文件或者进程检查一次然后退出。

Init 支持

配置set init可以防止monit将自身转化为守护进程模式,它可以让前台进程运行。这需要从init运行monit,另一种方式是使用crontab定时任务运行,当然这样的话你需要在运行前使用monit -t检查一下控制文件是否存在语法错误。

要配置monit从init运行,可以在monit的配置文件中使用set init指令或者命令行中使用-I选项,以下是需要在/etc/inittab文件中增加的配置。

代码语言:javascript复制
# 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:

代码语言:javascript复制
telinit q

telinit q 用于重载守护进程的配置,等价于systemctl daemon-reload

对于没有telinit的系统,执行如下命令:

代码语言:javascript复制
kill -1 1

如果Monit已经系统启动的时候运行对服务进行监控,在某些情况下,可能会出现竞争。也就是说如果一个服务启动的比较慢,Monit会假设该服务没有运行并且可能会尝试启动该服务和报警,但是事实上该服务正在启动中或者已经在启动队列里了。

包含文件

代码语言:javascript复制
include globstring

例如include /etc/monit.d/*.cfg会将/etc/monit.d/目录下所有的.cfg文件包含到配置文件中。


原文: monit官方文档 Version 5.12.2

0 人点赞