扫描日志文件的脚本

扫描日志文件的脚本

我有一个日志文件,内容如下。我们将其命名为 cpu_usage.out:

2023-04-12 12:04: CPU STATISTICS CRITICAL : USED:- 2.52% IDLE:- 97.49%|CpuUsed=2.52;0;1 CpuIdle=97.49;0;1
2023-04-12 12:05: CPU STATISTICS WARNING : USED:- 0.5% IDLE:- 99.50%|CpuUsed=0.5;0;1 CpuIdle=99.50;0;1
2023-04-12 12:06: CPU STATISTICS CRITICAL : USED:- 3% IDLE:- 97.00%|CpuUsed=3;0;1 CpuIdle=97.00;0;1
2023-04-12 12:07: CPU STATISTICS CRITICAL : USED:- 1.53% IDLE:- 98.48%|CpuUsed=1.53;0;1 CpuIdle=98.48;0;1
2023-04-12 12:08: CPU STATISTICS CRITICAL : USED:- 4% IDLE:- 96.00%|CpuUsed=4;0;1 CpuIdle=96.00;0;1
2023-04-12 12:09: CPU STATISTICS CRITICAL : USED:- 3% IDLE:- 97.00%|CpuUsed=3;0;1 CpuIdle=97.00;0;1

此日志文件通过 cron(间隔 1 分钟)生成,用于监控 CPU 利用率。现在我需要编写另一个脚本来扫描此日志文件。我需要以下脚本:

  1. 检测“CRITICAL”关键字并保持 30 分钟
  2. 如果连续30分钟,则发送电子邮件并终止tail命令
  3. 否则什么也不做

我有下面的简单脚本,但我不知道如何连续约 30 分钟监控“CRITICAL”关键字。

#!/bin/bash

tail -f /root/cpu_usage.out | while read line
do case "$line" in
    *"CRITICAL"*) echo "$line"
    #*"CRITICAL"*) echo "$line" | mutt -s "The CPU of server $(hostname) is high for about 30 minutes ago" [email protected];
    ;;
esac
done

我尝试了以下脚本,但是当我运行它时,光标只是挂在那里

#!/bin/bash


LOGFILE=/root/cpu_usage.out

tail -fn30 $LOGFILE | while read line;
do
CRIT=$(echo $LOGFILE | grep -m 30 "CRITICAL" | wc -l)

if [[ $CRIT -ge 30 ]]
then
  pkill -P $$ tail
  echo "$line"
fi
done

注意:首先忘记了电子邮件部分。我稍后会处理。

请指教。

相关内容