🎨 Sysprovider Code
Sysprovider LogoWiki
🇪🇸Hosting español para ecommerce

Monitorización avanzada de WordPress con Prometheus y Grafana

Actualizado el 29 de septiembre de 2025

La monitorización avanzada de WordPress ya no es un lujo, sino una necesidad para cualquier sitio web que aspire a ofrecer un rendimiento constante, alta disponibilidad y una experiencia de usuario impecable. Las herramientas tradicionales, como los plugins de caché o los paneles de control básicos, se quedan cortas cuando necesitamos identificar cuellos de botella, predecir fallos o escalar infraestructuras complejas. Aquí es donde entra en juego la pareja imbatible de Prometheus y Grafana.

Prometheus es un sistema de monitorización y alerta de código abierto, diseñado para recopilar series temporales de métricas de forma eficiente y fiable. Grafana, por su parte, es la plataforma de visualización y análisis que transforma esos datos en paneles interactivos y dashboards personalizados. Juntos, te permiten pasar de preguntarte “¿qué pasó?” a responder “¿por qué pasó?” en cuestión de segundos.

En este artículo, te guiaré paso a paso a través de la implementación de un stack completo de monitorización para WordPress. Cubriremos desde la instalación del exporter de Prometheus hasta la configuración de alertas proactivas en Grafana. Todo ello con un enfoque práctico, profesional y orientado a SysAdmins.

¿Por qué Prometheus y Grafana para WordPress?

La mayoría de las soluciones de monitorización para WordPress se basan en plugins PHP que consumen recursos del propio servidor web. Esto puede crear un conflicto de intereses: para monitorizar el rendimiento, estás añadiendo carga extra al sistema. Prometheus, en cambio, funciona de forma externa. Recopila métricas mediante un exporter que expone los datos en un endpoint HTTP, sin interferir en el funcionamiento del sitio.

Además, la arquitectura de Prometheus permite:

  • Almacenamiento eficiente: Las series temporales ocupan mucho menos espacio que las bases de datos relacionales.
  • Alta granularidad: Puedes capturar métricas cada 15 segundos sin degradar el rendimiento.
  • Alertas inteligentes: Basadas en umbrales, promedios móviles o patrones de comportamiento.
  • Escalabilidad horizontal: Puedes monitorizar cientos de sitios WordPress desde un solo servidor Prometheus.

Grafana, por su parte, ofrece una flexibilidad visual inigualable. Puedes crear dashboards con gráficos de líneas, heatmaps, tablas de estado, logs y mucho más. Todo en tiempo real y con la posibilidad de compartir paneles con tu equipo.

Componentes del Stack de Monitorización

Antes de empezar, necesitas tener claros los componentes que vamos a instalar y configurar:

  1. Servidor Prometheus: El cerebro del sistema, que recopila y almacena las métricas.
  2. WordPress Exporter: Un script o binario que expone métricas específicas de WordPress (caché, consultas a la base de datos, memoria PHP, etc.).
  3. Node Exporter: Para métricas del sistema operativo (CPU, RAM, disco, red).
  4. MySQL Exporter: Para métricas de la base de datos (consultas lentas, conexiones activas, tamaño de tablas).
  5. Grafana: El panel de control que consume datos de Prometheus y los visualiza.
  6. Alertmanager: El componente encargado de gestionar las alertas y enviarlas a canales como Slack, Telegram o correo electrónico.

Instalación y Configuración de Prometheus

Vamos a asumir que trabajas sobre un servidor Linux (Ubuntu 22.04 o similar). Lo primero es instalar Prometheus.

Paso 1: Descargar e instalar Prometheus

# Crear usuario y directorio
sudo useradd --no-create-home --shell /bin/false prometheus
sudo mkdir /etc/prometheus
sudo mkdir /var/lib/prometheus

# Descargar la última versión estable
wget https://github.com/prometheus/prometheus/releases/download/v2.52.0/prometheus-2.52.0.linux-amd64.tar.gz
tar xvf prometheus-2.52.0.linux-amd64.tar.gz
sudo cp prometheus-2.52.0.linux-amd64/prometheus /usr/local/bin/
sudo cp prometheus-2.52.0.linux-amd64/promtool /usr/local/bin/
sudo cp -r prometheus-2.52.0.linux-amd64/consoles /etc/prometheus
sudo cp -r prometheus-2.52.0.linux-amd64/console_libraries /etc/prometheus

# Limpiar
rm -rf prometheus-2.52.0.linux-amd64*

Paso 2: Configurar Prometheus

Crea el archivo /etc/prometheus/prometheus.yml:

global:
  scrape_interval: 15s
  evaluation_interval: 15s

scrape_configs:
  - job_name: 'prometheus'
    static_configs:
      - targets: ['localhost:9090']

  - job_name: 'wordpress'
    static_configs:
      - targets: ['localhost:9234']  # Puerto del WordPress Exporter

  - job_name: 'node'
    static_configs:
      - targets: ['localhost:9100']  # Puerto del Node Exporter

  - job_name: 'mysql'
    static_configs:
      - targets: ['localhost:9104']  # Puerto del MySQL Exporter

Paso 3: Crear servicio systemd

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

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

Habilita e inicia el servicio:

sudo systemctl daemon-reload
sudo systemctl enable prometheus
sudo systemctl start prometheus

Instalación del WordPress Exporter

El WordPress Exporter es un script PHP que expone métricas específicas de WordPress. Existen varias implementaciones, pero la más popular es la de Prometheus WordPress Exporter (por ejemplo, el proyecto de prometheus-wordpress-exporter en GitHub).

Opción A: Usar un exporter PHP ligero

Descarga el script en tu servidor web:

cd /var/www/html/wp-content/plugins/
git clone https://github.com/prometheus-wordpress-exporter/prometheus-wordpress-exporter.git

Luego, en el archivo wp-config.php o en un plugin personalizado, añade las métricas que quieras exponer. Un ejemplo básico:

add_action('rest_api_init', function () {
    register_rest_route('prometheus/v1', '/metrics', array(
        'methods' => 'GET',
        'callback' => 'prometheus_wordpress_metrics',
        'permission_callback' => '__return_true',
    ));
});

function prometheus_wordpress_metrics() {
    header('Content-Type: text/plain; charset=utf-8');
    $metrics = "# HELP wp_http_requests_total Total HTTP requests\n";
    $metrics .= "# TYPE wp_http_requests_total counter\n";
    $metrics .= "wp_http_requests_total " . get_transient('wp_http_requests_total') . "\n";
    // Añade más métricas aquí (caché, consultas DB, etc.)
    echo $metrics;
}

Opción B: Usar un exporter en Go (recomendado para producción)

El exporter en Go es más eficiente y no depende de PHP. Puedes descargar el binario precompilado:

wget https://github.com/prometheus-wordpress-exporter/prometheus-wordpress-exporter/releases/latest/download/prometheus-wordpress-exporter-linux-amd64
chmod +x prometheus-wordpress-exporter-linux-amd64
sudo mv prometheus-wordpress-exporter-linux-amd64 /usr/local/bin/wp-exporter

Crea el servicio:

sudo nano /etc/systemd/system/wp-exporter.service

Contenido:

[Unit]
Description=Prometheus WordPress Exporter
After=network.target

[Service]
Type=simple
ExecStart=/usr/local/bin/wp-exporter --web.listen-address=:9234 --wordpress.url=http://localhost/wp-json/prometheus/v1/metrics
Restart=always

[Install]
WantedBy=multi-user.target

Habilita e inicia:

sudo systemctl daemon-reload
sudo systemctl enable wp-exporter
sudo systemctl start wp-exporter

Instalación de Node Exporter y MySQL Exporter

Node Exporter

wget https://github.com/prometheus/node_exporter/releases/download/v1.7.0/node_exporter-1.7.0.linux-amd64.tar.gz
tar xvf node_exporter-1.7.0.linux-amd64.tar.gz
sudo cp node_exporter-1.7.0.linux-amd64/node_exporter /usr/local/bin/
sudo useradd --no-create-home --shell /bin/false node_exporter
sudo nano /etc/systemd/system/node_exporter.service

Contenido del servicio:

[Unit]
Description=Node Exporter
After=network.target

[Service]
User=node_exporter
Group=node_exporter
Type=simple
ExecStart=/usr/local/bin/node_exporter --web.listen-address=:9100

