sar -u 1 | awk '{print $9}'
所以这会每秒给我“CPU Idle”值。我想在这种情况下收到电子邮件,该值连续 10 次变为“0”?
什么是合适的方法呢?
我找到了一个初步的解决方案
sar -u 1 | awk '{ if (int($9)==0) {
i=i+1; {
print i, $9
}
}
if (int($9)>=0) {
i=0
}
if (i>=10) print "sending email"
}'
但是在我打印“发送电子邮件”的最后一行我不能像这样打电话给 mutt
sar -u 1 | awk '{ if (int($9)==0) {
i=i+1; {
print i, $9
}
}
if (int($9)>=0) {
i=0
}
if (i>=10) mutt -s "VPNC Problem" [email protected] < /home/semenov/strace.output
}'
问题是它在 mutt 命令调用中说“语法”错误。有任何想法吗?
正确的做法是不做。
CPU 利用率(%used 或 %idle)是一个虚假的监控值——它可以(并且应该)在正常操作期间的不同时间为 100%。您是否真的想要一堆警报,因为您碰巧同时收到 5-10 个 Web 请求,而您的监控系统正在检查 CPU 利用率?我敢打赌答案是否定的。
相反,您应该监控Load Average(由
uptime
其他工具报告),这是衡量现在要运行的进程数量(RunQ
操作系统调度术语的长度)。该值通常报告为三个值,1 分钟平均负载(“现在”)、5 分钟平均负载和 15 分钟平均负载。
低于 1 的平均负载表示“卸载”系统(大量空闲 CPU 时间,没有等待执行的程序)。
高平均负载(“高”是相对于您拥有的 CPU 数量和您的系统在负载下的交互性能)是一个值得关注的问题,应该进行调查。
我通常使用 10 作为平均负载警报的阈值——这个值足够高,您通常不会在生产中看到它,但又足够低,一旦警报触发,您应该有时间对情况做出响应。
在这两种情况下要监视的脚本都很简单:
获取和填充部分留给读者作为练习。
如果你真的想做对,你应该调查一些监控系统和 SNMP ......
好的,正确的命令是这个