
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.
- 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 de
man 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
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.