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?

Empieza gratis y recibe alertas instantáneas cuando tu sitio tenga problemas.

Crear cuenta gratis
Compartir: