У меня есть файл журнала, в котором есть следующие строки. Мне нужен bash-скрипт, который принимает значения, выделенные жирным шрифтом (4092.1M / 20.1G), выполняет математические операции и затем извещает из Zabbix

[Eden: 3728,0M(3728,0M) -> 0,0B(3952,0M) Оставшиеся в живых: 368,0M-> 144,0M Куча: 4092,1M(48,0G) -> 144,0M(48,0G)]

[Eden: 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 ответ1

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .