본문 바로가기
OS/Linux

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

by 댓츠굿 2019. 5. 3.

 

서버를 운영하다보면 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

 

 

반응형