Si queremos saber cuál es el porcentaje, sobre el total de respuestas, de un estado HTTP determinado (o todos los posibles) dentro de las peticiones de servicio que recibe nuestro servidor Web Apache, con el guión escrito en Python al final de esta entrada, lo podemos obtener fácilmente.
¿Para qué nos puede servir esta información? En principio, para saber cómo está trabajando nuestro servidor y cómo se está relacionando con los clientes:
- Los estados de error, bien del cliente o del servidor, nos permitirán conocer los porcentajes de error y detectar problemas
- Estados específicos, como el 304 que nos permitirá saber el porcentaje de páginas solicitadas a pesar de que el cliente tiene una copia en cache vigente (y analizar rendimientos)
- Porcentajes de accesos no autorizados, solicitudes incorrectas,…
#!/usr/bin/python #encoding:utf-8 try: import sys,optparse except: print("Error running 'import sys,optparse'. Maybe you have to install some python library") def clientStatePercentage(logfile,state): try: contents = open(logfile, "r") except IOError, e: print 'Error openning file '+ logfile +": "+e.strerror raise except: print 'Error openning file '+ logfile raise totalRequests = 0 requests = 0 for line in contents: totalRequests += 1 if line.split(" ")[8] == state: requests += 1 return int(0.5+float(100*requests)/totalRequests) parser = optparse.OptionParser("usage%prog " + "[-f <file>] [-e HTTP STATE[,HTTP_STATE2,[...]]]") parser.add_option('-f', dest = 'file', type = 'string', help = 'Please, specify the Apache access file', default="/var/log/apache2/access.log") parser.add_option('-e', dest = 'state', type = 'string', help = 'Please, specify the HTTP State', default="304") (options, args) = parser.parse_args() log=options.file states=options.state.split(',') for state in states: print 'Percentage of requests with ' + state + ' state: ' + str(clientStatePercentage(log,state)) + '%'