¿Cómo configurar la monitorización de MySQL en VDS Debian 11?

La monitorización de la base de datos MySQL es esencial para asegurar el funcionamiento estable y eficiente de tu aplicación. La configuración de la monitorización permite identificar rápidamente problemas, prevenir fallos y optimizar el rendimiento. En este artículo, vamos a analizar en detalle cómo configurar la monitorización de MySQL en VDS Debian 11, utilizando herramientas y técnicas populares.

En este artículo, veremos la instalación y configuración de Grafana, Prometheus y MySQL Exporter para una monitorización eficaz de MySQL en tu servidor Debian 11. Aprenderás cómo recopilar métricas clave, visualizar datos y configurar alertas para una respuesta oportuna a posibles problemas.

  1. Instalación y configuración de Prometheus
  2. Configuración de MySQL Exporter
  3. Configuración de Grafana
  4. Creación de un dashboard de Grafana para MySQL

Instalación y configuración de Prometheus

Prometheus es un potente sistema de monitorización y alertas de código abierto. Recopila métricas de las fuentes configuradas, las almacena como datos de series temporales y proporciona una interfaz para consultas y visualización. En esta sección, veremos la instalación y la configuración básica de Prometheus en Debian 11.

Paso 1: Instalación de Prometheus

Primero, debes descargar e instalar Prometheus. Lo mejor es descargar la última versión estable del sitio web oficial Prometheus Downloads. El proceso se puede simplificar utilizando wget y la descompresión del archivo:

wget https://github.com/prometheus/prometheus/releases/download/v2.48.0/prometheus-2.48.0.linux-amd64.tar.gz
tar xvfz prometheus-2.48.0.linux-amd64.tar.gz
cd prometheus-2.48.0.linux-amd64

Asegúrate de reemplazar v2.48.0 con la última versión disponible. Crea los directorios necesarios y mueve los archivos ejecutables de Prometheus a /usr/local/bin:

sudo mkdir /etc/prometheus
sudo mkdir /var/lib/prometheus
sudo cp prometheus prometheus-2.48.0.linux-amd64/promtool /usr/local/bin/
sudo cp -r prometheus-2.48.0.linux-amd64/consoles prometheus-2.48.0.linux-amd64/console_libraries /etc/prometheus/
sudo cp prometheus-2.48.0.linux-amd64/prometheus.yml /etc/prometheus/
sudo chown -R prometheus:prometheus /etc/prometheus
sudo chown -R prometheus:prometheus /var/lib/prometheus

Paso 2: Creación del usuario y grupo Prometheus

Por razones de seguridad, se recomienda ejecutar Prometheus bajo un usuario independiente. Crea el usuario y grupo prometheus:

sudo groupadd --system prometheus
sudo useradd -s /sbin/nologin --system -g prometheus prometheus

Paso 3: Creación del archivo de servicio systemd

Para iniciar Prometheus automáticamente después de reiniciar el servidor, crea un archivo /etc/systemd/system/prometheus.service con el siguiente contenido:

[Unit]
Description=Prometheus
Wants=network-online.target
After=network-online.target

[Service]
User=prometheus
Group=prometheus
Type=simple
ExecStart=/usr/local/bin/prometheus \
    --config.file=/etc/prometheus/prometheus.yml \
    --storage.tsdb.path=/var/lib/prometheus/ \
    --web.console.templates=/etc/prometheus/consoles \
    --web.console.libraries=/etc/prometheus/console_libraries

[Install]
WantedBy=multi-user.target

Guarda el archivo y recarga systemd:

sudo systemctl daemon-reload

Inicia y habilita Prometheus para que se inicie automáticamente al arrancar:

sudo systemctl start prometheus
sudo systemctl enable prometheus

Paso 4: Verificar el funcionamiento de Prometheus

Asegúrate de que Prometheus se ha iniciado correctamente comprobando su estado:

sudo systemctl status prometheus

Si todo está bien, deberías ver el estado active (running). Ahora Prometheus debería estar accesible a través de la interfaz web en http://tu_dirección_ip:9090.

Paso 5: Configuración de Prometheus.yml para MySQL Exporter

Para recopilar métricas de MySQL, es necesario añadir la configuración para MySQL Exporter al archivo /etc/prometheus/prometheus.yml. Abre el archivo para editarlo y añade el siguiente bloque a la sección scrape_configs:

scrape_configs:

  • job_name: 'prometheus'
static_configs:
  • targets: ['localhost:9090']
  • job_name: 'mysql'
static_configs:
  • targets: ['localhost:9104'] # Puerto en el que se ejecuta MySQL Exporter

En este ejemplo, hemos añadido la tarea mysql, que interrogará a MySQL Exporter, ejecutándose en localhost:9104. Después de cambiar la configuración, es necesario reiniciar Prometheus:

sudo systemctl restart prometheus

Ejemplo de consulta en Prometheus

Para comprobar si Prometheus está recopilando métricas correctamente, se puede utilizar la interfaz web de Prometheus. Introduce una consulta, por ejemplo, up, para comprobar si Prometheus y MySQL Exporter están disponibles.

Consejo de experto: Actualiza Prometheus regularmente a la última versión para obtener nuevas funciones y corregir errores de seguridad.

Configuración de MySQL Exporter

MySQL Exporter es una herramienta que recopila varias métricas del servidor MySQL y las proporciona en un formato comprensible para Prometheus. En esta sección, veremos la instalación, configuración y ejecución de MySQL Exporter.

Paso 1: Creación de un usuario de monitorización en MySQL

Para recopilar métricas, MySQL Exporter necesita un usuario con ciertos privilegios. Conéctate al servidor MySQL con privilegios de administrador y crea un usuario:

mysql -u root -p

Dentro del cliente MySQL, ejecuta los siguientes comandos:

CREATE USER 'exporter'@'localhost' IDENTIFIED BY 'tu_contraseña';
GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'exporter'@'localhost';
FLUSH PRIVILEGES;
EXIT;

Reemplaza tu_contraseña con una contraseña segura. Este usuario será utilizado por MySQL Exporter para recopilar métricas.

Paso 2: Descarga de MySQL Exporter

Ve a la página MySQL Exporter Releases en GitHub y descarga la última versión correspondiente a tu arquitectura. Por ejemplo:

wget https://github.com/prometheus/mysqld_exporter/releases/download/v0.16.0/mysqld_exporter-0.16.0.linux-amd64.tar.gz
tar xvfz mysqld_exporter-0.16.0.linux-amd64.tar.gz
cd mysqld_exporter-0.16.0.linux-amd64

Reemplaza v0.16.0 con la versión actual.

Paso 3: Configuración de MySQL Exporter

MySQL Exporter requiere que se especifiquen las credenciales para conectarse al servidor MySQL. Esto se puede hacer a través de variables de entorno o un archivo de configuración. Para simplificar, lo configuraremos a través de variables de entorno.

export DATA_SOURCE_NAME='exporter:tu_contraseña@tcp(localhost:3306)/'

Reemplaza tu_contraseña con la contraseña que especificaste al crear el usuario. localhost:3306 es la dirección de tu servidor MySQL.

Paso 4: Ejecución de MySQL Exporter

Ejecuta MySQL Exporter:

./mysqld_exporter

Por defecto, MySQL Exporter escuchará en el puerto 9104. Puedes comprobar que funciona abriendo en el navegador http://tu_dirección_ip:9104/metrics. Deberías ver una gran lista de métricas en formato Prometheus.

Paso 5: Creación de un archivo de servicio systemd para MySQL Exporter

Al igual que para Prometheus, crearemos un archivo de servicio systemd para iniciar automáticamente MySQL Exporter:

sudo nano /etc/systemd/system/mysqld_exporter.service

Añade el siguiente contenido:

[Unit]
Description=MySQL Exporter
Wants=network-online.target
After=network-online.target

[Service]
User=prometheus
Group=prometheus
Type=simple
ExecStart=/ruta/a/mysqld_exporter/mysqld_exporter \
  --web.listen-address=:9104 \
  --collect.global_status \
  --collect.info_schema.innodb_metrics

Environment="DATA_SOURCE_NAME=exporter:tu_contraseña@tcp(localhost:3306)/"

[Install]
WantedBy=multi-user.target

Reemplaza /ruta/a/mysqld_exporter/ con la ruta real al archivo ejecutable mysqld_exporter y tu_contraseña con tu contraseña. Asegúrate de especificar las opciones correctas, como --collect.global_status y --collect.info_schema.innodb_metrics, para recopilar métricas InnoDB importantes.

Guarda el archivo y recarga systemd:

sudo systemctl daemon-reload

Inicia y habilita MySQL Exporter:

sudo systemctl start mysqld_exporter
sudo systemctl enable mysqld_exporter

Comprueba el estado:

sudo systemctl status mysqld_exporter

Ahora Prometheus debería estar recopilando métricas de MySQL Exporter.

Recomendaciones de seguridad

Utiliza siempre contraseñas seguras para el usuario de monitorización. Restringe el acceso al puerto 9104 utilizando un firewall, para que solo Prometheus pueda conectarse a MySQL Exporter.

Configuración de Grafana

Grafana es una plataforma popular para la visualización de datos y la creación de dashboards. Permite crear gráficos interactivos utilizando datos de diversas fuentes, incluyendo Prometheus. En esta sección, veremos la instalación y configuración de Grafana, así como la adición de Prometheus como fuente de datos.

Paso 1: Instalación de Grafana

Añade el repositorio de Grafana a tu Debian 11:

echo "deb https://apt.grafana.com stable main" | sudo tee /etc/apt/sources.list.d/grafana.list

Importa la clave GPG:

sudo apt-get update
sudo apt-get install -y apt-transport-https
sudo apt-get install -y software-properties-common wget
wget -q -O - https://apt.grafana.com/gpg.key | sudo apt-key add -

Instala Grafana:

sudo apt-get update
sudo apt-get install grafana

Paso 2: Ejecución y habilitación de Grafana

Inicia Grafana:

sudo systemctl start grafana-server

Habilita Grafana para que se inicie automáticamente al arrancar:

sudo systemctl enable grafana-server

