Extraiga el registro de los últimos 5 minutos del archivo de registro usando Shell

Extraiga el registro de los últimos 5 minutos del archivo de registro usando Shell

Necesito extraer el registro de los últimos 5 minutos del archivo de registro. Aquí está mi archivo de registro.

[2022-02-08 13:26:21:352] [ERROR] [iBus Connection LifeCycle - CCMHost_DummyDevice_Backup_AD2::Management:::NRMCMO_FLPROD2] [com.example]
  + Message: Could not create an administered connection factory: Java heap space
  + Throwable: java.lang.OutOfMemoryError: Java heap space

[2022-02-08 15:09:37:068] [ERROR] [HikariCP connection filler (pool DirectReadConnection.9c292fc0.210e0ac7)] [com.example]
  + Message: Unable to Initialize Connection
  + Throwable: java.sql.SQLException: Listener refused the connection with the following error:
ORA-12505, TNS:listener does not currently know of SID given in connect descriptor

[2022-02-08 15:09:37:068] [ERROR] [HikariCP connection filler (pool DirectReadConnection.9c292fc0.210e0ac7)] [com.example]
  + Message: Unable to Initialize Connection
  + Throwable: java.sql.SQLException: Listener refused the connection with the following error:
ORA-01017, TNS:listener does not currently know of SID given in connect descriptor


[2022-02-08 15:05:04:056] [ERROR] [JMS Session Delivery Thread - The user's password has expired.] [com.example]

Intenté usar esto pero no funcionó.

awk -v d1="$(date --date="2 hour ago" "+%Y-%m-%d %H:%M:%S:%3N")" -v d2="$(date "+%Y-%m-%d %H:%M:%S:%3N")" '$0 > d1 && $0 < d2 || $0 ~ d2' filelog.log

Cualquier ayuda será apreciada.

Respuesta1

Esto no funcionó porque el primer carácter en la línea del registro es un corchete, y eso arruina la comparación. Si extrae solo la parte de la fecha de la línea de registro para comparar, debería funcionar. Tenga en cuenta que estoy codificando las fechas aquí para poder usar sus líneas de ejemplo.

awk -v d1="2022-02-08 15:04:00" -v d2="2022-02-08 15:08:00" 'd1 < substr($0,2,19) && substr($0,2,19) < d2 || substr($0,2,19) ~ d2' filelog.log

De hecho, podrías simplificar tu comando; Dado que solo le importan los momentos más recientes que hace 2 horas, puede eliminar "d2" por completo. Si solo le importan las líneas en las que realmente aparece la fecha, puede evitar coincidencias artificiales con otras líneas especificando que las líneas coincidentes deben comenzar con "[" como lo hacen las líneas con fecha estampada.

awk -v d1="$(date --date="2 hour ago" "+%Y-%m-%d %H:%M:%S:%3N")" '/^\[/ && d1 < substr($0,2,19)' filelog.log

Si también le interesan las líneas adicionales debajo de cada marca de fecha coincidente, y si realmente hay líneas en blanco entre cada entrada de línea válida, puede usar eso para modificar el separador de registros para recoger la información adicional y soltar el cheque para el "[" , ya que las otras líneas son parte del mismo registro en lugar de líneas separadas para filtrar.

root@2ec99a4edaa9:/tmp# awk -v RS= -v d1="2022-02-08 15:04:00" 'd1 < substr($0,2,19)' filelog.log
[2022-02-08 15:09:37:068] [ERROR] [HikariCP connection filler (pool DirectReadConnection.9c292fc0.210e0ac7)] [com.example]
  + Message: Unable to Initialize Connection
  + Throwable: java.sql.SQLException: Listener refused the connection with the following error:
ORA-12505, TNS:listener does not currently know of SID given in connect descriptor
[2022-02-08 15:09:37:068] [ERROR] [HikariCP connection filler (pool DirectReadConnection.9c292fc0.210e0ac7)] [com.example]
  + Message: Unable to Initialize Connection
  + Throwable: java.sql.SQLException: Listener refused the connection with the following error:
ORA-01017, TNS:listener does not currently know of SID given in connect descriptor
[2022-02-08 15:05:04:056] [ERROR] [JMS Session Delivery Thread - The user's password has expired.] [com.example]

Finalmente, si desea mantener las líneas en blanco para facilitar la lectura en su salida, puede simplemente agregarlas -v ORS="\n\n"a su declaración awk.

En total, su comando modificado se vería así:

awk -v RS= -v ORS="\n\n" -v d1="$(date --date="2 hour ago" "+%Y-%m-%d %H:%M:%S:%3N")" 'd1 < substr($0,2,19)' filelog.log

información relacionada