Volver al blog

Logs del servidor: cómo interpretarlos sin morir

Guía para entender los logs de Apache, Nginx y PHP. Detecta errores, ataques y problemas de rendimiento analizando tus logs.

Logs del servidor: cómo interpretarlos sin morir

Los logs del servidor son como la caja negra de tu web. Registran todo lo que pasa: visitas, errores, ataques, problemas de rendimiento. Saber interpretarlos te permite diagnosticar problemas, detectar amenazas y optimizar tu sitio. En esta guía te enseñamos a leerlos.

¿Qué son los logs del servidor?

Los logs son archivos de texto donde el servidor registra eventos. Los principales tipos son:

  • Access logs: Registran cada petición recibida
  • Error logs: Registran errores y problemas
  • PHP logs: Errores específicos de PHP
  • Application logs: Logs de tu aplicación (WordPress, etc.)

Ubicación de los logs

Apache

# Debian/Ubuntu
/var/log/apache2/access.log
/var/log/apache2/error.log

# CentOS/RHEL
/var/log/httpd/access_log
/var/log/httpd/error_log

Nginx

/var/log/nginx/access.log
/var/log/nginx/error.log

PHP

# Ver ubicación configurada
php -i | grep error_log

# Ubicaciones comunes
/var/log/php_errors.log
/var/log/php-fpm/error.log

Hosting compartido

Generalmente en:

/home/usuario/logs/
/home/usuario/public_html/logs/

O accesibles desde el panel de control (cPanel, Plesk).

Anatomía de un access log

Una línea típica de access log:

192.168.1.1 - - [14/Dec/2025:10:25:13 +0000] "GET /productos HTTP/1.1" 200 4523 "https://google.com" "Mozilla/5.0..."

Desglose:

Parte Ejemplo Significado
IP 192.168.1.1 IP del visitante
Fecha [14/Dec/2025:10:25:13] Cuándo ocurrió
Método GET Tipo de petición
URL /productos Página solicitada
Código 200 Código HTTP
Tamaño 4523 Bytes enviados
Referer https://google.com De dónde vino
User Agent Mozilla/5.0... Navegador/bot

Anatomía de un error log

[Sun Dec 14 10:30:45.123456 2025] [php:error] [pid 12345] [client 192.168.1.1:54321] PHP Fatal error: Uncaught Error: Class 'NotFound' not found in /var/www/html/index.php:42

Desglose:

  • Fecha y hora: Cuándo ocurrió
  • Módulo: Qué componente reporta (php, core, etc.)
  • Nivel: Severidad (error, warning, notice)
  • PID: ID del proceso
  • Cliente: IP que causó el error
  • Mensaje: Descripción del error

Comandos útiles para analizar logs

Ver logs en tiempo real

# Seguir el log en vivo
tail -f /var/log/nginx/access.log

# Filtrar solo errores
tail -f /var/log/nginx/error.log | grep -i error

Buscar errores específicos

# Buscar errores 500
grep " 500 " /var/log/nginx/access.log

# Buscar errores 404
grep " 404 " /var/log/nginx/access.log

# Errores PHP
grep "Fatal error" /var/log/php_errors.log

IPs más activas

awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -20

Páginas más solicitadas

awk '{print $7}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -20

User agents sospechosos

awk -F" '{print $6}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -20

Qué buscar en los logs

1. Errores HTTP frecuentes

Busca patrones de errores HTTP:

  • Muchos 404: Enlaces rotos o escaneo de vulnerabilidades
  • Errores 500: Problemas de código o servidor
  • Errores 503: Servidor sobrecargado

2. Intentos de ataque

Señales de ataques:

# Intentos de acceso a wp-login
grep "wp-login" /var/log/nginx/access.log | wc -l

# Intentos de SQL injection
grep -E "union|select|insert|drop" /var/log/nginx/access.log

# Escaneo de archivos sensibles
grep -E ".env|wp-config|.git" /var/log/nginx/access.log

3. Bots problemáticos

Bots que consumen recursos excesivos:

# Ver bots
grep -i "bot" /var/log/nginx/access.log | awk -F" '{print $6}' | sort | uniq -c | sort -rn

4. Errores PHP repetitivos

# Errores más comunes
grep -i "error" /var/log/php_errors.log | sort | uniq -c | sort -rn | head -10

5. Rendimiento lento

Si tienes logging de tiempo de respuesta habilitado:

# Peticiones lentas (> 2 segundos)
awk '$NF > 2' /var/log/nginx/access.log

Configurar logging útil

Nginx - Formato personalizado con tiempo de respuesta

log_format detailed '$remote_addr - $remote_user [$time_local] '
                    '"$request" $status $body_bytes_sent '
                    '"$http_referer" "$http_user_agent" '
                    '$request_time $upstream_response_time';

access_log /var/log/nginx/access.log detailed;

PHP - Logging detallado

# php.ini
log_errors = On
error_log = /var/log/php_errors.log
error_reporting = E_ALL

Herramientas de análisis de logs

Línea de comandos

  • GoAccess: Analizador visual en terminal
  • AWStats: Estadísticas completas

Soluciones centralizadas

  • ELK Stack: Elasticsearch, Logstash, Kibana
  • Grafana Loki: Más ligero que ELK
  • Papertrail: SaaS simple

Automatizar el análisis

Crea scripts que te alerten de anomalías:

#!/bin/bash
# check_errors.sh - Ejecutar con cron cada hora

ERRORS_500=$(grep " 500 " /var/log/nginx/access.log | wc -l)
ERRORS_404=$(grep " 404 " /var/log/nginx/access.log | wc -l)

if [ $ERRORS_500 -gt 100 ]; then
    echo "Alerta: $ERRORS_500 errores 500 detectados" | mail -s "Alerta de errores" admin@ejemplo.com
fi

Complementa esto con alertas de monitoreo de WatcherWolf para detección en tiempo real.

Rotación de logs

Los logs crecen rápidamente. Configura rotación:

# /etc/logrotate.d/nginx
/var/log/nginx/*.log {
    daily
    missingok
    rotate 14
    compress
    delaycompress
    notifempty
    create 0640 www-data adm
    sharedscripts
    postrotate
        [ -f /var/run/nginx.pid ] && kill -USR1 `cat /var/run/nginx.pid`
    endscript
}

Conclusión

Los logs son una mina de información para diagnosticar problemas, detectar ataques y optimizar tu web. Dedica tiempo a entender qué información tienen y cómo extraerla. Automatiza alertas para los problemas más críticos y revisa periódicamente para detectar tendencias.

Combina el análisis de logs con monitoreo proactivo de uptime y rendimiento para tener visibilidad completa de la salud de tu web.

Complementa con monitoreo de WatcherWolf

¿Listo para monitorear tu web?

Trial de 14 días sin tarjeta. Recibe alertas instantáneas cuando tu sitio tenga problemas.

Empezar trial
Compartir: