• goaccess 日志分析 nginx


    分析命令:

    goaccess -a -d -f /mnt/winshare/access-2023070112.log -p goaccess.conf  -o /mydata/nginx/html/2023070112_new.html
    
    • 1

    分析日志时的参数

    goaccess使用参数详解
    
    -a	 开启 UserAgent 列表。开启后会降低解析速度
    -c	 在程序开始运行时显示 日志/日期 配置窗口
    -d	 输出 HTML 或者 JSON 报告时开启 IP 解析
    -f	 指定输入日志文件的路径
    -p	 指定使用自定义配置文件
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    面板统计含义:

    官网描述:goaccess.io/man#description

    界面测试统计地址(我本机)

    Server Statistics

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

    nginx 日志参数详解

    参数  说明  示例
    $remote_addr   客户端地址   172.17.0.1
    $remote_user   客户端用户名称 --
    $time_local    访问时间和时区 [29/Dec/2022:10:17:14 +0000]
    $request   请求的URI和HTTP协议   "GET /test/nginx/proxy HTTP/1.1"
    $http_host 请求地址,即浏览器中你输入的地址(IP或域名) 10.1.7.33
    $status    HTTP请求状态    200
    $upstream_status   upstream状态  200
    $body_bytes_sent   发送给客户端文件内容大小    38
    $http_referer  url跳转来源 - 
    $http_user_agent   用户终端浏览器等信息  "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36"
    $http_cookie	用户cookie信息  "grafana_session=73d13d456cb4363f8a48f5501348669e" 
    $ssl_protocol  SSL协议版本 TLSv1
    $ssl_cipher    交换数据中的算法    RC4-SHA
    $upstream_addr 后台upstream的地址,即真正提供服务的主机地址  "10.1.7.33:8102"
    $request_time  整个请求的总时间    0.012
    $upstream_response_time    请求过程中,upstream响应时间  0.012
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    重点说一下 request_time

    $request_time是Nginx日志中的一个变量,表示请求处理时间,单位是秒,精度是毫秒。它反映了从Nginx开始接收客户端请求的第一个字节,到发送完响应数据给客户端的时间。这个时间包括了接收请求数据的时间、后端程序响应的时间、发送响应数据给客户端的时间,但不包括写日志的时间。

    如果你想使用$request_time变量,你需要在Nginx的配置文件中设置log_format指令,定义你想要记录的日志格式。例如,你可以这样设置:

    log_format main '$remote_addr - $remote_user [$time_local] "$request" '
    '$status $body_bytes_sent "$http_referer" '
    '"$http_user_agent" "$http_x_forwarded_for" '
    '"$request_time"';
    
    • 1
    • 2
    • 3
    • 4

    这样,你就可以在每条日志中看到$request_time的值。例如:

    192.168.1.100 - - [23/Sep/2023:10:15:32 +0800] "GET /index.html HTTP/1.1" 200 612 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36" "-" "0.012"
    
    • 1

    这里,最后一个字段"0.012"就是$request_time的值,表示这个请求处理了12毫秒。

    r e q u e s t t i m e 变量可以帮助你分析 N g i n x 的性能和吞吐量,以及后端程序的响应情况。你可以根据 request_time变量可以帮助你分析Nginx的性能和吞吐量,以及后端程序的响应情况。你可以根据 requesttime变量可以帮助你分析Nginx的性能和吞吐量,以及后端程序的响应情况。你可以根据request_time的值来判断哪些请求比较慢,是否有超时或错误发生,是否需要优化程序或调整配置等。

    Nginx: PV、UV、独立IP

    做网站的都知道,平常经常要查询下网站PV、UV等网站的访问数据,当然如果网站做了CDN的话,nginx本地的日志就没什么意义了,下面就对nginx网站的日志访问数据做下统计;

    **UV(Unique Visitor):**独立访客,将每个独立上网电脑(以cookie为依据)视为一位访客,一天之内(00:00-24:00),访问您网站的访客数量。一天之内相同cookie的访问只被计算1次
    **PV(Page View):**访问量,即页面浏览量或者点击量,用户每次对网站的访问均被记录1次。用户对同一页面的多次访问,访问量值累计
    统计独立IP:00:00-24:00内相同IP地址只被计算一次,做网站优化的朋友最关心这个

    goaccess中统计的指标参数解释

    TX AMOUNT 是性能测试中的一个指标,表示每秒事务数(Transaction Per Second),也就是单位时间内系统能处理的事务数量。事务是指用户和系统之间的一次交互,比如登录、查询、支付等。TX AMOUNT 反映了系统的处理能力和吞吐量,与响应时间、并发数等指标有关。

    HITS 是性能测试中的一个指标,表示Hits Per Second,也就是每秒请求数。HITS反映了系统的吞吐量,也就是单位时间内系统能处理的请求数量。HITS与TPS(每秒事务数)有一定的关系,但不完全相同。一个事务可能包含多个请求,比如一个网页可能包含多个图片、CSS、JS等文件的请求。因此,HITS一般会大于TPS。

    AVG.T.S:Average Time Served,表示每个请求的平均服务时间,单位是秒。它反映了从Nginx开始接收客户端请求的第一个字节,到发送完响应数据给客户端的平均时间。这个时间包括了接收请求数据的时间、后端程序响应的时间、发送响应数据给客户端的时间,但不包括写日志的时间。

    CUM.T.S:Cumulative Time Served,表示每个请求的累计服务时间,单位是秒。它反映了从Nginx开始接收客户端请求的第一个字节,到发送完响应数据给客户端的总时间。它是所有请求的AVG.T.S之和。

    MAX.T.S:Maximum Time Served,表示每个请求的最大服务时间,单位是秒。它反映了从Nginx开始接收客户端请求的第一个字节,到发送完响应数据给客户端的最长时间。它是所有请求中最慢的一个。

    要显示这三列,你需要在你的日志格式中包含服务时间字段,你可以使用%T%D指定符来解析这个字段。 例如,如果你使用Apache的combined日志格式,你可以在字符串的末尾添加%D来启用这三列。

    标准配置

    如何让goaccess统计出请求的服务时间

    配置nginx日志格式如下:

     log_format main '$remote_addr - $remote_user [$time_local] "$request" '
                        '$status $body_bytes_sent "$http_referer" '
                        '"$http_user_agent" "$http_x_forwarded_for" '
                        '$upstream_addr $request_time $upstream_response_time ';
    
    • 1
    • 2
    • 3
    • 4

    配置goaccess log-format的格式如下

    time-format %H:%M:%S
    date-format %d/%b/%Y
    log-format %h - %^ [%d:%t %^] "%r" %s %b "%R" "%u" "%^" %^ %T %T
    
    • 1
    • 2
    • 3

    nginx日志输出格式如下

    192.168.56.1 - - [14/Sep/2023:03:02:53 +0000] "GET /cc/ HTTP/1.1" 200 15567 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36 Edg/116.0.1938.76" "-" 123.121.155.167:16002 0.433 0.432
    192.168.56.1 - - [14/Sep/2023:03:02:56 +0000] "GET /cc/ HTTP/1.1" 200 15567 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36 Edg/116.0.1938.76" "-" 123.121.155.167:16002 0.330 0.330
    192.168.56.1 - - [14/Sep/2023:03:02:57 +0000] "GET /cc/ HTTP/1.1" 200 15567 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36 Edg/116.0.1938.76" "-" 123.121.155.167:16002 0.367 0.367
    
    • 1
    • 2
    • 3

    以后goaccess 会支持到什么程度,以下是我在官网提出的问题并給出的答复

    github.com/allinurl/goaccess/issues/2556

    有关实际应用

    问题:goaccess 如何做到自动分析 nginx日志,nginx日志是按天切割的。我如果想借助python去自动分析每天的日志,并输出每天的报告。并且也能通过界面的方式 分析某段时间的报告,比如将好几天的报告整合到一起 一并分析。下面提供一个详细的设计和开发方案

    **回答:**goaccess是一款开源的实时Web日志分析工具,可以通过终端或浏览器查看Web服务器的统计信息。goaccess支持多种日志格式,包括nginx的日志格式,也可以自定义日志格式。goaccess可以生成静态的HTML报告,也可以生成实时的HTML报告,还可以生成JSON和CSV格式的报告。

    要实现你的需求,我为你提供一个可能的设计和开发方案,如下:

    • 第一步:编写python脚本。你需要编写一个python脚本,用于自动分析每天的nginx日志,并输出每天的报告。你可以参考

      这篇文章

      来了解如何使用python调用goaccess。你的脚本大致需要实现以下功能:

      • 定义一个函数,用于根据日期获取对应的nginx日志文件名。例如,如果你的nginx日志是按天切割的,并且命名为access.log-20210901这样的格式,那么你可以根据日期参数拼接出文件名。
      • 定义一个函数,用于根据日期获取对应的报告文件名。例如,如果你想生成HTML报告,并且命名为report-20210901.html这样的格式,那么你也可以根据日期参数拼接出文件名。
      • 定义一个函数,用于调用goaccess命令,传入日志文件名和报告文件名作为参数,执行日志分析并输出报告。例如,你可以使用类似于os.system('goaccess -f {} -o {} --log-format=COMBINED'.format(log_file, report_file))这样的语句来执行goaccess命令。
      • 定义一个主函数,用于遍历指定的日期范围,对每一天的日志进行分析,并生成每一天的报告。例如,你可以使用类似于for date in pd.date_range(start_date, end_date):这样的循环来遍历日期范围,并调用前面定义的函数来获取文件名和执行分析。
    • 第二步:运行python脚本。你需要在服务器上运行你编写的python脚本,或者将其设置为定时任务,每天自动运行。5 这样就可以实现自动分析每天的nginx日志,并输出每天的报告了。

    • 第三步:查看报告。需要在浏览器上查看生成的HTML报告,或者使用其他工具查看JSON或CSV格式的报告。12 如果你想通过界面的方式分析某段时间的报告,比如将好几天的报告整合到一起一并分析,那么你可以使用goaccess提供的增长日志处理功能。6 这个功能允许你将多个日志文件合并到一个数据库中,并从中生成一个综合报告。6

    还会持续补充。。

    志处理功能。](about:blank#)6 这个功能允许你将多个日志文件合并到一个数据库中,并从中生成一个综合报告。6

    还会持续补充。。

  • 相关阅读:
    jacob朗读中文,jacob生成中文语音音频文件,以生成MP3文件为例,不需要配置DLL
    华为审核被拒提示: 您的应用存在(最近任务列表隐藏风险活动)的行为,不符合华为应用市场审核标准
    Apache POC(对Excel文件操作)
    具有自适应边界与最优引导的莱维飞行蚁狮优化算法-附代码
    国开教育学形考任务2试题1试题及答案
    整数反转1
    二十一、java版 SpringCloud分布式微服务云架构之Java 继承
    设计模式--职责链模式(Chain of Responsibility Pattern)
    SpringBoot笔记之模板引擎
    程序化广告平台如何让app广告变现收益最大化?
  • 原文地址:https://blog.csdn.net/superzhang6666/article/details/132874953