| awk
동작 예시 | 명령어 |
---|---|
파일의 전체 내용 출력 | awk '{ print }' [FILE] |
필드 값 출력 | awk '{ print $1}' [FILE] |
필드 값에 임의 문자열을 같이 출력 | awk '{ print "STR"$1, "STR"$2 }' [FILE] |
#!/bin/bash
# =============== 🎨 스타일 정의 ================
bold=$(tput bold)
normal=$(tput sgr0)
green="\033[1;32m"
red="\033[1;31m"
yellow="\033[1;33m"
blue="\033[1;34m"
cyan="\033[1;36m"
white="\033[1;37m"
reset="\033[0m"
# =============== 📂 로그 경로 ================
LOG_FILE="/var/log/nginx/access.log"
if [ ! -f "$LOG_FILE" ]; then
echo -e "${red}❌ 로그 파일이 존재하지 않습니다: $LOG_FILE${reset}"
exit 1
fi
echo
echo -e "${blue}${bold}📊 NGINX ACCESS LOG REPORT${reset}"
echo -e "${white}🗂️ File :${reset} $LOG_FILE"
echo -e "${white}📅 Generated :${reset} $(date '+%Y-%m-%d %H:%M:%S')"
echo "────────────────────────────────────────────────────"
# =============== 1️⃣ IP별 요청 수 ====================
echo -e "\n${cyan}🔹 TOP 10 ACCESS IPs${reset}"
printf "%-20s %s\n" "IP Address" "Count"
awk '{print $1}' "$LOG_FILE" | sort | uniq -c | sort -nr | head -10 | awk '{printf "%-20s %s\n", $2, $1}'
# =============== 2️⃣ 시간대별 요청 수 (Hour 기준) ===
echo -e "\n${cyan}⏰ REQUESTS BY HOUR${reset}"
printf "%-10s %s\n" "Hour" "Count"
awk -F: '{gsub("\\[",""); print $2":00"}' "$LOG_FILE" | sort | uniq -c | sort -k2 | awk '{printf "%-10s %s\n", $2, $1}'
# =============== 3️⃣ HTTP 상태 코드 분포 ============
echo -e "\n${cyan}📶 HTTP STATUS CODES${reset}"
printf "%-10s %s\n" "Status" "Count"
awk '{print $9}' "$LOG_FILE" | grep -E '^[0-9]{3}$' | sort | uniq -c | sort -nr | awk '{printf "%-10s %s\n", $2, $1}'
# =============== 4️⃣ 가장 많이 요청된 URI ============
echo -e "\n${cyan}📌 TOP 10 REQUESTED URIs${reset}"
printf "%-40s %s\n" "URI Path" "Count"
awk '$6 ~ /GET|POST/ {print $7}' "$LOG_FILE" | sort | uniq -c | sort -nr | head -10 | awk '{printf "%-40s %s\n", $2, $1}'
# =============== 5️⃣ HTTP 메서드 분포 =================
echo -e "\n${cyan}🔠 HTTP METHOD COUNT${reset}"
printf "%-10s %s\n" "Method" "Count"
awk '{gsub(/"/, "", $6); print $6}' "$LOG_FILE" | sort | uniq -c | sort -nr | awk '{printf "%-10s %s\n", $2, $1}'
# =============== ✅ 완료 ====================
echo -e "\n${green}✅ 로그 분석 완료${reset}\n"