¿tus Máquinas Virtuales: Guía Práctica" class="internal-post-link">Guía Práctica" class="internal-post-link">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.
- Instalación y configuración de Prometheus
- Configuración de MySQL Exporter
- Configuración de Grafana
- 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:
| Herramienta | Ventajas | Desventajas |
|---|---|---|
| Prometheus + Grafana | Flexibilidad, escalabilidad, potentes capacidades de visualización. | Requiere configuración y comprensión de los principios de funcionamiento. |
| MySQL Enterprise Monitor | Instalación y configuración sencillas, dashboards listos para usar. | De pago. |
| phpMyAdmin | Interfaz 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.