[Linux] access_log 분석[220.23.175.93]

access_log 분석을 통해 웹 로그가 들어오는 것을 파악.

✅ access_log 분석 기본

httpd.conf에 이미 설정되어 있는 값에 대한 필드 분석.

www.domain.com $1  211.243.123.105$2 - - [24/Mar/2017:10:35:16$5 +0900]$6 "GET$7 /layout/header/default/image/header_img_01.png$8
 HTTP/1.1"$9(접속방식)  200$10(요청에대한 상태-403등등) 1103$11(용량) "http://gddfca.or.kr/index.php"$12접속 경로 "Mozilla/5.0$13 (compatible; MSIE 9.0; Windows$14 NT$15 6.1; WOW64; Trident/5.0; ; rv
 :11.0) like Gecko" KR$NF     <= $필드들은  틀릴  있음. 

✅ 명령어 조합을 통한 access_log 분석

cat /usr/local/apache/logs/access_log | grep '\[07/Jul/2021' | awk '{print $2, $NF}' | sort -r  | uniq -c | sort -r  | head 

cat /usr/local/apache/logs/access_log-20201007 | grep '\[01/Sep' | awk '{print $2, $NF}'  | grep KR | wc -l 
cat /usr/local/apache/logs/access_log-20201007  | grep '\[01/Sep' |  grep -v KR  | wc -l 
cat /usr/local/apache/logs/access_log-20201007  | grep '\[01/Sep' | awk '{print $2, $NF}'    | wc -l 

1.1 access_log 분석: 날짜+시간대,  awk $IP,국가

cat /usr/local/apache/logs/access_log | grep '\[07/Jul//2021' | sed -n '/2021:10:00/,/2021:14:20/p' | awk '{print $2 , $NF}' | sort -r  | uniq -c | sort -r | head 

cat /usr/local/apache/logs/access_log | grep '\[07/Jul/2021' | sed -n '/2021:10:05/,/2020:10:13/p' | awk '{print $2, $12, $NF}' | sort -r  | uniq -c | sort -r | head

1.2 sed 시간대 활용

# 1.2.1 - sed 명령어 - 15시 00~05분까지의 시간 
sed -n  '/2021:15:00/,/2020:15:05/p' /usr/local/apache/logs/access_log | grep '\[07/Jul/2020'
# 1.2.2 위 명령어의 변형
cat /usr/local/apache/logs/access_log | sed -n '/2020:18:00/,/2020:18:05/p' > 00.txt
# 1.2.3
cat   /usr/local/apache/logs/access_log | grep '\[07/Jul/2021' | sed -n  '/2021:10:30/,/2021:14:00/p' | awk '{print  $2,  $NF}' | sort -r  | uniq -c | sort -r | head -20

1.3 [ ] 정규식 및 cut 활용

# 1.3.1 정규식 활용  
tail -n 10 /usr/local/apache/logs/access_log | grep '\[01/Jul/2020:1[0-5]' <= [0~5까지의 숫자가 포함된 모든] 
# 1.3.2 cut 명령어 활용
tail -10000  /usr/local/apache/logs/access_log | grep '\[20/Jul/2020' | cut -d":" -f  2,3 | sort | uniq -c | sort -r
# 1.3.3 cut 명령어 활용 - 당일 하루 중 접속이 제일 많은 시간대를 구한다.  / -f 필드를 2만 한다면 당연히 하루 중 접속이 많은 시간대를 알수 있겠다.
cat /usr/local/apache/logs/access_log | grep '\[07/Jul/2021' | cut -d":" -f  2,3 | sort | uniq -c | sort -r | head

cat /usr/local/apache/logs/access_log | grep '\[19/Oct/2020' | cut -d":" -f  2 | sort | uniq -c | sort -r | head

✅ 활용

cat   /usr/local/apache/logs/access_log | grep '\[07/Jun/2021' | sed -n   '/2021:13:00/,/2021:15:30/p' | awk '{print $1, $NF}' | sort -r  | uniq -c | sort -r | head -20

grep testdomain.com /usr/local/apache/logs/access_log | grep '\[24/May/2021' | sed -n   '/2021:13:00/,/2021:15:30/p' | awk '{print $1, $NF}' | sort -r  | uniq -c | sort -r | head -20

lsof -p 119164 | awk '{print $NF}' | sort -r | uniq -c | sort -r > mylog.txt

✅ HTTP 상태 코드

HTTP 상태 코드[RFC 2616 http/1.1] RFC 2068은 개정판이다.

Similar Posts