日志分析工具之goAccess

在此推荐一款分析日志的工具,方便我们日常对于网站的访问状况有一个较为清晰的了解

 

 

在 Linux 操作系统下,分析日志文件是一件非常头疼的事情,它记录了很多日志,对于大多数的新手及系统管理员不知该如何下手进行分析,除非你在分析日志方面有足够的经验积累,那就是 Linux 系统高手了。

而在 Linux 操作系统中也有许多分析日志工具,GoAccess 是允许用户轻松分析 Web 服务器日志的工具之一,在这篇文章中我们将详细介绍 GoAcccess 工具。


什么是 GoAccess?

GoAccess 是一个开源的实时 Web 日志分析器交互式查看器,可以在 *nix 系统中的终端运行或通过浏览器进行访问,它需要的依赖少,采用 C 语言编写,只需 ncurses,支持 Apache、Nginx 和 Lighttpd 日志,为需要动态可视化服务器报告的系统管理员提供了高效的具有价值的 HTTP 统计信息

为什么要用 GoAccess?

GoAccess 可解析指定的 Web 日志文件并将数据输出至终端和浏览器,基于终端的快速日志分析器,其主要还是实时快速分析并查看 Web 服务器上的统计信息,无需使用浏览器,默认是在终端输出,能够将完整的实时 HTML 报告以及 JSON 和 CSV 报告。

GoAccess 支持任何自定义日志格式,Apache/Nginx中的组合日志格式:XLF/ELF,Apache 中的通用日志格式:CLF,但并不限于此。

GoAccess 的功能

  • 完全实时: 所有面板和指标时间安排在终端输出以每 200 ms 更新一次,在 HTML输出上每秒更新一次的频率;
  • 支持几乎所有 Web 日志格式: GoAccess 允许任何自定义日志格式字符串。预定义的选项包括Apache,Nginx,Amazon S3,Elastic Load Balancing,CloudFront等
  • 支持跟踪应用程序响应时间: 跟踪处理请求所需的时间,当网站运行缓慢时,其效果非常实用;
  • 支持增量日志处理: 可通过磁盘 B + Tree 数据库增量处理日志;
  • 所需配置最少: 可以仅对访问日志文件运行它,选择日志格式后让 GoAccess 解析访问日志并向您进行显示统计信息;
  • 访问者: 按小时或日期确定运行最慢请求的点击数、访问者、带宽和指标等;
  • 每个虚拟主机的指标: 具有一个面板,显示哪个虚拟主机正在消耗大多数 Web 服务器资源;
  • 可自定义配色: 可根据自己的颜色进行调整,通过终端或简单的在 HTML 输出上应用样式表;
  • 仅一个依赖: 用 C 语言编写,运行它,只需将 ncurses 作为依赖项即可;
  • 对大型数据集的支持: 为大型数据集提供了一个磁盘 B + Tree 存储,无法容纳所有内存;
  • Docker支持: 能够从上游构建GoAccess的Docker映像。

GoAccess 默认所支持的 Web 日志格式

  • Amazon CloudFront:亚马逊 CloudFront Web 分布式系统
  • AWSS3:亚马逊简单存储服务 (S3)
  • AWSELB:AWS 弹性负载平衡
  • COMBINED:组合日志格式(XLF/ELF) Apache | Nginx
  • COMMON:通用日志格式(CLF) Apache
  • Google Cloud Storage:谷歌云存储
  • Apache virtual hosts:Apache 虚拟主机
  • Squid Native Format:Squid 原生格式
  • W3C:W3C (IIS)格式

GoAccess 日期格式

  • time-format: 参数time-format变量后需要跟一个空格,指定日志格式日期。该日期包含常规字符特殊格式说明符的任意组合。以百分比(%)符号开头。可参考:man strftime%T%H:%M:%S

注意:以毫秒为单位的时间戳,则%f必须将其用作时间格式。

  • date-format: 参数date-format变量后需要跟一个空格,指定日志格式日期。该日期包含常规字符特殊格式说明符的任意组合。以百分比(%)符号开头。可参考:man strftime

注意:时间戳以微秒为单位,则%f必须用作日期格式。

  • 日志格式: 日志格式变量后需要跟一个空格\t制表符分隔符,指定日志格式字符串。

