Мониторинг времени отклика nginx с помощью сценария bash

Мне нужно отслеживать файл журнала 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
0
задан 28 April 2017 в 12:19

2 ответа

Найден решение с использованием команды подсчета слов.

Сохраненное значение ${wc -l filename} в файл в конце скрипта Вышеприведенное значение принимается за переменную и используется как номер строки начала И текущий ${wc -l filename} в качестве номера конечной линии

Используя эту логику, я избегал дублирования и amp; пропуская строки.

И добавил этот скрипт в crontab для запуска каждую минуту.

0
ответ дан 18 July 2018 в 14:10

Найден решение с использованием команды подсчета слов.

Сохраненное значение ${wc -l filename} в файл в конце скрипта Вышеприведенное значение принимается за переменную и используется как номер строки начала И текущий ${wc -l filename} в качестве номера конечной линии

Используя эту логику, я избегал дублирования и amp; пропуская строки.

И добавил этот скрипт в crontab для запуска каждую минуту.

0
ответ дан 24 July 2018 в 20:20
  • 1
    Пожалуйста, не могли бы вы поделиться своим скриптом здесь, чтобы помочь другим? – Zanna 20 August 2017 в 08:12

Другие вопросы по тегам:

Похожие вопросы: