카테고리 없음

apache web log 분석

파란별빛아래 2025. 12. 8. 11:23
반응형
#!/usr/bin/env bash

##############################
# 날짜 입력 받기
##############################
read -p "분석할 날짜를 입력하세요 (예: 30/Nov/2025): " DATE

if [ -z "$DATE" ]; then
    echo "날짜가 입력되지 않았습니다."
    exit 1
fi

##############################
# 로그 파일 입력 받기
##############################
read -p "로그 파일 경로를 입력하세요 (여러 개면 공백으로 구분): " LOGFILES

if [ -z "$LOGFILES" ]; then
    echo "로그 파일이 입력되지 않았습니다."
    exit 1
fi

echo
echo "===== 날짜: $DATE / 로그: $LOGFILES ====="
echo

########################################
# 1. IP별 요청 횟수 TOP 10
########################################
echo "### 1) IP별 요청 횟수 TOP 10"
grep -h "$DATE" $LOGFILES \
  | awk '{print $1}' \
  | sort \
  | uniq -c \
  | sort -nr \
  | head -10

echo
########################################
# 2. 경로(URL)별 요청 횟수 TOP 10
########################################
echo "### 2) 경로(URL)별 요청 횟수 TOP 10"
grep -h "$DATE" $LOGFILES \
  | awk '{print $7}' \
  | sort \
  | uniq -c \
  | sort -nr \
  | head -10

echo
########################################
# 3. IP별 요청 트래픽량 TOP 10 (MB 단위)
########################################
echo "### 3) IP별 요청 트래픽량 TOP 10 (MB)"
grep -h "$DATE" $LOGFILES \
  | awk '$NF ~ /^[0-9]+$/ {traffic[$1] += $NF}
         END {
             for (ip in traffic) {
                 printf "%-15s %10.2f MB\n", ip, traffic[ip]/1024/1024
             }
         }' \
  | sort -k2 -nr \
  | head -10

 

이거 가끔 트래픽쪽이 잘안나오는데

$10이거나 아니면 로그포맷을 봐야 정확히 나옴

$NF가 마지막인데 아닐 경우 이부분 수정

반응형