▶︎ GoAccess
아파치 또는 Nginx와 같은 웹 서버들의 로그를 분석해주는 도구인 GoAccess
에 대해서 알아보자.
GoAccess
는 웹 서버의 로그 분석이 가능하고,
터미널 화면과 HTML 파일등을 통한 웹 화면으로 분석 결과를 실시간으로 모니터링할 수 있는게 가장 큰 장점이다.
터미널 화면으로 확인한 로그 분석 결과
웹 화면으로 확인한 로그 분석 결과
분석 기능으로는 아래와 같은 기능이 있으며, 추후 업데이트 될 수 있다.
- 일자별 방문자 정보
- 요청 URL 정보
- 방문자별 IP 정보
- 접속자 국가별 정보 등
▶︎ 도커로 설치하기
‣ 사전준비
- NPM(Nginx Proxy Manager)
- 도커
- 도커 컴포즈 V2.20.0 이상의 버전
‣ 구축 환경
- Ubuntu 22.04
본인의 경우 간단한 블로그를 운영하고 있는데,
NPM 서버를 최상단에 두어 들어오는 외부 트래픽을 내부 웹서버로 리버스 프록시하고 있다.
이 떄, GoAccess
를 구축하면 NPM으로 들어오는 요청들의 로그에 대해서 실시간으로 대시보드를 구현할 수 있게된다.
‣ Docker Compose
- 로그 서버의 log 폴더를 호스트 폴더로 정확하게 지정해주어야 하는 것이 포인트.
- 여기서는 하나의 서버에
웹 서버
,GoAccess
같이 배포 되므로, 호스트의 로그 폴더를 정확하게 지정해줄 것. 웹 서버
및GoAccess
서버가 분리 되어있다면 중간에 파일 공유 서버를 두어 로그 폴더 마운트 지점을 만들어 지정해줄 것.
- 여기서는 하나의 서버에
include
속성을 사용하여 GoAccess
를 배포해보겠다.
• 로그 저장 경로
먼저 NPM의 로그 저장 경로를 미리 확인해주자.
# NPM 서버
$ find . -name "*access.log" 2>/dev/null
./data/logs/proxy-host-3_access.log
./data/logs/proxy-host-5_access.log
./data/logs/proxy-host-6_access.log
./data/logs/proxy-host-7_access.log
./data/logs/proxy-host-11_access.log
./data/logs/proxy-host-9_access.log
./data/logs/fallback_access.log
./data/logs/proxy-host-2_access.log
./data/logs/proxy-host-10_access.log
./data/logs/proxy-host-8_access.log
./data/logs/proxy-host-4_access.log
./data/logs/proxy-host-1_access.log
./data/logs/letsencrypt-requests_access.log
본인의 경우 ~/npm/data/logs
경로에 로그 정보를 저장하고 있다.
여기서 저장되는 모든 로그들은 NPM에서 Proxy host로 설정한 호스트들의 로그이다.
• 컨테이너 생성
goaccess 앱용 폴더 생성
mkdir composes # 앱용 docker compose 구동할 폴더
docker-compose.yaml
파일을 작성
~/goaccess/docker-compose.yaml
include:
- "composes/goaccess.yaml"
networks:
log-net:
driver: bridge
external: false
그 다음 composes/goaccess.yaml
파일을 작성
~/goaccess/composes/goaccess.yaml
services:
goaccess:
image: xavierh/goaccess-for-nginxproxymanager
restart: always
ports:
- "7880:7880"
environment:
- PUID=0
- PGID=0
- TZ=Asia/Seoul
- SKIP_ARCHIVED_LOGS=False #optional
- DEBUG=False #optional
- BASIC_AUTH=true #optional
- BASIC_AUTH_USERNAME=mygoacc #기본 인증 id
- BASIC_AUTH_PASSWORD=mygoacc #기본 인증 비번
- EXCLUDE_IPS=192.168.0.1-192.168.0.249 #인증 제외 ip 범위 (내부망 사용시)
- LOG_TYPE=NPM #optional - more information below
volumes:
# npm의 로그 폴더 지정
- type: bind
source: "/home/dev/npm/data/logs"
target: "/opt/log"
container_name: goaccess
networks:
- "log-net"
• 컨테이너 실행
docker-compose up -d --build
‣ 접속
http://<서버IP>:7880
으로 접속하면 아래와 같은 대쉬보드를 확인할 수 있을 것이다.