Linux------------GoAccess-可视化WEB日志分析工具

Posted wangchengshi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux------------GoAccess-可视化WEB日志分析工具相关的知识,希望对你有一定的参考价值。

官网: https://www.goaccess.cc/?mod=man

一、GoAccess简介

GoAccess 是一款开源(MIT许可证)的且具有交互视图界面的实时 Web 日志分析工具,通过你的 Web 浏览器或者 *nix 系统下的终端程序即可访问。

能为系统管理员提供快速且有价值的 HTTP 统计,并以在线可视化服务器的方式呈现。 GoAccess 解析指定的 Web 日志文件并将统计结果输出到 X 终端。功能如下:

  • 通用统计: 此面板展示了几个主要指标,比如:有效和无效请求的数量,分析这些数据所花费的时间,独立访客的情况,请求的文件,静态文件(CSS, ICO, JPG 等)的完整URL,404错误,被解析的日志文件的大小以及消耗的带宽。
  • 独立访客: 此面板按照日期展示了访问次数,独立访客数,以及累计消耗的带宽等指标。具有相同IP,相同访问时间,相同的 UserAgent 的 HTTP 请求将会被识别为独立访客。默认情况下包含了网络爬虫。
    您也可以选择使用 --date-spec=hr 参数将按照日期分析修改为按照小时,例如:05/Jun/2016:16 。这对于希望在小时级别去跟踪每日流量非常有帮助。
  • 请求的文件: 此面板展示您服务器上被请求次数最多的文件。包含访问次数,独立访客数,百分比,累计消耗带宽,使用的协议,请求方式。
    请求的静态文件: 列出请求频率最高的静态文件类型,例如: JPG, CSS, SWF, JS, GIF, 和 PNG , 以及和上一个面板一样的其他指标。 另外静态文件可以被添加到配置文件中。
    404 或者文件未找到: 展示内容与之前的面板类似,但是其数据包含了所有未找到的页面,以及俗称的 404 状态码。
  • 主机: 此面板展示主机自身的详细信息。能够很好的发现不怀好意的爬虫以及识别出是谁吃掉了你的带宽。
    扩展面板将向您展示更多信息,比如主机的反向DNS解析结果,主机所在国家和城市。如果开启了 参数,选择想查看的 IP 地址并按回车,将会显示 UserAgent 列表。
  • 操作系统: 此面板将显示主机使用的操作系统的信息。GoAccess 将尽可能尝试为每一款操作系统提供详细的信息。
  • 浏览器: 此面板将显示来访主机使用的浏览器信息。GoAccess 将尽可能尝试为每一款浏览器提供详细的信息。
  • 访问次数: 此面板按小时报告。因此将显示24个数据点,每一个均对应每一天的某一个小时。
    使用 --hour-spec=min 参数可以设定为按每十分钟报告,并将以 16:4 的格式显示时间。这对发现服务器的峰值访问时段很有帮助。
  • 虚拟主机: 此面板将显示从访问日志中解析出来的不同的虚拟主机的情况。此面板仅在日志格式中启用了 %v 参数时显示。
  • 来路URL: 如果问题主机通过其他的资源访问了你的站点,以及通过从其他主机上的链接或者跳转到你的站点,则这些来路URL将会被显示在此面板。可以在配置文件中通过 --ignore-panel 开启此功能。(默认关闭)
  • 来路站点: 此面板将仅显示主机的部分,而不是完整的URL。
  • 关键字: 报告支持用在谷歌搜索,谷歌缓存,谷歌翻译上使用关键字。目前仅支持通过 HTTP 使用谷歌搜索。 可以在配置文件中通过 --ignore-panel 开启此功能。(默认关闭)
  • 地理位置: 根据 IP 地址判断地理位置。统计数据按照大洲和国家分组。需要地理位置模块的支持。
  • HTTP 状态码: 以数字表示的 HTTP 请求的状态编码。
  • 远程用户(HTTP验证) 通过 HTTP 验证来确定访问文档的权限。如果文档没有被密码保护起来,这部分将会显示为 “-”。此面板默认为开启,除非在日志格式变量中设置了参数 %e 。
    注意: 如果配置了可选项,所有面板将显示处理请求的平均时间消耗。

