Linux
[centOS] 아파치 access_log 에서 특정 시간동안의 아이피별 접속 횟수 추출하기
- 2023.06.08 23:07:06
아파치의 access_log 파일 내용을 활용하여 특정 기간동안 아이피별로 접속 횟수를 추출해주는 스크립트 파일. [!]오늘동안의 아이피별 접속 횟수 출력[/!] vi로 sh 파일을 생성한다. # vi /var/log/today_log.sh
파일 내용에 아래와 같이 입력한다. #!/bin/bash
# 로케일을 영어(미국)으로 변경 export LC_TIME="en_US.UTF-8" LOG_FILES=( "/var/log/httpd/access_log" #"/home/zigger.net/access_log" #"/home/bboggi.com/access_log" #"/home/note.chanyeongpark.com/access_log" ) DATE=$(date +"%d/%b/%Y") for LOG_FILE in "${LOG_FILES[@]}"; do output=$(grep "${DATE}" "${LOG_FILE}" | grep -Ev '(\.js|\.css|\.woff|\.jpg|\.jpeg|\.gif|\.png|\.bmp|\.txt)' | awk '{ip_count[$1]++} END {for (ip in ip_count) {print ip, ip_count[ip]}}' | sort -k2,2n) echo "[ Log File: ${LOG_FILE} ]" echo "$output" echo echo ${DATE} done 위 스크립트중 LOG_FILES 배열은 추출할 다수의 로그 파일 경로를 지정하며, grep -Ev '(\.js|\.css|\.woff|\.jpg|\.jpeg|\.gif|\.png|\.bmp|\.txt)' 는 js, css, jpg 등 리소스 파일은 제외하고 순수한 웹페이지 파일 접속 아이피만을 추출한다. 위 스크립트를 실행하면, 아래와 같이 아이피별 접속 횟수가 출력된다. # /var/log/today_log.sh
[!]현재 '시' 기준 아이피별 접속 횟수 출력[/!] 현재 '시'를 기준으로 아이피별 접속 횟수는 아래와 같이 작성한다. #!/bin/bash
# 로케일을 영어(미국)으로 변경 export LC_TIME="en_US.UTF-8" # 로그 파일 경로 설정 LOG_FILES=( "/var/log/httpd/access_log" ) # 현재 시간을 구해서 DATE 변수에 저장 (한 시간 전으로 설정) DATE=$(date +"%d/%b/%Y:%H") for LOG_FILE in "${LOG_FILES[@]}"; do # 해당 로그 파일에서 최근 한 시간 동안의 접속 기록을 필터링하고 IP 주소별로 카운트 output=$(grep "${DATE}" "${LOG_FILE}" | grep -Ev '(\.js|\.css|\.woff|\.jpg|\.jpeg|\.gif|\.png|\.bmp|\.txt)' | awk '{ip_count[$1]++} END {for (ip in ip_count) {print ip, ip_count[ip]}}' | sort -k2,2n) echo "[ Log File: ${LOG_FILE} ]" echo "$output" echo echo ${DATE} done |