Monit 6.0.0 介绍与选型指南
Monit 6.0.0 介绍与选型指南:轻量级进程/文件/文件系统/主机监控与自愈守护工具的定位由来、单守护进程+monitrc DSL+HTTP 控制台架构、九类监控对象与主动修复能力、6.0.0 新特性、适用场景限制,以及与 Zabbix/Nagios/Icinga/Netdata 的量化选型对比,社区与版本数据实查于 2026-10-20。
Monit 6.0.0 介绍与选型指南
> 目标:讲清 Monit 是什么、单守护进程监控与自愈架构如何运作、能监控什么、不能做什么,并给出与 Zabbix、Nagios Core、Icinga、Netdata 等同类系统的量化选型对比。本篇为认知篇,版本、许可证与社区数据均来自官方源联网溯源(来源与查询日期随文标注);安装、配置与命令的逐步实测见《Ubuntu 22.04 安装 Monit 6.0.0 指南》《Monit 6.0.0 部署指南》与《Monit 6.0.0 常用 CLI 命令与工具详解》。
一、环境信息
本篇为介绍与选型认知篇,所有数据按以下来源与查询日期取证:
| 取证项 | 来源 | 查询日期 |
|---|---|---|
| 最新稳定版本 6.0.0(2026-06-15 发布) | 官网 mmonit.com/monit 下载页与 Release Notes(mmonit.com/monit/changes/) | 2026-10-20 |
| 上一稳定版 5.35.2(2025-04-28) | GitHub 镜像仓库 releases.atom(github.com/mmonit/monit/releases.atom) | 2026-10-20 |
| 许可证 AGPL-3.0 | 官方源码包 monit-6.0.0.tar.gz 内 COPYING 文件首行「GNU AFFERO GENERAL PUBLIC LICENSE Version 3」 | 2026-10-20 |
| GitHub 镜像仓库活跃度(约 10 stars) | shields.io 徽章(img.shields.io/github/stars/mmonit/monit.json) | 2026-10-20 |
| Ubuntu 22.04 仓库版本 5.31.0(jammy/universe) | Ubuntu 22.04 环境 apt-cache policy monit 实查(详见安装指南篇) | 2026-10-20 |
| 官方预编译二进制(linux-x64,OpenSSL 3.5.7 静态链接) | 官网下载页 mmonit.com/monit/#download 与 dist/binary/6.0.0/ 目录 | 2026-10-20 |
💡 说明:Monit 的官方主发布渠道是 mmonit.com(源码 tar.gz + 预编译二进制);GitHub 上的
mmonit/monit仓库是发布镜像,星数仅十几颗,不代表真实用户规模——Monit 被主流发行版(Debian/Ubuntu/Fedora/FreeBSD/OpenBSD 等)长期收录打包,是各类 VPS 运维脚本中最常见的进程看护工具之一。
二、软件概述
Monit 是一个运行在 Unix/Linux 上的轻量级开源监控与自动修复工具,由 Tildeslash Ltd.(挪威公司)自 2001 年起持续维护至今(官网页脚版权「Copyright © 2001-2026 Tildeslash」,Web 控制台实测可见),采用 AGPL-3.0 许可证发布。它的定位可以概括为一句话:"不仅发现问题,还要动手修问题"的看门狗(pro-active watchdog)。
与大多数"只报错不处理"的监控软件不同,Monit 的核心设计是:对一个被监控对象定义期望状态(进程在跑、文件没被篡改、磁盘没满、端口有响应),一旦轮询发现实际状态偏离期望,就自动执行你预先声明的修复动作——重启进程、执行脚本、发送告警、甚至停掉失控服务。这让它天然适合充当:
- 进程看门狗:sshd/nginx/mysql 崩了自动拉起;
- 资源哨兵:CPU、内存、负载、磁盘空间/inode 超阈值告警或执行动作;
- 文件完整性巡检:关键配置文件校验和(6.0.0 起 SHA256 为默认哈希)变化即告警;
- 远程服务探针:对任意主机的 TCP 端口做协议级握手测试(SSH/SMTP/HTTP/MySQL/Redis 等 30+ 内置协议);
- 定时任务型探针:执行自定义脚本,按退出码/输出判定健康状态。
Monit 本身只有一个单文件二进制 monit,C 语言编写,无外部运行时依赖(官方预编译包将 OpenSSL 3.5.7 静态链接进来),配置是纯文本 DSL(monitrc),自带一个零依赖的内置 HTTP 控制台(默认 2812 端口)。2026-06-15 发布的 6.0.0 是其第 6 代大版本,带来了 cron 精度的 every 调度、抗量子 TLS(ML-KEM 混合密钥交换)、SHA256 校验默认化、系统级 swap 换页监控(PAGEIN/PAGEOUT)与更准确的 PSS 进程内存计量等新能力(来源:mmonit.com/monit/changes/,查询日期 2026-10-20)。
2.1 名称与商业背景
- Monit:即 "Monitor" 的缩写,命令行可执行文件也叫
monit; - M/Monit:Tildeslash 的同名商业产品(付费),用于把多台服务器上的 Monit 实例聚合到一个 Web 界面统一管理;Monit 内置的事件队列与 HTTP 接口原生支持向 M/Monit 上报。没有 M/Monit 时,Monit 完全独立可用,靠本地 Web 控制台 + 邮件告警工作。
三、核心架构
Monit 是典型的单守护进程 + 声明式配置 + 事件驱动轮询架构,没有 agent/server 分层,一台机器一个 monit 守护进程就是全部。架构组件如下:
┌──────────────────────────────────────────────┐
│ monit 守护进程(单进程) │
│ │
/etc/monit/monitrc│ ┌─────────────┐ ┌──────────────────────┐ │
+ /etc/monit.d/* ─┼─▶│ 控制文件解析 │──▶│ 校验循环(每 set daemon│ │
(声明式 DSL) │ │ 与语法检查 │ │ N 秒一轮,逐条规则评估)│ │
│ └─────────────┘ └──────────┬───────────┘ │
│ │ 状态偏离 │
│ ┌──────────────────────┼───────────┐ │
│ ▼ ▼ ▼ ▼ │
│ ┌──────────┐ ┌──────────┐ ┌───────┐ ┌──────┐│
│ │ 修复动作 │ │ 邮件告警 │ │事件队列│ │状态文件││
│ │ restart/ │ │ SMTP/ │ │本地缓存│ │id/state│
│ │ start/ │ │ M/Monit │ │slots N│ │(持久化)│
│ │ stop/exec│ │ 上报 │ └───────┘ └──────┘│
│ └──────────┘ └──────────┘ │
│ │
│ ┌──────────────────────────────────────────┐│
◀── monit CLI ──────┼──│ HTTP 控制接口(set httpd port 2812) ││
(status/summary/ │ │ · 本机 CLI 通过它下发命令/读状态 ││
start/stop/reload)│ │ · 浏览器 Web 控制台(Basic 认证) ││
│ │ · XML 状态输出 /_status?format=xml ││
◀── 浏览器/curl ────┼──│ ││
│ └──────────────────────────────────────────┘│
└──────────────────────────────────────────────┘
各组件职责:
- 控制文件(monitrc):唯一的配置入口,纯文本 DSL,声明监控对象、测试条件与动作。要求权限 ≤0700(含密码时强制,否则启动报错)。支持
include拆分多个规则文件; - 校验循环(validate loop):守护进程按
set daemon <N>的周期逐条评估所有规则;6.0.0 起every语句支持 cron 表达式精度(如every "15 8 * * 1"表示每周一 08:15 执行一次),且 cron 匹配与轮询循环异步,不会因校验耗时而漏跑(来源:官方 Release Notes 6.0.0); - 动作引擎:
restart/start/stop/exec/alert/unmonitor五类动作,支持for N cycles防抖、N restarts within M cycles then timeout熔断; - HTTP 控制接口:既是 CLI 与守护进程的通信通道(
monit status等命令实际是 HTTP 调用),也是浏览器 Web 控制台与 XML 状态端点;不开启 httpd 时 CLI 只能做语法检查与前台运行; - 事件队列:告警发送失败或 M/Monit 离线时,事件落盘到
basedir(本地磁盘),恢复后重投; - ID/状态文件:
set idfile保存实例唯一 ID(用于 M/Monit 识别主机),set statefile持久化各服务监控开关状态,守护进程重启后恢复"哪些在监控、哪些被手动停了"。
💡 技术拓展:主机监控的"采集触发模式"不止 Monit 这种**主动拉取轮询(polling)**一种。常见模式对比——
模式 原理 代表 适用 主动轮询 监控方周期性检查被监控对象状态 Monit、Nagios、Zabbix 通用,配置直观,天然带自愈闭环 指标推送 被监控方暴露指标,采集器抓取 Prometheus、Netdata 高频性能观测、时序分析 日志驱动 从日志流解析事件 rsyslog+规则、Loki 事后审计与异常模式发现 心跳上报 被监控方定期"我还活着",超时判死 keepalived、监控宝类 链路简单但对"假活"无能为力 Monit 采用主动轮询并把它做到了极致轻量:单进程内存占用 MB 级(部署篇实测 systemd 报告约 1 MB),在一台 512 MB 的小 VPS 上也可以放心常驻。
四、功能特性
4.1 九类监控对象
Monit 的 DSL 以 check <类型> <名字> with <定位方式> 开头,覆盖以下九类对象(来源:官方手册 monit 1,版本 6.0.0 随源码包分发):
| check 类型 | 定位方式 | 监控内容 | 典型规则示例 |
|---|---|---|---|
check process | pidfile 或 matching "正则" | 进程存在性、PID 变化、CPU/内存/文件句柄/IO | if 3 restarts within 5 cycles then timeout |
check system | 本机(隐式+显式增强) | 负载、CPU、内存、swap(6.0.0 新增 pagein/pageout)、安全属性 | if loadavg (5min) > 4 then alert |
check file | path | 存在性、大小、时间戳、权限、UID/GID、校验和(SHA256 默认) | if changed checksum then alert |
check filesystem | path 或 uuid/label | 空间、inode、读写标志、挂载状态 | if space usage > 85% then alert |
check directory | path | 存在性、权限、UID/GID | if does not exist then exec "/..." |
check fifo | path | 存在性、权限、类型 | if failed permission 660 then alert |
check host | address | 远程连通性:ping、TCP 端口、协议握手、证书到期 | if failed port 443 type TCPSSL protocol https then alert |
check network | interface 名 | 网卡状态、IP、带宽、丢包/错误包 | if failed link then alert |
check program | 脚本路径 | 退出码(status)与标准输出,任意自定义逻辑 | if status != 0 then alert |
4.2 内置协议级探测
check host 的 protocol 测试不是简单 TCP 连通,而是发一轮协议握手并校验应答:SSH、HTTP/HTTPS、SMTP、IMAP、POP3、FTP、DNS、MySQL、PostgreSQL、Redis、Memcached、MongoDB、MQTT、RADIUS、SIP、LDAP、rsync、NTP、Sieve、SpamAssassin、ClamAV、Websocket 等(来源:6.0.0 源码 src/protocols/ 目录清单,2026-10-20 实查)。SSL 证书校验支持到期天数告警(if failed port 443 protocol https and certificate validity > 30 days then alert),6.0.0 起还支持证书 SHA256 指纹绑定与 ML-KEM 抗量子混合密钥交换(需 OpenSSL 3.5+ 链接)。
4.3 自愈与告警动作
- 修复动作:
then restart / start / stop / exec "/path/cmd" / alert / unmonitor / monitor; - 防抖与熔断:
for N cycles(连续 N 轮才触发)、if N restarts within M cycles then timeout(反复拉起失败就停止打扰); - 告警通道:SMTP 直发(支持认证、TLS、自定义 mail-format 模板,事件变量
$EVENT/$SERVICE/$DATE/$DESCRIPTION/$HOST);也可对每个动作单独指定then alert或用set alert ... but not on { action }过滤事件类型; - 本地事件队列:SMTP 不可达时事件缓存重投(实测中 SMTP 不可达时日志出现
Mail: Delivery failed -- no mail server is available,队列按 slots 上限持久化); - M/Monit 上报:
set mmonit http://user:pass@mmonit-host:8080/collector,多机聚合、历史事件与集中重启操作交给商业版。
4.4 6.0.0 关键新特性(对照 5.35.2)
来源:官方 Release Notes(mmonit.com/monit/changes/,查询日期 2026-10-20):
| 新特性 | 说明 |
|---|---|
every 支持 cron 精度 | every "15 8 * * 1" 精确到分钟级调度,且异步匹配不漏跑 |
| 抗量子 TLS | 支持 ML-KEM 混合密钥交换(TLS 1.3,需 OpenSSL 3.5.x+ 链接;官方预编译包以 OpenSSL 3.5.7 构建) |
| SHA256 校验和 | 文件完整性、SSL 证书、HTTP 内容、MySQL RSA key 均可用 SHA256,且文件校验默认从 MD5 改为 SHA256 |
| swap 换页监控 | check system 新增 PAGEIN/PAGEOUT 每秒换页测试,用于识别内存压力(官方给出 >100 pages/s 持续需排查的经验阈值) |
| PSS 内存计量 | Linux 进程内存改用 PSS(按共享库比例分摊)替代 RSS,多进程共享内存不再重复计数,报告值更真实 |
💡 说明:6.0.0 同时废弃了
every N cycles旧写法,加载时告警提示改用 cron 风格(部署篇有实测回显)。
五、快速开始(最小可用示例)
以下为官方手册语法风格的最小可用配置骨架(完整逐步实测与真实回显见《Monit 6.0.0 部署指南》):
# /etc/monit/monitrc —— 最小骨架(权限必须 chmod 700)
set daemon 30 # 每 30 秒一轮校验
with start delay 15 # 开机后延迟 15 秒再开始
set log /var/log/monit.log
set idfile /var/lib/monit/id
set statefile /var/lib/monit/state
set httpd port 2812 and # Web 控制台 + CLI 通信端口
use address localhost
allow localhost
allow admin:q1w2e3r4 # 控制台账号
include /etc/monit.d/*.conf # 规则拆分目录
# /etc/monit.d/sshd.conf —— 一个最典型的进程自愈规则
check process sshd with pidfile /run/sshd.pid
start program = "/bin/systemctl start ssh"
stop program = "/bin/systemctl stop ssh"
if failed host 127.0.0.1 port 22 protocol ssh then restart
if 5 restarts within 5 cycles then timeout
启动与验证三步:
monit -t # 语法检查:Control file syntax OK
systemctl restart monit # 重载/启动守护进程
monit status # 查看全部对象实时状态
六、适用场景与限制
6.1 适用场景
- VPS/单机看门狗:小内存服务器上守护 sshd、nginx、php-fpm、数据库等关键进程,崩了自动拉起,这是 Monit 最经典的用法;
- 阈值告警 + 动作联动:磁盘超 85% 清日志、负载超限重启 worker、内存泄漏进程周期性 restart;
- 文件完整性巡检:/etc/passwd、crontab、关键配置文件的校验和变化告警(6.0.0 默认 SHA256);
- 黑盒探测:从一台中间机器探测多个服务的端口/协议/证书到期,做轻量拨测;
- 自定义脚本探针:把任意健康检查脚本纳入统一调度、告警与 Web 界面;
- M/Monit 集中管理:几十台以内服务器,Monit 上报 M/Monit 聚合成一个控制台(商业授权)。
6.2 限制与边界
- 单机无原生集群:Monit 实例之间不组网、不选主;集中视图必须依赖 M/Monit(付费)或自建抓取
/_status?format=xml的聚合器; - 不做时序存储与图表:只保留当前状态与事件流,无历史指标曲线;需要趋势图要接 Netdata/Prometheus 或 M/Monit;
- 轮询粒度秒级起:最小
set daemon周期 1 秒,但为保护负载官方不建议低于 15 秒;毫秒级实时观测不是它的目标; - 事件通知通道单一:原生只有 SMTP 邮件(与 M/Monit),企业微信/Slack/Webhook 类告警需通过
exec动作调用脚本桥接; - 配置即代码,无热 UI 编辑:所有规则改配置文件 +
monit reload,Web 界面只做查看与启停操作,不是配置平台; - AGPL-3.0 许可证:对"修改后作为网络服务分发"的场景有传染性义务,商用集成需法务评估(自有服务器内部使用不受影响)。
七、同类选型对比
Monit 常被拿来与 Zabbix、Nagios Core、Icinga、Netdata 比较。它们定位并不完全重叠:Monit 是"单机自愈看门狗",其余是"集中监控平台"。下表从量化维度横向对比(社区/版本数据取证日期 2026-10-20,来源见列尾标注):
| 维度 | Monit 6.0.0 | Zabbix 7.x | Nagios Core 4.x | Icinga 2 | Netdata |
|---|---|---|---|---|---|
| 形态 | 单守护进程 + 文本 DSL | Server+DB+Web+Agent 多组件 | Core+CGI+插件 | Core+DB+Web | 单机 agent 自带 UI |
| 自愈动作 | 原生一等公民(restart/exec 内建 DSL) | 触发远程命令,配置链路长 | 事件处理脚本(eventhandler) | 同 Nagios,语法更现代 | 有限(告警脚本) |
| 集中管理 | 需 M/Monit(付费)或自建聚合 | 原生 | 原生 | 原生 | 需 Netdata Cloud/parent 节点 |
| Web 控制台 | 内置零依赖(2812) | 功能完备重量级 | 基础 | 现代 | 内置炫酷 |
| 资源占用 | 极低(单进程 MB 级) | 中高(DB+Server 常驻) | 中 | 中高 | 中(采集密度高) |
| 学习成本 | 低(一个配置文件学会) | 高 | 中(插件体系) | 中高 | 低 |
| 适用规模 | 单机~几十台 | 几十~上万台 | 中小规模 | 中大规模 | 单机~数百节点 |
| 典型定位 | 看门狗+轻量拨测 | 企业级监控平台 | 经典主机监控 | 现代化 Nagios 系 | 实时性能观测 |
选型建议:
- 只要"崩了自动拉起 + 阈值告警",不想要一套监控平台 → Monit,一小时上线,资源占用几乎可忽略;
- 要历史趋势图、模板化批量主机、用户权限分级 → Zabbix/Icinga 这类平台型系统;
- 要秒级实时性能大盘 → Netdata;
- Monit 与它们是互补而非替代:常见组合是每台机器跑一个 Monit 做本地自愈闭环,同时平台侧做集中观测——Monit 管"修",平台管"看"。
💡 技术拓展:与 Monit 同属"看门狗"赛道的轻量工具还有 daemontools/runit/s6(进程 supervised 套件)与 systemd 自带的
Restart=always。对比要点——daemontools 系只管"进程死了拉起",没有资源阈值、协议探测、文件校验与 Web 控制台;systemdRestart=依赖单元文件且无告警与探测维度(本专栏多篇部署文实测:systemd 的 on-failure 会在 Monit 轮询前抢先拉起进程,两者并存时 Monit 的自愈更多承担"条件性重启"如端口无响应、内存超限)。Monit 的差异化在于声明式条件 + 修复动作 + 协议探测 + 告警的四合一。
八、参考链接
- Monit 官网与下载:https://mmonit.com/monit/
- Monit Release Notes(6.0.0 变更明细):https://mmonit.com/monit/changes/
- GitHub 镜像仓库:https://github.com/mmonit/monit
- 官方手册(随源码包分发 man 手册):https://mmonit.com/monit/documentation/
- 本专栏逐步实测篇:《Ubuntu 22.04 安装 Monit 6.0.0 指南》《Monit 6.0.0 部署指南》《Monit 6.0.0 常用 CLI 命令与工具详解》