Мне нужно отслеживать файл журнала nginx. Если время ответа больше определенного значения, мне нужно отправить оповещения по электронной почте. Я использовал следующий скрипт. Но при выполнении в cronjob некоторые строки журналов пропускаются. Ожидаемый результат: - почта, вызванная, когда столбец 15 в журнале больше 1.000 мс.
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DATE=$(date +%Y-%m-%d)
DATE1=$(date +%Y-%m-%dT%H:%M:%S)
###########################################
#This section counts the number of lines appended in the logs for last 10 seconds. And the number is saved into variable "dif". By using this value, we can make avoid repetitions.
before=$(wc -l < /var/log/nginx/access.log)
sleep 10
after=$(wc -l < /var/log/nginx/access.log)
let dif=$after-$before
echo "$dif"
############################################
MS=`tail -n $dif /var/log/nginx/access.log | awk '{ print $15}' | grep -o '[0-9]\.[0-9][0-9][0-9]' | sort -V | sort -nr | head -n1`
echo $DATE1 >> /root/scripts/analysing.log
echo $MS >> /root/scripts/analysing.log
var1=`tail -n $dif /var/log/nginx/access.log | grep -B1 "$MS"|awk 'FNR == 1 {print}' | cut -d 'I' -f 3`
echo " "
echo "Last Recorded & Nginx Highest Execution Time (Millisecond) is: $MS "
echo " "
if [ 1 -eq "$(echo "${MS} > 10.000" | bc)" ]
then
echo "Current Status: Problem!!"
echo "Description: Nginx Request Processing Time Is High!!"
echo "Nginx request execution time is greater than 10000ms on "$DATE1" I"$var1" " | mail -s "e-Agree Nginx Crossed Normal Execution Limit" -a "From: Alerts <qaz@abc.com>" "zxcvbnm@asdfgh.com"
fi
Найден решение с использованием команды подсчета слов.
Сохраненное значение ${wc -l filename} в файл в конце скрипта Вышеприведенное значение принимается за переменную и используется как номер строки начала И текущий ${wc -l filename} в качестве номера конечной линииИспользуя эту логику, я избегал дублирования и amp; пропуская строки.
И добавил этот скрипт в crontab для запуска каждую минуту.
Найден решение с использованием команды подсчета слов.
Сохраненное значение ${wc -l filename} в файл в конце скрипта Вышеприведенное значение принимается за переменную и используется как номер строки начала И текущий ${wc -l filename} в качестве номера конечной линииИспользуя эту логику, я избегал дублирования и amp; пропуская строки.
И добавил этот скрипт в crontab для запуска каждую минуту.