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