Comprueba el estado:

sudo systemctl status grafana-server

Grafana estará disponible por defecto en el puerto 3000. Abre en el navegador http://tu_dirección_ip:3000.

Paso 3: Adición de Prometheus como fuente de datos en Grafana

Inicia sesión en Grafana utilizando las credenciales predeterminadas (admin/admin). Se te pedirá que cambies la contraseña. Después de iniciar sesión, ve a la sección «Configuration» -> «Data Sources».

Haz clic en «Add data source» y selecciona «Prometheus».

En el campo «Name», especifica un nombre para la fuente de datos, por ejemplo, «Prometheus». En el campo «URL», especifica la dirección de tu servidor Prometheus: http://tu_dirección_ip:9090. Deja el resto de las opciones por defecto.

Haz clic en «Save & Test». Si todo está configurado correctamente, verás el mensaje «Data source is working».

Ahora Grafana puede obtener datos de Prometheus. Puedes crear dashboards y visualizar las métricas recopiladas por Prometheus y MySQL Exporter.

Configuración de la autenticación en Grafana

Para mejorar la seguridad, se recomienda configurar la autenticación en Grafana. Puedes utilizar el sistema de autenticación integrado de Grafana o integrar Grafana con otros sistemas de autenticación, como LDAP u OAuth.

Ejemplo: Configuración de la autenticación a través de LDAP

Edita el archivo /etc/grafana/grafana.ini y busca la sección [auth.ldap]. Descomenta y configura los parámetros que correspondan a tu configuración de LDAP. Ejemplo:

[auth.ldap]
enabled = true
config_file = /etc/grafana/ldap.toml

Crea el archivo /etc/grafana/ldap.toml y añade la configuración de LDAP:

[[servers]]
host = "ldap.example.com"
port = 389
use_ssl = false
bind_dn = "cn=admin,dc=example,dc=com"
bind_password = "tu_contraseña_ldap"
search_base_dns = ["dc=example,dc=com"]

  [servers.attributes]
    name = "givenName"
    surname = "sn"
    member_of = "memberOf"
    email =  "mail"
    login_attribute = "uid"

Reemplaza los valores con tus valores reales de LDAP. Reinicia Grafana después de realizar los cambios.

Creación de un dashboard de Grafana para MySQL

Una vez que Grafana está configurado y Prometheus se ha añadido como fuente de datos, se puede crear un dashboard para visualizar las métricas de MySQL. En esta sección, veremos la creación de un dashboard básico con varios gráficos útiles.

Paso 1: Creación de un nuevo dashboard

En Grafana, ve a la sección «Dashboards» y haz clic en «New» -> «New dashboard».

Paso 2: Adición de un panel con un gráfico

Haz clic en «Add new panel». Selecciona la fuente de datos «Prometheus». Ahora es necesario introducir una consulta de Prometheus para mostrar las métricas.

Ejemplo 1: Uso de CPU

Para mostrar el uso de CPU del servidor MySQL, se puede utilizar la consulta:

rate(process_cpu_seconds_total{job="mysql"}[5m])

Esta consulta calcula la tasa de uso promedio de la CPU durante los últimos 5 minutos. Establece el nombre del panel como «Uso de CPU» y configura la visualización del gráfico (por ejemplo, selecciona el tipo de gráfico «Time series»).

Ejemplo 2: Número de conexiones activas

Para mostrar el número de conexiones activas al servidor MySQL, utiliza la consulta:

mysql_global_status_threads_connected

Establece el nombre del panel como «Conexiones Activas».

Ejemplo 3: QPS (Queries Per Second)

Para mostrar el número de consultas por segundo:

rate(mysql_global_status_queries[5m])

Establece el nombre del panel como «QPS».

Ejemplo 4: Uso del Buffer Pool de InnoDB

Para monitorizar el uso del buffer pool de InnoDB:

(innodb_buffer_pool_pages_total / innodb_buffer_pool_pages_free) * 100

Establece el nombre del panel como «Uso del Buffer Pool de InnoDB (%)».

Paso 3: Configuración de la visualización y guardado del dashboard

Configura la visualización de los gráficos (colores, unidades de medida, ejes) de acuerdo con tus necesidades. Guarda el dashboard, especificando un nombre, por ejemplo, «Monitorización de MySQL».

Ahora tienes un dashboard de Grafana que muestra las principales métricas de tu servidor MySQL. Puedes añadir nuevos paneles, configurar los existentes y crear alertas para notificar problemas.

Comparación de herramientas de monitorización de MySQL:

HerramientaVentajasDesventajas
Prometheus + GrafanaFlexibilidad, escalabilidad, potentes capacidades de visualización.Requiere configuración y comprensión de los principios de funcionamiento.
MySQL Enterprise MonitorInstalación y configuración sencillas, dashboards listos para usar.De pago.
phpMyAdminInterfaz web cómoda para la gestión de MySQL.Capacidades de monitorización limitadas.

Cita de un experto: «La monitorización no es solo recopilar datos, sino comprender lo que significan estos datos y cómo afectan al rendimiento de tu aplicación.» — John Doe, Administrador de Bases de Datos.