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实现请求监的更多相关文章

  1. 简述Java中Http/Https请求监听方法

    一.工欲善其事必先利其器 做Web开发的人总免不了与Http/Https请求打交道,很多时候我们都希望能够直观的的看到我们发送的请求参数和服务器返回的响应信息,这个时候就需要借助于某些工具啦.本文将采 ...

  2. 一个基于Socket的http请求监听程序实现

    首先来看以下我们的需求: 用java编写一个监听程序,监听指定的端口,通过浏览器如http://localhost:7777来访问时,可以把请求到的内容记录下来,记录可以存文件,sqlit,mysql ...

  3. ASP.NET Core真实管道详解[2]:Server是如何完成针对请求的监听、接收与响应的【上】

    Server是ASP .NET Core管道的第一个节点,负责完整请求的监听和接收,最终对请求的响应同样也由它完成.Server是我们对所有实现了IServer接口的所有类型以及对应对象的统称,如下面 ...

  4. Self Host模式下的ASP. NET Web API是如何进行请求的监听与处理的?

    构成ASP.NET Web API核心框架的消息处理管道既不关心请求消息来源于何处,也不需要考虑响应消息归于何方.当我们采用Web Host模式将一个ASP.NET应用作为目标Web API的宿主时, ...

  5. Server是如何完成针对请求的监听、接收与响应1

    Server是如何完成针对请求的监听.接收与响应的[上] Server是ASP .NET Core管道的第一个节点,负责完整请求的监听和接收,最终对请求的响应同样也由它完成.Server是我们对所有实 ...

  6. ASP.NET Core管道深度剖析(3):管道是如何处理HTTP请求的?

    我们知道ASP.NET Core请求处理管道由一个服务器和一组有序的中间件组成,所以从总体设计来讲是非常简单的,但是就具体的实现来说,由于其中涉及很多对象的交互,我想很少人能够地把它弄清楚.为了让读者 ...

  7. 多个ajax请求下等待条显示和隐藏的简单处理

    处理为遇到ajax请求就显示等待条,直到所有的ajax请求执行完毕才关闭等待条.比较简单,源码如下(基于jQuery) //基于jQuery //从第一个ajax请求发出开始显示等待条?直到一系列aj ...

  8. iOS - ASIHTTPRequest 网络请求

    前言 使用 iOS SDK 中的 HTTP 网络请求 API,相当的复杂,调用很繁琐,ASIHTTPRequest 就是一个对 CFNetwork API 进行了封装,并且使用起来非常简单的一套 AP ...

  9. 管道是如何处理HTTP请求的?

    管道是如何处理HTTP请求的? 我们知道ASP.NET Core请求处理管道由一个服务器和一组有序的中间件组成,所以从总体设计来讲是非常简单的,但是就具体的实现来说,由于其中涉及很多对象的交互,我想很 ...

  10. Android 发送HTTP GET POST 请求以及通过 MultipartEntityBuilder 上传文件(二)

    Android 发送HTTP GET POST 请求以及通过 MultipartEntityBuilder 上传文件第二版 上次粗略的写了相同功能的代码,这次整理修复了之前的一些BUG,结构也大量修改 ...

随机推荐

  1. 关于tomcat8在windows2008下高并发下有关问题的解决方案

    关于tomcat8在windows2008下高并发下问题的解决方案 因为客户服务器特殊的环境问题,只能使用windows2008r2服务器,然而配置过后,网站的高访问量很快就出现了各种问题,以下是解决 ...

  2. flutter系列之:在flutter中使用流式布局

    目录 简介 Flow和FlowDelegate Flow的应用 总结 简介 我们在开发web应用的时候,有时候为了适应浏览器大小的调整,需要动态对页面的组件进行位置的调整.这时候就会用到flow la ...

  3. Navicat Premium无法连接到oracle数据库的解决方法

    原因:Navicat Premium连不上oracle数据库一般是因为oci.dll文件的问题 解决方法:找到oracle安装路径中的oci.dll文件或者PL/SQL Developer安装路径中的 ...

  4. vue elementui弹框内 富文本编辑器的使用,及踩坑

    最近vue项目中遇到弹框内使用富文本编辑器,遇到最大的问题是,在打开弹框后才能创建富文本编辑器,并且只能创建一次,多次点击弹框,报错: Error in v-on handler: "Err ...

  5. JavaScript:操作符:算术运算符(加减乘除模幂)及其隐式转换数据类型

    加法+ 减法- 乘法* 除法/ 模运算% 幂运算**,即a ** b求的是a的b次方 执行上述运算时,当两个操作数有非数字时,JS会隐式转换为数字,再进行运算: 一些特殊的非数字,会进行如下转换: t ...

  6. Windows上将linux目录映射网络驱动器

    我有两台PC,一台操作用的Windows,一台linux.为了方便对linux目录的文件操作.需要在Windows上将linux中的/fdsk目录映射为网络驱动器. a.首先要将linux安装成为sa ...

  7. DSS+Linkis Ansible 单机一键安装脚本

    DSS+Linkis Ansible 单机一键安装脚本 一.简介 为解决繁琐的部署流程,简化安装步骤,本脚本提供一键安装最新版本的DSS+Linkis环境:部署包中的软件采用我自己编译的安装包,并且为 ...

  8. [Codeforces Round #841]

    [Codeforces Round #841] Codeforces Round #841 (Div. 2) and Divide by Zero 2022 A. Joey Takes Money J ...

  9. [python] CairoSVG使用教程

    1 CairoSVG介绍 代码下载地址 CairoSVG是一个将SVG1.1转为PNG,PDF, PS格式的转化.SVG算目前火热的图像文件格式了,它的英文全称为Scalable Vector Gra ...

  10. 2_cookie、session、token、sign

    一.关于cookie.session.token.sign 借鉴链接:https://juejin.cn/post/7147913027785293855