web root下放置图片_可视化 Web 日志监控工具 GoAccess

简介

GoAccess 是一个开源的实时网络日志分析器和交互式查看器,可以在 Linux/Unix 系统或通过浏览器的终端中运行。它为需要动态可视服务器报告的系统管理员提供快速且有价值的 HTTP 统计信息。

特性

快速, 实时, 毫秒/秒级更新, C 语言编写
仅依赖 ncurses 模块
几乎支持所有 Web 日志 格式 (Apache, Nginx, Amazon S3, Elastic Load Balancing, CloudFront, 等等)
简单设置即可支持自定义格式日志
漂亮的终端以及 bootstrap 风格控制面板 (易于将 GoAccess 调整为您自己的颜色搭配和风格)
当然,我们还支持 Valgrind 测试。

GoAccess主要功能

统计概况,流量消耗等
访客排名
动态Web请求
静态web请求,如图片、样式表、脚本等。
来路域名
404 错误
操作系统
浏览器和搜索引擎
主机、DNS和ip地址
HTTP 响应代码
引荐网站
键盘布局
自定义显示
支持超大日志(分析速度很快)

为什么要用 GoAccess?

GoAccess 被设计成快速的并基于终端的日志分析工具。其核心理念是不需要通过 Web 浏览器就能快速分析并实时查看 Web 服务器的统计数据(这对于需要使用 SSH 来对访问日志进行快速分析或者就是喜欢在终端环境下工作的人来说是超赞的)。
​
终端输出仅仅是默认的输出方式,GoAccess 还支持生成完整的实时 HTML 报告(这对分析、监控以及数据可视化都是极好的),以及 JSON 和 CSV 格式的报告。

实战

编译安装

1.安装编译工具
[root@xiaoxuan ~]# yum install -y gcc cmake make
[root@xiaoxuan ~]# yum install ncurses-devel -y  #安装依赖包
[root@xiaoxuan ~]# wget http://tar.goaccess.io/goaccess-1.2.tar.gz
[root@xiaoxuan ~]# wget https://github.com/maxmind/geoip-api-c/releases/download/v1.6.11/GeoIP-1.6.11.tar.gz  #下载地理数据库
[root@xiaoxuan ~]# tar xf GeoIP-1.6.11.tar -C /usr/local/
[root@xiaoxuan ~]# cd /usr/local/GeoIP-1.6.11/
[root@xiaoxuan GeoIP-1.6.11]# ./configure
[root@xiaoxuan GeoIP-1.6.11]# make
[root@xiaoxuan GeoIP-1.6.11]# make install
​
[root@xiaoxuan ~]# tar xzvf goaccess-1.2.tar.gz -C /usr/local/
[root@xiaoxuan ~]# cd /usr/local/goaccess-1.2/
[root@xiaoxuan goaccess-1.2]# ./configure --enable-utf8 --enable-geoip=legacy

0a2b5f21cfe6081279a276dd66916057.png
[root@xiaoxuan goaccess-1.2]# make && make install

bbe7616b866e81550640d5b9a3cb7f06.png

GoAccess的使用

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

GoAccess 要求下列字段:

有效的 IPv4/6 地址 %h
有效的日期 %d
请求 %r

修改配置文件

[root@xiaoxuan ~]# vim /usr/local/etc/goaccess.conf
#修改如下三行(去掉注释信息)
time-format %H:%M:%S
date-format %d/%b/%Y
#NCSA Combined Log Format
log-format %h %^[%d:%t %^] "%r" %s %b "%R" "%u"

使用

[root@xiaoxuan ~]# systemctl start nginx #启动nginx
通过浏览器测试访问生成日志

指定日志输出到终端生成一个课交互的报告:

[root@xiaoxuan ~]# goaccess  -f /var/log/nginx/access.log

29c7c1b75d501c7f2cb61c868e76212c.png
控制台下的操作方法:
F1              主帮助页面
F5              重绘主窗口
q               退出
c               设置或改变配色方案
1-9                 跳转到对应的模块编号
SHIFT + 0-9            激活超过10的模块
o               打开当前模块的详细试图
j               当前模块向下滚动
k               当前模块向上滚动
s               对模块排序
/               向前在任意{详细视图}窗口搜索输入模式(pattern)
n               在任意{详细视图}窗口中找到下一次出现的位置
t               跳到第一个条目或屏幕顶端
b               跳到最后一个条目或者屏幕底部

GoAccess 常用参数

goaccess有控制台模式和html静态页面模式,这里先介绍一下控制台模式
​
goaccess -a -d -f logs/access_web.log -p /usr/local/goaccess/etc/goaccess/goaccess.conf
​
#常用参数
--daemonize
# 使 GoAccess 作为守护程序运行(仅在 --real-time-html 开启下有效)。
​
--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>
# 创建一个管道(先入先出)往指定的路径/文件写入数据。
​
1.24 FILE OPTIONS
-f --log-file=
# 指定输入日志文件的路径。如果在配置文件中指定了输入文件,则其优先级要高于在命令行中通过 -f 参数指定。
​
-l --log-debug=
# 发送所有调试信息到指定文件。需要指定配置选项 --enable-debug
​
-p --config-file=
# 指定使用自定义配置文件。如果设置了此参数,其优先级将高于全局配置文件(如果有)。
​
--invalid-requests=
# 记录无效请求到指定文件。
​
-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 请求协议开关。将创建一个请求字段包含请求协议+真实请求。
​
-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=
# 开启指定面板。面板列表

