ver start running know httpd how estado linux apache monitoring

running - start apache linux



¿Cómo obtener "solicitudes por segundo" para Apache en Linux? (9)

En Windows para ASP, puede obtener perfmon, pero ...

¿Cómo obtener "solicitudes por segundo" para Apache en Linux?




Puede usar ''wc -l'' en el registro de acceso para obtener el número de líneas (que corresponde aproximadamente al número de solicitudes ...) Haga eso cada minuto y reste el último valor para obtener el delta ...


Escribí un conjunto de scripts de Perl que muestran las solicitudes promedio por segundo durante los últimos 1, 5 y 15 minutos (como la parte superior). Está en https://gist.github.com/1040144 .


La secuencia de comandos muestra números inconsistentes. -f parámetro afecta mucho a la salida! y la primera lectura tampoco es precisa.

Terminé usando:

while true; do tail -n0 -f access.log>/tmp/tmp.log & sleep 2; kill $! ; wc -l /tmp/tmp.log | cut -c-2; done 2>/dev/null

Encontrado aquí .


¡mod_status es el indicado! si lo llamas con:

http: // {ip} / server-status? refresh = 1 y auto-refresh = true

Luego se actualiza automáticamente cada 2 segundos para que pueda ver una vista constante en tiempo real :-)


No me gustó ninguna de las soluciones que encontré, así que escribí la mía.

  • mod_status no es lo suficientemente preciso. Se basa en la duración del servidor, que en nuestro caso suele ser de meses. Lo que busco son picos de tráfico.
  • el script de shell anterior utiliza una sentencia sleep () que no es ideal, ya que demora x segundos en recuperar los datos.

Entonces esta solución toma una línea particular en las solicitudes access_log 15000 atrás, y usa el tiempo registrado para comparar con la hora actual.

# This check is needed because if the logs have just rolled over, then we need a minimum # amount of data to report on. # You will probably need to adjust the 3500000 - this is roughly the file size when the # log file hits 15000 requests. FILESIZE=`ls -l /var/log/httpd/access_log | awk ''{print $5}'' ` if [ $FILESIZE -le 3500000 ] then # not enough data - log file has rolled over echo "APACHE_RPS|0" else # Based on 15000 requests. Depending on the location of the date field in # your apache log file you may need to adjust the ...substr($5... bit LASTTIME=`tail -15000 /var/log/httpd/access_log | head -1 | awk ''{printf("%s/n",substr($5,2,20));}'' ` APACHE_RPS=`echo $LASTTIME | gawk -vREQUESTS=15000 '' { # convert apache datestring into time format accepted by mktime(); monthstr = substr($0,4,3); if(monthstr == "Jan"){ monthint = "01"; } if(monthstr == "Feb"){ monthint = "02"; } if(monthstr == "Mar"){ monthint = "03"; } if(monthstr == "Apr"){ monthint = "04"; } if(monthstr == "May"){ monthint = "05"; } if(monthstr == "Jun"){ monthint = "06"; } if(monthstr == "Jul"){ monthint = "07"; } if(monthstr == "Aug"){ monthint = "08"; } if(monthstr == "Sep"){ monthint = "09"; } if(monthstr == "Oct"){ monthint = "10"; } if(monthstr == "Nov"){ monthint = "11"; } if(monthstr == "Dec"){ monthint = "12"; } mktimeformat=sprintf("%s %s %s %s %s %s [DST]/n", substr($0,8,4), monthint, substr($0,1,2), substr($0, 13,2), substr($0, 16,2), substr($0, 19,2) ); # calculate difference difference = systime() - mktime(mktimeformat); # printf("%s - %s = %s/n",systime(), mktime(mktimeformat), difference); printf("%s/n",REQUESTS/difference); } '' ` echo "APACHE_RPS|${APACHE_RPS}" fi


En resumen, puedes usar mod_status y apachetop .

Alternativamente, puede usar los buenos guiones de Adam Franco y Jon Daniel para tener una apariencia en vivo.

Si desea ver una fecha y hora particulares, puede emitir este pequeño comando:

grep "29/Oct/2014:12" /var/log/apache2/example.com.log | cut -d[ -f2 | cut -d] -f1 | awk -F: ''{print $2":"$3}'' | sort -nk1 -nk2 | uniq -c | awk ''{ if ($1 > 10) print $0}''

Reemplace con la fecha y la hora que le interese y también con el nombre de archivo de ruta apropiado del archivo de registro.

Imprimirá algo como:

1913 12:47 226 12:48 554 12:49 918 12:50

Aquí hay un buen artículo con más opciones sobre el uso de una combinación de comandos awk, cut y uniq para obtener estadísticas rápidas del tipo.


Aquí hay un breve script bash que hice para muestrear la tasa de solicitud (según la sugerencia de dicroce de usar wc -l en el archivo de registro).

#!/bin/sh ############################################################################## # This script will monitor the number of lines in a log file to determine the # number of requests per second. # # Example usage: # reqs-per-sec -f 15 -i /var/www/http/access.log # # Author: Adam Franco # Date: 2009-12-11 # License: http://www.gnu.org/copyleft/gpl.html GNU General Public License (GPL) ############################################################################## usage="Usage: `basename $0` -f <frequency in seconds, min 1, default 60> -l <log file>" # Set up options while getopts ":l:f:" options; do case $options in l ) logFile=$OPTARG;; f ) frequency=$OPTARG;; /? ) echo -e $usage exit 1;; * ) echo -e $usage exit 1;; esac done # Test for logFile if [ ! -n "$logFile" ] then echo -e $usage exit 1 fi # Test for frequency if [ ! -n "$frequency" ] then frequency=60 fi # Test that frequency is an integer if [ $frequency -eq $frequency 2> /dev/null ] then : else echo -e $usage exit 3 fi # Test that frequency is an integer if [ $frequency -lt 1 ] then echo -e $usage exit 3 fi if [ ! -e "$logFile" ] then echo "$logFile does not exist." echo echo -e $usage exit 2 fi lastCount=`wc -l $logFile | sed ''s//([0-9]*/).*//1/''` while true do newCount=`wc -l $logFile | sed ''s//([0-9]*/).*//1/''` diff=$(( newCount - lastCount )) rate=$(echo "$diff / $frequency" |bc -l) echo $rate lastCount=$newCount sleep $frequency done