ITPub博客

首页 > Linux操作系统 > Linux操作系统 > nagios监控linux磁盘io的bug

nagios监控linux磁盘io的bug

原创 Linux操作系统 作者:czxin788 时间:2016-11-30 14:51:56 0 删除 编辑
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/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2014-06-03

  • 博文量
    233
  • 访问量
    858510