Nagios 安装过程略过
插件一般存放于: /usr/lib/nagios/plugins/ 或者 /usr/lib64/nagios/plugins/, 或者 /usr/lib/nagios3/plugins/
$ bash check_iostat -d sdb -c 10 -w 5
OK - I/O stats tps=0.00 KB_read/s=0.00 KB_written/s=0.00 | 'tps'=0.00; 'KB_read/s'=0.00; 'KB_written/s'=0.00;
# 查看原文件, tps/w/r 也是通过 iostat 获取的
# 分别执行3次获取 tps/w/r, 很快的输出结果, 没有做延时统计
# Doing the actual check:
tps=`$iostat $disk | grep $disk | awk '{print $2}'`
kbread=`$iostat $disk | grep $disk | awk '{print $3}'`
kbwritten=`$iostat $disk | grep $disk | awk '{print $4}'`
# 开始改造代码
# 将这块修改为如下代码
# Doing the actual check:
iostat_out=`$iostat -m -d 2 2 $disk | grep $disk | tail -n 1`
tps=`echo $iostat_out| awk '{print $2}'`
mbread=`echo $iostat_out| awk '{print $3}'`
mbwritten=`echo $iostat_out| awk '{print $4}'`
# 将这个文件中所有的 kbread 修改为 mbread, kmwritten修改为 kmwritten
# 把输出结果 echo 语句中 KB 修改为 MB,
# echo "$msg - I/O stats tps=$tps MB_read/s=$mbread MB_written/s=$mbwritten | 'tps'=$tps; 'MB_read/s'=$mbread; 'MB_written/s'=$mbwritten;"
# 这快代码意思是
# 1. 执行一次 iostat, 读取两次 io 状态, 中间休息2s.
# 2. -m, 读取结果转换为 MB, 不再是 KB, 更方便看结果.
# 如有需要, 将首行的 /bin/sh 修改为 /bin/bash
$ bash check_iostat -d sdb -c 10 -w 5
OK - I/O stats tps=0.50 MB_read/s=0.05 MB_written/s=0.00 | 'tps'=0.50; 'MB_read/s'=0.05; 'MB_written/s'=0.00;
在 ubuntu 上以上代码完全可用, 在 centos 测试, 发现本地调用可用,
但是通过远程监控, 会报错磁盘不存在.
$ bash check_iostat -d sd1b -c 10 -w 5
ERROR: Device incorrectly specified
# ... ...
# Checking parameters:
[ ! -b "/dev/$disk" ] && echo "ERROR: Device incorrectly specified" && help
# 这块代码很有意思的, 无非就是检查磁盘是否存在, 但是为啥在 centos 上运行会报错呢?
# 测试结果: 在 centos 本地执行并不会报错, 只有在远程调用的时候会意识磁盘不存在.
#! -b意思是: 磁盘不存在, 但是远程调用结果恰恰相反?
# 将 ! 去掉(这本身语法就是如果磁盘存在就提示错误), 远程调用正常, 但本地执行报磁盘不存在.
多次测试后, 排除个 bash/sh/zsh 的原因, 实在找不到原因了. 执行通过另类办法了.
同事找到一个原因, 可能是权限问题.切换到 nagios 用后, ls /dev/, 权限都显示??????
# 将这里修改为如下代码
df -h|grep sdb > /dev/null && [ $? ] && sleep 0 || echo "ERROR: Device incorrectly specified" && help
# 什么意思, 使用 df -h 检查磁盘是否存在, 如果存在, sleep 0s, 否在提示错误, 并执行 help 函数结束进程.