GoAccess实现请求监
GoAccess实现请求监控
简介
GoAccess是一款开源的实时web日志分析器和交互式查看器,用于可视化查看HTTP统计信息,可以系统的终端上运行,也可以通过浏览器运行;
本文通过使用GoAccess分析Nginx的日志文件,从而统计HTTP的请求情况;
准备
当前服务器:Ubuntu 22.04.1 LTS
本文是基于Docker容器,所以先在Docker安装Nginx(Nginx安装)
思路
首先Nginx会产生日志文件,GoAccess就是利用这个日志文件的信息来分析、统计HTTP信息,然后会生成一个可视化报表,我们会将这个报表替换掉Nginx的index.html欢迎页面,从而直接展示可视化报表,所以这里的Nginx要映射html文件到宿主机,同时Goaccess的输出报表的文件也映射到此目录下,且名称为index.html;
启动Nginx
docker run -d --name nginx -p 8801:80 -v /opt/nginx/html:/usr/share/nginx/html -v /opt/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /opt/nginx/logs:/var/log/nginx -v /opt/nginx/conf/conf.d:/etc/nginx/conf.d nginx
首先我们会启动Nginx,同时做好卷映射,Nginx相关文件都放在/opt/nginx/
目录下;
/opt/nginx/html
对应容器中路径 /usr/share/nginx/html
,目前是Nginx欢迎页,后面会用来存放日志分析后的可视化报表页面
/opt/nginx/conf/nginx.conf
对应容器中路径 /etc/nginx/nginx.conf
,是Nginx的配置文件
/opt/nginx/logs
对应容器中路径/var/log/nginx
,Nginx的日志文件,后面要传递给GoAccess做为分析日志源
到这Nginx就启动起来了,记住这个index.html页面与access.log文件,后面会将index.html替换,而access.log会被用来做分析,下面安装配置GoAccess。
启动GoAccess
搜索
docker search GoAccess
![image-20230223160443545](file://C:\Users\Administrator.CARETEC-PC1182\Desktop\md\GoAccess.assets\image-20230223160443545.png?lastModify=1677142533 "image-20230223160443545")
拉取
docker pull allinurl/goaccess
配置
之前说过要映射配置文件,所以我们配置下GoAccess的日志格式,这个很重要,必须对应Nginx的日志的格式来匹配,可以看看官方文档。默认的Nginx日志格式如下:
![image-20230223161539447](file://C:\Users\Administrator.CARETEC-PC1182\Desktop\md\GoAccess.assets\image-20230223161539447.png?lastModify=1677142533 "image-20230223161539447")
知道了Nginx的日志格式,那么我们需要将GoAccess的匹配参数与之对应,参考
- %t 匹配time-format格式的时间字段
- %d 匹配date-format格式的日期字段
- %h host(客户端ip地址,包括ipv4和ipv6)
- %r 来自客户端的请求行
- %m 请求的方法
- %U URL路径
- %H 请求协议
- %s 服务器响应的状态码
- %b 服务器返回的内容大小
- %R HTTP请求头的referer字段
- %u 用户代理的HTTP请求报头
- %D 请求所花费的时间,单位微秒
- %T 请求所花费的时间,单位秒
- %^ 忽略这一字段
所以得出的配置文件为:
log-format %h %^[%d:%t %^] "%r" %s %b "%R" "%u"
date-format %d/%b/%Y
time-format %H:%M:%S
启动
docker run --restart=always -d -p 7890:7890 -v /opt/goaccess/data:/srv/data -v /opt/nginx/html:/srv/report -v /opt/nginx/logs:/srv/logs --name goaccess allinurl/goaccess --no-global-config --config-file=/srv/data/goaccess.conf --output=/srv/report/index.html --log-file=/srv/logs/access.log --real-time-html
然后启动GoAccess,也做好卷映射,相关文件在/opt/goaccess/
下,
/opt/goaccess/data
对应容器中路径/srv/data
,是GoAccess的配置路径
/opt/nginx/html
对应容器中路径/srv/report
,用来存放可视化报表,由--output
参数决定
/opt/nginx/logs
对应容器中路径/srv/logs
,这里是将Nginx的产生的日志文件路径映射到goaccess容器,对日志做分析
GoAccess参数--config-file
设置为/srv/data/goaccess.conf
,这里的/srv/data
映射了宿主机/opt/goaccess/data
;参数--output
设置为/srv/report/index.html
,这里的/opt/nginx/html
又映射到nginx容易,所以nginx可以直接访问这个html页;
坑
注意配置文件一定不能弄错,不然就会是这样,一直重启,这是因为还没有将配置文件设置好,配置文件我们映射了opt/goaccess/data
,只需要在此目录下创建好goaccess.conf
并配置格式即可;
由于这里已经启动了,目录已经自动创建好了,没启动前还是乖乖创建目录、创建文件;这里只需要创建文件了;
打开映射的ip地址查看是否配置成功,如果没启动的话大概率是配置文件弄错了,多试着改几次配置文件即可;
GoAccess实现请求监的更多相关文章
- 简述Java中Http/Https请求监听方法
一.工欲善其事必先利其器 做Web开发的人总免不了与Http/Https请求打交道,很多时候我们都希望能够直观的的看到我们发送的请求参数和服务器返回的响应信息,这个时候就需要借助于某些工具啦.本文将采 ...
- 一个基于Socket的http请求监听程序实现
首先来看以下我们的需求: 用java编写一个监听程序,监听指定的端口,通过浏览器如http://localhost:7777来访问时,可以把请求到的内容记录下来,记录可以存文件,sqlit,mysql ...
- ASP.NET Core真实管道详解[2]:Server是如何完成针对请求的监听、接收与响应的【上】
Server是ASP .NET Core管道的第一个节点,负责完整请求的监听和接收,最终对请求的响应同样也由它完成.Server是我们对所有实现了IServer接口的所有类型以及对应对象的统称,如下面 ...
- Self Host模式下的ASP. NET Web API是如何进行请求的监听与处理的?
构成ASP.NET Web API核心框架的消息处理管道既不关心请求消息来源于何处,也不需要考虑响应消息归于何方.当我们采用Web Host模式将一个ASP.NET应用作为目标Web API的宿主时, ...
- Server是如何完成针对请求的监听、接收与响应1
Server是如何完成针对请求的监听.接收与响应的[上] Server是ASP .NET Core管道的第一个节点,负责完整请求的监听和接收,最终对请求的响应同样也由它完成.Server是我们对所有实 ...
- ASP.NET Core管道深度剖析(3):管道是如何处理HTTP请求的?
我们知道ASP.NET Core请求处理管道由一个服务器和一组有序的中间件组成,所以从总体设计来讲是非常简单的,但是就具体的实现来说,由于其中涉及很多对象的交互,我想很少人能够地把它弄清楚.为了让读者 ...
- 多个ajax请求下等待条显示和隐藏的简单处理
处理为遇到ajax请求就显示等待条,直到所有的ajax请求执行完毕才关闭等待条.比较简单,源码如下(基于jQuery) //基于jQuery //从第一个ajax请求发出开始显示等待条?直到一系列aj ...
- iOS - ASIHTTPRequest 网络请求
前言 使用 iOS SDK 中的 HTTP 网络请求 API,相当的复杂,调用很繁琐,ASIHTTPRequest 就是一个对 CFNetwork API 进行了封装,并且使用起来非常简单的一套 AP ...
- 管道是如何处理HTTP请求的?
管道是如何处理HTTP请求的? 我们知道ASP.NET Core请求处理管道由一个服务器和一组有序的中间件组成,所以从总体设计来讲是非常简单的,但是就具体的实现来说,由于其中涉及很多对象的交互,我想很 ...
- Android 发送HTTP GET POST 请求以及通过 MultipartEntityBuilder 上传文件(二)
Android 发送HTTP GET POST 请求以及通过 MultipartEntityBuilder 上传文件第二版 上次粗略的写了相同功能的代码,这次整理修复了之前的一些BUG,结构也大量修改 ...
随机推荐
- easyui combobox的级联设置
<body> <input id="title" class="easyUI-combobox" //onSelect:在该combobox被 ...
- 使用python玩转二维码!速学速用!⛵
作者:韩信子@ShowMeAI Python3◉技能提升系列:https://www.showmeai.tech/tutorials/56 本文地址:https://showmeai.tech/art ...
- 有状态软件如何在 k8s 上快速扩容甚至自动扩容
概述 在传统的虚机/物理机环境里, 如果我们想要对一个有状态应用扩容, 我们需要做哪些步骤? 申请虚机/物理机 安装依赖 下载安装包 按规范配置主机名, hosts 配置网络: 包括域名, DNS, ...
- 帮你短时间拿下Git,Git详细教程(浓缩的都是精华)
Git学习笔记 Git是一个开源的分布式版本控制系统,可以有效.高速地处理从很小到非常大的项目版本管理. 在团队开发中git是必不可少的,它是目前为止最流行的版本控制工具 Git是免费.开源的,由Li ...
- 《HTTP权威指南》– 6.代理
代理的概念: Web代理服务器是网络的中间实体.位于客户端和服务器之间,扮演"中间人"的角色,在各端点之间来回传送HTTP报文. 私有和共享代理: 代理服务器可以是某个客户端专用的 ...
- 开源库libcli的安装与使用
源码:https://github.com/dparrish/libcli 环境 Ubuntu 20.04.2 LTS 编译libcli 参考:README.md 按照libcli中的 README ...
- 红袖添香,绝代妖娆,Ruby语言基础入门教程之Ruby3基础数据类型(data types)EP02
Ruby是强类型动态语言,即Ruby中一旦某一个对象被定义类型,如果不通过强制转换操作,那么它永远就是该数据类型,并且只有在Ruby解释器运行时才会检测对象数据类型,它的一切皆为对象(包括 nil 值 ...
- CTFshow——funnyrsa1的wp理解
题目如下: 题目分析: 拿到题,发现给的e不常规,p1和p2相等,有两个不同n,两个不同c和两个不同e.给定两个密文的情况下,通常需要找到两者之间存在的关系,"合并"密文求解才能得 ...
- AWVS漏洞扫描器的使用
前言 AWVS是一款强大的web漏洞扫描工具,扫描速度快,可针对特定的漏洞进行扫描测试,用于在按全人员对指定企业进行安全扫描以及测试人员对web应用检测漏洞. AWVS使用以及功能介绍 这里介绍的是使 ...
- NC14501 大吉大利,晚上吃鸡!
题目链接 题目 题目描述 最近<绝地求生:大逃杀>风靡全球,皮皮和毛毛也迷上了这款游戏,他们经常组队玩这款游戏. 在游戏中,皮皮和毛毛最喜欢做的事情就是堵桥,每每有一个好时机都能收到不少的 ...