2010-12-02 6 views

Respuesta

43
tail -fn0 logfile | \ 
while read line ; do 
     echo "$line" | grep "pattern" 
     if [ $? = 0 ] 
     then 
       ... do something ... 
     fi 
done 
+2

Ah, una cosa más, el 'logfile' cola -fn0 parece estar expirará ya que el archivo de registro del servidor HTTP son rápidamente cambió de nombre y gzip'ed. El guion sigue siendo monitorear el viejo descriptor de archivo, creo? ¿Hay alguna manera de actualizar automáticamente el archivo inode o algo después de un período de tiempo para el comando 'tail'? – est

+9

Simplemente agregue un --retry al comando tail, o use -F en lugar de -f. Deberias hacer eso. – Zizzencs

+1

Considere también 'grep -q' para establecer el código de retorno sin mostrar las líneas correspondientes. –

12

También encontré que se puede usar awk para monitorear el patrón y realizar alguna acción cuando se encuentra patrón:

tail -fn0 logfile | awk '/pattern/ { print | "command" }' 

Esto ejecutará comandos al patrón se encuentra en el registro. El comando puede ser cualquier comando de Unix, incluidos los scripts de shell o cualquier otra cosa.

3

Un enfoque aún más robusto es monit. Esta herramienta puede monitorear muchas cosas, pero una de ellas es que rastreará fácilmente uno o más registros, combinará contra expresiones regulares y luego activará un script. Esto es particularmente útil si tiene una colección de archivos de registro para ver o más de un evento para activar.

0

Simple Automated Solution that covers a lot of scenarios:

USO:

logrobot localhost [default-dir],fixer,[exit-codes],[command/script-to-run-per-exit-code] [feature] [logfile] [age] [str-1] [str-2] [WARN] [CRIT] [tag] [option] 

Ejemplo:

logrobot localhost /tmp/logXray,fixer,0y-1y-2y,0-uname,1-who,2-uptime autonda /var/log/kern.log 60m 'error' '.' 1 2 app_err_monitor -ndshow 

Con esta herramienta, puede supervisar patrones específicos en un archivo de registro y luego activar un comando o script cuando los patrones se encuentran ... o NO se encuentran!

Los scripts o comandos se pueden configurar para que se ejecuten según los umbrales y los códigos de salida.

La herramienta se puede descargar directo here.

1

bateador y simple:

tail -f log.txt | egrep -m 1 "error" 
echo "Found error, do sth." 
... 
+1

Gracias por este fragmento de código, que puede proporcionar ayuda inmediata. Una explicación adecuada [mejoraría en gran medida] (// meta.stackexchange.com/q/114762) su valor educativo al mostrar * por qué * esta es una buena solución al problema, y ​​lo haría más útil para lectores futuros con similares, pero no idénticas, preguntas. Por favor [edite] su respuesta para agregar una explicación y dar una indicación de qué limitaciones y suposiciones se aplican. –

Cuestiones relacionadas