Instalar y entender mytop (monitorizando mysql)
Voy a empezar con un post un poco técnico pero de gran utilidad para la monitorización del servidor de bases de datos mysql.
mytop es una utilidad que sirve para monitorizar las consultas mysql, procesos, y rendimiento general del servidor de bases de datos mysql. Entre otras cosas, nos permite visualizar las consultas lentas (slow queries) que se ejecutan en la base de datos.
Instalación
Vamos a realizar al instalación en un servidor CentOS. Para hacerlo, necesitamos tener instalados en nuestro servidor Perl , DBI y Term::ReadKey. Los dos primeros suelen estar instalados por lo que pasamos a instalar Term::ReadKey.
wget http://search.cpan.org/CPAN/authors/id/J/JS/JSTOWE/TermReadKey-2.30.tar.gz tar -zxvf TermReadKey-2.30.tar.gz cd TermReadKey-2.30 perl Makefile.PL make make test make install
Ahora pasamos a intalar mytop
wget http://jeremy.zawodny.com/mysql/mytop/mytop-1.4.tar.gz tar -zxvf mytop-1.4.tar.gz cd mytop-1.4 perl Makefile.PL make make test make install
Configurar mytop
mytop soporta diferentes parámetros para conectarnos a la base de datos, usuario, contraseña, etc. Para este ejemplo siempre nos conectaremos a una sola base de datos. Debido a esto, podemos crear un archivo de configuración para no tener que pasar los parámetros al comando.
Este es nuestro archivo de configuración de ejemplo, que guardaremos por ejemplo en /root/.mytop, suponiendo que sea el usuario root el que va a ejecutar este comando:
user=admin pass=password host=localhost db=prueba delay=5 port=3306 socket= batchmode=0 header=1 color=1 idle=1
Explicación
Vamos a explicar cada una de las líneas anteriores:
user=admin pass=password
Usuario y contraseña del usuario de la base de datos a la que nos vamos a conectar. Si queremos pasar estos datos por parámetros, usaremos:
mytop -u admin -p password
host=localhost db=prueba
Servidor de la base de datos (en este caso se encuentra en el propio servidor, por lo que indicamos localhost) y el nombre de la base de datos a la que nos queremos conectar. Conseguiríamos el mismo resultado con estos parámetros:
mytop -h localhost -d prueba
delay=5
Tiempo que tarda en refrescarse la página de resultados. De nuevo, mediante parámetros:
mytop -s 5
port=3306
Puerto al que nos conectamos a mysql (3306 por defecto). Por parámetros:
mytop -port 3306
socket=
Por defecto está vacío (none). Si tenemos el servidor de mysql en nuestro mismo servidor, quizás queramos conectarnos mediante un socket.
batchmode=0
Su valor será 0 o 1. Si el valor es 1, nos mostrará por pantalla todas las consultas una detrás de otra sin recargar la página. Útil si programamos un cron y guardamos el resultado de mytop a un archivo. Si el valor es 0, cada vez que se refresque la página se borrarán las consultas anteriores. Para hacerlo mediante parámetros:
mytop -b 0
header=1
Lo ponemos a 1 para que nos muestre la cabecera al ejecutar mytop. Una vez ejecutado el programa, podremos ocultar y mostrar la cabecera pulsando la tecla h. De nuevo, por comandos:
mytop -header 1
color=1
Nos mostrará el resultado del comando mediante colores. Para indicar esta opción mediante parámetros:
mytop -color 1
idle=1
Para indicar si queremos que nos muestre en los resultados las consultas que están dormidas (sleeping). Si no está activado, nos mostrará los resultados en orden inverso, es decir, las consultas más lentas primero.
mytop -i 1
Entender mytop
Este es el aspecto que tiene el comando mytop en funcionamiento. Por cierto, para ejecutarlo, solamente debemos llamarlo por línea de comandos:
mytop
Empezando por arriba a la izquierda, podemos ver Queries. El número que está a la izquierda (en la imagen, 369.1k), es el número total de consultas que se han hecho al servidor de mysql desde que se inició. A la derecha de Queries podemos ver qps, que son las consultas por segundo (queries per second), aunque más precisamente este número representa la media de consultas por segundo que se han hecho desde que el servidor fue iniciado.
Debajo de la primera línea podemos ver qps now. Este dato representa el número medio de consultas por segundo que ha hecho el servidor desde la última vez que mytop recargó los resultados. A la derecha podemos ver Slow y Slow qps. El valor de Slow es el número de consultas lentas que se han ejecutado desde que el servidor está en marcha. El valor de Slow qps es la media del número de consultas lentas por segundo que se han ejecutado desde la última recarga de los resultados de mytop.
Seguimos más a la derecha, donde podemos ver unos datos muy importantes que tienen que ver con el servidor mysql en sí. Esto es Se/In/Up/De(%), que significa Select, Insert, Update, Delete. Esto nos indica cual es el porcentaje de Select, Insert, Update o Delete que se ejecutan en el servidor. Justo debajo podemos ver de nuevo el porcentaje de Se/In/Up/De de las consultas que se han ejecutado desde el último refresco de mytop.
La key efficiency nos indica el porcentaje de consultas que están utilizado una clave/índice (key) en la consulta. Esto es importante ya que cualquier consulta que se haga sin utilizar una clave/índice, le llevará más tiempo a la base de datos mostrar los resultados.
Bps in/out indica la media de bytes por segundo entrantes a la base de datos y el segundo dato es la media de bytes por segundo salientes (recibiendo y mostrando información). El dato Now in/out es la media de bytes entrantes y salientes (in/out) por segundo desde que mytop ha refrescado la página.
Accesos directos
Estos comandos los podemos ejecutar cuando mytop está ejecutándose para obtener datos adicionales.
d - Mostrar solo datos de una base de datos determinada
f - Mostrar información completa de una consulta
F - Desactivar todos los filtros
h - Mostrar solamente los datos de un servidor específico
H - Mostrar/ocultar cabecera
i - Mostrar/ocultar consultar dormidas (sleeping)
k - Matar una consulta
p - Pausar la vista
m - Para cambiar de 'consultas más lentas' a 'consultas por segundo'
o - Invertir orden
q - Salir
r - Resetear todos los valores (mediante FLUSH STATUS en el servidor)
s - Cambiar el tiempo de refresco
t - Cambiar al modo vista
u - Mostrar solamente de un usuario específico
Instalar interfaz web
Podemos instalar una aplicación web para monitorizar los resultados de mytop mediante nuestro navegador. Para ello vamos a instalar la aplicación ajaxMyTop desde http://sourceforge.net/projects/ajaxmytop. Simplemente lo copiaremos a un directorio de nuestra web y editando el archivo config.php, indicaremos los parámetros que hemos explicado en pasos anteriores.
Por seguridad, es recomendable permitir acceso a este panel solamente a ips conocidas (la nuestra). Para ello, haremos uso de un archivo .htaccess que copiaremos en la carpeta donde hemos instalado ajaxMyTop. Este archivo contendrá el siguiente contenido:
Order deny,allow Deny from all # Permitimos acceso solamente a una ip conocida Allow from 192.168.1.2
Y eso es todo, cualquier duda en los comentarios.
Para realizar el post me he basado en estos artículos:
http://forums.theplanet.com/lofiversion/index.php/t59458.html
http://hostingaldescubierto.com/wordpress/2007/11/20/instalar-mytop/
http://jeremy.zawodny.com/mysql/mytop/mytop.htm
http://mysqlhacker.com/kabir/php/using-mytop-to-interactively-monitor-mysql.html
http://www.opensourcetutorials.com/tutorials/Server-Side-Coding/Administration/mytop/page1.html
Muy útil este artículo, he conseguido instalar mytop y ya lo veo desde la línea de comandos pero no he conseguido verlo con la utilidad ajaxMyTop por el navegador ¿alguna sugerencia? Gracias
Hola, te hago una consutla, esta herramienta podria ayudarme para decirme bien que consulta se ejecuta?, necesito saber cual es especificamente para poder saber la causa de la caida de mi servidor.
Muy util la página, muchas gracias
Permite monitorizar todas las bases de datos ?