2019年09月20日

用goaccess解析阿里cdn的log

以前使用awstats解析过某门户网站的apache log。最近需要分析ali云cdn的log,考虑到awstats安装配置有点麻烦,又不太喜欢perl,所以在网上找到了goaccess。

goaccess是c写的。goaccess的输出图文并茂,既可以用命令行,又可以生成html,而且速度快,每秒8W+的日志记录解析速度,比awstats快不少,同时可以用websocket 10秒刷新实时统计数据。那就试试吧。

安装

rpm安装

最新的goaccess是 v1.3centos 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
  1. 指定安装目录为 /usr/local/goaccess ,改为其他的也可以,习惯而已。
  2. –enable-utf8 支持中文字符处理。
  3. –with-openssl 通过TLS/SSL访问goaccess的WebSocket实时数据。
  4. –enable-geoip=mmdb 启用根据ip显示地理位置。
  5. –enable-tcb goaccess默认将数据存储在内存的Hash Table中,如果数据量太大,就需要存到硬盘,使用TokyoCabinet数据存储。

log format

goacesss的log format参考 https://goaccess.io/man

阿里cdn的格式在cdn日志下载页面上有简单说明。

命令行生成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 处理文件

配置文件

  1. rpm安装的默认配置文件在 /etc/goaccess.conf
  2. 指定了安装目录为/usr/local/goaccess 的配置文件在 /usr/local/goaccess/goaccess/goaccess.conf
  3. 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