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?
¿En tiempo real, o puedes usar mod_status ?
Y aparentemente, hay una versión de top para apache ...
Creo que mod_status puede hacerlo ...
http://httpd.apache.org/docs/2.0/mod/mod_status.html
También puede usar zenoss para recopilar datos de mod_status utilizando el complemento apache de la comunidad.
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