Monitorizar Nginx en tiempo real con ngxtop
De casualidad he encontrado una pequeña herramienta escrita en Python cuyo nombre es ngxtop y permite monitorizar un servidor Nginx en tiempo real. De su propio nombre ya podéis deducir que quiere asemejarse a algo parecido al comando top que nos encontramos en Linux y que nos ofrece estadísticas del sistema.
Ngxtop es una herramienta que nos sirve para monitorizar el servidor en un momento concreto. Si lo que queremos es monitorizar el servidor y obtener estadísticas a largo plazo tendremos que recurrir a otra herramienta.
A pesar de que es una aplicación sencilla, hay que tener unos conocimientos básicos del protocolo HTTP para poder interpretar las estadísticas. Recomiendo echar un vistazo al tutorial sobre el protocolo HTTP para conseguir al menos una idea básica.
Herramienta para monitorizar Nginx en tiempo real con ngxtop.
Estamos ante una herramienta realmente sencilla, ya que ngxtop sólo se encarga de procesar el archivo access.log
y mostrar su contenido de una forma legible.
La información que nos devuelve esta herramienta viene ordenada en diferentes columnas:
- Nos muestra el
request_path
que no es más que la ruta de acceso y en la columnacount
nos muestra el número de peticiones que se han hecho a esa ruta. - En la columna
avg_bytes_sent
nos muestra la cantidad de bytes enviados asociados a una ruta. - Por último, también podemos consultar el número de veces que se han mostrado un código de estado HTTP para una ruta específica.
Para que os hagáis una idea os dejo un ejemplo de la salida del comando ngxtop
:
running for 411 seconds, 64332 records processed: 156.60 req/sec Summary: | count | avg_bytes_sent | 2xx | 3xx | 4xx | 5xx | |---------+------------------+-------+-------+-------+-------| | 64332 | 2775.251 | 61262 | 2994 | 71 | 5 | Detailed: | request_path | count | avg_bytes_sent | 2xx | 3xx | 4xx | 5xx | |------------------------------------------+---------+------------------+-------+-------+-------+-------| | /abc/xyz/xxxx | 20946 | 434.693 | 20935 | 0 | 11 | 0 | | /xxxxx.json | 5633 | 1483.723 | 5633 | 0 | 0 | 0 | | /xxxxx/xxx/xxxxxxxxxxxxx | 3629 | 6835.499 | 3626 | 0 | 3 | 0 | | /xxxxx/xxx/xxxxxxxx | 3627 | 15971.885 | 3623 | 0 | 4 | 0 | | /xxxxx/xxx/xxxxxxx | 3624 | 7830.236 | 3621 | 0 | 3 | 0 | | /static/js/minified/utils.min.js | 3031 | 1781.155 | 2104 | 927 | 0 | 0 | | /static/js/minified/xxxxxxx.min.v1.js | 2889 | 2210.235 | 2068 | 821 | 0 | 0 | | /static/tracking/js/xxxxxxxx.js | 2594 | 1325.681 | 1927 | 667 | 0 | 0 | | /xxxxx/xxx.html | 2521 | 573.597 | 2520 | 0 | 1 | 0 | | /xxxxx/xxxx.json | 1840 | 800.542 | 1839 | 0 | 1 | 0 |
Por supuesto este es el uso más básico, pero la herramienta ofrece multitud de opciones que podéis consultar ejecutando el comando ngxtop --help
.
Algunos ejemplos de información que podemos obtener de nuestro servidor Nginx con ngxtop.
Podemos obtener una lista de las IP que mayor número de peticiones realizaron en nuestra servidor. Para esto emplearemos el comando:
ngxtop top remote_addr
Podemos realizar filtros más complejos, como en el siguiente ejemplo en el que filtraremos las peticiones cuyo código de estado sea 4xx o 5xx y además mostraremos en pantalla la siguiente información: petición, código de estado y referer. En este caso, el comando que ejecutamos es:
ngxtop -i 'status >= 400' print request status http_referer
Cómo instalar ngxtop.
Tendremos que tener instalado en nuestro servidor Python 2 o superior con el gestor de paquetes Pip. Si cumplimos estos dos requisitos, la instalación están sencilla como ejecutar el comando:
pip install ngxtop
Para finalizar, decir que se trata de una herramienta sencilla pero muy útil que podemos encontrar en GitHub. Es cierto que está limitada a los datos que se recopilan en el archivo access.log, pero nos puede sacar de más de un apuro, por ello está bien conocerla.