GoAccess는 *nix 시스템의 터미널 이나 브라우저를 통해 실행되는 오픈 소스 실시간 웹 로그 분석기 및 대화형 뷰어입니다. 이는 즉시 시각적 서버 보고서가 필요한 시스템 관리자에게 빠르고 귀중한 HTTP 통계를 제공합니다. 자세한 내용은 https://goaccess.io를 참조하세요.
GoAccess는 지정된 웹 로그 파일을 구문 분석하고 데이터를 X 터미널로 출력합니다. 기능은 다음과 같습니다:
완전한 실시간
모든 패널과 측정항목은 터미널 출력에서 200ms마다, HTML 출력에서 1초마다 업데이트되도록 시간이 설정되어 있습니다.
최소한의 구성이 필요함
액세스 로그 파일에 대해 실행하고 로그 형식을 선택한 다음 GoAccess가 액세스 로그를 구문 분석하고 통계를 표시하도록 할 수 있습니다.
애플리케이션 응답 시간 추적
요청을 처리하는 데 걸린 시간을 추적합니다. 사이트 속도를 저하시키는 페이지를 추적하려는 경우 매우 유용합니다.
거의 모든 웹 로그 형식
GoAccess는 모든 사용자 정의 로그 형식 문자열을 허용합니다. 사전 정의된 옵션에는 Apache, Nginx, Amazon S3, Elastic Load Balancing, CloudFront 등이 포함됩니다.
증분 로그 처리
데이터 지속성이 필요합니까? GoAccess에는 온디스크 지속성 옵션을 통해 로그를 점진적으로 처리하는 기능이 있습니다.
단 하나의 종속성
GoAccess는 C로 작성되었습니다. 이를 실행하려면 종속성으로 ncurses만 필요합니다. 그게 다야. 자체 웹 소켓 서버(http://gwsocket.io/)도 갖추고 있습니다.
방문자
시간 또는 날짜별로 가장 느리게 실행되는 요청에 대한 적중 수, 방문자, 대역폭 및 지표를 결정합니다.
가상 호스트당 측정항목
여러 개의 가상 호스트(서버 블록)가 있습니까? 대부분의 웹 서버 리소스를 소비하는 가상 호스트를 표시하는 패널이 있습니다.
ASN(자율 시스템 번호 매핑)
악성 트래픽 패턴을 탐지하고 그에 따라 차단하는 데 적합합니다.
색상 구성표 사용자 정의 가능
자신의 색상 취향/구성표에 맞게 GoAccess를 맞춤화하세요. 터미널을 통하거나 HTML 출력에 스타일시트를 적용하면 됩니다.
대규모 데이터세트 지원
GoAccess는 최적화된 인메모리 해시 테이블로 인해 대용량 로그를 구문 분석하는 기능을 갖추고 있습니다. 메모리 사용량이 매우 좋고 성능도 매우 좋습니다. 이 스토리지는 온디스크 지속성도 지원합니다.
도커 지원
업스트림에서 GoAccess의 Docker 이미지를 구축하는 기능. 볼륨 매핑을 사용하고 goaccess.conf
편집하여 완전히 구성할 수 있습니다. 아래 Docker 섹션을 참조하세요.
GoAccess는 모든 사용자 정의 로그 형식 문자열을 허용합니다. 사전 정의된 옵션에는 다음이 포함되지만 이에 국한되지는 않습니다.
GoAccess는 빠른 터미널 기반 로그 분석기로 설계되었습니다. 핵심 아이디어는 브라우저를 사용할 필요 없이 실시간으로 웹 서버 통계를 빠르게 분석하고 보는 것입니다( SSH를 통해 액세스 로그를 빠르게 분석하고 싶거나 단순히 터미널에서 작업하는 것을 좋아하는 경우 유용합니다 ).
터미널 출력은 기본 출력이지만 완전한 독립형 실시간 HTML
보고서는 물론 JSON
및 CSV
보고서를 생성하는 기능도 있습니다.
다른 무엇보다 모니터 명령 도구에 가깝다고 볼 수 있습니다.
GoAccess는 *nix 시스템에서 컴파일하여 사용할 수 있습니다.
다음을 사용하여 GoAccess를 다운로드, 추출 및 컴파일하십시오.
$ wget https://tar.goaccess.io/goaccess-1.9.3.tar.gz
$ tar -xzvf goaccess-1.9.3.tar.gz
$ cd goaccess-1.9.3/
$ ./configure --enable-utf8 --enable-geoip=mmdb
$ make
# make install
$ git clone https://github.com/allinurl/goaccess.git
$ cd goaccess
$ autoreconf -fiv
$ ./configure --enable-utf8 --enable-geoip=mmdb
$ make
# make install
GNU+Linux 배포판의 기본 패키지 관리자를 사용하여 GNU+Linux에 GoAccess를 설치하는 것이 가장 쉽습니다. 모든 배포판에 최신 버전의 GoAccess가 제공되는 것은 아닙니다.
# apt-get install goaccess
참고: 이로 인해 오래된 버전의 GoAccess가 설치될 가능성이 높습니다. GoAccess의 최신 안정 버전을 실행하고 있는지 확인하려면 아래의 대체 옵션을 참조하세요.
$ wget -O - https://deb.goaccess.io/gnugpg.key | gpg --dearmor | sudo tee /usr/share/keyrings/goaccess.gpg >/dev/null
$ echo "deb [signed-by=/usr/share/keyrings/goaccess.gpg arch=$(dpkg --print-architecture)] https://deb.goaccess.io/ $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/goaccess.list
$ sudo apt-get update
$ sudo apt-get install goaccess
메모 :
.deb
패키지는 HTTPS를 통해서도 사용할 수 있습니다. apt-transport-https
설치해야 할 수도 있습니다. # yum install goaccess
# pacman -S goaccess
# emerge net-analyzer/goaccess
# brew install goaccess
# cd /usr/ports/sysutils/goaccess/ && make install clean
# pkg install sysutils/goaccess
# cd /usr/ports/www/goaccess && make install clean
# pkg_add goaccess
# zypper ar -f obs://server:http http
# zypper in goaccess
# pkg install goaccess
# pkgin install goaccess
GoAccess는 Cygwin을 통해 Windows에서 사용할 수 있습니다. Cygwin의 패키지를 참조하세요. 또는 Windows 10의 GNU+Linux 하위 시스템을 통해.
GoAccess에는 최소한의 요구 사항이 있으며 C로 작성되었으며 ncurses만 필요합니다. 그러나 다음은 소스에서 GoAccess를 빌드하기 위한 일부 배포판의 일부 선택적 종속성에 대한 표입니다.
디스트로 | NCurses | GeoIP(선택) | GeoIP2(선택) | OpenSSL(선택) |
---|---|---|---|---|
우분투/데비안 | libncurses-dev | libgeoip-dev | libmaxminddb-dev | libssl-dev |
RHEL/센트OS | ncurses-개발 | 지역개발 | libmaxminddb-devel | openssl-devel |
아치 | 저주를 받다 | 거입 | libmaxminddb | openssl |
젠투 | sys-libs/ncurses | dev-libs/geoip | dev-libs/libmaxminddb | dev-libs/openssl |
슬랙웨어 | 저주를 받다 | GeoIP | libmaxminddb | openssl |
참고 : 소스에서 소프트웨어를 컴파일/빌드하려면 gcc
, autoconf
, gettext
, autopoint
등과 같은 빌드 도구를 설치해야 할 수도 있습니다. 예: base-devel
, build-essential
, "Development Tools"
.
액세스 로그에서 출력을 지시할 수 있는 Docker 이미지가 업데이트되었습니다. 보고서만 출력하려는 경우 외부 환경의 로그를 Docker 기반 프로세스로 파이프할 수 있습니다.
touch report.html
cat access.log | docker run --rm -i -v ./report.html:/report.html -e LANG=$LANG allinurl/goaccess -a -o report.html --log-format COMBINED -
또는 실시간
tail -F access.log | docker run -p 7890:7890 --rm -i -e LANG=$LANG allinurl/goaccess -a -o report.html --log-format COMBINED --real-time-html -
개발 라이브러리로 인해 로컬 시스템이 복잡해지는 것을 방지하기 위해 격리된 컨테이너 환경에서 Debian 기반 시스템용 바이너리를 빌드할 수도 있습니다.
$ curl -L "https://github.com/allinurl/goaccess/archive/refs/heads/master.tar.gz" | tar -xz && cd goaccess-master
$ docker build -t goaccess/build.debian-12 -f Dockerfile.debian-12 .
$ docker run -i --rm -v $PWD:/goaccess goaccess/build.debian-12 > goaccess
DOCKER.md에서 도커 이미지 사용에 대한 자세한 내용을 읽을 수 있습니다.
인메모리 스토리지는 데이터 세트 크기를 사용 가능한 물리적 메모리 양으로 제한하는 대신 더 나은 성능을 제공합니다. GoAccess는 메모리 내 해시 테이블을 사용합니다. 메모리 사용량이 매우 좋고 성능도 꽤 좋습니다. 이 스토리지는 온디스크 지속성도 지원합니다.
명령에 제공되거나 구성 파일에 지정될 수 있는 옵션을 확인하세요. 구성 파일에 지정된 경우 앞에 --
추가하지 않고 긴 옵션을 사용해야 합니다.
참고 : GoAccess에 데이터를 연결하면 로그/날짜/시간 구성 대화 상자가 표시되지 않으므로 구성 파일이나 명령줄에서 미리 정의해야 합니다.
터미널로 출력하고 대화형 보고서를 생성하려면 다음을 수행하십시오.
# goaccess access.log
HTML 보고서를 생성하려면:
# goaccess access.log -a > report.html
JSON 보고서 파일을 생성하려면:
# goaccess access.log -a -d -o report.json
stdout에 대한 CSV 보고서를 생성하려면 다음을 수행하십시오.
# goaccess access.log --no-csv-summary -o csv
GoAccess는 또한 실시간 필터링 및 구문 분석에 뛰어난 유연성을 제공합니다. 예를 들어, goaccess가 시작된 이후 로그를 모니터링하여 문제를 신속하게 진단하려면 다음을 수행하세요.
# tail -f access.log | goaccess -
실시간 분석을 유지하기 위해 열린 파이프를 유지하면서 필터링하려면 tail -f
및 grep
, awk
, sed
등과 같은 일치 패턴 도구를 사용할 수 있습니다.
# tail -f access.log | grep -i --line-buffered 'firefox' | goaccess --log-format=COMBINED -
또는 열린 파이프를 유지하고 필터를 적용하면서 파일의 시작 부분부터 구문 분석합니다.
# tail -f -n +0 access.log | grep -i --line-buffered 'firefox' | goaccess -o report.html --real-time-html -
GoAccess를 사용하여 여러 로그를 구문 분석하는 방법에는 여러 가지가 있습니다. 가장 간단한 방법은 여러 로그 파일을 명령줄에 전달하는 것입니다.
# goaccess access.log access.log.1
일반 파일을 읽는 동안 파이프에서 파일을 구문 분석하는 것도 가능합니다.
# cat access.log.2 | goaccess access.log access.log.1 -
참고 : 단일 대시가 명령줄에 추가되어 GoAccess가 파이프에서 읽어야 함을 알립니다.
이제 GoAccess에 더 많은 유연성을 추가하려면 zcat --force
사용하여 압축된 파일과 압축되지 않은 파일을 읽을 수 있습니다. 예를 들어 모든 로그 파일 access.log*
처리하려면 다음을 수행할 수 있습니다.
# zcat --force access.log* | goaccess -
참고 : Mac OS X에서는 zcat
대신 gunzip -c
사용하십시오.
다중 스레드 구문 분석을 활성화하려면 --jobs=
(또는 -j
)를 사용하십시오. 예를 들어:
# goaccess access.log -o report.html -j 4
그리고 --chunk-size=<256-32768>
사용하여 청크 크기를 조정합니다. 기본 청크 크기는 1024입니다. 예:
# goaccess access.log -o report.html -j 4 --chunk-size=8192
GoAccess에는 HTML 보고서에 실시간 데이터를 출력하는 기능이 있습니다. 외부 파일 종속성이 없는 단일 파일로 구성되어 있기 때문에 HTML 파일을 이메일로 보낼 수도 있습니다. 정말 깔끔합니다!
실시간 HTML 보고서를 생성하는 프로세스는 정적 보고서를 생성하는 프로세스와 매우 유사합니다. 실시간으로 만들려면 --real-time-html
만 필요합니다.
# goaccess access.log -o /usr/share/nginx/html/your_site/report.html --real-time-html
보고서를 보려면 http://your_site/report.html
로 이동하세요.
기본적으로 GoAccess는 생성된 보고서의 호스트 이름을 사용합니다. 선택적으로 클라이언트 브라우저가 연결할 URL을 지정할 수 있습니다. 자세한 예는 FAQ를 참조하세요.
# goaccess access.log -o report.html --real-time-html --ws-url=goaccess.io
기본적으로 GoAccess는 포트 7890에서 수신 대기하며, 7890 이외의 다른 포트를 사용하려면 다음과 같이 지정할 수 있습니다(포트가 열려 있는지 확인).
# goaccess access.log -o report.html --real-time-html --port=9870
그리고 WebSocket 서버를 0.0.0.0이 아닌 다른 주소에 바인딩하려면 다음과 같이 지정할 수 있습니다.
# goaccess access.log -o report.html --real-time-html --addr=127.0.0.1
참고 : TLS/SSL 연결을 통해 실시간 데이터를 출력하려면 --ssl-cert=
및 --ssl-key=
사용해야 합니다.
또 다른 유용한 파이프는 웹 로그에서 날짜를 필터링하는 것입니다.
다음은 05/Dec/2010
부터 파일 끝까지 모든 HTTP 요청을 가져옵니다.
# sed -n '/05/Dec/2010/,$ p' access.log | goaccess -a -
또는 어제나 내일 같은 상대적인 날짜를 사용합니다.
# sed -n '/'$(date '+%d/%b/%Y' -d '1 week ago')'/,$ p' access.log | goaccess -a -
DATE a부터 DATE b까지 특정 기간만 구문 분석하려면 다음을 수행할 수 있습니다.
# sed -n '/5/Nov/2010/,/5/Dec/2010/ p' access.log | goaccess -a -
일정량의 데이터만 보존하고 스토리지를 재활용하려면 일정 일수만 보관하면 됩니다. 예를 들어 지난 5일을 유지하고 표시하려면 다음을 수행하세요.
# goaccess access.log --keep-last=5
로그에 가상 호스트 필드가 포함되어 있다고 가정합니다. 예를 들어:
vhost.io:80 8.8.4.4 - - [02/Mar/2016:08:14:04 -0600] "GET /shop HTTP/1.1" 200 615 "-" "Googlebot-Image/1.0"
그리고 상위 URL이 속한 가상 호스트를 확인하기 위해 요청에 가상 호스트를 추가하려고 합니다.
awk '$8=$1$8' access.log | goaccess -a -
동일한 작업을 수행하되 실시간 필터링 및 구문 분석도 사용하려면 다음을 수행하세요.
tail -f access.log | unbuffer -p awk '$8=$1$8' | goaccess -a -
가상 호스트 목록을 제외하려면 다음을 수행할 수 있습니다.
# grep -v "`cat exclude_vhost_list_file`" vhost_access.log | goaccess -
요청 내에서 특정 페이지(예: 페이지 보기, html
, htm
, php
등)를 구문 분석하려면 다음을 수행하세요.
# awk '$7~/.html|.htm|.php/' access.log | goaccess -
$7
가상 호스트 없이 공통 및 결합 로그 형식에 대한 요청 필드입니다. 로그에 가상 호스트가 포함된 경우 대신 $8
사용하는 것이 좋습니다. 촬영하려는 분야를 확인하는 것이 가장 좋습니다. 예:
# tail -10 access.log | awk '{print $8}'
또는 특정 상태 코드(예: 500(내부 서버 오류))를 구문 분석하려면 다음을 수행하세요.
# awk '$9~/500/' access.log | goaccess -
또는 여러 상태 코드(예: 모두 3xx 및 5xx):
# tail -f -n +0 access.log | awk '$9~/3[0-9]{2}|5[0-9]{2}/' | goaccess -o out.html -
그리고 서버에 공격하는 봇(크롤러) 수에 대한 대략적인 개요를 얻으려면 다음을 수행하십시오.
# tail -F -n +0 access.log | grep -i --line-buffered 'bot' | goaccess -
또한 GoAccess를 더 낮은 우선순위로 실행하려면 다음과 같이 실행할 수 있다는 점을 지적할 가치가 있습니다.
# nice -n 19 goaccess -f access.log -a
서버에 설치하고 싶지 않은 경우에도 로컬 컴퓨터에서 실행할 수 있습니다!
# ssh -n root@server 'tail -f /var/log/apache2/access.log' | goaccess -
참고: GoAccess가 stdin에서 읽을 수 있도록 SSH에는 -n
필요합니다. 또한 암호가 필요한 경우 작동하지 않으므로 인증에 SSH 키를 사용해야 합니다.
우리는 이전에 답변된 많은 질문과 문제를 받았습니다.
GoAccess에는 내부 저장소를 통해 로그를 점진적으로 처리하고 해당 데이터를 디스크에 덤프하는 기능이 있습니다. 다음과 같은 방식으로 작동합니다.
--persist
사용하여 데이터세트를 유지해야 하며, 그런 다음 동일한 데이터세트를 로드할 수 있습니다.--restore
. 새 데이터가 전달되면(파이프 또는 로그 파일을 통해) 이를 원래 데이터세트에 추가합니다. GoAccess는 처리된 모든 파일의 inode를 추적합니다(파일이 동일한 파티션에 유지된다고 가정). 또한 각 파일에 대해 구문 분석된 마지막 줄 및 구문 분석된 마지막 줄의 타임스탬프와 함께 로그에서 데이터 조각을 추출합니다. . 예: inode:29627417|line:20012|ts:20171231235059
먼저, 코드 조각이 구문 분석 중인 로그와 일치하는지 비교하고, 그렇다면 로그가 크게 변경되지 않은 것으로 가정합니다(예: 잘리지 않음). inode가 현재 파일과 일치하지 않으면 모든 행을 구문 분석합니다. 현재 파일이 inode와 일치하면 나머지 줄을 읽고 구문 분석된 줄 수와 타임스탬프를 업데이트합니다. 추가 예방 조치로 저장된 타임스탬프보다 ≤ 타임스탬프가 있는 로그 줄을 구문 분석하지 않습니다.
파이프 데이터는 읽은 마지막 줄의 타임스탬프를 기반으로 작동합니다. 예를 들어, 저장된 것보다 >= 타임스탬프를 찾을 때까지 들어오는 모든 항목을 구문 분석하고 삭제합니다.
// last month access log
# goaccess access.log.1 --persist
그런 다음 로드하세요.
// append this month access log, and preserve new data
# goaccess access.log --restore --persist
지속형 데이터만 읽으려면(새 데이터를 구문 분석하지 않고)
# goaccess --restore
GoAccess에 대한 도움을 환영합니다. 가장 도움이 되는 방법은 직접 사용해 보고 피드백을 주는 것입니다. GitHub 문제 추적기와 풀 요청을 사용하여 코드 변경 사항을 논의하고 제출하세요.
GitHub에서 직접 .po 파일을 편집하거나 inlang.com의 시각적 인터페이스를 사용하여 번역에 기여할 수 있습니다.
즐기다!