Grep en nuevos archivos de registro a medida que se crean

Grep en nuevos archivos de registro a medida que se crean

Cada hora, el servidor crea un nuevo archivo de registro con el formato syslog_all.yyyy-mm-dd-hh y archiva el archivo de la hora anterior.

Lo que necesito es una forma de buscar en los archivos de registro actuales y aún por crear una determinada cadena sin tener que reiniciar el comando cada hora solo porque el nombre del archivo ha cambiado.

Actualmente hago:

tail -f syslog_all.2017-04-25-09 | egrep -i --line-buffered "string1" | egrep -i "(.*first.*|.*second.*|.*third.*)"

Respuesta1

Aquí tienes una receta de alto nivel.

  1. Configure syslogd o rsyslogd (lo que utilice su sistema) para enviar los mensajes de instalación/prioridad requeridos a una canalización con nombre además de a dónde va ahora. Extraer deman rsyslog.conf
Named pipes

   This  version  of  rsyslogd(8) has support for logging output to
   named pipes (fifos). A fifo or named pipe can be used as a  des‐
   tination  for  log messages by prepending a pipe symbol ('|') to
   the name of the file. This is handy for debugging. Note that the
   fifo  must  be  created  with the mkfifo(1) command before rsys‐
   logd(8) is started.

Hay un ejemplo en mi/etc/rsyslog.d/50-default.conf

daemon.*;mail.*;\
    news.err;\
    *.=debug;*.=info;\
    *.=notice;*.=warn       |/tmp/rt_monitor
  1. Cree una tubería con nombre y use tail y grep para leer y buscar desde la tubería.

    mkfifo /tmp/rt_monitor; tail -f /tmp/rt_monitor | grep "alert string"

Debe verificar que el sistema continúe si la tubería con nombre se llena si no tiene su consumidor en ejecución y evitar que esto ocurra. Le he dado una receta muy cruda.

información relacionada