Profile picture

[Docker] Nginx Proxy Manager용 GoAccess 실시간 대시보드 구축하기

JaehyoJJAng2024년 02월 05일

▶︎ GoAccess


아파치 또는 Nginx와 같은 웹 서버들의 로그를 분석해주는 도구인 GoAccess에 대해서 알아보자.

GoAccess는 웹 서버의 로그 분석이 가능하고,

터미널 화면과 HTML 파일등을 통한 웹 화면으로 분석 결과를 실시간으로 모니터링할 수 있는게 가장 큰 장점이다.

image
터미널 화면으로 확인한 로그 분석 결과


image
웹 화면으로 확인한 로그 분석 결과


분석 기능으로는 아래와 같은 기능이 있으며, 추후 업데이트 될 수 있다.

  • 일자별 방문자 정보
  • 요청 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로 설정한 호스트들의 로그이다.
image


• 컨테이너 생성

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으로 접속하면 아래와 같은 대쉬보드를 확인할 수 있을 것이다.
image


Loading script...