nagios监控linux磁盘io脚本的一个bug
今天,有人说oracle数据库慢,来问我是不是oracle服务器资源利用高,我说不会啊,如果服务器性能有问题,nagios早就会给我报警了。
于是,我就登录linux服务器看一下top和free -m,发现cpu和内存一点都不高。然后又用iostat -x 1看,我去,util%都干到100%,iowait 47%了。说明磁盘io很忙。
可是,nagios监控的磁盘io为啥没有告警呢。于是我手工运行nagios的脚本:
root@ubnginx01 tmp]# /etc/nagios/libexec/check_iostat -w 6 -c 10
IOSTAT OK - user 0.50 nice 0.00 sys 0.00 iowait 0.00 idle 0.00 | iowait=0.30%;; idle=0.00%;; user=0.50%;; nice=0.00%;; sys=0.00%;;
可以看到,check_iostat脚本监控到的iowait值是0.03,而实际磁盘iowait是80%。
我已经断定是nagios的check_iostat脚本出现问题了。
在网上我也找了很多check_iostat脚本,都没什么效果。很绝望。
还是自己看看check_iostat里面是怎么写的吧,虽然这个脚本是perl写的,但是能顺藤摸瓜。看了check_iostat脚本后,知道脚本里面是通过命令iostat --c取值的。
[root@ubnginx01 tmp]# iostat -c
Linux 2.6.32-431.el6.x86_64 (ubnginx01) 11/30/2016 _x86_64_ (4 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
0.16 0.00 0.10 0.96 0.00 98.78
通过和iostat -c 1对比发现,iostat -c 1的第一次取的ioswait值永远不准,第二次取的值才准:
root@ubnginx01 ~]# iostat -c 1
Linux 2.6.32-431.el6.x86_64 (ubnginx01) 11/30/2016 _x86_64_ (4 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
0.16 0.00 0.10 0.96 0.00 98.78
avg-cpu: %user %nice %system %iowait %steal %idle
0.25 0.00 3.27 46.73 0.00 49.75
avg-cpu: %user %nice %system %iowait %steal %idle
0.25 0.00 2.52 47.36 0.00 49.87
avg-cpu: %user %nice %system %iowait %steal %idle
0.50 0.00 2.76 46.98 0.00 49.75
avg-cpu: %user %nice %system %iowait %steal %idle
0.50 0.00 4.77 48.49 0.00 46.23
通过上面可以看到,第一次iostat取的值是0.96,以后取值都是46左右。
找到原因后,对nagios的check_iostat进行一下修改,即每次不取iostat -c 1的第一次值,而是取第二次的值:
[root@ubnginx01 tmp]# cat /etc/nagios/libexec/check_iostat |grep \$iostat
my $iostat = '';
my $output = `$iostat -c 1 2 |tail -2`;
$iostat = $np->opts->get('iostat');
$iostat = 'iostat';
也就是把my $output的值改成上述标红字样。
再次运行check_iostat脚本,iowait就会有很大的值了(我同时在服务器上做了dd操作),naigos也就会发邮件告警了:
[root@ubnginx01 ~]# /etc/nagios/libexec/check_iostat -w 6 -c 10
IOSTAT CRITICAL - user 0.25 nice 0.00 sys 2.77 iowait 47.10 idle 0.00 | iowait=47.10%;; idle=0.00%;; user=0.25%;; nice=0.00%;; sys=2.77%;;
完!
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/28916011/viewspace-2129391/
,如需转载,请注明出处,否则将追究法律责任。