GoAccess 分析Nginx 日志

为了查看本站点的健康状况以及用户访问情况,就需要定期的分析服务器的 access 日志。这时候可以适合引入轻量级的日志分析工具,例如 GoAccess ,其使用简单且分析效果较好

GoAccess 分析Nginx 日志

Nginx


GoAccess 介绍

GoAccess被设计成一个基于终端的快速日志分析器。它的核心思想是实时快速分析和查看Web服务器统计信息,而无需使用您的浏览器

虽然终端输出是默认输出,但是它能够生成完整的,自包含的实时HTML报告,非常适合分析,监控和数据可视化,以及JSONCSV报告

主要功能

  • 用C语言编写的,快速,实时,毫秒/秒更新
  • GoAccess是用C语言编写的。要运行它,你只需要将ncurses作为依赖项
  • 几乎所有的Web日志格式 (Apache,Nginx,Amazon S3,Elastic Load Balancing,CloudFront等)
  • 只需要设置日志格式并根据您的日志运行它
  • 漂亮的终端和自定义仪表盘
  • GoAccess能够通过磁盘上的B + Tree数据库逐步处理日志
  • 需要最少的配置
  • 配色方案可定制

GoAccess演示地址

https://k.i4t.com/go.html


依赖包安装

#首先先安装依赖包,需要配置epel  (根据系统进行依赖安装)
#centos6
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo


#centos7
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo


#安装依赖包
yum -y install glib2 glib2-devel ncurses ncurses-devel GeoIP GeoIP-devel GeoIP-data 

版本使用1.3 发行时间2018-11-23

安装Goaccess 由于网络问题,官方下载的比较慢,这里我提供了一套下载地址

#abcdocker提供软件包下载
wget http://down.i4t.com/goaccess-1.3.tar.gz
tar xf goaccess-1.3.tar.gz
cd goaccess-1.3
./configure --prefix=/usr/local/goaccess1.3 --enable-utf8 --enable-geoip=legacy --with-openssl
make && make install

#官方下载
wget https://tar.goaccess.io/goaccess-1.3.tar.gz
tar xf goaccess-1.3.tar.gz
cd goaccess-1.3
./configure --prefix=/usr/local/goaccess1.3 --enable-utf8 --enable-geoip=legacy --with-openssl
make && make install


#设置软链
ln -s /usr/local/goaccess1.3 /usr/local/goaccess

以上二选一


配置GoAccess

安装我的文档安装完goaccess之后,目录在/usr/local/goaccess

接下来我们要对goaccess做一些配置

1.配置环境变量
echo "export PATH=/usr/local/goaccess/bin:$PATH" >>/etc/profile
source /etc/profile

2.配置文件修改
[root@abcdocker ~]# vim /usr/local/goaccess/etc/goaccess/goaccess.conf
time-format %H:%M:%S
date-format %d/%b/%Y
log-format %h %^[%d:%t %^] "%r" %s %b "%R" "%u"


3.配置文件参数说明
%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)。

Nginx配置

为了提供Goaccess分析精准度,需要配置Nginx的log_format

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                       '$status $body_bytes_sent "$http_cookie" "$http_referer" '
                       '"$http_user_agent" "$http_x_forwarded_for"';
access_log  logs/access_web.log  main;

#在http标签配置的,默认就有开启就ok

GoAccess 控制台模式

goaccess有控制台模式和html静态页面模式,这里先介绍一下控制台模式

goaccess -a -d -f logs/access_web.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    移动到最后一个模块底部

image_1de4ef39f1ercbj4uk71opi1csup.png-783.3kB

image_1de4eidar1mjhe6ffoaa2rijh26.png-821.2kB


GoAccess HTML模式

goaccess -a -d -f /usr/local/nginx/logs/access_web.log -p /usr/local/goaccess/etc/goaccess/goaccess.conf -o /usr/local/nginx/html/image/go-access.html

#-o 输出html地址

image_1de4fburcvsj119o1tsm1kc7v4d2j.png-54.2kB

image_1de4fhb5t11jp1p2t1ub1cne10ae3g.png-680kB

GoAccess Daemonize

GoAccess可以使用daemonize模式运行,并提供创建实时HTML的功能,只需要在启动命令后添加--real-time-html--daemonize参数即可

[root@abcdocker ~]# goaccess -a -d -f /usr/local/nginx/logs/access_web.log -p /usr/local/goaccess/etc/goaccess/goaccess.conf -o /usr/local/nginx/html/image/go-access.html --real-time-html --daemonize
Daemonized GoAccess: 25584

#监听端口7890
[root@abcdocker ~]# netstat -lntup|grep 7890
tcp        0      0 0.0.0.0:7890            0.0.0.0:*               LISTEN      25584/goaccess

启动GoAccess后,使用Web socket建立长连接,监听7890端口,还可以使用--port指定端口号

网站开启了HTTPS功能,就需要GoAccess启用openssl,在配置文件goaccess.conf中配置ssl-certssl-key来支持openssl,还需要将ws-url指定为https://i4t.com


GoAccess Crontab

在某些常见下,没有这样的实时性要求,可采用crontab机制实现定时更新HTML报表

*/45 * * * * goaccess -a -d -f /usr/local/nginx/logs/access_web.log -p /usr/local/goaccess/etc/goaccess/goaccess.conf -o /usr/local/nginx/html/k8s/k8s.abcdocker.com/go.html

定时任务设置每45分钟刷新一次

当Nginx日志被切割后,可以使用--keep-db-file进行分析新产生的日志

GoAccess演示地址

https://k.i4t.com/go.html

45分钟刷新一次

image_1de4j2ced1k8o12o0efj1h8l1gr43t.png-392.3kB

「点点赞赏,手留余香」

1人已赞赏

  • なるほど

    ¥2
Grafana
0 条回复 A 作者 M 管理员
    所有的伟大,都源于一个勇敢的开始!
欢迎您,新朋友,感谢参与互动!欢迎您 {{author}},您在本站有{{commentsCount}}条评论
网站搭建
加入我们
  • 站长QQ:381493251一键联系
  • abcdocker 微信公众号
    abcdocker QQ群