Skip to content

用GoAccess实现可视化并实时监控access日志

GoAccess

实战:用GoAccess实现可视化并实时监控access日志-2025.1.9

image-20250109214903877

目录

[toc]

版权

本内容来自:《极客时间:Nginx 核心知识 150 讲》,版权归原作者所有,这里仅记录自己的学习笔记。

前言

官方文档

https://goaccess.io/

https://goaccess.io/get-started

部署GoAccess

环境:

centos7.9

提前安装好环境:

bash
yum groupinstall "Development Tools" -y
yum install epel-release libmaxminddb-devel ncurses-devel -y

源码编译安装:

bash
wget https://tar.goaccess.io/goaccess-1.9.3.tar.gz
tar -xzvf goaccess-1.9.3.tar.gz
cd goaccess-1.9.3/
./configure --enable-utf8 --enable-geoip=mmdb
make
make install

测试:

bash
goaccess access.log -o /var/www/html/report.html --log-format=COMBINED --real-time-html


goaccess /var/log/nginx/onedayxyy.cn.https.log  -o /root/rsync/rsync-vue/dist/report.html --log-format=COMBINED --real-time-html &

部署后,但存在的问题:右上角的时间一直不更新……😒(奇怪)

image-20250111080534165

使用GoAccess

goaccess方式:

image-20250109213920595

传统access.log日志:

image-20250109213953584

用法:

image-20250109214627305

执行:

image-20250109214253248

nginx中配置:

image-20250109214430409

打开链接:

image-20250109214505215

FAQ

案例:开启实时real-time-html

给作者个补充,默认goaccess在开启实时real-time-html后会监听端口7890的websocket,如果服务器不允许请求7890端口,你就看不到那个页面是实时更新的——你会发现访问的页面最后更新时间始终不变。这一点人很多忽略了,很多人以为是哪个生成html静态文件是实时更新的,其实根本不是,那个文件本身一旦生成就不动了,真正更新的实时内容是从websocket过来的

作者回复: 谢谢分享!

老师,这个--real-time-html 实时更新不生效是怎么回事?

作者回复: 你是在公有云的机器上吗?goaccess会启动一个端口7890,这个端口在公有云上是被iptables屏蔽了的,需要你到控制台的安全组里,放行7890端口的。你可以在浏览器上打开调试模式,看看7890有没有连接上。

案例:性能

每天上百G用这个还行吗

作者回复: 100G吗?可以的,但对CPU是有消耗的。官方有个benchmark,采用i7 2GHz的CPU分析时,每 12GB日志如果在磁盘上需要一个小时的处理时间,如果是在内存中是20分钟。它默认在内存中用hash表处理,每秒处理五万行。所以这种大流量分析,还是需要考虑你有没有富裕的CPU资源。

请问使用go access 会影响 nginx的性能么,它主要耗费哪些资源呢?老师如果之前使用比较多的话,可以分享一下么

作者回复: 它只是在分析日志,不会与nginx产生交互。如果你把goaccess与nginx部署在一起,那么goaccess会争抢cpu和内存。https://goaccess.io/faq这个页面里有goaccess的资源消耗benchmark数据,请参考。

案例:定制化

感觉goaccess展示效果比elk丰富

作者回复: 简单有效,实时更新比较有趣,不过定制化就很差。而goaccess对大型服务定制化也比较差。

goaccess,第一次使用有点惊喜,不过对于大型的web应用部署来说,个人认为不太适用

作者回复: 是的,只适合简易的小站点。

案例:权限管理

这样的话 要加权限管理吗 万一这个界面被人瞎碰出来了

作者回复: 对的。可以限制访问IP,或者用https+auth_basic模块加个简单的身份验证。

案例:如果做了每天的日志切割,再使用GoAccess 是不是就意味着只能看到当天的统计结果

如果使用goaccess做日志分析,是不是日志不能做分割?

作者回复: 可以做分割,goaccess会把新增日志的分析结果放在内存中

假如是多个access日志应该要怎么分析呢,是接受多个日志路径作为参数吗还是要把多个日志文件连接成一个文件

作者回复: 多个日志文件作为参数就可以了

案例:后台启动

老师,如果想让goaccess在后台启动,可以一直实时查看report.html, 应该怎么操作? 因为ctrl+c,关闭后,就不能实时更新了。

作者回复: 命令行最后加&

不建议要用&符号,--daemonize可以后台启动

老师您好,请问下,goacces ...开启了之后,有什么办法能够后台运行这个吗,不然的话会一直战局终端窗口,ctrl-C的话就退出了,请指教下。

作者回复:

方法1:命令行最后加&

方法2:用screen开启终端窗口

案例:自定义json的日志格式

老师,自定义json的日志格式,goaccess怎么处理啊

作者回复: 使用--log-format自定义你的access格式。见https://goaccess.io/man#custom-log

案例:无法实时查看

有铭 请帮忙把问题说的清楚些,我遇到无法实时查看。

作者回复: 不能实时查看是因为ws通讯不正常。通常都是goaccess启的ws端口,被防火墙阻止没有对外网开放,比如各家公有云的服务器,需要从控制台上放行。

关于我

我的博客主旨:

  • 排版美观,语言精炼;
  • 文档即手册,步骤明细,拒绝埋坑,提供源码;
  • 本人实战文档都是亲测成功的,各位小伙伴在实际操作过程中如有什么疑问,可随时联系本人帮您解决问题,让我们一起进步!

🍀 个人网站

image-20241231070836953

🍀 微信二维码

x2675263825 (舍得), qq:2675263825。

image-20230107215114763

🍀 微信公众号

《云原生架构师实战》

image-20230107215126971

🍀 csdn

https://blog.csdn.net/weixin_39246554?spm=1010.2135.3001.5421

image-20230107215149885

🍀 知乎

https://www.zhihu.com/people/foryouone

image-20230107215203185

最后

如果你还有疑惑,可以去我的网站查看更多内容或者联系我帮忙查看。

如果你有更好的方式,评论区留言告诉我。谢谢!

好了,本次就到这里了,感谢大家阅读,最后祝大家生活快乐,每天都过的有意义哦,我们下期见!

最近更新