Traefik과 GoAccess를 Docker Compose로 구성하기

Traefik access.log를 GoAccess로 실시간 분석해 대시보드를 구성하는 방법

2 min read

Traefik과 GoAccess를 활용한 실시간 로그 분석 환경 구축

본 문서는 Docker Compose 환경에서 Traefik의 access.log를 GoAccess로 실시간 분석하고 시각화된 대시보드를 구성하는 절차를 기술한다.


1. 디렉터리 구조 및 준비

로그 데이터의 원활한 공유를 위해 호스트와 컨테이너 간의 볼륨 마운트 구조를 다음과 같이 정의한다.

proxy
├── docker-compose.yml    # 서비스 정의 파일
├── traefik.yml           # Traefik 정적 설정 파일
└── logs
    └── access.log        # 실시간 로그 저장 파일

2. 서비스 설정 (YAML)

docker-compose.yml

Traefik과 GoAccess 두 개의 서비스를 정의한다. GoAccess는 Traefik 로그 파싱에 최적화된 이미지를 사용한다.

docker-compose.yml
services:
  traefik:
    image: traefik:v3.0
    container_name: traefik
    restart: unless-stopped
    ports:
      - 80:80
      - 443:443
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - ./traefik.yml:/etc/traefik/traefik.yml
      - ./logs:/logs
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.api.rule=Host(`traefik.example.com`)"
      - "traefik.http.routers.api.service=api@internal"
 
  goaccess:
    image: xavierh/goaccess-for-nginxproxymanager:latest
    container_name: goaccess
    restart: always
    ports:
      - 7880:7880
    environment:
      - TZ=Asia/Seoul
      - LOG_TYPE=TRAEFIK
      - EXCLUDE_IPS=127.0.0.1
    volumes:
      - ./logs:/opt/log

traefik.yml

Traefik에서 발생하는 액세스 로그를 지정된 경로에 파일 형태로 기록하도록 설정한다.

traefik.yml
accessLog:
  filePath: /logs/access.log
  format: common  # 또는 json (GoAccess 설정에 맞춰 선택)

3. 주요 설정 파라미터 상세

구성 요소별 핵심 설정 사항은 다음과 같다.

  • 공유 볼륨: ./logs 디렉터리를 두 서비스가 공유함으로써 Traefik이 쓴 로그를 GoAccess가 즉시 읽을 수 있도록 설계한다.

  • GoAccess 환경 변수:

    • LOG_TYPE: 로그 포맷을 TRAEFIK으로 지정하여 복잡한 파싱 설정 과정을 생략한다.

    • EXCLUDE_IPS: 내부 모니터링 혹은 특정 대역의 IP를 통계에서 제외할 때 사용한다.


4. 배포 및 확인

설정이 완료되면 컨테이너를 실행하고 대시보드 인터페이스에 접속한다.

서비스 실행:

docker compose up -d

대시보드 접속:

  • 접속 주소: http://[서버_IP]:7880
  • 해당 주소 접속 시 실시간으로 갱신되는 웹 트래픽 분석 결과 확인이 가능하다.

맺음말

위 구성을 통해 별도의 복잡한 ELK 스택 구축 없이도 가벼운 리소스로 서버 트래픽을 정밀하게 모니터링할 수 있다. 특히 컨테이너 환경에서의 로그 순환(Log Rotation) 정책을 함께 고려한다면 더욱 안정적인 운영이 가능하다.