[Linux] nginx日志分析工具goaccess


本文总阅读量

0、yum安装依赖包

1
2
3
yum install GeoIP-devel gcc ncurses* glib2 glib2-devel zlib zlib-devel bzip2-devel -y
rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm
yum -y install GeoIP-update

1、下载安装goaccess(需科学上网)

1
2
3
4
5
6
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

2、修改配置文件(可根据自己需求配置),也可以在启动命令是单独指定:

more /etc/goaccess.conf

1
2
3
4
5
6
7
8
9
10
time-format %H:%M:%S
date-format %d/%b/%Y
log-format %h %^[%d:%t %^] "%r" %s %b "%R" "%u"

real-time-html true
ssl-cert <cert.crt>
ssl-key <priv.key>
ws-url wss://<your-domain>
port <port>
output /var/www/<xxx>/stat/index.html

3、安装tokyocabinet用于持久化数据(如果不需要持久化数据到磁盘可不必安装)

1
2
3
4
5
6
7
cd /data/soft
wget http://fallabs.com/tokyocabinet/tokyocabinet-1.4.48.tar.gz
tar -zxvf tokyocabinet-1.4.48.tar.gz
cd tokyocabinet-1.4.48
./configure --prefix=/usr/local --enable-off64 --enable-fastest
make
make install

将生成的模块加入/lib64下

1
ln -s /data/soft/tokyocabinet-1.4.48/libtokyocabinet.so.9 /lib64/

如果没有这个模块会,重新编译goaccess会报错

1
/usr/local/bin/goaccess: error while loading shared libraries: libtokyocabinet.so.9: cannot open shared object file: No such file or directory

4、安装完tokyocabinet,配置goaccess加入btree

1
2
3
./configure --enable-utf8 --enable-geoip=legacy --enable-tcb=btree
make
make install

5、增加打印日志功能(可选)

1
2
./configure --enable-utf8 --enable-geoip=legacy --enable-tcb=btree --enable-debug
make && make install

指定输出日志文件:

1
--debug-file=/tmp/goaccess.log

6、添加定时任务生成月度的日志分析表(月度报表)

添加到定时任务

1
2
cat /etc/crontab |grep sh
00 01 * * * root source /etc/profile && sh /root/test.sh

cat /root/test.sh

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#!bin/bash
#前一天的日期
prestamp=`date -d '1 day ago' +'%Y%m%d'`
#指定需要分析的前一天的日志的文件名称
prelogname=/usr/local/openresty/nginx/logs/go_access${prestamp}.log
#prelogname=/usr/local/openresty/nginx/logs/go_access.log
#每个月1号不生成
premonstamp=`echo ${prestamp:0:6}`
#月度报表名称
monreportname=/data/web/oldreport/report${premonstamp}.html
#持久化磁盘路径
disk_db_path=/tmp/goaccess${premonstamp}
#将前一天生成日志文件追加到月度持久化磁盘里,并生成新的报表
/usr/local/bin/goaccess ${prelogname} -o ${monreportname} --load-from-disk --db-path=${disk_db_path} --keep-db-files --date-format='%d/%b/%Y' --log-format='%h %^[%d:%t %^] "%r" %s %b' --time-format='%H:%M:%S'

生成的报表样式如下:

7、每天凌晨定时生成新一天的报表,但是不建议持久化到磁盘,因为一旦中途进程挂掉,需要清空日志文件,如果不清空日志文件再次启动的话,会重复加载已经存在的数据。

cat /etc/crontab |grep sh

1
00 00 * * * root source /etc/profile && sh /root/test.sh

每天定时关闭goaccess并重新启动,将数据持久化到磁盘
cat /root/test.sh

1
2
3
4
5
6
#!/bin/bash
stamp=`date +'%Y%m%d'`
logname=/usr/local/openresty/nginx/logs/go_access.log
reportname=/data/web/report/report${stamp}.html
ps -ef|grep '/usr/local/bin/goaccess'|grep -v grep |awk '{print $2}' |xargs kill
/usr/local/bin/goaccess ${logname} -o ${reportname} --log-format=COMBINED --real-time-html --daemonize

