GoAccess日志分析
GoAccess监控日志
链接:https://tar.goaccess.io/goaccess-1.5.4.tar.gz
环境:CentOS7.9 2C2G 10.0.0.10
简介:
GoAccess被设计成一个基于终端的快速日志分析器。它的核心思想是实时快速分析和查看Web服务器统计信息,而无需使用您的浏览器
虽然终端输出是默认输出,但是它能够生成完整的,自包含的实时HTML报告,非常适合分析,监控和数据可视化,以及JSON和CSV报告
主要功能:
用C语言编写的,快速,实时,毫秒/秒更新
GoAccess是用C语言编写的。要运行它,你只需要将ncurses作为依赖项
几乎所有的Web日志格式 (Apache,Nginx,Amazon S3,Elastic Load Balancing,CloudFront等)
只需要设置日志格式并根据您的日志运行它
漂亮的终端和自定义仪表盘
GoAccess能够通过磁盘上的B + Tree数据库逐步处理日志
需要最少的配置
配色方案可定制
我们以Nginx为例子来分析Nginx的日志!
安装GoAccess
1:安装依赖:
yum -y install glib2 glib2-devel ncurses ncurses-devel GeoIP GeoIP-devel GeoIP-data
Installed:
GeoIP-data.noarch 0:1.5.0-14.el7 GeoIP-devel.x86_64 0:1.5.0-14.el7 glib2-devel.x86_64 0:2.56.1-9.el7_9
ncurses-devel.x86_64 0:5.9-14.20130511.el7_4
Dependency Installed:
pcre-devel.x86_64 0:8.32-17.el7
Updated:
glib2.x86_64 0:2.56.1-9.el7_9
Complete!
#安装完成
2:下载GoAccess
wget https://tar.goaccess.io/goaccess-1.5.4.tar.gz
3:解压并安装
[root@virtual_host ~]# ls
anaconda-ks.cfg goaccess-1.5.4.tar.gz
[root@virtual_host ~]# tar xf goaccess-1.5.4.tar.gz
[root@virtual_host ~]# ls
anaconda-ks.cfg goaccess-1.5.4 goaccess-1.5.4.tar.gz
[root@virtual_host ~]# cd goaccess-1.5.4/
[root@virtual_host goaccess-1.5.4]# ls
ABOUT-NLS ChangeLog config.guess configure depcomp install-sh Makefile.in po src
aclocal.m4 compile config.rpath configure.ac goaccess.1 m4 missing README TODO
AUTHORS config config.sub COPYING INSTALL Makefile.am NEWS resources
[root@virtual_host goaccess-1.5.4]# ./configure --prefix=/usr/local/goaccess --enable-utf8 --enable-geoip=legacy --with-openssl
[root@virtual_host goaccess-1.5.4]# make && make install
# 编译出错时可能是因为openssl-devel并没有安装所导致!完成之后直接make && make install安装即可
链接一下
ln -s /usr/local/goaccess/bin/goaccess /usr/local/bin/
然后我们开始去修改配置文件
[root@virtual_host goaccess]# pwd
/usr/local/goaccess/etc/goaccess
写入这些
time-format %H:%M:%S
log-format %h %^[%d:%t %^] "%r" %s %b "%R" "%u"
date-format %d/%b/%Y
#配置文件参数说明
%x 匹配 time-format 和 date-format 变量的日期和时间字段。用于使用时间戳来代替日期和时间两个独立变量的场景。
%t 匹配 time-format 变量的时间字段。
%d 匹配 date-format 变量的日期字段。
%v 根据 canonical 名称设定的服务器名称(服务区或者虚拟主机)。
%e 请求文档时由 HTTP 验证决定的用户 ID。
%h 主机(客户端IP地址,IPv4 或者 IPv6)。
%r 客户端请求的行数。这些请求使用分隔符(单引号,双引号)引用的部分可以被解析。否则,需要使用由特殊格式说明符(例如:%m, %U, %q 和 %H)组合格式去解析独立的字段。
注意: 既可以使用 %r 获取完整的请求,也可以使用 %m, %U, %q and %H 去组合你的请求,但是不能同时使用。
%m 请求的方法。
%U 请求的 URL。
注意: 如果查询字符串在 %U中,则无需使用 %q。但是,如果 URL 路径中没有包含任何查询字符串,则你可以使用 %q 查询字符串将附加在请求后面。
%q 查询字符串。
%H 请求协议。
%s 服务器回传客户端的状态码。
%b 回传客户端的对象的大小。
%R HTTP 请求的 "Referer" 值。
%u HTTP 请求的 "UserAgent" 值。
%D 处理请求的时间消耗,使用微秒计算。
%T 处理请求的时间消耗,使用带秒和毫秒计算。
%L 处理请求的时间消耗,使用十进制数表示的毫秒计算。
%^ 忽略此字段。
%~ 继续解析日志字符串直到找到一个非空字符(!isspace)。
~h 在 X-Forwarded-For (XFF) 字段中的主机(客户端 IP 地址,IPv4 或者 IPv6)。
4:安装Nginx
[root@virtual_host goaccess-1.5.4]# yum install -y nginx
#检查日志是否打开
cat /etc/nginx/nginx.conf
...
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
...
GoAccess 控制台模式
goaccess有控制台模式和html静态页面模式,这里先介绍一下控制台模式
goaccess -a -d -f /var/log/nginx/access.log -p /usr/local/goaccess/etc/goaccess/goaccess.conf
#常用参数
-a --agent-list 启用由主机用户代理的列表。为了更快的解析,不启用该项
-d --with-output-resolver 在HTML/JSON输出中开启IP解析,会使用GeoIP来进行IP解析
-f --log-file 需要分析的日志文件路径
-p --config-file 配置文件路径
-o --output 输出格式,支持html、json、csv
-m --with-mouse 控制面板支持鼠标点击
-q --no-query-string 忽略请求的参数部分
--real-time-html 实时生成HTML报告
--daemonize 守护进程模式,--real-time-html时使用
#控制台操作方法
F1 主帮助页面
F5 重绘主窗口
q 退出
1-15 跳转到对应编号的模块位置
o 打开当前模块的详细视图
j 当前模块向下滚动
k 当前模块向上滚动
s 对模块排序
/ 在所有模块中搜索匹配
n 查找下一个出现的位置
g 移动到第一个模块顶部
G 移动到最后一个模块底部
输出给nginx使用nginx访问web页面方式
-o参数是输出html的位置!
goaccess -a -d -f /var/log/nginx/access.log -p /usr/local/goaccess/etc/goaccess/goaccess.conf -o /usr/share/nginx/html/index.html
控制台演示
web页面展示
#GoAccess Daemonize
GoAccess可以使用daemonize模式运行,并提供创建实时HTML的功能,只需要在启动命令后添加--real-time-html和--daemonize参数即可
它监听了7890的端口(可以修改的)--port 指定端口
网站开启了HTTPS功能,就需要GoAccess启用openssl,在配置文件goaccess.conf中配置ssl-cert和ssl-key来支持openssl,还需要将ws-url指定为域名!
#GoAccess Crontab
在某些常见下,没有这样的实时性要求,可采用crontab机制实现定时更新HTML报表
*/45 * * * * goaccess -a -d -f /usr/local/nginx/access.log -p /usr/local/goaccess/etc/goaccess/goaccess.conf -o /usr/share/nginx/html/index.html
定时任务设置每45分钟刷新一次
当Nginx日志被切割后,可以使用--keep-db-file进行分析新产生的日志
#到此GoAccess分析Nginx日志到此结束!