用goaccess解析阿里cdn的log
以前使用awstats解析过某门户网站的apache log。最近需要分析ali云cdn的log,考虑到awstats安装配置有点麻烦,又不太喜欢perl,所以在网上找到了goaccess。
goaccess是c写的。goaccess的输出图文并茂,既可以用命令行,又可以生成html,而且速度快,每秒8W+的日志记录解析速度,比awstats快不少,同时可以用websocket 10秒刷新实时统计数据。那就试试吧。
安装
rpm安装
最新的goaccess是 v1.3
。 centos 7
上使用epel源安装的goaccess是 v1.2
的。如果觉得版本低,可以用源代码安装。
yum install goaccess
源代码安装
rpm安装的版本低了一点,用源代码安装。
安装编译goaccess时依赖开发包
sudo yum install -y ncurses-devel openssl-devel tokyocabinet-devel libmaxminddb-devel
开发包说明:
- ncurses-devel
- goaccess只依赖ncurses-devel
- openssl-devel
- 通过TLS/SSL访问goaccess的WebSocket需要openssl-devel
- libmaxminddb-devel
- 使用maxminddb格式的geoip地址库
- tokyocabinet-devel
- goaccess默认将数据存储在内存的Hash Table中,如果数据量太大,就需要存到硬盘,使用TokyoCabinet数据存储
make && make install
#查看编译选项 ./configure --help
步骤很简单。
./configure --prefix=/usr/local/goaccess \ --enable-utf8 \ --enable-geoip=mmdb \ --enable-tcb \ --with-openssl make && make install
- 指定安装目录为 /usr/local/goaccess ,改为其他的也可以,习惯而已。
- –enable-utf8 支持中文字符处理。
- –with-openssl 通过TLS/SSL访问goaccess的WebSocket实时数据。
- –enable-geoip=mmdb 启用根据ip显示地理位置。
- –enable-tcb goaccess默认将数据存储在内存的Hash Table中,如果数据量太大,就需要存到硬盘,使用TokyoCabinet数据存储。
log format
goacesss的log format参考 https://goaccess.io/man
阿里cdn的格式在cdn日志下载页面上有简单说明。
阿里cdn日志字段对应goaccess的格式,部分字段在goaccess上没有对应的,用
%^
忽略掉该字段。 [时间]、访问IP %h、代理IP %^、responsetime %L、"referer %R"、"method %m、访问URL %U"、httpcode %s、requestsize %^、responsesize %b、cache命中状态 %^、"UA头 %u"、"文件类型" %^[%d:%t %^] %h %^ %L \"%R\" \"%m %U\" %s %^ %b %^ \"%u\" %^
- 代理IP,应该是x-forward-for,但是goaccess没找到对应的格式,用
%^
忽略掉这个字段。 - responsetime,貌似以毫秒为单位,如果以微秒为单位,看分析结果,似乎太快了。
- requestsize,goaccess没找到对应的格式,用
%^
忽略掉这个字段。 - "文件类型",goaccess没找到对应的格式,用
%^
忽略掉这个字段,在配置文件里有一些文件类型的配置。
- 代理IP,应该是x-forward-for,但是goaccess没找到对应的格式,用
命令行生成html报表
1. --real-time-html : web界面查看实时日志分析 2. -o /path/to/report.html : 指定生成报表路径
goaccess -f /var/log/nginx/access.log --log-format="[%d:%t %^] %h %^ %L \"%R\" \"%m %U\" %s %^ %b %^ \"%u\" %^" --date-format="%d/%b/%Y" --time-format=%H:%M:%S -a --geoip-database=/usr/local/goaccess-1.1/GeoLiteCity.dat -o /tmp/nginx-log-`date +%F-%H-%M-%S`.html # -f log file name # --geoip-database ip地址数据库
命令行显示报表
goaccess -f cdn-log_2019_09_19_090000_100000 -H -M -a #按 spc 选择 ncsa combined,其实选什么都一样,默认的log format都不能用 #按 c 编辑log format,把上面的log format填进去 #按 ENTER 处理文件
配置文件
- rpm安装的默认配置文件在
/etc/goaccess.conf
- 指定了安装目录为/usr/local/goaccess 的配置文件在
/usr/local/goaccess/goaccess/goaccess.conf
- user可以在 HOME 下建一个
.goaccessrc
配置文件有下面几行就能解析cdn的log了。
time-format %H:%M:%S date-format %d/%b/%Y # ali cdn Log Format. 2019.09.20 # 阿里cdn的时间应该是毫秒为单位的,不然太快了,用 %L,不用 %D log-format [%d:%t %^] %h %^ %L \"%R\" \"%m %U\" %s %^ %b %^ \"%u\" %^ geoip-database /usr/local/share/GeoIP/GeoLite2-City.mmdb
GeoIP和纯真IP库显示IP地理位置信息
显示ip的地理位置,geoip城市ip数据包 https://dev.maxmind.com/geoip/geoip2/geolite2/
下载后,解压到某个目录,然后修改配置文件中的 geoip-database
或者在命令行直接指定ip库。
GeoLite2 Free是免费的,每周二更新一次。不过不如收费的MaxMind’s GeoIP2 databases准确。不显示国内的运营商。对于国内复杂的网络环境,ip地址显示不是非常准确。想要准确的可以考虑商用的。
IP数据库的比较和选择,参考 https://blog.csdn.net/matthewei6/article/details/50536609