[Tomcat] Access Log 상태 코드 500 필터링

127.0.0.1 - - [06/Jun/2022:20:25:24 +0900] "GET /users HTTP/1.1" 200 8363
127.0.0.1 - - [06/Jun/2022:20:25:30 +0900] "POST /users HTTP/1.1" 200 8363
127.0.0.1 - - [06/Jun/2022:20:53:39 +0900] "PUT /users HTTP/1.1" 500 15105
127.0.0.1 - - [06/Jun/2022:20:53:52 +0900] "POST /users HTTP/1.1" 500 8363
...
[root@nas ~]# cat /data/logs/localhost_access_log.2022-06-07.txt

localhost_access_log 파일을 cat 하면 200이랑 같이 나온다.

어떤 API가 오류가 났는지 확인하기 어렵다.

 

127.0.0.1 - - [06/Jun/2022:20:25:24 +0900] "GET /users HTTP/1.1" 500 8363
127.0.0.1 - - [06/Jun/2022:20:25:30 +0900] "POST /users HTTP/1.1" 500 8363
...
[root@nas ~]# cat /data/logs/localhost_access_log.2022-06-07.txt | grep "\" 500"

grep을 사용하면 500만 나온다.

그런데 내가 원하는 값만 나오게 하고 싶다.

 

[06/Jun/2022:20:53:39 +0900] "POST /users
[06/Jun/2022:20:53:52 +0900] "HEAD /users
...
[root@nas ~]# cat /data/logs/localhost_access_log.2022-06-07.txt | grep "\" 500" | awk '{split($0,a," "); print a[4], a[5], a[6], a[7]}'

awk를 사용해서 원하는 값만 나오게 했는데, Method 때문에 URL 부분이 밀려나서 엑셀에 붙이기가 어렵다.

Method를 제외한 날짜와 URL을 먼저 추출하고 Method를 추출하면 될 것 같다.

 

[06/Jun/2022:20:53:39 +0900] /users
[06/Jun/2022:20:53:52 +0900] /users
...
[root@nas ~]# cat /data/logs/localhost_access_log.2022-06-07.txt | grep "\" 500" | awk '{split($0,a," "); print a[4], a[5], a[7]}'

날짜와 URL

 

"POST
"HEAD
...
[root@nas ~]# cat /data/logs/localhost_access_log.2022-06-07.txt | grep "\" 500" | awk '{split($0,a," "); print a[6]}'

Method

엑셀에 값 붙여넣어서 COUNTIF로 API당 에러가 몇개 발생했는지 확인할 수 있다.

 

출처: How to split a delimited string into an array in awk?