통합검색

Linux

[centOS] 아파치 access_log 에서 특정 기간동안 아이피별 접속 횟수 추출하기



아파치의 access_log 파일 내용을 활용하여 특정 기간동안 아이피별로 접속 횟수를 추출해주는 스크립트 파일.

 
[!]오늘 아이피별 접속 횟수 출력[/!]
vi로 sh 파일을 생성한다.
 
# vi /var/log/today_log.sh
 
파일 내용에 아래와 같이 입력한다.
 
#!/bin/bash

LOG_FILES=(
  "/var/log/httpd/access_log"
  "/home/username/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
done
 
위 스크립트중 LOG_FILES 배열은 추출할 다수의 로그 파일 경로를 지정하며,
grep -Ev '(\.js|\.css|\.woff|\.jpg|\.jpeg|\.gif|\.png|\.bmp|\.txt)' 는 js, css, jpg 등 리소스 파일은 제외하고 순수한 웹페이지 파일 접속 아이피만을 추출한다.

위 스크립트를 실행하면, 아래와 같이 아이피별 접속 횟수가 출력된다.
 
# /var/log/today_log.sh