반응형
#!/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가 마지막인데 아닐 경우 이부분 수정
반응형