1.1 存储方式

GoAccess 支持三种类型的存储方式。请根据你的需要和系统环境进行选择。

  • 默认哈希表
    内存哈希表可以提供较好的性能,缺点是数据集的大小受限于物理内存的大小。GoAccess 默认使用内存哈希表。如果你的内存可以装下你的数据集,那么这种模式的表现非常棒。此模式具有非常好的内存利用率和性能表现。

  • Tokyo Cabinet 磁盘 B+ 树
    使用这种模式来处理巨大的数据集,大到不可能在内存中完成任务。当数据提交到磁盘以后,B+树数据库比任何一种哈希数据库都要慢。但是,使用 SSD 可以极大的提高性能。往后您可能需要快速载入保存的数据,那么这种方式就可以被使用。

  • Tokyo Cabinet 内存哈希表
    作为默认哈希表的替换方案。因为使用通用类型在内存表现以及速度方面都很平均。

1.2 编译配置参数

GoAccess 拥有多个配置选项。获取完整的最新配置选项列表,请运行:./configure --help

--enable-debug
使用调试标志编译且关闭编译器优化。
--enable-utf8
宽字符支持。依赖 Ncursesw 模块。
--enable-geoip=<legacy|mmdb>
地理位置支持。依赖 MaxMind GeoIP 模块。 legacy 将使用原始 GeoIP 数据库。 mmdb 将使用增强版 GeoIP2 数据库。
--enable-tcb=<memhash|btree>
Tokyo Cabinet 存储支持。 memhash 将使用 Tokyo Cabinet 的内存哈希数据库。btree 将使用 Tokyo Cabinet 的磁盘 B+Tree 数据库。
--disable-zlib
禁止在 B+Tree 数据库上使用 zlib 压缩。
--disable-bzip
禁止在 B+Tree 数据库上使用 bzip2 压缩。
--with-getline
使用动态扩展行缓冲区用来解析完整的行请求,否则将使用固定大小(4096)的缓冲区。
--with-openssl
使 GoAccess 与其 WebSocket 服务器之间的通信能够支持 OpenSSL。

1.2 使用选项

下面的选项可以通过命令行使用,如果是长选项则通过配置文件。

1.21 日志/日期/时间 格式

  • -time-format
    参数 time-format 后跟随一个空格符,指定日志的时间格式,包含普通字符与特殊格式说明符的任意组合。他们都由百分号 (%)开始。参考 man strftime。 %T 或者 %H:%M:%S.

  • -date-format
    参数 date-format 后跟随一个空格符,指定日志的日期格式,包含普通字符与特殊格式说明符的任意组合。他们都由百分号 (%)开始。参考 man strftime

  • -log-format
    参数 log-format 后跟随一个空格符或者制表分隔符( ),用于指定日志字符串格式。

另外可以指定原始 日志/日期/时间 格式,简单来说,下表中的预定义日志格式名称可以用作 日志/日期/时间 格式的变量。GoAccess 可以处理在一个变量中处理一个预定义名称,而在另一变量中处理另外一个预定义名称。

COMBINED     | 联合日志格式
VCOMBINED    | 支持虚拟主机的联合日志格式
COMMON       | 通用日志格式
VCOMMON      | 支持虚拟主机的通用日志格式
W3C          | W3C 扩展日志格式
SQUID        | Native Squid 日志格式
CLOUDFRONT   | 亚马逊 CloudFront Web 分布式系统
CLOUDSTORAGE | 谷歌云存储
AWSELB       | 亚马逊弹性负载均衡
AWSS3        | 亚马逊简单存储服务 (S3)

注意: 一般来说,需要在包含空格、逗号、管道符、引号、/、括号的值的周围引用引号。内部引号必须进行转义处理。

注意: 使用管道传送数据给 GoAccess 时不会提示 日志/日期/时间 配置对话框,你需要在配置文件或者命令行中提前定义。

1.22 用户交互选项

-c --config-dialog
在程序开始运行时显示 日志/日期 配置窗口。

-i --hl-header
颜色高亮活动面板。

-m --with-mouse
在主仪表盘面板使能鼠标支持。

