LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 904|回复: 4

请教:性能监控的脚本,这个脚本能怎么改一下么?

[复制链接]
发表于 2005-12-19 16:05:38 | 显示全部楼层 |阅读模式
我才开始学写shell脚本,这里好像高手很多哦。。。。。
呵呵。下面这个是 使用iostat命令监控磁盘和cpu,如果磁盘的percentage busy (%b)大于5%,同时average service time (svc_t)大于30 milliseconds,提醒用户需要采取措施进行调整:
请教能否对脚本的第一句进行修改?ssd0" "ssd1" "ssd3" "ssd4" "ssd5" "ssd9"这样写太繁琐了,还有,被我注释掉的那段发送mail的格式是否正确,为什么都走不通呢?
谢谢了!

#!/bin/sh
#Iostat.sh
  for device in "ssd0" "ssd1" "ssd3" "ssd4" "ssd5" "ssd9"
  do
  DATE=`date "+%Y%m%d"-"%H: %M: %S"`
  svc_t=`iostat -xtc 1 1 |grep "^$device" |awk '{print $8}'`
  P_busy=`iostat -xtc 1 1 |grep "^$device" |awk '{print $10}'`
   if [ $svc_t -gt 30 ] -a [ $P_busy -gt 5 ]
   then
      echo $DATE" | "$device " | "$svc_t" | "$P_busy >>o.log
#   else :
#   mail $LOGNAME << EOF
#percentage busy great than 5 and  verage service time great than 30 milliseconds
#  $LOGNAME
#  EOF
  fi
  done
发表于 2005-12-20 08:15:39 | 显示全部楼层
数值不是顺序递进,所以只有这样。
  1. for i in 0 1 3 4 5 9; do something with "ssd$i"...;done
复制代码
写起来简便点。mail那样写可以。不过一般我就是pipe给mail,简单些。查查sendmail有没有运行。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-12-20 09:11:49 | 显示全部楼层
Post by yongjian
数值不是顺序递进,所以只有这样。
  1. for i in 0 1 3 4 5 9; do something with "ssd$i"...;done
复制代码
写起来简便点。mail那样写可以。不过一般我就是pipe给mail,简单些。查查sendmail有没有运行。
我改好了,mail也发送成功了,那个格式没问题,是我找错地方了,
呵呵。。。。这样的确简单多了。。。谢谢了版主!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-12-20 09:27:54 | 显示全部楼层
还有个问题:
mc-nms-v4->/tmp/shell> sar -d 1 1

SunOS mc-nms-v4 5.8 Generic_117000-03 sun4u    12/20/05

09:21:18   device        %busy   avque   r+w/s  blks/s  avwait  avserv

09:21:19   nfs1              0     0.0       0       0     0.0     0.0
           nfs2              0     0.0       0       0     0.0     0.0
           sd6               0     0.0       0       0     0.0     0.0
           ssd0              1     0.0       1       4     0.0     8.4
           ssd0,a            0     0.0       0       0     0.0     0.0
           ssd0,c            0     0.0       0       0     0.0     0.0
           ssd0,d            0     0.0       0       0     0.0     0.0
           ssd0,e            1     0.0       1       4     0.0     8.4
           ssd0,f            0     0.0       0       0     0.0     0.0
           ssd0,g            0     0.0       0       0     0.0     0.0
           ssd0,h            0     0.0       0       0     0.0     0.0
           ssd1              0     0.0       0       0     0.0     0.0
           ssd1,c            0     0.0       0       0     0.0     0.0
           ssd3              0     0.0       0       0     0.0     0.0
           ssd3,c            0     0.0       0       0     0.0     0.0
           ssd4              0     0.0       0       0     0.0     0.0
           ssd4,c            0     0.0       0       0     0.0     0.0
           ssd5              0     0.0       0       0     0.0     0.0
           ssd5,c            0     0.0       0       0     0.0     0.0
           ssd9              0     0.0       0       0     0.0     0.0
           ssd9,c            0     0.0       0       0     0.0     0.0
           ssd9,g            0     0.0       0       0     0.0     0.0
           ohci0,bu          0     0.0       0       0     0.0     0.0
           ohci0,ct          0     0.0       0       0     0.0     0.0
           ohci0,in          0     0.0       0       0     0.0     0.0
           ohci0,is          0     0.0       0       0     0.0     0.0
           ohci0,to          0     0.0       0       0     0.0     0.0
这个命令出来的分区信息有这么多,
sar -d 1 1 |grep "ssd0" |awk '{print $1 }'
ssd0
ssd0,a
ssd0,c
ssd0,d
ssd0,e
ssd0,f
ssd0,g
ssd0,h
这样出来的也是好多个ssd0,我想分析每一个ssd*的数据,该怎么做"ssd$i"的循环呢?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-12-20 14:32:18 | 显示全部楼层
下面这个脚本跟那个iostat特别类似,但是不知道为什么用这种办法,却提示有问题呢?
#!/bin/sh
  #sar.sh
  #sar=`sar -d 1 1 |sed -n '9,26p'`

  for i in "0" "0,a" "0,d" "0,e" "0,f" "0,g" "0,h" "1" "1,c" "3" "3,c" "4" "4,c" "5" "5,c" "9" "9,c" "9,g"
  do
  DATE=`date "+%Y%m%d"-"%H: %M: %S"`
  device=`sar -d 1 1 |grep "ssd$i" |awk '{print $1 }'`
  busy=`sar -d 1 1 |grep "ssd$i" |awk '{print $2 }'`
  avwait=`sar -d 1 1 |grep "ssd$i" |awk '{print $6 }'`
  avserv=`sar -d 1 1 |grep "ssd$i" |awk '{print $7 }'`
   if [ $busy -gt 5 ] -o [ $avwait -gt $avserv ]
   then
        echo $DATE" | "$device" | "$busy" | "$avwit" | "$avserv >>warn.log
   else :
    fi
  done

---------------------------------
           for循环那里能不能改用别的?这样挺麻烦的。。。。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表