[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable node_exporter
sudo systemctl start node_exporter

MySQL Exporter

wget https://github.com/prometheus/mysqld_exporter/releases/download/v0.15.1/mysqld_exporter-0.15.1.linux-amd64.tar.gz
tar xvf mysqld_exporter-0.15.1.linux-amd64.tar.gz
sudo cp mysqld_exporter-0.15.1.linux-amd64/mysqld_exporter /usr/local/bin/
sudo useradd --no-create-home --shell /bin/false mysqld_exporter
sudo nano /etc/systemd/system/mysqld_exporter.service

Contenido:

[Unit]
Description=MySQL Exporter
After=network.target

[Service]
User=mysqld_exporter
Group=mysqld_exporter
Type=simple
ExecStart=/usr/local/bin/mysqld_exporter --web.listen-address=:9104 --config.my-cnf=/etc/mysql/exporter.cnf

[Install]
WantedBy=multi-user.target

Crea el archivo de configuración /etc/mysql/exporter.cnf:

[client]
user=exporter
password=tu_contraseña_segura
host=localhost

No olvides crear el usuario en MySQL:

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

Configuración de Grafana

Instala Grafana siguiendo la documentación oficial:

sudo apt-get install -y software-properties-common
sudo add-apt-repository "deb https://packages.grafana.com/oss/deb stable main"
wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add -
sudo apt-get update
sudo apt-get install grafana
sudo systemctl enable grafana-server
sudo systemctl start grafana-server

Accede a http://tu-servidor:3000 con usuario admin y contraseña admin.

Añadir fuente de datos Prometheus

  1. Ve a Configuration > Data Sources > Add data source.
  2. Selecciona Prometheus.
  3. En URL, escribe http://localhost:9090.
  4. Haz clic en Save & Test.

Importar un dashboard para WordPress

Grafana dispone de dashboards predefinidos. Busca en la comunidad uno específico para WordPress (por ejemplo, el dashboard ID 14007 para WordPress Exporter).

  1. Ve a Dashboards > Import.
  2. Introduce el ID 14007 y haz clic en Load.
  3. Selecciona la fuente de datos Prometheus.
  4. Haz clic en Import.

Métricas Clave para Monitorizar WordPress

Una vez que todo está en marcha, es hora de definir las métricas más importantes para la monitorización WordPress.

Métricas del Sistema (Node Exporter)

  • CPU Usage: 100 - (avg by (instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)
  • Memory Usage: (1 - (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes)) * 100
  • Disk I/O: rate(node_disk_io_time_seconds_total[5m])

Métricas de la Base de Datos (MySQL Exporter)

  • Consultas lentas: rate(mysql_global_status_slow_queries[5m])
  • Conexiones activas: mysql_global_status_threads_connected
  • Tamaño total de la base de datos: sum(mysql_info_schema_table_size)

Métricas de WordPress (WordPress Exporter)

  • Peticiones HTTP: rate(wp_http_requests_total[5m])
  • Caché: wp_cache_hit_ratio (porcentaje de aciertos de caché)
  • Tiempo de carga: wp_page_load_time_seconds
  • Consultas a la base de datos por página: wp_db_queries_per_page

[INFO] Recuerda que no todas las métricas están disponibles por defecto. Debes exponerlas desde tu WordPress Exporter. Puedes añadir métricas personalizadas como el número de plugins activos, la versión de PHP o el estado de la caché de Redis.

Alertas Proactivas con Alertmanager

La monitorización sin alertas es solo un bonito panel de control. Para que sea realmente útil, necesitas configurar alertas WordPress que te avisen cuando algo va mal.

Configurar Alertmanager

Instala Alertmanager:

wget https://github.com/prometheus/alertmanager/releases/download/v0.27.0/alertmanager-0.27.0.linux-amd64.tar.gz
tar xvf alertmanager-0.27.0.linux-amd64.tar.gz
sudo cp alertmanager-0.27.0.linux-amd64/alertmanager /usr/local/bin/
sudo cp alertmanager-0.27.0.linux-amd64/amtool /usr/local/bin/
sudo mkdir /etc/alertmanager
sudo nano /etc/alertmanager/alertmanager.yml

Contenido básico:

global:
  resolve_timeout: 5m

route:
  group_by: ['alertname']
  group_wait: 10s
  group_interval: 10s
  repeat_interval: 1h
  receiver: 'slack'

receivers:
  - name: 'slack'
    slack_configs:
      - api_url: 'https://hooks.slack.com/services/TU/WEBHOOK'
        channel: '#alerts'
        title: '{{ .GroupLabels.alertname }}'
        text: '{{ .CommonAnnotations.description }}'

Crea el servicio systemd y actívalo.

Definir reglas de alerta en Prometheus

Añade al archivo prometheus.yml la sección rule_files:

rule_files:
  - "alerts.yml"

Crea el archivo /etc/prometheus/alerts.yml:

groups:
  - name: wordpress_alerts
    rules:
      - alert: WordPressDown
        expr: up{job="wordpress"} == 0
        for: 1m
        labels:
          severity: critical
        annotations:
          summary: "WordPress no responde"
          description: "El exporter de WordPress lleva más de 1 minuto caído."

      - alert: HighLoadAverage
        expr: node_load1 > 4
        for: 5m
        labels:
          severity: warning
        annotations:
          summary: "Carga alta del servidor"
          description: "El load average es {{ $value }} durante más de 5 minutos."

      - alert: SlowQueries
        expr: rate(mysql_global_status_slow_queries[5m]) > 0.5
        for: 2m
        labels:
          severity: warning
        annotations:
          summary: "Consultas lentas en MySQL"
         

¿Necesitas ayuda?Son dos de nuestros técnicos, Agustín y Mikel, y están disponibles para resolver cualquier problema.

Hablar con ellos ahora
Agustín y Mikel