Monitorar MySQL en CentOS 6 con Munin

Entre los gráficos instalados por defecto en Munin no se encuentra ningún monitorado específico para MySQL aunque si vienen en la carpeta de plugins una multitud de estos entre los cuales hay algunos que tal vez no nos interese instalar.

munin-mysql_queries-timezone

Antes de entrar en el tema concreto de MySQL voy a explicar el procedimiento por defecto para instalar plugins en Munin.

  1. El plugin debe existir en el directorio /usr/share/munin/plugins y además tener permisos de ejecución.
  2. Un plugin no es más que un script shell o perl en el que algunos sea necesario modificacar las variables dentro de este script, para otros se pueden definir las variables globales en el archivo /etc/munin/plugin-conf.d/munin-node de la siguiente forma

    [nombre_del_plugin_igual_al_del_archivo]
    env.variable valor
    variable valor

    Importante: los valores no pueden tener símbolos cómo # porque pueden causar errores
  3. Luego hay que hacer un enlace simbólico del plugin en el directorio /etc/munin/plugins

Una vez visto el funcionamiento de los plugins genéricos vamos a ver los de mysql en concreto. Estos vienen por defecto en la instalación aunque no se ejecutan por defecto, yo tengo activados los siguientes que son los necesarios para cualquier servidor normal:

mysql_bin_relay_log
mysql_bytes
mysql_commands
mysql_files_tables
mysql_innodb_*
mysql_myisam_indexes
mysql_network_traffic
mysql_queries
mysql_slow
mysql_slowqueries

Lo importante es activarlos uno a uno y no todos de golpe porque por ejemplo existe el archivo mysql_ el cual solo es una plantilla y no realmente un plugin y de activarlo se pueden producir errores del tipo:

Unknown graph at /etc/munin/plugins/mysql_ line

Ahora es mejor crear un usuario distinto para el monitorado:

create user munin@localhost identified by 'Password’;
Importante: No poner caracteres raros en el password ni en el nombre de usuario.

GRANT PROCESS, SUPER ON *.* TO 'munin'@'localhost';
GRANT SELECT ON `mysql`.* TO 'munin'@'localhost';
flush privileges;

Con esto es suficiente para monitorar lo básico aunque si quieres controlar las tablas InnoDB debes darle permisos a ese usuario en esas tablas sino tendremos el siguiente error No visible tables use InnoDB. Mi consejo es darle permisos absolutos a ese usuario:

GRANT ALL PRIVILEGES ON *.* TO 'munin'@'localhost' IDENTIFIED BY ‘Password’;
GRANT RELOAD,PROCESS ON *.* TO 'munin'@'localhost';
GRANT USAGE ON *.* TO 'munin'@'localhost';

Ahora tenemos que configurar las variables globales en el archivo /etc/munin/plugin-conf.d/munin-node. Las variables las configuraremos por igual en todos los plugins gracias a una sola línea:

[mysql*]
env.mysqlopts -u munin –pPassword
env.mysqladmin /usr/bin/mysqladmin
env.mysqluser munin
env.mysqlpassword Password

Con esto reiniciamos el nodo y dentro de 10 minutos tendremos los gráficos en nuestra web.

Para reiniciar el nodo service munin-node restart.

Si has seguido todos estos pasos no deberías tener errores del tipo Service 'mysql_slowqueries' timed out munin.

Si encuentras errores del tipo Use of uninitialized value in printf pueden deberse a incompatibilidades entre el plugin y la versión de Mysql, en mi caso la 5.5.28.

Este ha sido un manual para instalar plugin de monitorado para MySQL 5.5.28 en CentOS 6.3 con Munin 2.0.8.

Comentarios