로그 파일에서 지난 5분 동안의 로그를 추출해야 합니다. 여기 내 로그 파일이 있습니다
[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]
이것을 사용해 보았으나 작동하지 않았습니다.
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
어떤 도움이라도 감사하겠습니다
답변1
로그 줄의 첫 번째 문자가 대괄호이고 이로 인해 비교가 망가지기 때문에 작동하지 않습니다. 비교할 로그 줄의 날짜 부분만 추출하면 제대로 작동합니다. 참고 예제 라인을 사용할 수 있도록 여기에 날짜를 하드코딩하고 있습니다.
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
실제로 명령을 단순화할 수 있습니다. 2시간 전보다 최근 시간에만 관심이 있으므로 "d2"를 모두 삭제할 수 있습니다. 날짜가 실제로 나타나는 행에만 관심이 있는 경우 일치하는 행이 날짜 스탬프가 있는 행처럼 "["로 시작하도록 지정하여 다른 행과의 인위적인 일치를 방지할 수 있습니다.
awk -v d1="$(date --date="2 hour ago" "+%Y-%m-%d %H:%M:%S:%3N")" '/^\[/ && d1 < substr($0,2,19)' filelog.log
일치하는 각 날짜 스탬프 아래의 추가 줄에 관심이 있고 모든 유효한 줄 항목 사이에 실제로 빈 줄이 있는 경우 이를 사용하여 레코드 구분 기호를 수정하여 추가 정보를 선택하고 "["에 대한 확인을 삭제할 수 있습니다. , 다른 행은 필터링할 별도의 행이 아닌 동일한 레코드의 일부이기 때문입니다.
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]
마지막으로, 출력의 가독성을 위해 빈 줄을 유지하려면 -v ORS="\n\n"
awk 문에 추가하면 됩니다.
전체적으로 수정된 명령은 다음과 같습니다.
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