从日志中 Grep 并计算然后发出警报

从日志中 Grep 并计算然后发出警报

我有一个日志文件,里面有下面的几行。我需要一个 bash 脚本,它获取粗体值 (4092.1M / 20.1G) 并进行计算,然后从 Zabbix 发出警报

[伊甸园:3728.0M(3728.0M)->0.0B(3952.0M)幸存者:368.0M->144.0M 堆:4092.1米(48.0G)->144.0米(48.0G)]

[伊甸园:3568.0M(3568.0M)->0.0B(3568.0M)幸存者:528.0M->528.0M 堆:20.1G(48.0G)->16.7G(48.0G)]

如果该值超过 30G 则应该发出警告,如果该值超过 35G 则应该发出警报。

请查找上例中给出的 MB / GB。我需要识别它是什么格式并相应地读取值。

你能帮我一下吗

答案1

您可以将此作为起点,并根据您的喜好进行调整:

#!/bin/bash

logfile="/var/log/file.log"

while read line; do
   value=`echo $line | awk -F: '{print $4}' | awk -F'(' '{print $1}' | sed 's/^.//'`

   if [ "`echo $value | grep -o ".$"`" == "M" ]; then
      value=`echo $value | awk -F'.' '{print $1}'`
      value=$((value/1000))

   elif [ "`echo $value | grep -o ".$"`" == "G" ]; then
        value=`echo $value | awk -F'.' '{print $1}'`
   fi

   if [ $value -gt 30 ] && [ $value -lt 35 ]; then
      echo "Warning: value is greater than 30G"
   elif [ $value -gt 35 ]; then
      echo "Alert: value is greater than 35G"
   fi
done < $logfile

相关内容