8、生成前一天的历史报表(在日志文件每天定时切割的情况下,如果不按天切割将无法生成前一天的报表)

cat /etc/crontab |grep sh

1
00 01 * * * root source /etc/profile && sh /root/test.sh

cat /root/test.sh

1
2
3
4
5
6
#!/bin/bash
prestamp=`date -d '1 day ago' +'%Y%m%d'`
prelogname=/usr/local/openresty/nginx/logs/go_access${prestamp}.log
#prelogname=/usr/local/openresty/nginx/logs/go_access.log
prereportname=/data/web/report/report${prestamp}.html
/usr/local/bin/goaccess ${prelogname} -o ${prereportname}

9、下面列举一些单独的命令生成自己需要的报表

实时报表

1
/usr/local/bin/goaccess /usr/local/openresty/nginx/logs/go_access.log -o /data/web/report/report20181204.html --log-format=COMBINED  --real-time-html  --daemonize

增量追加持久化数据,将日志加载到磁盘,不使用配置文件(命令行指定)

1
/usr/local/bin/goaccess /tmp/api_access.log --load-from-disk --db-path=/tmp/goaccess  --keep-db-files --debug-file=/tmp/goaccess.log --date-format='%d/%b/%Y' --log-format='%h %^[%d:%t %^] "%r" %s %b' --time-format='%H:%M:%S'

增量追加持久化数据,将日志加载到磁盘,同时输出到html表(添加-o 参数,指定输出html)

1
/usr/local/bin/goaccess /tmp/api_access.log -o /data/web/oldreport/oldreport20181205.html --load-from-disk --db-path=/tmp/goaccess  --keep-db-files --debug-file=/tmp/goaccess.log --date-format='%d/%b/%Y' --log-format='%h %^[%d:%t %^] "%r" %s %b' --time-format='%H:%M:%S'

添加到后台运行(因为没有–real-time-html使用–daemonize是不生效的)

1
/usr/local/bin/goaccess /tmp/api_access.log -o /data/web/oldreport/oldreport20181205.html --load-from-disk --db-path=/tmp/goaccess  --keep-db-files --debug-file=/tmp/goaccess.log --date-format='%d/%b/%Y' --log-format='%h %^[%d:%t %^] "%r" %s %b' --time-format='%H:%M:%S' &

对已经持久化的数据,使用-o参数生成报表

1
/usr/local/bin/goaccess -o /data/web/oldreport/oldreport20181205.html --log-format=COMBINED  --keep-db-files --db-path=/tmp/goaccess --load-from-disk

10、使用过程遇到的问题

1
2
3
4
1、在goaccess后台运行并且开启持久化的情况下,不能使用kill -9 pid方法,使用这种方法杀掉进程会毁坏数据,可以使用kill pid的方法
2、使用持久化功能,进程宕掉之后,重启进程需要清空日志文件中的数据,否则会把日志文件中的旧数据重复加载一遍。
3、--daemonize添加守护进程,只用--real-time-html可用时生效
4、使用real_time_html适时生效需要开启goaccess的端口默认为7890

