`

10分钟精通Nginx访问日志分析统计

阅读更多
简介
很多个人站长在搭建网站时使用nginx作为服务器,为了了解网站的访问情况,一般有两种手段:
使用CNZZ之类的方式,在前端页面插入js,用户访问的时候触发js,记录访问请求。
利用流计算、或离线统计分析nginx的access log,从日志中挖掘有用信息。
两种方式各有优缺点:
CNZZ使用起来比较简单,各种指标定义清楚。但这种方式只能记录页面的访问请求,像ajax之类的请求是无法记录的,还有爬虫信息也不会记录。
利用流计算、离线计算引擎可以支持个性化需求,但需要搭建一套环境,并且在实时性以及分析灵活性上比较难平衡。
两种手段相互补充,才能对网站的状况有更加深入的了解。
日志服务在查询基础上新推出来SQL支持实时日志分析功能,极大的降低了站长们分析access log的门槛,本文将详细介绍如何使用日志服务分析access log中的各种指标。
Nginx访问日志格式
一个典型的nginx访问日志配置:

      log_format  main  '$remote_addr - $remote_user [$time_local] "$request" $http_host '
                        '$status $request_length $body_bytes_sent "$http_referer" '
                        '"$http_user_agent"  $request_time';

      access_log  access.log  main;
字段解释:
remote_addr : 客户端地址
remote_user : 客户端用户名
time_local : 服务器时间
request : 请求内容,包括方法名,地址,和http协议
http_host : 用户请求是使用的http地址
status : 返回的http 状态码
request_length : 请求大小
body_bytes_sent : 返回的大小
http_referer : 来源页
http_user_agent : 客户端名称
request_time : 整体请求延时
收集访问日志到日志服务
首先把日志收集到日志服务
请参考文档5分钟快速文档
把日志收集到日志服务后,设置每一列的类型:
index_attribute
注:其中request拆分城method 和uri两列
日志样例:
sample_log
分析访问日志
通常,对access log的访问需求有,查看网站的pv,uv,热点页面,热点方法,错误请求,客户端类型,来源页面等等。下文将逐个介绍各个指标的计算方法。
PV统计不仅可以一段时间总的PV,还可以按照小的时间段,查看每段时间的,比如每5分钟pv
统计代码
*|select from_unixtime( __time__- __time__% 300) as t,
     count(1) as pv 
     group by __time__- __time__% 300
     order by t limit 60
统计结果
pv
统计一小时内每5分钟的UV
统计代码:
*|select from_unixtime( __time__- __time__% 300) as t,
        approx_distinct(remote_addr) as uv 
        group by __time__- __time__% 300
        order by t limit 60
uv_5min
统计一小时内总的UV
统计代码:
*|select approx_distinct(remote_addr) 
统计结果:
uv
最近一小时访问最多的10个页面
*|select url,count(1) as pv group by url order by pv desc limit 10
top10page
最近一小时各种请求方法的占比
*| select method, count(1) as pv group by method
method
最近一小时各种http状态码的占比
*| select status, count(1) as pv group by status
status
最近一小时各种浏览器的占比
*| select user_agent, count(1) as pv group by user_agent
user_agent
最近一小时referer来源于不同域名的占比
*|select url_extract_host(http_referer) ,count(1) group by url_extract_host(http_referer)
注:url_extract_host为从url中提取域名
referer
最近一小时用户访问不同域名的占比
*|select  http_host ,count(1) group by http_host
host
一些高级功能
除了一些访问指标外,站长常常还需要对一些访问请求进行诊断,查看一下处理请求的延时如何,有哪些比较大的延时,哪些页面的延时比较大。
通过每5分钟的平均延时和最大延时, 对延时的情况有个总体的把握
*|select from_unixtime(__time__ -__time__% 300) as time,
         avg(request_time) as avg_latency ,
         max(request_time) as max_latency 
         group by __time__ -__time__% 300
         limit 60
avg_max_latency
知道了最大延时之后,我们需要知道最大延时对应的请求页面是哪个,方便进一步优化页面响应。
*|select from_unixtime(__time__ - __time__% 60) ,
  max_by(url,request_time) 
  group by __time__ - __time__%60
top_latency_req
从总体把握,我们需要知道网站的所有请求的延时的分布, 把延时分布在十个桶里边,看每个延时区间的请求个数
*|select  numeric_histogram(10,request_time)
latency_histogram1
除了最大的延时,我们还需要知道最大的十个延时,对应的值是多少
*|select max(request_time,10)
top_10_latency
当我们知道了/0这个页面的访问延时最大,为了对/0页面进行调优,接下来需要统计/0这个页面的访问PV,UV,各种method次数,各种status次数,各种浏览器次数,平均延时,最大延时
url:"/0"|select count(1) as pv, approx_distinct(remote_addr) as uv, histogram(method) as method_pv,histogram(status) as status_pv, histogram(user_agent) as user_agent_pv, avg(request_time) as avg_latency,  max(request_time) as max_latency
url0
url0method
url0useragent
url0status
同时,我们也可以限定只查看request_time 大于1000的请求的pv,uv,以及各个url的请求次数
request_time > 1000 |select count(1) as pv, approx_distinct(remote_addr) as uv, histogram(url) as url_pv
url_pv
分享到:
评论

相关推荐

    Nginx日志分析工具2.1.0.zip

    Nginx日志分析工具2.1.0是一款专为Windows平台设计的软件,用于高效地解析、统计和分析Nginx服务器产生的日志文件。Nginx作为一款高性能的Web服务器和反向代理服务器,广泛应用于各类网站和应用程序中。在日常运维...

    nginx访问日志分析脚本

    nginx访问日志分析脚本,统计某一时段内的日志数据

    nginx网站访问日志可视化

    "nginx网站访问日志可视化"是一个利用Python处理和展示Nginx服务器产生的访问日志的项目。这个项目的核心在于利用Python的强大功能,结合pyecharts库,将复杂的日志数据转化为直观的图表,以实现对网站访问行为的...

    介绍几款nginx日志分析图形化工具.zip

    介绍几款nginx日志分析图形化工具.zip

    基于loki+grafana的在线nginx日志分析系统

    在IT行业中,日志分析是监控和调试应用性能的关键环节,尤其对于Web服务器如Nginx来说更是如此。本文将详细介绍如何使用Loki和Grafana构建一个在线的日志分析系统,该系统基于Docker Compose进行一键部署,极大地...

    Nginx日志管理介绍

    Nginx日志描述 通过访问日志,你可以得到用户地域来源、跳转来源、使用终端、某个URL访问量等相关信息;通过错误日志,你可以得到系统某个服务或server的性能瓶颈等。因此,将日志好好利用,你可以得到很多有价值的...

    docker安装goaccess nginx实现nginx日志统计分析

    docker安装goaccess nginx实现nginx日志统计分析,具体操作查看我的博客

    精通Nginx(第二版) PDF 非扫描件

    Nginx的错误日志和访问日志对于调试和监控至关重要,通过`error_log`和`access_log`指令可以自定义日志记录级别和位置。此外,Nginx的热部署能力使其在不中断服务的情况下完成配置更新,通过`reload`或`restart`命令...

    Nginx日志分析工具_seo必备网站百度蜘蛛抓取记录查询

    Nginx日志分析工具是SEO优化过程中至关重要的一环,对于网站管理员而言,它能够提供宝贵的洞察力,帮助他们理解搜索引擎如何与他们的网站互动,尤其是百度蜘蛛的抓取行为。Nginx作为一款广泛使用的高性能Web服务器,...

    nginx日志分析命令

    nginx日志分析命令,可以帮你使用命令获取nginx服务器上所需日志内容

    goaccess—nginx 日志分析工具

    GoAccess 是一款开源、快速且轻量级的日志分析工具,专门设计用于实时地分析Apache、Nginx等Web服务器的访问日志。它以终端界面展示,能够生成丰富的统计报告,帮助管理员更好地理解和优化网站的访问情况。 在深入...

    精通Nginx--第2版1

    《精通Nginx--第2版1》是一本专为有经验的系统管理员和系统工程师设计的书籍,适合那些熟悉服务器安装和配置以满足特定需求的专业人士。即使没有使用Nginx的经验,读者也能通过本书学习到丰富的知识。本书采用模块化...

    Linux服务器nginx访问日志里出现大量http 400错误的请求分析

    服务器中的错误记录类似于这种: 124.65.133.242 – – [27/Oct/2014:14:30:51 +0800] “-” 400 0 “-” “-” 124.65.133.242 – – [27/Oct/2014:14:31:45 +0800] “-” 400 0 “-” ...经过分析nginx的log文件,发

    Nginx自定义访问日志的配置方式

    Nginx日志主要分为两种:访问日志和错误日志。日志开关在Nginx配置文件(/etc/nginx/nginx.conf)中设置,两种日志都可以选择性关闭,默认都是打开的。 访问日志主要记录客户端访问Nginx的每一个请求,格式可以...

    精通Nginx(第2版)带目录(高清非扫描版)

    7. **日志管理**:Nginx的日志记录功能可以帮助分析服务器运行状态,排查问题。学会如何定制日志格式,调整日志级别,甚至使用日志切割和日志分析工具,是运维工作的重要部分。 8. **反向代理与负载均衡结合**:...

    nginx日志分析技巧.zip

    通过分析nginx的日志,我们可以获取到每个访问者的IP地址,进而统计出最频繁的访问者、访问来源地分布以及可能的异常IP,这对于网络安全监控和用户行为分析至关重要。 其次,**页面访问统计**是理解用户行为的关键...

    Nginx开发从入门到精通 Nginx开发从入门到精通 Nginx开发从入门到精通中文

    Nginx开发从入门到精通 中文版,入门到精通 Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理...

    精通nginx第2版

    《精通Nginx》第二版是一本全面深入讲解Nginx服务器配置与管理的专业书籍,旨在帮助读者从零基础开始,逐步掌握Nginx的各项功能和优化技巧。这本书以高清PDF格式呈现,带有详细的目录结构,方便读者快速定位所需内容...

    精通Nginx, Nginx开发参考

    ### 精通Nginx:Nginx开发参考知识点详解 #### 一、Nginx概述 **Nginx**是一款开源的Web服务器软件,以其高性能、稳定性、丰富的功能和较低的内存消耗而闻名。它不仅可以作为HTTP服务器用于处理静态文件、索引文件...

    精通Nginx(第二版) 高清 带目录 非扫描

    精通Nginx(第2版) 来个分少的 Nginx是一个高性能的HTTP服务器和邮件代理,它只需要使用很少的系统资源就能工作。虽然Web上有很多关于如何使用Nginx的指南和配置示例,但是,要正确地配置Nginx以满足需要并不容易。

Global site tag (gtag.js) - Google Analytics