Apache 웹 로그 분석하기 – awk와 GoAccess 활용

웹 서버를 운영하다 보면 방문자 통계, 인기 페이지, 트래픽 현황 등을 파악해야 할 때가 많습니다.
이런 정보를 확인하기 위해 로그 분석(Log Analysis) 은 필수입니다.
이번 글에서는 리눅스 환경에서 자주 사용되는 기본 명령어 awk를 이용한 간단한 분석법과,
시각화 도구인 GoAccess를 이용한 고급 분석 방법을 함께 소개합니다.


Apache Access Log란

Apache 웹 서버는 기본적으로 /var/log/httpd/access_log 파일에
서버로 들어오는 모든 요청(request) 정보를 기록합니다.

예를 들어, 다음과 같은 한 줄이 하나의 요청 로그를 의미합니다.

192.168.0.10 - - [27/Oct/2025:14:20:31 +0900] "GET /index.html HTTP/1.1" 200 5123 "-" "Mozilla/5.0"

각 항목의 의미는 다음과 같습니다.

필드 설명
$1 클라이언트 IP 주소
$4 요청 시간
$6 HTTP 메서드(GET, POST 등)
$7 요청된 URL 경로
$9 HTTP 응답 코드 (200, 404 등)
$10 전송된 바이트 수

awk를 이용한 로그 분석

awk는 텍스트 파일을 컬럼 단위로 다룰 수 있는 강력한 도구입니다.
간단한 명령어 조합만으로도 유용한 웹 로그 통계를 얻을 수 있습니다.


가장 많이 요청된 URL TOP 20

awk '{print $7}' /var/log/httpd/access_log | sort | uniq -c | sort -nr | head -20

설명

  • $7: 요청된 파일 경로(URL)를 출력
  • sort | uniq -c: 각 URL별 요청 횟수를 계산
  • sort -nr: 요청이 많은 순으로 정렬
  • head -20: 상위 20개 결과만 출력

예시 결과

1500 /index.html
850  /about.html
700  /images/logo.png

가장 많이 방문된 페이지를 빠르게 확인할 수 있습니다.


전송된 데이터량이 많은 URL TOP 20

awk '{print $7, $10}' /var/log/httpd/access_log | \
awk '{bytes[$1]+=$2} END {for (f in bytes) print bytes[f], f}' | sort -nr | head -20

설명

  • $10: 전송된 바이트 수를 의미
  • 첫 번째 awk: URL과 바이트 값을 추출
  • 두 번째 awk: URL별로 바이트를 합산
  • sort -nr | head -20: 데이터 전송량이 많은 URL 20개 출력

활용

사이트 내에서 대용량 트래픽이 발생하는 리소스(이미지, 동영상, 다운로드 파일 등)를 쉽게 식별할 수 있습니다.


GoAccess를 이용한 실시간 웹 로그 분석

awk로 기본적인 통계는 얻을 수 있지만, 보다 시각적이고 종합적인 분석이 필요하다면 GoAccess가 훨씬 효율적입니다.


GoAccess란

GoAccess는 C로 작성된 오픈소스 로그 분석기입니다.
CLI(터미널) 인터페이스뿐 아니라 HTML 리포트까지 제공하며, 실시간 대시보드 기능도 지원합니다.
Apache, Nginx, Amazon S3 등 다양한 로그 형식을 인식합니다.

공식 사이트: https://goaccess.io


GoAccess 설치

CentOS / RHEL 계열에서 설치하려면 다음 명령을 실행합니다.

yum install goaccess -y

설치 확인:

goaccess --version

기본 사용법

Apache 기본 로그 포맷은 COMBINED 형식이므로, 아래 명령으로 분석을 시작합니다.

goaccess /var/log/httpd/access_log --log-format=COMBINED

실행하면 터미널에서 다음과 같은 대시보드를 볼 수 있습니다.

  • 전체 방문자 수
  • 인기 페이지
  • 트래픽 사용량
  • HTTP 상태 코드 통계
  • 브라우저 및 운영체제별 비율

HTML 리포트 생성

웹 브라우저에서 볼 수 있는 HTML 리포트를 생성할 수도 있습니다.

goaccess /var/log/httpd/access_log --log-format=COMBINED -o /var/www/html/report.html

생성 후 http://서버주소/report.html 에 접속하면 그래프 기반의 대시보드를 볼 수 있습니다.


실시간 분석 대시보드

실시간으로 로그 변화를 모니터링하려면 --real-time-html 옵션을 추가합니다.

goaccess /var/log/httpd/access_log --log-format=COMBINED \
-o /var/www/html/report.html --real-time-html

서버의 로그가 업데이트될 때마다 HTML 리포트가 자동으로 갱신됩니다.


마무리

awk는 간단한 통계 확인에 매우 유용하며, 별도의 설치가 필요 없습니다.
반면 GoAccess는 한 단계 높은 수준의 로그 분석과 시각화를 제공합니다.

  • 빠르게 추세를 확인하려면 → awk
  • 트래픽 패턴을 시각화하고 공유하려면 → GoAccess

두 방법을 함께 사용하면, 시스템 관리자는 웹 서버의 상태를 훨씬 효율적으로 모니터링할 수 있습니다.

コメント

お役立ち掲示板

Linux Apache에서 GPTBot·Amazonbot·AhrefsBot의 게시판 이미…
その他 Midjourney, DALL·E, ChatGPT에서 Y2K 파스텔 UI 프롬프…
Linux Cloudflare R2 자동 업로드 구성하기. 특정 폴더에 파일…
WordPress 워드프레스 7.0 관리자 링크 색상 변경 후 이전 색상으…
WordPress 캐시 환경에서 AJAX 댓글(코멘트) 분리로 서버 응답시간…
Linux 아파치 일반 계정 파일 접근 권한 설정과 mod-ruid2 적…
Delphi Delphi IDE 메인 폼 안열림 dproj 설정으로 해결
開発のヒント VSCode 한국어 설정법, Configure Display Language로 U…
その他 RustDesk 자체 서버 구축으로 공용 서버 로그인 문제 해…
Linux Dante SOCKS5 프록시 서버 구축 및 설정
Windows 윈도우 실행파일(exe) 서비스 등록 자동화 쉽게 하는 방…
その他 CLIProxyAPI Windows 설치 가이드
WordPress 그누보드7 데이터를 WordPress WXR로 변환하기
その他 Ollama 설치 경로 C드라이브 고정 문제 해결 및 드라이…
開発のヒント Apache Access Log 기반 도메인별 방문자 카운터 구현
Windows ZImage AI 이미지 생성 환경 구축 방법
Windows 파일 복사 후 실행 배치파일 - 에러 감지 포함
開発のヒント 네이버 검색 Open API
開発のヒント 네이버 검색광고 키워드 도구 API 검색
開発のヒント MariaDB column_stats 테이블 오류 해결 방법
開発のヒント PHP-FPM 에러 로그 실시간 모니터링
Windows 윈도우11 업데이트 후 네트워크 드라이브 접근 불가 문…
開発のヒント 다국어 번역 함수 구현 방법
WordPress "치명적인 오류가 발생했습니다" 디버깅 가이드
閲覧 Linux Apache 웹 로그 분석하기 – awk와 GoAccess 활용
Windows 윈도11 강제업데이트 피하고 윈도10 계속 쓰기
Linux PHP 파일 업로드 용량 늘리기
開発のヒント 애드센스 충돌 문제 해결하기
Python Python Playwright로 Edge 브라우저 제어하기
Delphi TDirectory.Delete 대신 CMD 으로 폴더 삭제