Eliminar User-agents de tus logs con Nginx

Tuve un problema, con AWS el ELB continuamente “ping” a tus EC2 instancias para ver si estan funcionando. Todo bien aqui, pero no quiero esta mierda en mis logs (¿registros?)!
Por ejemplo, el access_log para Nginx contiene 28367 lineas, de esos 28073 son del ELB-HealthChecker/1.0 y no los quiero.

Así que para eliminarlos de tus logs completamente vas a necesitar una nueva versión de Nginx, hay algo distinto que nos requiere (el conditional en el access_log bloque de codigo).

El sintaxis es el siguiente (documentación): access_log path [format [buffer=size [flush=time]] [if=condition]];, ahora estas pensando que esto es muy fácil, solo hay que poner
access_log /var/log/nginx/my.access.log combined if=$http_user_agent !~ 'ELB-HealthChecker' y ya está, no?

No exactamente, pero cerca! El forma del if= requiere un booleano, es decir que si es un uno el registro estaría creado o si es un cero, no! Pero como haces eso?

Usando una característica se llama “map“, eso te deje crear un nuevo variable con el valor cero o uno, dependiente en lo que quieres. Para mi es el puto ELB-HealthChecker.
Solo puedes crear un map en el http sección de Nignx, así que probablemente en tu /etc/nginx/nginx.conf vas a tener que poner algo como:

  map $http_user_agent $is_not_elb {
    default 1;
    "ELB-HealthChecker*" 0;
  }

Y luego en el sitio de tu pagina solo tienes que cambiar el access_log para que dice la nueva “if”. El mío dice:
access_log /var/log/nginx/naytech.es.access.log combined if=$is_not_elb;

Y es muy fácil si quieres añadir más user agents, es solo una linea en el map.

Autor: Nay

Soy un informático escoces, me gusta el espacio se llama DevOps y Linux sysadmin. Trabajo en eso y aprendo español para vivir en su país qué es mejor.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *