小满Linux(第十章Nginx-Go-Access-日志分析器)

本文涉及的产品
云解析 DNS,旗舰版 1个月
云解析DNS,个人版 1个月
日志服务 SLS,月写入数据量 50GB 1个月
简介: GoAccess是一款开源、实时,运行在命令行终端下的web日志分析工具。该工具提供快速、多样的HTTP状态统计,可以令管理员不再纠结于统计各类数据,和繁杂的指令以及一大堆管道/正则表达式说byebye

将我们的Linux 服务器设置为中文版


$ localectl  set-locale LANG=zh_CN.UTF8


重启服务器即可


58a7d8a2ff65428fb00fd578b51e67bf.png


GoAccess是一款开源、实时,运行在命令行终端下的web日志分析工具。该工具提供快速、多样的HTTP状态统计,可以令管理员不再纠结于统计各类数据,和繁杂的指令以及一大堆管道/正则表达式说byebye


1.安装


wget http://tar.goaccess.io/goaccess-1.2.tar.gz
tar -xzvf goaccess-1.2.tar.gz
cd goaccess-1.2/
./configure 
make
make install


操作手册


GoAccess - 中文站 - 可视化 Web 日志分析工具


开启实时HTML报告分析(webSocket)


goaccess access.log -a -o ../html/report.html --real-time-html --log-format=COMBINED


8cfaff96bdf949e793e7ec2dcc54fab0.png


选项


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


日志/日期/时间 格式


  • --time-format <timeformat>

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


  • --date-format <dateformat>

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


  • --log-format <logformat>

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


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


COMBINED     | 联合日志格式

VCOMBINED    | 支持虚拟主机的联合日志格式

COMMON       | 通用日志格式

VCOMMON      | 支持虚拟主机的通用日志格式

W3C          | W3C 扩展日志格式

SQUID        | Native Squid 日志格式

CLOUDFRONT   | 亚马逊 CloudFront Web 分布式系统

CLOUDSTORAGE | 谷歌云存储

AWSELB       | 亚马逊弹性负载均衡

AWSS3        | 亚马逊简单存储服务 (S3)

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


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


用户交互选项


请查阅配置文件中颜色方案示例。


  • -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=<JSON>

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


--html-

prefs='{"theme":"bright","perPage":5,"layout":"horizontal","showTables":true,"visitors":{"plot":{"chartType":"bar"}}}'


注意: 提交的 JSON 对象必须保存在一行 JSON 字符串中。


  • --json-pretty-print

使用制表符和新行格式化 JSON 输出。


  • --max-items=<num>

设置每个面板最多可以显示的单元个数。取值范围是 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 报告中不显示“最近更新”。


服务器选项


  • --addr=<address>

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


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


  • --daemonize

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


  • --origin=<url>

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


  • --port=<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 时有效


FILE OPTIONS


  • -f --log-file=<logfile>

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


  • -l --log-debug=<filename>

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


  • -p --config-file=<configfile>

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


  • --invalid-requests=<filename>

记录无效请求到指定文件。


  • --no-global-config

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


解析选项


  • -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=<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=<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=<referer>

忽略被统计的来路。支持通配符。例如: *.domain.com ww?.domain.*


  • --ignore-status=<STATUS>

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


  • --num-tests=<number>

设定测试行数,即使用给定的 日志/日期/时间 格式测试访问日志。默认值为 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 <extension>

添加静态文件后缀名。例如:.mp3。 后缀名区分大小写。


地理位置选项


  • -g --std-geoip

标准 GeoIP 数据库,低内存占用。


  • --geoip-database <geocityfile>

设定 GeoIP 数据库路径。例如:GeoLiteCity.dat。需要从 maxmind.com 上下载到本地。IPv4 和 IPv6 均可用支持。注意:--geoip-city-data 是 --geoip-database 的别名。

注意: 如果使用 GeoIP2,您需要从 MaxMind 下载 城市/国家 数据库,并通过 --geoip-database 设定。


其他选项


  • -h --help

查看帮助信息。


  • -V --version

显示版本信息并退出。


  • -s --storage

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


  • --dcf

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


磁盘存储选项


  • --keep-db-files

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


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


  • --load-from-disk

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


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


  • --db-path <dir>

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


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


  • --xmmap <num>

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


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


  • --cache-lcnum <num>

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


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


  • --cache-ncnum <num>

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


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


  • --tune-lmemb <num>

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


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


  • --tune-nmemb <num>

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


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


  • --tune-bnum <num>

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


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


  • --compression <zlib|bz2>

指定页面采用的压缩编码(ZLIB|BZ2)。


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


自定义 日志/日期 格式


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 后跟随一个空格符或者制表分隔符(\t),用于指定日志字符串格式。


特殊格式说明符


  • %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模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
7天前
|
存储 算法 Go
go语言并发实战——日志收集系统(七) etcd的介绍与简单使用
go语言并发实战——日志收集系统(七) etcd的介绍与简单使用
|
7天前
|
监控 Go
go语言并发实战——日志收集系统(八) go语言操作etcd以及利用watch实现对键值的监控
go语言并发实战——日志收集系统(八) go语言操作etcd以及利用watch实现对键值的监控
go语言并发实战——日志收集系统(八) go语言操作etcd以及利用watch实现对键值的监控
|
7天前
|
消息中间件 存储 监控
go语言并发实战——日志收集系统(六) 编写日志收集系统客户端
go语言并发实战——日志收集系统(六) 编写日志收集系统客户端
|
7天前
|
消息中间件 存储 Kafka
go语言并发实战——日志收集系统(二) Kafka简介
go语言并发实战——日志收集系统(二) Kafka简介
|
6天前
|
应用服务中间件 Linux 网络安全
LINUX安装nginx详细步骤
LINUX安装nginx详细步骤
|
7天前
|
监控 Go
go语言并发实战——日志收集系统(十一)基于etcd来监视配置文件的变化
go语言并发实战——日志收集系统(十一)基于etcd来监视配置文件的变化
|
7天前
|
监控 Go
go语言并发实战——日志收集系统(十) 重构tailfile模块实现同时监控多个日志文件
go语言并发实战——日志收集系统(十) 重构tailfile模块实现同时监控多个日志文件
|
7天前
|
存储 JSON 监控
go语言并发实战——日志收集系统(九) 基于etcd的代码重构思考与初步实现
go语言并发实战——日志收集系统(九) 基于etcd的代码重构思考与初步实现
|
7天前
|
消息中间件 Kafka Go
go语言并发实战——日志收集系统(五) 基于go-ini包读取日志收集服务的配置文件
go语言并发实战——日志收集系统(五) 基于go-ini包读取日志收集服务的配置文件
|
7天前
|
存储 监控 算法
go语言并发实战——日志收集系统(四) 利用tail包实现对日志文件的实时监控
go语言并发实战——日志收集系统(四) 利用tail包实现对日志文件的实时监控