아파치 로그 분석하기
아파치 웹 서버에는 접속에 대한 로그를 남길 수 있습니다.
로그의 형식은 다양하지만 대략적으로 어느 컴퓨터(IP 주소)에서 어떤 기기, 어떤 프로그램을 이용해서 어떤 웹 페이지를 접속했는지, 각 컨텐츠의 전송량등의 정보가 담깁니다.
이 문서는 아파치 로그 분석하기 에 대한 것입니다.
전송량 통계
로그 파일에 컨텐츠의 전송량이 담기기 때문에 이것들을 전부 더하면 아파치 웹 서버가 내보낸 전송량을 알 수 있겠지요? awk 쉘 스크립트로 간단하게 할 수 있습니다.
1 |
awk '{ s += $10 } END { print "Total ", s/1024/1024 " MB", "- Average ", s/NR/1024/1024 " MB", "- Access ", NR }' access_log |
여기서 중요한 것이 access_log 파일에 전송량을 표시하는 위치 입니다. 위 명령어 앞줄에 ‘s += $10’ 이 있는데, 공백을 기준으로 10번째 칸이 전송량을 표시한다는 거기 때문에 전송량 표시되는 부분이 12번째 칸이라면 이것을 ‘s += $12’ 로 고쳐줍니다.
좀 더 나가서 특정 아이피에 대한 것만 계산하고 싶다면 다음과 같이 해줍니다.
1 |
grep "192.168.0.12" access_log | awk '{ s += $10 } END { print "Total ", s/1024/1024 " MB", "- Average ", s/NR/1024/1024 " MB", "- Access ", NR }' |
grep 을 이용해서 필요로하는 컨테츠만을 뽑아서 총 전송량을 계산할 수 있습니다.
로봇에 의한 전송량도 계산할 수 있습니다. 구글 봇이 페이지를 긁어가는데 들어간 전송량은 다음과 같이 계산할 수 있습니다.
1 |
grep -i "googlebot" access_log | awk '{ s += $10 } END { print "Total ", s/1024/1024 " MB", "- Average ", s/NR/1024/1024 " MB", "- Access ", NR }' |
HTTP 응답코드별 트래픽 계산은 다음과 같이 할 수 있습니다.
1 |
awk '($9 ~ /200/)' access_log | awk '{ s += $10 } END { print "Total ", s/1024/1024 " MB", "- Average ", s/NR/1024/1024 " MB", "- Access ", NR }' |
응답코드만을 다르게하면 응답코드별로 트래픽 양을 알수 있습니다.
HTTP 응답코드 세기
HTTP 응답코드는 중요 합니다. 이를 잘 파악하면 웹 사이트에 대한 상태를 알 수도 있습니다.
1 2 3 4 5 6 7 8 9 |
# cut 를 이용한 방법 cat access.log | cut -d '"' -f3 | cut -d ' ' -f2 | sort | uniq -c | sort -r 59 200 11 404 5 302 # awk 를 이용한 방법 59 200 11 404 5 302 |
외부에서 이미지 링크 파악
종종 외부 사이트에서 내 사이트에서 이미지를 링크걸어놓은 것을 볼 수 있습니다. 트래픽을 절약하기 위해서 종종 사용하기도 하는데, 이러한 것을 다음과 같이 파악할 수 있습니다.
1 |
awk '($2 ~ /\.(jpg|gif)/ && $4 !~ /^http:\/\/linux\.systemv\.pe\.kr/){print $4}' linux.systemv.pe.kr.access.log | sort | uniq -c | sort -r |
http://linux.systemv.pe.kr 부분을 자신의 웹사이트 주소를 입력해 주시면 됩니다.