特殊字符所代表的含义

  • %x: 与时间格式和日期格式变量匹配的日期和时间字段。当时间戳而不是将日期和时间放在两个单独的变量中时,使用此方法;
  • %t: 与时间格式变量匹配的时间字段;
  • %d: 匹配日期格式变量的日期字段;
  • %v: 根据规范名称设置的服务器名称(服务器块或虚拟主机);
  • %e: 请求文档时,由 HTTP 验证决定的用户 ID;
  • %h: 主机(客户端IP地址,IPv4 或 IPv6)
  • %r: 客户端的请求行。这就请求的特定分隔符(单引号,双引号等)是可解析的。否则需使用特殊的格式说明符,例如:%m%U%q%H解析各个字段,可使用%r获取完整的请求,也可使用%m%U%q%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)。

GoAccess 三个存储选项

  • 默认哈希表:内存存储提供了更好的性能,其缺点是将数据集的大小限制在可用物理内存的数量。默认情况下,GoAccess 将使用内存中的哈希表。数据集如果放在内存中,执行会很好。因为它具有很好的内存使用和相当好的性能;

  • Tokyo Cabinet 磁盘B+树:使用此存储方法主要针对无法在内存中容纳所有内容的大型数据集。B+树数据库比任何哈希数据库都慢,因为它的数据必须提交到磁盘。从而使用 SSD 可以极大地提高性能。如果需要数据持久性以及接下来要快速加载的统计数据,可使用该存储方法;

  • Tokyo Cabinet 内存哈希表:它是默认哈希表的替代方案,使用泛型类型,针对内存和速度而言,它的性能是平均的;

 

 一.安装

官网: https://goaccess.io/download

 

源码安装:

1.	wget http://tar.goaccess.io/goaccess-0.8.1.tar.gz
2.	tar -xzvf goaccess-0.8.1.tar.gz
3.	cd goaccess-0.8.1/
4.	./configure --enable-geoip --enable-utf8
5.	make && make install

  

软件包管理器安装:

//Debian/Ubuntu
apt-get install goaccess

//Centos/Fedora
yum install goaccess

//osx
brew install goaccess

  

二. 使用

log_formats 选择:

 

使用GoAccess生成html报告:

goaccess -f access.log -a > report.html

  

生成json报告:

goaccess -f access.log -a -d -o json > report.json

  

CSV:

goaccess -f access.log -o csv > report.csv

  

由于nginx会自动压缩日志,以下命令可以直接分析压缩后的日志:

zcat access.log.*.gz | goaccess
#或者
zcat -f access.log* | goaccess

  

支持各种管道:

sed -n '/11\/Dec\/2014/,$ p' access.log | goaccess -a

  

想分析下百度/google对你网站爬了些啥内容?Easy:

grep -E "(google|baidu)"access.log | goaccess -a

  

示例:

goaccess -f access_test.com.log-20211209 --log-format=COMBINED -o test.html
    -f: 指定日志路径
    -l: 发送所有debug信息到该文件
    -p: 指定配置文件
    -o: 输出文件格式 (html,json,csv)
    -d: 开启ip解析到文件(html,json)


goaccess --time-format="%T" --date-format="%d/%b/%Y" --log-format='Host[%v] %h - %^ [%d:%t %^] "%r" %s %b "%R" "%u" "%^"' -f access_proxy.com_80.log -o proxy2.html --real-time-html
--real-time-html : 指定实时输出日志文件access_proxy_80.log 追加到proxy2.html

可以使用pm2进程管理工具进行管理,打造一个可实时查看某个站点的访问情况
 pm2 start --name="yourls-log" goaccess -- -f /data/log/nginx/access_bi.inner.tt2kj.com_80.log --log-format=COMBINED -o /data/logs/yourls/index.html --real-time-html
  start:启动一个进程
--name: 指定进程的名称
后面是对应的名称,注意: 命令与参数之间需要使用 “--” 进行分割,两侧都需要有空格

 

实用:

在某些时候, 我们需要自定义nginx的记录格式, 使用默认的方式就无法正确的解析出nginx的日志内容, 可以借助官方提供的nginx2goaccess脚本进行格式转化, 脚本文件

相关脚本:Exports the Cloudflare ELS log file and transforms the format to be consumed by goaccess (github.com)

Usage: ./nginx2goaccess.sh '<log_format>'

./nginx2goaccess.sh '$remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent"'


Result:
- Generated goaccess config:

time-format %T
date-format %d/%b/%Y
log_format %h - %^ [%d:%t %^] "%r" %s %b "%R" "%u"

 

 

 

 

 

 

 

 

 

常见错误:
1)

 

 2)生成文件发生错误

 

参考:     http://www.cnblogs.com/taosim/articles/4225557.html

一款开源且具有交互视图界面的实时 Web 日志分析工具! - 掘金 (juejin.cn)

 

posted @ 2018-06-11 14:34  X-Wolf  阅读(2044)  评论(0编辑  收藏  举报