实时监控 - %iowait

时间:2018-02-09 02:25:38

标签: shell

我是脚本新手,我知道下面的问题非常简单,但谷歌没有得到任何东西:( ..请帮忙

sar命令给出了以下输出,

root@virt01:~# sar 1 1

Linux 3.19.0-42-generic (virt01.ubuntu.com)     13/02/16        _x86_64_        
(1 CPU)

12:19:55        CPU     %user     %nice   %system   %iowait    %steal     
%idle

12:19:56        all      0.00      0.00      0.00      0.00      0.00    
100.00
Average:        all      0.00      0.00      0.00      0.00      0.00    
100.00
root@virt01:~#

只想知道如何检查特定值,例如:%iowait并在邮件超过50时发送邮件警报。

如果你能提供帮助,我们将不胜感激。

感谢。

1 个答案:

答案 0 :(得分:0)

根据您的确切目标,我可以通过简单的管道设置解决您提出的问题。这个特殊的例子是脆弱的,所以按照适当的方式进行按摩,但是在给出sar的示例调用时会有效:

$ PERC=$(printf "%.0f" $(sar 1 1 | tail -1 | awk '{print $6'}))
$ [[ "$PERC" -ge 50 ]] && echo "IOwait% $PERC" | mail -s "iowait over 50%" -t "you@example.com"

件:

  • sar 1 1 - >你知道吗
  • tail -1 - >只取最后一条“平均”线
  • awk '{print $6'} - >打印第6列,%IOwait

上述pipline导致某些百分比如“3.72”。但是,对于下一行,shell将需要一个整数,因此printf需要救援:

  • printf "%.0f" "$PERC" - >打印带有0位小数的浮点数,并根据需要进行舍入

以下行说“如果超过50%执行邮件命令:

  • [[ "$PERC" -ge 50 ]] - >如果大于50
  • && - >如果previous是真,则执行下一个命令
  • echo "IOwait% $PERC" | mail -s "iowait over 50%" -t "you@example.com" - >大多是自我解释,发送电子邮件。