En Windows para ASP, se puede lograr que Monitor de rendimiento, pero ...¿Cómo obtener "solicitudes por segundo" para Apache en Linux?
Cómo llegar "peticiones por segundo" para Apache en Linux?
En Windows para ASP, se puede lograr que Monitor de rendimiento, pero ...¿Cómo obtener "solicitudes por segundo" para Apache en Linux?
Cómo llegar "peticiones por segundo" para Apache en Linux?
En tiempo real, o se puede utilizar mod_status?
Y al parecer, hay una versión de top for apache ...
El enlace mencionado parece estar apuntando a una ubicación no válida ... –
Creo mod_status puede hacerlo ...
http://httpd.apache.org/docs/2.0/mod/mod_status.html
También puede utilizar zenoss para recopilar datos de mod_status utilizando el plugin de Apache comunidad.
puede utilizar 'wc -l' en el registro de acceso para obtener el número de líneas (que corresponde aproximadamente a la cantidad de solicitudes ...) Haga eso cada minuto y reste el último valor para obtener el delta ...
Aquí hay un script bash corto que hice para muestrear la tasa de solicitud (basado en dicroce's suggestion 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
Este script es realmente increíble, gracias por publicarlo. –
¡Genial! ¡Gracias! Me pregunto cómo es el rendimiento de wc -l. Otro enfoque sería la posibilidad de canalizar el archivo de registro a stdin del script. Por lo tanto, grep también podría agregarse a las solicitudes de medición solo .php y así sucesivamente. – Alex
En la sección de comentarios, la opción para especificar el archivo de registro debe ser '-l' en lugar de' -i' – Victor
I escribió un conjunto de scripts de Perl que muestran las peticiones por segundo promedio de los últimos 1, 5 y 15 minutos (como arriba). Está en https://gist.github.com/1040144.
La secuencia de comandos muestra números inconsistentes. -f
¡El 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 here.
¡mod_status es el indicado! si se llama con:
http: // {IP}/server-status refrescar = 1 & actualización automática = true
Luego se auto actualiza cada 2 segundos para que pueda ver una vista en tiempo real constante :-)
No me gustaron ninguna de las soluciones que encontré, así que escribí la mía.
Así que esta solución tiene una línea particular en el access_log hace 15000 peticiones, y utiliza 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
Para resumir, se puede utilizar mod_status y apachetop.
Alternativamente, puede utilizar los buenos guiones de Adam Franco y Jon Daniel para tener una apariencia en vivo.
Si desea echar un vistazo a una fecha partiular y hora, 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}'
Reemplazar con la fecha y hora que usted está interesado y también con el pathfilename adecuada de la archivo de registro.
Será imprimir algo como:
1913 12:47
226 12:48
554 12:49
918 12:50
Hay un buen artículo here con más opciones sobre el uso de una combinación de awk, corte y manda uniq para obtener estadísticas rápida de la clase.
La pregunta no está clara. ¿Puedes especificar si pides registros en tiempo real o históricos? – ejaenv