Monit 6.0.0 介绍与选型指南

Monit 6.0.0 介绍与选型指南:轻量级进程/文件/文件系统/主机监控与自愈守护工具的定位由来、单守护进程+monitrc DSL+HTTP 控制台架构、九类监控对象与主动修复能力、6.0.0 新特性、适用场景限制,以及与 Zabbix/Nagios/Icinga/Netdata 的量化选型对比,社区与版本数据实查于 2026-10-20。

MonitMonit监控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 ────┼──│                                          ││
                    │  └──────────────────────────────────────────┘│
                    └──────────────────────────────────────────────┘

各组件职责:

  1. 控制文件(monitrc):唯一的配置入口,纯文本 DSL,声明监控对象、测试条件与动作。要求权限 ≤0700(含密码时强制,否则启动报错)。支持 include 拆分多个规则文件;
  2. 校验循环(validate loop):守护进程按 set daemon <N> 的周期逐条评估所有规则;6.0.0 起 every 语句支持 cron 表达式精度(如 every "15 8 * * 1" 表示每周一 08:15 执行一次),且 cron 匹配与轮询循环异步,不会因校验耗时而漏跑(来源:官方 Release Notes 6.0.0);
  3. 动作引擎:restart/start/stop/exec/alert/unmonitor 五类动作,支持 for N cycles 防抖、N restarts within M cycles then timeout 熔断;
  4. HTTP 控制接口:既是 CLI 与守护进程的通信通道(monit status 等命令实际是 HTTP 调用),也是浏览器 Web 控制台与 XML 状态端点;不开启 httpd 时 CLI 只能做语法检查与前台运行;
  5. 事件队列:告警发送失败或 M/Monit 离线时,事件落盘到 basedir(本地磁盘),恢复后重投;
  6. 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 processpidfile 或 matching "正则"进程存在性、PID 变化、CPU/内存/文件句柄/IOif 3 restarts within 5 cycles then timeout
check system本机(隐式+显式增强)负载、CPU、内存、swap(6.0.0 新增 pagein/pageout)、安全属性if loadavg (5min) > 4 then alert
check filepath存在性、大小、时间戳、权限、UID/GID、校验和(SHA256 默认)if changed checksum then alert
check filesystempath 或 uuid/label空间、inode、读写标志、挂载状态if space usage > 85% then alert
check directorypath存在性、权限、UID/GIDif does not exist then exec "/..."
check fifopath存在性、权限、类型if failed permission 660 then alert
check hostaddress远程连通性:ping、TCP 端口、协议握手、证书到期if failed port 443 type TCPSSL protocol https then alert
check networkinterface 名网卡状态、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 适用场景

  1. VPS/单机看门狗:小内存服务器上守护 sshd、nginx、php-fpm、数据库等关键进程,崩了自动拉起,这是 Monit 最经典的用法;
  2. 阈值告警 + 动作联动:磁盘超 85% 清日志、负载超限重启 worker、内存泄漏进程周期性 restart;
  3. 文件完整性巡检:/etc/passwd、crontab、关键配置文件的校验和变化告警(6.0.0 默认 SHA256);
  4. 黑盒探测:从一台中间机器探测多个服务的端口/协议/证书到期,做轻量拨测;
  5. 自定义脚本探针:把任意健康检查脚本纳入统一调度、告警与 Web 界面;
  6. M/Monit 集中管理:几十台以内服务器,Monit 上报 M/Monit 聚合成一个控制台(商业授权)。

6.2 限制与边界

  1. 单机无原生集群:Monit 实例之间不组网、不选主;集中视图必须依赖 M/Monit(付费)或自建抓取 /_status?format=xml 的聚合器;
  2. 不做时序存储与图表:只保留当前状态与事件流,无历史指标曲线;需要趋势图要接 Netdata/Prometheus 或 M/Monit;
  3. 轮询粒度秒级起:最小 set daemon 周期 1 秒,但为保护负载官方不建议低于 15 秒;毫秒级实时观测不是它的目标;
  4. 事件通知通道单一:原生只有 SMTP 邮件(与 M/Monit),企业微信/Slack/Webhook 类告警需通过 exec 动作调用脚本桥接;
  5. 配置即代码,无热 UI 编辑:所有规则改配置文件 + monit reload,Web 界面只做查看与启停操作,不是配置平台;
  6. AGPL-3.0 许可证:对"修改后作为网络服务分发"的场景有传染性义务,商用集成需法务评估(自有服务器内部使用不受影响)。

七、同类选型对比

Monit 常被拿来与 Zabbix、Nagios Core、Icinga、Netdata 比较。它们定位并不完全重叠:Monit 是"单机自愈看门狗",其余是"集中监控平台"。下表从量化维度横向对比(社区/版本数据取证日期 2026-10-20,来源见列尾标注):

维度Monit 6.0.0Zabbix 7.xNagios Core 4.xIcinga 2Netdata
形态单守护进程 + 文本 DSLServer+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 控制台;systemd Restart= 依赖单元文件且无告警与探测维度(本专栏多篇部署文实测:systemd 的 on-failure 会在 Monit 轮询前抢先拉起进程,两者并存时 Monit 的自愈更多承担"条件性重启"如端口无响应、内存超限)。Monit 的差异化在于声明式条件 + 修复动作 + 协议探测 + 告警的四合一。

八、参考链接

  1. Monit 官网与下载:https://mmonit.com/monit/
  2. Monit Release Notes(6.0.0 变更明细):https://mmonit.com/monit/changes/
  3. GitHub 镜像仓库:https://github.com/mmonit/monit
  4. 官方手册(随源码包分发 man 手册):https://mmonit.com/monit/documentation/
  5. 本专栏逐步实测篇:《Ubuntu 22.04 安装 Monit 6.0.0 指南》《Monit 6.0.0 部署指南》《Monit 6.0.0 常用 CLI 命令与工具详解》