11、goaccess html参数详解

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
General Statistics:此面板提供了几个指标的摘要,其中一些包括:有效和无效请求的数量,分析数据集所花费的时间,唯一访问者,请求的文件,静态文件(CSS,ICO,JPG等)HTTP引用,404s,已解析日志文件的大小和带宽消耗。
Unique visitors(每日独立访客 - 包括网络机器人):此面板显示点击次数,唯一身份访问者和每个日期的累积带宽等指标。包含相同IP,相同日期和相同用户代理的HTTP请求被视为唯一访问者。默认情况下,它包括网络爬虫/蜘蛛。 可以使用--date-spec = hr将日期特异性设置为小时级别,这将显示日期,例如05 / Jun / 2016:16。如果您想跟踪小时级别的每日流量,这非常棒。
Requested files(请求的文件):此面板显示Web服务器上请求最多的文件。它显示了匹配,唯一身份访问者和百分比,以及累积带宽,协议和使用的请求方法。
Requested static files(请求的文件):列出了最常用静态文件,如:JPG,CSS,SWF,JS,GIF,和PNG文件类型,使用相同的指标作为最后的面板一起。可以将其他静态文件添加到配置文件中。
404 or Not Found(未找到的URLS):显示与先前请求面板相同的指标,但是,其数据包含在服务器上找不到的所有页面,或通常称为404状态代码。
Hosts(未找到的URLS):此面板包含有关主机本身的详细信息。这非常适合发现×××性爬虫,并确定谁在吃你的带宽。 扩展面板可以显示更多信息,例如主机的反向DNS查找结果,原产国和城市。如果-a启用了参数,则可以通过选择所需的IP地址,然后按Enter来显示用户代理列表。
Operating Systems(操作系统):此面板将报告主机在到达服务器时使用的操作系统。它试图提供每个操作系统的最具体版本。
Browsers(操作系统):此面板将报告主机在访问服务器时使用的浏览器。它试图提供每个浏览器的最具体版本。
Visit Times(时间分配):此面板将显示每小时报告。此选项显示24个数据点,每天一小时一个。 可选地,可以使用--hour-spec = min将小时特异性设置为十分之一水平,这将显示小时为16:4如果您想要发现服务器上的流量峰值,这很好。
Virtual Hosts:此面板将显示从访问日志中解析的所有不同虚拟主机。如果在日志格式字符串中使用%v,则会显示此面板。
Referrers URLs:如果相关主机通过其他资源访问了网站,或者是从其他主机链接转移给您,则会在此面板中提供引用它们的网址。请参阅`--ignore-panel`配置文件以启用它。 (默认禁用)
Referring Sites(推荐网站):此面板仅显示主机部分,但不显示整个URL。请求来自的URL。
Keyphrases(谷歌搜索关键字):它报告了用于Google搜索,Google缓存和Google翻译的关键字,这些关键字已导致您的网络服务器。目前,它仅通过HTTP支持Google搜索查询。请参阅`--ignore-panel`配置文件以启用它。 (默认禁用)
Geo Location(地理位置):确定IP地址在地理位置的位置。统计数据按大陆和国家分列。它需要使用GeoLocation支持进行编译。
HTTP Status Codes(HTTP状态码):HTTP请求的数字状态代码的值。
Remote User (HTTP authentication):这是HTTP身份验证确定的请求文档的人员的用户ID。如果文档没有密码保护,则此部分将为“ - ”,就像前一个部分一样。除非%e在log-format变量中给出,否则不会启用此面板。
--real-os
展示真实的操作系统。在Operation System模块中,是否展示更详细的操作系统信息。

12、goaccess与nginx日志格式日常转换表

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
nginx               goaccess
$time_local %d:%t %^
$host %v
$http_host %v
$remote_addr %h
$request_time %T
$request_method %m
$request_uri %U
$server_protocol %H
$request %r
$status %s
$body_bytes_sent %b
$bytes_sent %b
$http_referer %R
$http_user_agent %u

如果找不到对应的格式可以使用“%^”–Ignore this field,来忽略那一部分

目录
  1. 1. 0、yum安装依赖包
  2. 2. 1、下载安装goaccess(需科学上网)
  3. 3. 2、修改配置文件(可根据自己需求配置),也可以在启动命令是单独指定:
  4. 4. 3、安装tokyocabinet用于持久化数据(如果不需要持久化数据到磁盘可不必安装)
  5. 5. 4、安装完tokyocabinet,配置goaccess加入btree
  6. 6. 5、增加打印日志功能(可选)
  7. 7. 6、添加定时任务生成月度的日志分析表(月度报表)
  8. 8. 7、每天凌晨定时生成新一天的报表,但是不建议持久化到磁盘,因为一旦中途进程挂掉,需要清空日志文件,如果不清空日志文件再次启动的话,会重复加载已经存在的数据。
  9. 9. 8、生成前一天的历史报表(在日志文件每天定时切割的情况下,如果不按天切割将无法生成前一天的报表)
  10. 10. 9、下面列举一些单独的命令生成自己需要的报表
  11. 11. 10、使用过程遇到的问题
  12. 12. 11、goaccess html参数详解
  13. 13. 12、goaccess与nginx日志格式日常转换表

Proudly powered by Hexo and Theme by Lap
本站访客数人次
© 2020 zeven0707's blog