Goaccess - 访问日志
摘要
HTTP server
的 access log
记录着每个请求的基础信息,对这些数据进行分析汇总,可以得到网站请求时间分配、推荐网站、浏览器版本等数据图表。可实时分析每个请求也可在命令行中查看分析结果,为网站分析提供图表支持。
背景
前不久,写了一篇 《Caddy 简介 - 使用 caddy 实现短网址服务》 可以通过简单的配置对本站作了一些推广,于是想着分析一下访问的来路及其它指标,这样更利于下次的推广。
对于站点的分析可以加入第三方的统计代码,但是第三方的统计一般实时性并没有那么高,也不利于定制化,比如一些警告。
效果
开始
goaccess
是用 C 语言编写的一个分析命令,现在已经可以实现实时分析,分析速度也是极快的。只依赖一个配置文件,也可以方便得在命令行中查看实时状态。
安装
一般可以使用 docker
的,我都会用 docker
来作讲解。下面是所有安装方式
源码安装:
$ wget https://tar.goaccess.io/goaccess-1.3.tar.gz
$ tar -xzvf goaccess-1.3.tar.gz
$ cd goaccess-1.3/
$ ./configure --enable-utf8 --enable-geoip=legacy
$ make
$ make install
Debian/Ubuntu
$ echo "deb http://deb.goaccess.io/ $(lsb_release -cs) main" | sudo tee -a /etc/apt/sources.list.d/goaccess.list
$ wget -O - https://deb.goaccess.io/gnugpg.key | sudo apt-key add -
$ sudo apt-get update
$ sudo apt-get install goaccess
centos
$ yum install goaccess
OS X / Homebrew
$ brew install goaccess
Docker
$ docker pull allinurl/goaccess
配置
将所有 goaccess
的相关的文件统一放在 /data/goaccess
$ mkdir -p /data/goaccess/{data,html,logs}
data
放置配置文件html
放置生成的html
文件,即前面发的效果图logs
放置access log
文件
在 /data/goaccess/data/goaccess.conf
中写入如下配置:
可参照官方配置修改 goaccess.conf
log-format COMBINED
config-dialog false
hl-header true
json-pretty-print false
no-color false
no-column-names false
no-csv-summary false
no-progress false
no-tab-scroll false
with-mouse false
real-time-html true
agent-list false
with-output-resolver false
http-method yes
http-protocol yes
no-query-string false
no-term-resolver false
444-as-404 false
4xx-to-unique-count false
all-static-files false
double-decode false
ignore-crawlers false
crawlers-only false
ignore-panel REFERRERS
ignore-panel KEYPHRASES
real-os true
static-file .css
static-file .js
static-file .jpg
static-file .png
static-file .gif
static-file .ico
static-file .jpeg
static-file .pdf
static-file .csv
static-file .mpeg
static-file .mpg
static-file .swf
static-file .woff
static-file .woff2
static-file .xls
static-file .xlsx
static-file .doc
static-file .docx
static-file .ppt
static-file .pptx
static-file .txt
static-file .zip
static-file .ogg
static-file .mp3
static-file .mp4
static-file .exe
static-file .iso
static-file .gz
static-file .rar
static-file .svg
static-file .bmp
static-file .tar
static-file .tgz
static-file .tiff
static-file .tif
static-file .ttf
static-file .flv
要是你的 access log
日志格式不是默认的,那需要配置成相应的格式:
log-format COMBINED
这里使用的是 COMBINED
格式,可参考这里
其它一些配置可以写入配置文件,也可以在命令行中直接指定。
启动 goaccess
docker run --restart=always -d -p 8080:7890 \
-v "/data/goaccess/data:/srv/data" \
-v "/data/goaccess/html:/srv/report" \
-v "/data/goaccess/logs:/srv/logs" \
-e LANG=zh_CN.UTF-8 \
--name=goaccess allinurl/goaccess \
goaccess --no-global-config --config-file=/srv/data/goaccess.conf \
--ws-url=127.0.0.1:8080 --output=/srv/report/index.html \
--log-file=/srv/logs/access.log
将本地目录挂到容器中:
-v "/data/goaccess/data:/srv/data" \
-v "/data/goaccess/html:/srv/report" \
-v "/data/goaccess/logs:/srv/logs"
指定生成的为中文页面,不添加此参数则会生成英文页面:
-e LANG=zh_CN.UTF-8
窗口名及镜像名:
--name=goaccess allinurl/goaccess
执行 goaccess
命令,并指定参数:
goaccess --no-global-config --config-file=/srv/data/goaccess.conf \
--ws-url=127.0.0.1:8080 --output=/srv/report/index.html \
--log-file=/srv/logs/access.log
--no-global-config
不从/usr/etc/, /etc/ 或 /usr/local/etc/
目录加载配置文件--config-file=/srv/data/goaccess.conf
指定goaccess
配置文件,本地对应/data/goaccess/data/goaccess.conf
--ws-url=127.0.0.1:8080
实时分析会启动websocket
来推着实时更新的数据。注意这里的端口需要与服务暴露的端口一致,使用docker
启动的需要使用对宿主机暴露的端口,如:-p 8080:7890
则需要使用8080
--output=/srv/report/index.html
生成分析文本的静态页面,会使用websocket
来更新数据。对应本地地址为/data/goaccess/html/index.html
。--log-file=/srv/logs/access.log
需要分析的日志文件,对应本地目录/data/goaccess/logs/access.log
以上执行完成后,数据量少的情况下,很快可以生成 index.html
文件,直接在浏览器中打开就可以看到 效果
小结的类似图表。
数据落地
网站运行时间长了,会产生很大的日志量。分开来处理这些是不错的方式,当然能够批量处理 access.log
又不会重复计算相同的记录将更加友好。
只需添加 --keep-db-files
参数,就能把分析过的数据写到 --db-path <dir>
指定的目录,未指定默认放在 /tmp
目录下。
比如:
$ goaccess access.log.1 --keep-db-files
向这个落地的数据追加数据:
$ goaccess access.log --load-from-disk --keep-db-files
注意 :当使用 --load-from-disk
时未指定 --keep-db-files
,则会在程序退出时删除落地的数据库。
还可以查看数据库中存储的内容:
$ goaccess --load-from-disk --keep-db-files
小结
这是一种无侵入的方式来分析自己的站点,可以离线或者放在其它机器上定时分析发送邮件报告,对于原站的性能不会造成任何影响。
这个工具的实时离线功能都很好用,不过有一点不能在一个服务中很好得区别每个 host
。就是可以在展示页的头部选择需要查看的站点,统计的数据仅只对这个站点。数据更新时也只更新单个 host
,这对于一台服务器部署多个服务的使用都会方便很多。
如果你不关注单 host
的请求状态,而是关心整个服务器中的请求,仅要简单区分是哪个站点的流量,可以将你的主机名直接添加到 access log
中的请求路径之前,和路径连成一个数据进行分析。
这样在查看图表时展示的就是 host
+ 路径,依然可以分析到每个 host
的请求情况。