Linux下Monit磁盘I/O监控告警配置问题与版本升级需求
我之前折腾Monit磁盘IO告警的时候也踩过不少坑,结合官方文档和实际操作经验,给你理清楚问题出在哪以及怎么解决:
一、磁盘读写速率告警配置失败的原因与解决办法
1. 核心语法错误:混淆了磁盘使用率与读写速率的配置
你提到的官方示例check filesystem xxx with path /xxx/xxx if read rate > 90% then alert其实有个关键误区:
- 磁盘使用率的监控才用百分比(比如
if usage >90% then alert),而读写速率是绝对值指标,必须明确指定单位(如MB/s、KB/s),直接写百分比会触发语法错误,这是你配置失败的第一个原因。
2. 版本兼容性问题:老版本Monit不支持read/write rate关键字
Monit在5.27版本之后才正式支持read rate和write rate的原生监控,如果你当前的版本低于这个版本,哪怕语法写对了也会报错——这也是你说“监控项能显示磁盘分析数据但告警规则配置失败”的核心原因:老版本的Monit本身就没实现这个功能。
针对不同版本的配置方案
方案1:新版本Monit(5.27+)的正确配置
先通过monit -V确认版本,符合要求的话,正确的配置示例如下:
check filesystem data_disk with path /mnt/data # 连续5个监控周期(默认1分钟/周期)读速率超过100MB/s则告警 if read rate > 100 MB/s for 5 cycles then alert # 连续3个监控周期写速率超过80MB/s则告警 if write rate > 80 MB/s for 3 cycles then alert
配置完成后用monit -t验证,无报错后重启Monit服务即可。
方案2:老版本Monit(<5.27)的替代方案
老版本不支持原生的IO速率监控,需要借助外部工具(如iostat、sar)通过check program来实现:
# 监控sda磁盘的写速率,超过80MB/s则告警 check program disk_write_sda with path "/usr/bin/iostat -d -x 1 2 | grep 'sda' | tail -n1 | awk '{print $7}'" if output > 80 then alert # 数值对应iostat输出的wMB/s单位,根据实际情况调整 every 2 cycles # 每2个周期执行一次检测
- 先手动执行脚本部分,确认输出是纯数字(比如
iostat -d -x 1 2 | grep 'sda' | tail -n1 | awk '{print $7}'),确保Monit能正确解析数值。 - 注意给脚本赋予执行权限,确保Monit用户有执行
iostat的权限。
二、Monit版本升级方案
根据你的操作系统类型,选择对应的升级方式:
1. Debian/Ubuntu系列
- 先备份配置文件:
sudo cp /etc/monit/monitrc /etc/monit/monitrc.bak - 卸载旧版本:
sudo apt remove --purge monit - 添加Monit官方源:
创建/etc/apt/sources.list.d/monit.list文件,写入:
比如Ubuntu 22.04填写deb https://packages.monit.org/debian <你的发行版代号> monitjammy,Debian 11填写bullseye。 - 导入GPG密钥:
wget -O - https://packages.monit.org/debian/monit.gpg | sudo apt-key add - - 更新源并安装新版本:
sudo apt update && sudo apt install monit
2. RHEL/CentOS/Rocky系列
- 备份配置文件:
sudo cp /etc/monit/monitrc /etc/monit/monitrc.bak - 卸载旧版本:
sudo yum remove monit - 添加Monit官方源:
创建/etc/yum.repos.d/monit.repo文件,写入:[monit] name=Monit Repository baseurl=https://packages.monit.org/rhel/$releasever/$basearch gpgkey=https://packages.monit.org/monit.gpg enabled=1 gpgcheck=1 - 安装新版本:
sudo yum install monit
3. 通用源码编译升级(适合所有系统)
- 备份配置文件:
sudo cp /etc/monit/monitrc /etc/monit/monitrc.bak - 下载最新稳定版源码(替换为当前最新版本号):
wget https://mmonit.com/monit/dist/monit-5.33.0.tar.gz - 解压并进入目录:
tar xzf monit-5.33.0.tar.gz && cd monit-5.33.0 - 配置编译参数:
./configure --prefix=/usr/local/monit(可自定义安装路径) - 编译安装:
make && sudo make install - 替换系统中的旧二进制:
sudo ln -sf /usr/local/monit/bin/monit /usr/bin/monit - 重启Monit服务:
sudo systemctl restart monit
升级完成后,再次用monit -V确认版本,然后按照新版本的配置语法设置告警规则即可。
内容的提问来源于stack exchange,提问作者MTBer
相关产品推荐
相关产品推荐

