Grep от Log & Calculate затем оповещение

247
user324391

У меня есть файл журнала, в котором есть следующие строки. Мне нужен 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, как указано в приведенном выше примере. Мне нужно определить, какой это формат и прочитать значение соответственно.

Можете ли вы помочь мне здесь

0
Я чувствую себя слишком ленивым, чтобы самому кодировать его, но я бы использовал awk, извлек это поле после ключевого слова Heap, затем заменил G на * 1000 и просто удалил все M и выполнил расчет внутри самого awk. Должно быть не более одного лайнера. curious_cat 9 лет назад 0

1 ответ на вопрос

1
GreenTeaTech

Вы можете использовать это в качестве отправной точки и адаптироваться к своему вкусу:

#!/bin/bash  logfile="/var/log/file.log"  while read line; do value=`echo $line | awk -F: '' | awk -F'(' '' | sed 's/^.//'`  if [ "`echo $value | grep -o ".$"`" == "M" ]; then value=`echo $value | awk -F'.' ''` value=$((value/1000))  elif [ "`echo $value | grep -o ".$"`" == "G" ]; then value=`echo $value | awk -F'.' ''` 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