--color=<fg:bg[attrs, PANEL>
使用终端输出时指定自定义颜色。

颜色语法:

DEFINITION space/tab colorFG#:colorBG# [attributes,PANEL]
FG# = 前景色 [-1...255] (-1 = 默认配色)
BG# = 背景色 [-1...255] (-1 = 默认配色)

使用如下方式应用颜色属性也是允许的(多个属性使用逗号分隔),例如: bold,underline,normal,reverse,blink

如果喜欢,可以为同一个指标在不同面板设置不同颜色,比如一个指标在页面请求面板使用颜色A,同时在浏览器面板则显示颜色B。

COLOR_MTRC_HITS
COLOR_MTRC_VISITORS
COLOR_MTRC_DATA
COLOR_MTRC_BW
COLOR_MTRC_AVGTS
COLOR_MTRC_CUMTS
COLOR_MTRC_MAXTS
COLOR_MTRC_PROT
COLOR_MTRC_MTHD
COLOR_MTRC_HITS_PERC
COLOR_MTRC_HITS_PERC_MAX
COLOR_MTRC_VISITORS_PERC
COLOR_MTRC_VISITORS_PERC_MAX
COLOR_PANEL_COLS
COLOR_BARS
COLOR_ERROR
COLOR_SELECTED
COLOR_PANEL_ACTIVE
COLOR_PANEL_HEADER
COLOR_PANEL_DESC
COLOR_OVERALL_LBLS
COLOR_OVERALL_VALS
COLOR_OVERALL_PATH
COLOR_ACTIVE_LABEL
COLOR_BG
COLOR_DEFAULT
COLOR_PROGRESS
请查阅配置文件中颜色方案示例。

--color-scheme <1|2|3>
选择终端配色方案。1 为单色方案。2 为绿色方案以及 3 为 Monokai 方案(需终端支持 256 色)。

--crawlers-only
仅解析和显示爬虫(机器人)。

--html-custom-css=<path.css>
在 HTML 报告中按照指定的自定义 CSS 文件路径加载 CSS 样式。

--html-custom-js=<path.js>
在 HTML 报告中按照指定的自定义 JS 文件路径加载 JS 代码。

--html-report-title=<title>
设定HTML报告页面的标题和头部内容。

--html-prefs=
设定 HTML 报告的默认参数。通过提交一个有效的包含相关参数的 JSON 对象来设置。允许用户为每一个面板单独设置。参考如下示例。

--html-prefs=‘{"theme":"bright","perPage":5,"layout":"horizontal","showTables":true,"visitors":{"plot":{"chartType":"bar"}}}‘
注意: 提交的 JSON 对象必须保存在一行 JSON 字符串中。
--json-pretty-print
使用制表符和新行格式化 JSON 输出。

--max-items=
设置每个面板最多可以显示的单元个数。取值范围是 1 到 n。
注意: 仅 CSV 和 JSON 格式的报告允许大于默认值 366 个单元每面板(或者 50 个在实时 HTML 报告中)。

--no-color
关闭颜色输出。此选项在不支持色彩的终端上为默认选项。

--no-column-names
在终端输出中不显示列名。默认在每一个面板的每一个有效指标都会显示列名。

--no-csv-summary
在 CSV 格式输出中禁止汇总指标。

--no-progress
解析日志时不显示进度指标[总请求数/每秒请求数]。

--no-tab-scroll
禁止通过 TAB 键滚动面板或者使用数字键选择面板。

--no-html-last-updated
在生成的 HTML 报告中不显示“最近更新”。

1.23 服务器选项

--addr=


将服务器绑定到指定 IP 地址。默认绑定到 0.0.0.0 。

通常无需指定,除非您希望将服务器绑定到主机上的其他地址。

--daemonize
使 GoAccess 作为守护程序运行(仅在 --real-time-html 开启下有效)。

--origin=
E在 WebSocket 握手中确保客户端发送指定的源头。且指定的源应与浏览器发送源头字段完全相同。例如:--origin=http://goaccess.io

--port=
指定服务使用的端口。GoAccess 默认使用端口 7890 作为 WebSocket 服务器。请确保此端口可用。

--real-time-html
使能实时 HTML 报告。

--ws-url=<[scheme://]url[:port]>
此 URL 用于 WebSocket 服务器的回应。用于客户端侧的 WebSocket 构建器。

同时可以选择指定 WebSocket 的 URI 协议,比如:ws:// 用于非加密连接, 以及 wss:// 用于加密连接。示例:wss://goaccess.io

如果 GoAccess 运行在代理服务器的后面,您需要通过在主机名后跟随冒号加端口号的方式让客户端连接到另外一个不同的端口。示例:goaccess.io:9999

默认情况下,会尝试去连接生成报告的主机名。如果 GoAccess 运行在一台远程服务器上,则远程主机名也应该在 URL 中指定。当然,必须保证主机是有效的。

--fifo-in=<path/file>
创建一个管道(先入先出)从指定的路径/文件读取数据。

--fifo-out=<path/file>
创建一个管道(先入先出)往指定的路径/文件写入数据。

--ssl-cert=<path/cert.crt>
指定 TLS/SSL 证书的路径。使 GoAccess 支持 TLS/SSL,需要使用参数 --ssl-cert 和 --ssl-key。
仅在使用了参数 --with-openssl 时有效

--ssl-key=<path/priv.key>
指定 TLS/SSL 私钥的路径。使 GoAccess 支持 TLS/SSL,需要使用参数 --ssl-cert 和 --ssl-key。
仅在使用了参数 --with-openssl 时有效

1.24 FILE OPTIONS

-f --log-file=
指定输入日志文件的路径。如果在配置文件中指定了输入文件,则其优先级要高于在命令行中通过 -f 参数指定。

-l --log-debug=
发送所有调试信息到指定文件。需要指定配置选项 --enable-debug

-p --config-file=
指定使用自定义配置文件。如果设置了此参数,其优先级将高于全局配置文件(如果有)。

--invalid-requests=
记录无效请求到指定文件。

--no-global-config
禁止加载全局配置文件。可能的目录应该是 /usr/etc/, /etc/ 或者 /usr/local/etc/, 除非在运行 ./configure 时指定了 --sysconfdir=/dir 。

1.25 解析选项

-a --agent-list
开启 UserAgent 列表。开启后会降低解析速度。

-d --with-output-resolver
输出 HTML 或者 JSON 报告时开启 IP 解析。

-e --exclude-ip <IP|IP-range>
排除一个 IPv4 或者 IPv6 地址。 使用连接符表示 IP 段(开始-结束)。

exclude-ip 127.0.0.1
exclude-ip 192.168.0.1-192.168.0.100
exclude-ip ::1
exclude-ip 0:0:0:0:0:ffff:808:804-0:0:0:0:0:ffff:808:808
-H --http-protocol=<yes|no>
HTTP 请求协议开关。将创建一个请求字段包含请求协议+真实请求。

-M --http-method=<yes|no>
HTTP 请求方法开关。将创建一个请求字段包含请求方法+真实请求。

-o --output=<json|csv>
将给定文件重定向到标准输出,通过后缀名决定输出格式:
/path/file.csv - Comma-separated values (CSV)
/path/file.json - JSON (javascript Object Notation)
/path/file.html - HTML
-q --no-query-string
忽略请求的查询字符串。即: www.google.com/page.htm?query => www.google.com/page.htm
注意: 去掉查询字符串将极大降低内存消耗,特别对带时间戳的请求。

-r --no-term-resolver
在终端输出时禁止 IP 解析。

--444-as-404
将非标准状态 444 作为 404 处理。

--4xx-to-unique-count
将 4xx 客户端错误数加到独立访客数中。

--all-static-files
统计包含查询字符串的静态文件。

--date-spec=<date|hr>
设置日期的显示格式,一种是标准日期格式(默认),一种是日期后附加小时的格式。
仅在访客面板有效。对于在小时级别分析访客数据很有帮助。显示格式示例:18/Dec/2010:19

--double-decode
解码双重编码的值。包括 UserAgent,Request 以及 Referer。

--enable-panel=
开启指定面板。面板列表:

VISITORS
REQUESTS
REQUESTS_STATIC
NOT_FOUND
HOSTS
OS
BROWSERS
VISIT_TIMES
VIRTUAL_HOSTS
REFERRERS
REFERRING_SITES
KEYPHRASES
STATUS_CODES
REMOTE_USER
GEO_LOCATION
--hour-spec=<hour|min>
设定时间的显示格式,一种是标准时间格式(默认),一种是时间后附加分钟数(每十分钟)的格式。
用于时间分布面板。对于在特定时间段分析流量峰值很有用处。

--ignore-crawlers
忽略爬虫。

--ignore-panel=
忽略指定面板。面板列表:

VISITORS
REQUESTS
REQUESTS_STATIC
NOT_FOUND
HOSTS
OS
BROWSERS
VISIT_TIMES
VIRTUAL_HOSTS
REFERRERS
REFERRING_SITES
KEYPHRASES
STATUS_CODES
REMOTE_USER
GEO_LOCATION
--ignore-referer=
忽略被统计的来路。支持通配符。例如: .domain.com ww?.domain.

--ignore-status=
忽略解析或者显示一个或者多个状态码。如果有多个状态码,使用此参数每次指定一个。

--num-tests=
设定测试行数,即使用给定的 日志/日期/时间 格式测试访问日志。默认值为 10 行。如果设置为 0 ,解析器不会做任何测试而是直接解析整个文件。如果在达到 number 之前,有一行匹配上了给定的 日志/日期/时间 格式,则解析器会认为日志文件是有效的,否则 GoAccess 会返回 EXIT_FAILURE 并显示相关的错误信息。

--process-and-exit
解析日志,且退出时不输出数据。主要用于仅希望往磁盘数据库中添加数据而无需输出报告时使用。

--real-os
显示真实的操作系统名称。例如: Windows XP, Snow Leopard.

--sort-panel=<PANEL,FIELD,ORDER>
S在初始化载入是对面板进行排序。排序选项使用逗号分隔。选项使用这样的格式:PANEL,METRIC,ORDER
可用指标

BY_HITS 按访问量
BY_VISITORS 按独立访客数
BY_DATA 按数据
BY_BW 按带宽
BY_AVGTS 按平均处理时间
BY_CUMTS 按累积处理时间
BY_MAXTS 按最大处理时间
BY_PROT 按 HTTP 协议
BY_MTHD 按 HTTP 方法
可用排序
ASC
DESC
--static-file
添加静态文件后缀名。例如:.mp3。 后缀名区分大小写。

1.26 地理位置选项

-g --std-geoip
标准 GeoIP 数据库,低内存占用。

--geoip-database
设定 GeoIP 数据库路径。例如:GeoLiteCity.dat。需要从 maxmind.com 上下载到本地。IPv4 和 IPv6 均可用支持。注意:--geoip-city-data 是 --geoip-database 的别名。
注意: 如果使用 GeoIP2,您需要从 MaxMind 下载 城市/国家 数据库,并通过 --geoip-database 设定。

1.27 其他选项

-h --help
查看帮助信息。

-V --version
显示版本信息并退出。

-s --storage
显示当前存储方法。比如:B+ Tree, Hash。

--dcf
显示默认配置文件的路径,如果没有使用 -p 指定。

1.28 磁盘存储选项

--keep-db-files
在磁盘上保存已解析的数据。如果数据库文件存在,则文件将被覆盖。此参数应用于第一个数据集。如果设置此参数为 false 则在退出程序时将删除所有数据库。示例见下文。

仅在设置了 --enable-tcb=btree 时有效。

--load-from-disk
从磁盘载入之前存储过的数据。如果仅读取已保存的数据,则需要退出数据库文件。参考 keep-db-files 即相关示例见下文。

仅在设置了 --enable-tcb=btree 时有效。

--db-path


设置磁盘数据库文件的存储路径。默认值为 /tmp 目录。

仅在设置了 --enable-tcb=btree 时有效。

--xmmap
设置附加内存映射的大小,单位为字节。默认值为0。

仅在设置了 --enable-tcb=btree 时有效。

--cache-lcnum
指定被缓存的最大叶子节点数目。如果取值小于 0,则使用默认值。默认值为 1024。设定较大的值以获得较快的处理速度,同时会增加内存消耗。较小的值则会降低内存消耗。

仅在设置了 --enable-tcb=btree 时有效。

--cache-ncnum
指定被缓存的最大非叶子节点数目。如果取值小于 0,则使用默认值。默认值为 512。

仅在设置了 --enable-tcb=btree 时有效。

--tune-lmemb
指定每一个叶子页面的成员数量。如果取值小于 0,则使用默认值。默认值为 128。

仅在设置了 --enable-tcb=btree 时有效。

--tune-nmemb
指定每一个非叶子页面的成员数量。如果取值小于 0,则使用默认值。默认值为 256。

仅在设置了 --enable-tcb=btree 时有效。

--tune-bnum
指定每个 Bucket 组的元素数量。如果取值小于 0,则使用默认值。默认值为 32749。建议 Bucket 组大小的取值为已保存页面数的 1 到 4 倍。

仅在设置了 --enable-tcb=btree 时有效。

--compression <zlib|bz2>
指定页面采用的压缩编码(ZLIB|BZ2)。

仅在设置了 --enable-tcb=btree 时有效。

1.3 自定义日志/日期格式

GoAccess 可以解析虚拟的任意 Web 日志格式。

预定义的选项包括:通用日志格式,联合日志格式,包含虚拟主机,W3C 格式以及亚马逊 CloudFront(分布式下载)。

GoAccess 允许任意的自定义格式字符串。

有两种方法配置日志格式。最简单的方式是运行 GoAccess 时使用 -c 显示一个配置窗口。但是这种方式不是永久有效的,因此你需要在配置文件中设定格式。

配置文件位于:%sysconfdir%/goaccess.conf 或者 ~/.goaccessrc

注意: %sysconfdir% 可能是 /etc/, /usr/etc/ 或者 /usr/local/etc/

  • time-format 参数 time-format 后跟随一个空格符,指定日志的时间格式,包含普通字符与特殊格式说明符的任意组合。他们都由百分号 (%)开始。参考 man strftime。 %T 或者 %H:%M:%S.

注意: 如果给定的时间戳以微秒计算,则必须在 time-format 中使用参数 %f 。

  • date-format 参数 date-format 后跟随一个空格符,指定日志的日期格式,包含普通字符与特殊格式说明符的任意组合。他们都由百分号 (%)开始。参考 man strftime

注意: 如果给定的时间戳以微秒计算,则必须在 time-format 中使用参数 %f 。

  • log-format 参数 log-format 后跟随一个空格符或者制表分隔符( ),用于指定日志字符串格式。
特殊格式说明符
%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)。

注意:针对 XFF, GoAccess 使用了一个特殊符号,即由一个波浪号+主机说明符构成,然后紧跟由大括号封装起来的 XFF 限定字段(例:~h{,"})。
举例如下, ~h{," } 用于解析 "11.25.11.53, 17.68.33.17" 字段由一对双引号,一个逗号和一个空格限定。
注意:为了得到平均,累计,最大处理时间,将需要开始在 Web 服务器中记录响应次数。在 nginx 中可以添加 $request_time 到日志格式中,或者 %D 在 Apache 中。

1.31 自定义示例

nginx日志格式

log_format  main  ‘$remote_addr - $remote_user [$time_local] "$request" ‘
                  ‘$status $body_bytes_sent "$http_referer" ‘
                  ‘"$http_user_agent" "$http_x_forwarded_for" $upstream_addr $request_time‘;

goccess配置文件

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

导入访问日志
goaccess -f /var/log/all.log --log-format=COMBINED -a -o /usr/local/nginx/html/index.html

配置nginx域名访问goaccess

vim /usr/local/nginx/conf/goaccess.conf
server  { 
        listen  7890;
        server_name zz.goo.com;
        location / {
          root  /usr/local/nginx/html;
          try_files  $uri  $uri/  /index.html;
       }
            proxy_set_header Host $http_host;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
}

1.4 使用示例

1.41 不同的输出

输出到终端且生成一个可交互的报告:
 # goaccess access.log

生成一份 HTML 报告:
 # goaccess access.log -a -o report.html

生成一份 JSON 报告:
 # goaccess access.log -a -d -o report.json

生成一份 CSV 文件:
 # goaccess access.log --no-csv-summary -o report.csv

GoAccess 非常灵活,支持实时解析和过滤。例如:需要通过监控实时日志来快速诊断问题:
 # tail -f access.log | goaccess -

更厉害的是,还可以使用 tail -f 和一个模式匹配工具一起工作,比如: grep, awk, sed 等等
 # tail -f access.log | grep -i --line-buffered ‘firefox‘ | goaccess --log-format=COMBINED -

又或者可以在管道打开的状态下从头开始解析文件,并同时应用一个过滤器:
 # tail -f -n +0 access.log | grep --line-buffered ‘Firefox‘ | goaccess -o out.html --real-time-html -

1.42多日志文件

有多种方法可以实现让 GoAccess 同时解析多个日志文件。最简单的方法是直接将多个文件通过命令行传给 GoAccess:
 # goaccess access.log access.log.1

甚至在正常读取文件的时候也可以同时通过管道解析文件:
 # cat access.log.2 | goaccess access.log access.log.1 -
注意 添加到命令行末尾的破折号是为了告诉 GoAccess 应该从管道中读取数据。

要更加灵活的使用 GoAccess,我们可以使用一系列的管道。例如,我们希望处理所有压缩过的日志文件 access.log.*.gz 并附加到当前日志文件中,则我们可以这样做:
 # zcat access.log.*.gz | goaccess access.log -

注意: 在 Mac OS X 上, 请使用 gunzip -c 代替 zcat。

1.43 实时 HTML 输出

GoAccess 有能力在 HTML 报告中展示实时数据。您甚至可以通过电子邮件发送 HTML 报告,因为它是由没有外部文件依赖的单个文件组成,是不是很酷!

生成实时 HTML 报告的过程和生成静态报告的过程非常相似。实时报告仅仅需要使用参数 --real-time-html 。
 # goaccess access.log -o /usr/share/nginx/html/site/report.html --real-time-html

GoAccess 默认使用生成报告的主机名。您也可以指定 URL 用于客户端浏览器访问。参考 FAQ 上更详细的示例。
 # goaccess access.log -o report.html --real-time-html --ws-url=goaccess.io

GoAccess 默认侦听端口 7890,如下使用其他端口可以这样操作(确保端口已经打开):
 # goaccess access.log -o report.html --real-time-html --port=9870

绑定 WebSocket 服务器到不同于 0.0.0.0 的另外一个地址,可以这样操作:
 # goaccess access.log -o report.html --real-time-html --addr=127.0.0.1
注意: 如果需要在加密连接上输出实时数据,则需要使用 --ssl-cert=<cert.crt> 和 --ssl-key=<priv.key>。

1.44 日期处理

另一个强大的管道应该是从 Web 日志中过滤日期。

下面的命令将获取从 05/Dec/2010 开始并直到文件结束的所有的 HTTP 请求。
# sed -n ‘/05/Dec/2010/,$ p‘ access.log | goaccess -a -

或者使用相对日期,比如昨天或者明天:
 # sed -n ‘/‘$(date ‘+%d/%b/%Y‘ -d ‘1 week ago‘)‘/,$ p‘ access.log | goaccess -a -

如果需要解析一个固定的时间段,则可以这样写:
 # sed -n ‘/5/Nov/2010/,/5/Dec/2010/ p‘ access.log | goaccess -a -

1.45 虚拟主机

假定您的日志中包含虚拟主机字段。比如:
 vhost.com:80 10.131.40.139 - - [02/Mar/2016:08:14:04 -0600] "GET /shop/bag-p-20 HTTP/1.1" 200 6715 "-" "Apache (internal dummy connection)"
并且您希望查看最高访问量的 URL 属于哪一台虚拟主机。
 awk ‘$8=$1$8‘ access.log | goaccess -a -

当然,您可以可以排除不想看的虚拟主机:
 # grep -v "`cat exclude_vhost_list_file`" vhost_access.log | goaccess -

1.46 文件 & 状态码

解析特定页面,比如:页面访问数,html,htm,php,等等:
 # awk ‘$7~/.html|.htm|.php/‘ access.log | goaccess -

注意, $7 是通用以及联合日志格式中的一个请求字段,(不含虚拟主机),如果您的日志包含了虚拟主机,则应该使用 $8 代替。检查哪一个字段是您需要的,可以这样做:
 # tail -10 access.log | awk ‘{print $8}‘

或者解析一个特定的状态码,比如:500(服务器内部错误):
 # awk ‘$9~/500/‘ access.log | goaccess -

服务器值得一提的是,如果希望 GoAccess 运行在一个较低优先级,可以这样做:
 # nice -n 19 goaccess access.log -a

如果您不希望在服务器上安装 GoAccess,那在本地机器运行就好了:
 # ssh root@server ‘cat /var/log/apache2/access.log‘ | goaccess -a -

处理不断增长中的日志

GoAccess 通过磁盘 B+树 数据库能够处理不断增长的日志。工作原理如下:
首先数据集必须使用 --keep-db-files, 参数保存,然后相同的数据集可以使用参数 --load-from-disk 载入。
收到新的数据(来自管道或者文件)后,将会被附加到原始数据集上。
在任何时候都保存数据, 则必须使用 --keep-db-files 参数。
果在使用参数 --load-from-disk 时没有同时使用 --keep-db-files 参数,则数据库文件在程序关闭时将会被删除。

示例
 // 上个月的访问日志
goaccess access.log.1 --keep-db-files
然后,载入

 // 添加这个月的新日志,并保存为新数据
goaccess access.log --load-from-disk --keep-db-files
读取已经保存的数据(不解析新数据)

 goaccess --load-from-disk --keep-db-files
注意事项
每一个活动面板上最多有 366 个对象,如果是实时 HTML 报告则为 50 个对象。对象上限可以通过最大对象数自定义,但是只有 CSV 和 JSON 格式的输出允许超过默认值,即 366 对象每面板。

在使用磁盘B+树(使用参数 --keep-db-files 和 --load-from-disk)加载了同一个日志两次,则 GoAccess 会将每个请求也计算两次。问题#334 详细说明了此问题。

一次访问就是一次请求(访问日志中的每一行),例如,10 次请求 = 10 次访问。具有相同 IP,日期,和 UserAgent 的 HTTP 请求将被认为是一个独立访问。

1.5 goaccess命令选项

GoAccess的基本语法如下:
goaccess [ -b ][ -s ][ -e IP_ADDRESS][ - a ] <-f log_file >

参数说明:

-f – 日志文件名
-b – 开启流量统计,如果希望加快分析速度不建议使用该参数
-s – 开启HTTP响应代码统计
-a – 开启用户代理统计
-e – 开启指定IP地址统计,默认禁用
-p -指定goacces用户配置文件路径

二、简单使用

下载源码包和安装依赖
wget https://tar.goaccess.io/goaccess-1.3.tar.gz  
rz libmaxminddb-1.3.2.tar.gz

yum -y install ncurses-devel tokyocabinet-devel openssl-devel
yum -y install GeoIP-devel.x86_64

make安装
cd /usr/local/
tar -xvf libmaxminddb-1.3.2.tar.gz
cd libmaxminddb-1.3.2/
./configure
make
make install
echo /usr/local/libmaxminddb-1.3.2/src/.libs/ > /etc/sysconfig/libmax
ldconfig

cd /usr/loca/
tar -xzvf goaccess-1.3.tar.gz
cd goaccess-1.3/
./configure --enable-utf8 --enable-geoip=mmdb
make
make install


配置nginx
touch /usr/local/nginx/html/index.html  (空文件)
导入访问日志
goaccess -f /var/log/all.log --log-format=COMBINED -a -o /usr/local/nginx/html/index.html
配置web页面
vim /usr/local/nginx/conf/goaccess.conf
server  { 
        listen  80;
        server_name zz.goo.com;
        location / {
          root  /usr/local/nginx/html;
          try_files  $uri  $uri/  /index.html;
       }
            proxy_set_header Host $http_host;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
}

2.1 web页面显示

技术图片

以上是关于Linux------------GoAccess-可视化WEB日志分析工具的主要内容,如果未能解决你的问题,请参考以下文章