生成静态html文件并配置nginx界面访问

[root@xiaoxuan ~]# goaccess -f /var/log/nginx/access.log -a -o index.html  #将日志分析结果输出为html文档
[root@xiaoxuan ~]# cd /etc/nginx/conf.d/  #配置nginx虚拟主机
[root@xiaoxuan conf.d]# cp default.conf goaccess.conf
[root@xiaoxuan conf.d]# vim goaccess.conf
server {
    listen       80;
    server_name  localhost;
​
​
    location /log {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }
​
}
​
[root@xiaoxuan ~]# mkdir /usr/share/nginx/html/log
[root@xiaoxuan ~]# mv index.html /usr/share/nginx/html/log/ #将生成的html文档导入发布目录中
[root@xiaoxuan ~]# systemctl restart nginx

访问:

6507b29d1cfdbf7858f4e39caec38cfd.png

15aeb0f52572ab7e1ec25b48372f82f0.png

e9f3a37f02e707d016db9941f3be9956.png

配置生成动态实时的html报告

websocket是什么
它是一种网络通信协议,是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议。
​
为什么需要websocket? 疑问? 我们已经有了 HTTP 协议,为什么还需要另一个协议?它能带来什么好处?
因为 HTTP 协议有一个缺陷:通信只能由客户端发起,由于轮询的效率低,非常浪费资源(因为必须不停连接,或者 HTTP 连接始终打开), 因此websocket应运而生。
简介
WebSocket用于在Web浏览器和服务器之间进行任意的双向数据传输的一种技术。WebSocket协议基于TCP协议实现,包含初始的握手过程,以及后续的多次数据帧双向传输过程。其目的是在WebSocket应用和WebSocket服务器进行频繁双向通信时,可以使服务器避免打开多个HTTP连接进行工作来节约资源,提高了工作效率和资源利用率。
​
WebSocket目前支持两种统一资源标志符ws和wss,类似于HTTP和HTTPS。
​
实现原理
浏览器发出webSocket的连线请求,服务器发出响应,这个过程称为握手,握手的过程只需要一次,就可以实现持久连接。
​
注意:监听的端口为7890.默认使用WebSocket监听7890端口。
如何生成一份实时 HTML 报告?
生成实时 HTML 报告的方法与生成静态报告的方法非常类似。
​
就是生成静态报告的时候将输出的 html 文件放到你的 Web 服务器的 www 公共目录下。当然,您需要添加几个实时参数。 比如: --real-time-html 。
​
# goaccess access.log -o /usr/share/nginx/www/rt.goaccess.io/report.html --real-time-html
如果打开报告的浏览器支持 WebSocket,则报告页面会尝试使用 WebSocket 连接到服务器,而服务器主机名(window.location.hostname)取决于生成报告的主机。
​
当然您也可以通过参数 --ws-url=<host> 指定主机名。注意 host 必须指向 GoAccess 运行和处理日志的主机。请确保 host 是有效主机且不应该包含 http 。

实战:

使用daemonize模式运行,生成实时HTML报告的过程与创建静态报告的过程非常相似,只需要在启动命令后添加--real-time-html和--daemonize参数即可
​
[root@xiaoxuan ~]# goaccess -a -d -f /var/log/nginx/access.log -o /usr/share/nginx/html/log/index.html --real-time-html --daemonize
Daemonized GoAccess: 11552
[root@xiaoxuan ~]# netstat -lntp | grep 7890
tcp        0      0 0.0.0.0:7890            0.0.0.0:*               LISTEN      11552/goaccess

访问:

d345a06129d6ed3c4fcbfc4948165768.png

0dcc749f0b5f30e1436bf96749db5d2d.png

这个时候就会实时刷新统计数据

其他使用:

生成 JSON 报告
# goaccess -a -d -f nginx_access.log-20191216 -p /usr/local/goaccess/etc/goaccess/goaccess.conf -o json > report.json
生成 CSV 文件
# goaccess -a -d -f nginx_access.log-20191216 -p /usr/local/goaccess/etc/goaccess/goaccess.conf -o csv > report.csv
实施过滤和解析
# tail -f nginx_access.log | goaccess -p /usr/local/goaccess/etc/goaccess/goaccess.conf -
分析多个文件
# goaccess -p /usr/local/goaccess/etc/goaccess/goaccess.conf access.log.1 access.log.2

GoAccess是一个非常有价值的工具,它能给系统管理员实时提供可视的HTTP 统计分析。虽然GoAccess的默认输出是标准输出,但是你也可以将他们保存到JSON,HTML或者CSV文件。这种转换可以让 GoAccess在监控和显示网站服务器的统计数据时更有用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值