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 로그 파싱에 최적화된 이미지를 사용한다.
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/logtraefik.yml
Traefik에서 발생하는 액세스 로그를 지정된 경로에 파일 형태로 기록하도록 설정한다.
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) 정책을 함께 고려한다면 더욱 안정적인 운영이 가능하다.