Monitorar o tempo de resposta nginx com o script bash

0

Eu preciso monitorar o arquivo de log nginx. Se o tempo de resposta for maior que um valor específico, preciso enviar alertas de email. Eu usei o seguinte script. Mas ao executar em um cronjob, algumas linhas de logs são ignoradas. Resultado esperado: - Um email acionado quando a coluna 15 no log é maior que 1.000 ms.

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 <[email protected]>" "[email protected]"
fi
    
por Ashik Mohammed 27.04.2017 / 15:08

1 resposta

0

Encontrou uma solução usando o comando word count.

  • Valor armazenado de ${wc -l filename} em um arquivo no final do script
  • O valor acima é considerado em uma variável e usado como número da linha inicial
  • E atual ${wc -l filename} valor como número da linha final

Usando essa lógica, evitei duplicar & amp; pular linhas.

E adicionamos esse script no crontab para executar cada minuto.

    
por Ashik Mohammed 20.08.2017 / 06:48