Siege es una utilidad de prueba de carga HTTP y evaluación comparativa que puede ser utilizada para medir el desempeño de un servidor web bajo condiciones de máxima capacidad. Esta herramienta evalúa la cantidad de datos transferidos, el tiempo de respuesta del servidor, la tasa de transacciones, procesamiento, concurrencia y veces en que el programa retorna un estatus correcto. Siege ofrece tres modos de operación: regresión, simulación de Internet y fuerza bruta.

En esta guía explicamos cómo instalar, configurar y ejecutar la utilidad de forma básica para sistemas Debian o Ubuntu.

Descargar y configurar Siege

  1. Antes de instalar cualquier programa nuevo, actualice su sistema:

     sudo apt-get update && sudo apt-get upgrade --show-upgraded
    
  2. Descargue la última versión de Siege (la última versión disponible en la fecha de publicación de esta guía es SIEGE-3.1.4). Siempre puede comprobar en el sitio web de Siege:

     wget http://download.joedog.org/siege/siege-latest.tar.gz
    
  3. Extraiga el programa:

     tar -zxvf siege-latest.tar.gz
    
  4. Navegue al directorio de Siege:

     cd siege-*/
    
  5. Si no tiene instalada la colección de compiladores GNU o gcc (GNU Compiler Collection, por sus siglas en inglés), entonces debe instalarla:

    sudo apt-get install build-essential
    
  6. Configure y complete la instalación:

     ./configure
     make
     sudo make install
    
  7. Genere un archivo de configuración:

     siege.config
    
  8. Abra el archivo .siegerc que estará ubicado en su directorio home.

  9. La configuración sugerida para Siege es de 25 usuarios concurrentes en un período de 1 minuto. Establezca una ubicación para su archivo log. Asegúrese de quitar el comentario en las variables mostradas a continuación y cualquier otro ajuste comentado que desee utilizar eliminando el signo de almohadilla o numeral (#):
    Extracto del archivo: ~/siege.config
    ...

     #
     # Variable declarations. You can set variables here
     # for use in the directives below. Example:
     # PROXY = proxy.joedog.org
     # Reference variables inside ${} or $(), example:
     # proxy-host = ${PROXY}
     # You can also reference ENVIRONMENT variables without
     # actually declaring them, example:
     logfile = $(HOME)/siege.log
    
     ...
    
     #
     # Default number of simulated  concurrent users
     # ex: concurrent = 25
     #
     concurrent = 25
    
     #
     # Default duration of the siege.  The right hand argument has
     # a modifier which specifies the time units, H=hours, M=minutes,
     # and S=seconds. If a modifier is not specified, then minutes
     # are assumed.
     # ex: time = 50M
     #
     time = 1M
    

Una vez completados los pasos, ¡ya está listo para ejecutar Siege!

Ejecutar Siege

Para ejecutar Siege con los ajustes predeterminados, ingrese el siguiente comando, remplazando www.ejemplo.com con su nombre de dominio o dirección IP:

siege www.ejemplo.com

Para detener la ejecución de Siege pulse CTRL + C. Al final obtendrá los resultados de las pruebas. Se muestra un ejemplo del resultado obtenido con nuestro servidor de prueba:

** SIEGE 4.0.2
** Preparing 25 concurrent users for battle.
The server is now under siege...

...

Lifting the server siege...
Transactions:                   6092 hits
Availability:                 100.00 %
Elapsed time:                  72.20 secs
Data transferred:              43.03 MB
Response time:                  0.02 secs
Transaction rate:              84.38 trans/sec
Throughput:                     0.60 MB/sec
Concurrency:                    1.35
Successful transactions:        6116
Failed transactions:               0
Longest transaction:            1.90
Shortest transaction:           0.00

Si no hay conexiones fallidas y la disponibilidad se mantiene en 100%, entonces no tiene problemas en su servidor web.

Comandos y configuraciones adicionales

Crear un archivo URL

Si usted quiere que Siege llegue a varias páginas de su sitio web de forma aleatoria, configure el programa para que lea desde un archivo urls.txt que contiene una lista de las páginas seleccionadas.

  1. Abra el archivo urls.txt generalmente creado en /usr/local/etc/urls.txt. Agregue una lista de las direcciones IP o URL a ese archivo:
    Archivo: /usr/local/etc/urls.txt

     # URLS file for siege
     # --
     # Format the url entries in any of the following formats:
     # http://www.whoohoo.com/index.html
     # http://www/index.html
     # www/index.html
     # http://www.whoohoo.com/cgi-bin/howto/display.cgi?1013
     # Use the POST directive for pages that require it:
     # http://www.whoohoo.com/cgi-bin/haha.cgi POST ha=1&ho=2
     #      or POST content from a file:
     # http://www.whoohoo.com/melvin.jsp POST </home/jeff/haha
     # http://www.whoohoo.com/melvin.jsp POST <./haha
     # You may also set and reference variables inside this file,
     # for more information, man urls_txt
     # -------------------------------------------------------
    
     www.mipaginaweb1.com
     www.mipaginaweb2.com
     www.mipaginaweb3.com
     123.45.xx.yy
    

Remplace las últimas líneas con las direcciones IP o URL de las páginas que quiere probar simultáneamente.

  1. Para ejecutar Siege usando este archivo use el comando simple de Siege:

     siege
    
  2. Si quiere usar otro archivo distinto, entonces ejecute:

     siege -f ruta/suArchivo.txt
    

Comandos

Siege cuenta con una serie de opciones en la línea de comandos que puede usar cuando lo desee para jugar con la configuración predeterminada sin necesidad de editar el archivo correspondiente a esta.

  • -c [num]: Establece el número de usuarios concurrentes según el valor que especifique en num. La mayoría de los servidores web tienen menos de un par de centenas de usuarios intentando acceder a sus sitios web al mismo tiempo, así que establecer este valor en más de 200 no es necesario en la mayoría de los casos.
  • -t [num]: Establece un límite de tiempo para la ejecución de Siege según el valor que especifique en num. Puede utilizar los modificadores s para segundos, m para minutos y h para horas. No deje espacios entre los números y el modificador. Por ejemplo:
    • siege -t10s ejemplo.com ejecuta siege por 10 segundos haciendo solicitudes a ejemplo.com.
    • siege -t5m ejemplo.com ejecuta siege usando las direcciones especificadas en el archivo urls.txt durante 5 minutos.
  • -d [num]: Establece el delay o retardo para cada usuario Siege. Cada usuario entonces es retardado en un número aleatorio de segundos entre 1 y num. El valor predeterminado es 3.
  • -i: Cuando se usa en conjunto con un archivo de URLs, esto causa que cada usuario llegue aleatoriamente a cada URL, sin un patrón predeterminado. En analogía a la vida real (la i representa Internet) donde usted no sabrá a dónde van los visitantes, y es probable que no ingresen a todas las páginas.
  • -v: salida verbose o detallada. Esto imprime los resultados de Siege en tiempo real antes de imprimir los resultados finales.
  • -f [archivo]: tal como lo observamos anteriormente, ejecuta Siege con un archivo que contiene una lista de las direcciones URL.
  • -g [url]: despliega las cabeceras HTTP.
  • -l: genera un archivo log.
  • -m "[mensaje]": incluye el mensaje especificado en el archivo log.
  • -C: imprime el perfil de configuración actual de Siege (puede ser útil para comprobar que los cambios hechos en la segunda sección de este tutorial fueron correctos).
  • -V: imprime información sobre la versión de Siege.
  • -h: imprime información de ayuda.

Recursos adicionales

Esta herramienta es muy útil para hacer pruebas y evaluar el desempeño de su servidor web. Puede consultar los siguientes recursos en busca de información adicional que complemente lo expuesto en esta guía. Sin embargo, recuerde que no podemos certificar la actualidad o precisión de los contenidos externos.