OS/Linux

[리눅스] cat 명령어로 로그 통계 추출하기

댓츠굿 2019. 5. 3. 23:42

 

서버를 운영하다보면 access.log나 error.log를 이용하여 IP별 호출건수나 ResponseHTTP 서버 응답 코드 등의 통계를 내야될 때가 있다. IP나 시간대별 등의 유입건수를 확인하거나 파악하기 위해서다.

 

 

아래 access.log를 예로 들어보겠다.

access.log

aceess.log 에는 총 10개의 로그가 찍혀있다. 이를 아래와 같이 통계내어 보자.

 

 

 

 

- IP address별 호출 건수 통계

 cat access.log | awk '{print $1}'| awk -F "/" '{arr[$1]+=1} END {for (i in arr) {print i "\t" ":" arr[i]}}' | sort

 

그림 1

그림 1은 access.log에서 127.0.0.1이 총 6번 호출되었고, 127.0.0.2와 127.0.0.3이 각각 2번씩 호출된 것을 보여주고 있다.

 

명령어를 설명하자면, cat으로 access.log 파일을 열고, awk로 첫번째 필드인 IP address를 추출하여 해당 필드가 같은 데이터면 count를 1씩 증가시킨다. 그리고 그 결과를 for loop 돌면서 [필드 값(탭) : count 값] 형태로 출력하고 이를 첫번째 필드 기준으로 정렬하는 명령이다.

 

 

 

 

 

- HTTP 서버 응답 코드(Response Code)별 통계

 cat access.log | awk '{print $9}'| awk -F "/" '{arr[$1]+=1} END {for (i in arr) {print i "\t" ":" arr[i]}}' | sort

 

그림 2

이번에는 access.log에서 9번째 필드인 서버 응답 코드 통계를 추출하고 있다. 

응답코드가 200인 것이 총 6개, 404와 500은 각각 2개인 것을 확인할 수 있다.

 

 

 

 

그 외

- 역순으로 보기

  cat -> tac 으로 변경

  ex) 'IP address별 호출 건수 통계' 를 역순으로 보고자 할 때

        tac access.log | awk '{print $1}'| awk -F "/" '{arr[$1]+=1} END {for (i in arr) {print i "\t" ":" arr[i]}}' | sort

 

 

- 압축된 파일 통계 보기

   cat -> zcat 으로 변경

   ex) zcat access.log.gz | awk '{print $1}'| awk -F "/" '{arr[$1]+=1} END {for (i in arr) {print i "\t" ":" arr[i]}}' | sort

 

 

- 압축된 파일 특정 문자 포함 명령어 보기

   ex) zcat access.log.gz grep "member"

 

 

- 오래된 로그(log) 파일 찾아서 지우기

   ex) find -name '*.log' -mtime +30 |xargs rm

        .log 파일을 찾아서 mtime(수정시간)이 30일 이상 된 것을 지움(xargs rm)

 

 

- DNS 확인 명령어

   nslookup tistory.com

 

 

반응형